Skip to content

Commit

Permalink
feat: map IO Series 9 (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco authored Oct 31, 2022
1 parent b4c07d0 commit 2b87fac
Show file tree
Hide file tree
Showing 2 changed files with 130 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/oralb_ble/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class OralBBinarySensor(StrEnum):

class Models(Enum):

IOSeries9 = auto()
IOSeries78 = auto()
IOSeries4 = auto()
SmartSeries7000 = auto()
Expand Down Expand Up @@ -78,6 +79,10 @@ class ModelDescription:
device_type="IO Series 7/8",
modes=IO_SERIES_MODES,
),
Models.IOSeries9: ModelDescription(
device_type="IO Series 9",
modes=IO_SERIES_MODES,
),
Models.IOSeries4: ModelDescription(
device_type="IO Series 4",
modes=IO_SERIES_MODES,
Expand Down Expand Up @@ -129,6 +134,7 @@ class ModelDescription:
b"\x062k": Models.IOSeries78,
b"\x074\x0c": Models.IOSeries4,
b"\x03!\x0c": Models.SmartSeries9000,
b"\x061\x16": Models.IOSeries9,
}
SECTOR_MAP = {
254: "last sector",
Expand Down
124 changes: 124 additions & 0 deletions tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@
service_data={},
source="local",
)
ORALB_IO_SERIES_9 = BluetoothServiceInfo(
address="78:DB:2F:C2:48:BE",
rssi=-63,
name="Oral-B Toothbrush",
manufacturer_data={220: b"\x061\x16\x08r\x00\x00\x03\x02\x00\x04"},
service_uuids=["0000fe0d-0000-1000-8000-00805f9b34fb"],
service_data={},
source="local",
)


def test_can_create():
Expand Down Expand Up @@ -889,3 +898,118 @@ def test_9000_series():
},
events={},
)


def test_io_series_9():
parser = OralBBluetoothDeviceData()
service_info = ORALB_IO_SERIES_9
result = parser.update(service_info)
assert result == SensorUpdate(
title="IO Series 9 48BE",
devices={
None: SensorDeviceInfo(
name="IO Series 9 48BE",
model="IO Series 9",
manufacturer="Oral-B",
sw_version=None,
hw_version=None,
)
},
entity_descriptions={
DeviceKey(key="pressure", device_id=None): SensorDescription(
device_key=DeviceKey(key="pressure", device_id=None),
device_class=None,
native_unit_of_measurement=None,
),
DeviceKey(key="sector", device_id=None): SensorDescription(
device_key=DeviceKey(key="sector", device_id=None),
device_class=None,
native_unit_of_measurement=None,
),
DeviceKey(key="time", device_id=None): SensorDescription(
device_key=DeviceKey(key="time", device_id=None),
device_class=None,
native_unit_of_measurement=None,
),
DeviceKey(key="toothbrush_state", device_id=None): SensorDescription(
device_key=DeviceKey(key="toothbrush_state", device_id=None),
device_class=None,
native_unit_of_measurement=None,
),
DeviceKey(key="mode", device_id=None): SensorDescription(
device_key=DeviceKey(key="mode", device_id=None),
device_class=None,
native_unit_of_measurement=None,
),
DeviceKey(key="number_of_sectors", device_id=None): SensorDescription(
device_key=DeviceKey(key="number_of_sectors", device_id=None),
device_class=None,
native_unit_of_measurement=None,
),
DeviceKey(key="sector_timer", device_id=None): SensorDescription(
device_key=DeviceKey(key="sector_timer", device_id=None),
device_class=None,
native_unit_of_measurement=None,
),
DeviceKey(key="signal_strength", device_id=None): SensorDescription(
device_key=DeviceKey(key="signal_strength", device_id=None),
device_class=SensorDeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement=Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
),
},
entity_values={
DeviceKey(key="pressure", device_id=None): SensorValue(
device_key=DeviceKey(key="pressure", device_id=None),
name="Pressure",
native_value="normal",
),
DeviceKey(key="sector", device_id=None): SensorValue(
device_key=DeviceKey(key="sector", device_id=None),
name="Sector",
native_value="sector " "2",
),
DeviceKey(key="time", device_id=None): SensorValue(
device_key=DeviceKey(key="time", device_id=None),
name="Time",
native_value=0,
),
DeviceKey(key="toothbrush_state", device_id=None): SensorValue(
device_key=DeviceKey(key="toothbrush_state", device_id=None),
name="Toothbrush " "State",
native_value="selection " "menu",
),
DeviceKey(key="mode", device_id=None): SensorValue(
device_key=DeviceKey(key="mode", device_id=None),
name="Mode",
native_value="whiten",
),
DeviceKey(key="number_of_sectors", device_id=None): SensorValue(
device_key=DeviceKey(key="number_of_sectors", device_id=None),
name="Number " "of " "sectors",
native_value=4,
),
DeviceKey(key="sector_timer", device_id=None): SensorValue(
device_key=DeviceKey(key="sector_timer", device_id=None),
name="Sector " "Timer",
native_value=0,
),
DeviceKey(key="signal_strength", device_id=None): SensorValue(
device_key=DeviceKey(key="signal_strength", device_id=None),
name="Signal " "Strength",
native_value=-63,
),
},
binary_entity_descriptions={
DeviceKey(key="brushing", device_id=None): BinarySensorDescription(
device_key=DeviceKey(key="brushing", device_id=None), device_class=None
)
},
binary_entity_values={
DeviceKey(key="brushing", device_id=None): BinarySensorValue(
device_key=DeviceKey(key="brushing", device_id=None),
name="Brushing",
native_value=False,
)
},
events={},
)

0 comments on commit 2b87fac

Please sign in to comment.