Skip to content

Commit

Permalink
feat: refactor for sensor-state-data 2 (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco committed Jul 21, 2022
1 parent 358d015 commit 02d7ca1
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 58 deletions.
22 changes: 11 additions & 11 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions pyproject.toml
Expand Up @@ -29,8 +29,8 @@ python = "^3.9"
Sphinx = {version = "^5.0", optional = true}
sphinx-rtd-theme = {version = "^1.0", optional = true}
myst-parser = {version = "^0.18", optional = true}
bluetooth-sensor-state-data = ">=1.4.6"
sensor-state-data = ">=1.11.1"
bluetooth-sensor-state-data = ">=1.5.0"
sensor-state-data = ">=2.0.1"

[tool.poetry.extras]
docs = [
Expand Down
19 changes: 3 additions & 16 deletions src/inkbird_ble/__init__.py
@@ -1,21 +1,14 @@
"""Parser for Inkbird BLE advertisements."""
from __future__ import annotations

from bluetooth_sensor_state_data import SIGNAL_STRENGTH_KEY
from sensor_state_data import (
DeviceClass,
DeviceKey,
SensorDescription,
SensorDeviceInfo,
SensorUpdate,
SensorValue,
)
from sensor_state_data.data import (
ATTR_HW_VERSION,
ATTR_MANUFACTURER,
ATTR_MODEL,
ATTR_NAME,
ATTR_SW_VERSION,
SensorDeviceInfo,
Units,
)

from .parser import INKBIRDBluetoothDeviceData
Expand All @@ -24,18 +17,12 @@

__all__ = [
"INKBIRDBluetoothDeviceData",
"SIGNAL_STRENGTH_KEY",
"ATTR_HW_VERSION",
"ATTR_MANUFACTURER",
"ATTR_MODEL",
"ATTR_NAME",
"ATTR_SW_VERSION",
"SIGNAL_STRENGTH_KEY",
"SensorDescription",
"SensorDeviceInfo",
"DeviceClass",
"DeviceKey",
"SensorUpdate",
"SensorDeviceInfo",
"SensorValue",
"Units",
]
18 changes: 12 additions & 6 deletions src/inkbird_ble/parser.py
Expand Up @@ -69,12 +69,18 @@ def _process_update(self, local_name: str, address: str, data: bytes) -> None:
(temp, hum) = unpack("<hH", data[0:4])
bat = int.from_bytes(data[7:8], "little")
if local_name == "sps":
self.update_predefined_sensor(SensorLibrary.TEMPERATURE, temp / 100)
self.update_predefined_sensor(SensorLibrary.HUMIDITY, hum / 100)
self.update_predefined_sensor(SensorLibrary.BATTERY, bat)
self.update_predefined_sensor(
SensorLibrary.TEMPERATURE__CELSIUS, temp / 100
)
self.update_predefined_sensor(
SensorLibrary.HUMIDITY__PERCENTAGE, hum / 100
)
self.update_predefined_sensor(SensorLibrary.BATTERY__PERCENTAGE, bat)
elif local_name == "tps":
self.update_predefined_sensor(SensorLibrary.TEMPERATURE, temp / 100)
self.update_predefined_sensor(SensorLibrary.BATTERY, bat)
self.update_predefined_sensor(
SensorLibrary.TEMPERATURE__CELSIUS, temp / 100
)
self.update_predefined_sensor(SensorLibrary.BATTERY__PERCENTAGE, bat)
return

if "ibbq" in local_name.lower() and (
Expand All @@ -87,7 +93,7 @@ def _process_update(self, local_name: str, address: str, data: bytes) -> None:
for idx, temp in enumerate(unpack(unpack_str, xvalue)):
num = idx + 1
self.update_predefined_sensor(
SensorLibrary.TEMPERATURE,
SensorLibrary.TEMPERATURE__CELSIUS,
convert_temperature(temp),
key=f"temperature_probe_{num}",
name=f"Temperature Probe {num}",
Expand Down
66 changes: 43 additions & 23 deletions tests/test_parser.py
@@ -1,5 +1,11 @@
from bluetooth_sensor_state_data import BluetoothServiceInfo, DeviceClass, SensorUpdate
from sensor_state_data import DeviceKey, SensorDescription, SensorValue
from sensor_state_data import (
DeviceKey,
SensorDescription,
SensorDeviceInfo,
SensorValue,
Units,
)

from inkbird_ble.parser import INKBIRDBluetoothDeviceData

Expand All @@ -23,48 +29,56 @@ def test_sps():
assert result == SensorUpdate(
title=None,
devices={
None: {"manufacturer": "INKBIRD", "model": "IBS-TH", "name": "IBS-TH EEFF"}
None: SensorDeviceInfo(
name="IBS-TH EEFF",
model="IBS-TH",
manufacturer="INKBIRD",
sw_version=None,
hw_version=None,
)
},
entity_descriptions={
DeviceKey(key="battery", device_id=None): SensorDescription(
device_key=DeviceKey(key="battery", device_id=None),
name="Battery",
device_class=DeviceClass.BATTERY,
native_unit_of_measurement="%",
native_unit_of_measurement=Units.PERCENTAGE,
),
DeviceKey(key="signal_strength", device_id=None): SensorDescription(
device_key=DeviceKey(key="signal_strength", device_id=None),
name="Signal Strength",
device_class=DeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement="dBm",
native_unit_of_measurement=Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
),
DeviceKey(key="temperature", device_id=None): SensorDescription(
device_key=DeviceKey(key="temperature", device_id=None),
name="Temperature",
device_class=DeviceClass.TEMPERATURE,
native_unit_of_measurement="°C",
native_unit_of_measurement=Units.TEMP_CELSIUS,
),
DeviceKey(key="humidity", device_id=None): SensorDescription(
device_key=DeviceKey(key="humidity", device_id=None),
name="Humidity",
device_class=DeviceClass.HUMIDITY,
native_unit_of_measurement="%",
native_unit_of_measurement=Units.PERCENTAGE,
),
},
entity_values={
DeviceKey(key="battery", device_id=None): SensorValue(
device_key=DeviceKey(key="battery", device_id=None), native_value=86
device_key=DeviceKey(key="battery", device_id=None),
native_value=86,
name="Battery",
),
DeviceKey(key="signal_strength", device_id=None): SensorValue(
device_key=DeviceKey(key="signal_strength", device_id=None),
name="Signal Strength",
native_value=-60,
),
DeviceKey(key="temperature", device_id=None): SensorValue(
device_key=DeviceKey(key="temperature", device_id=None),
name="Temperature",
native_value=20.44,
),
DeviceKey(key="humidity", device_id=None): SensorValue(
device_key=DeviceKey(key="humidity", device_id=None), native_value=48.07
device_key=DeviceKey(key="humidity", device_id=None),
native_value=48.07,
name="Humidity",
),
},
)
Expand All @@ -87,59 +101,65 @@ def test_ibbq_4():
assert result == SensorUpdate(
title=None,
devices={
None: {"manufacturer": "INKBIRD", "model": "iBBQ-4", "name": "iBBQ EEFF"}
None: SensorDeviceInfo(
name="iBBQ EEFF",
model="iBBQ-4",
manufacturer="INKBIRD",
sw_version=None,
hw_version=None,
)
},
entity_descriptions={
DeviceKey(key="signal_strength", device_id=None): SensorDescription(
device_key=DeviceKey(key="signal_strength", device_id=None),
name="Signal Strength",
device_class=DeviceClass.SIGNAL_STRENGTH,
native_unit_of_measurement="dBm",
native_unit_of_measurement=Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
),
DeviceKey(key="temperature_probe_1", device_id=None): SensorDescription(
device_key=DeviceKey(key="temperature_probe_1", device_id=None),
name="Temperature " "Probe " "1",
device_class=DeviceClass.TEMPERATURE,
native_unit_of_measurement="°C",
native_unit_of_measurement=Units.TEMP_CELSIUS,
),
DeviceKey(key="temperature_probe_2", device_id=None): SensorDescription(
device_key=DeviceKey(key="temperature_probe_2", device_id=None),
name="Temperature " "Probe " "2",
device_class=DeviceClass.TEMPERATURE,
native_unit_of_measurement="°C",
native_unit_of_measurement=Units.TEMP_CELSIUS,
),
DeviceKey(key="temperature_probe_3", device_id=None): SensorDescription(
device_key=DeviceKey(key="temperature_probe_3", device_id=None),
name="Temperature " "Probe " "3",
device_class=DeviceClass.TEMPERATURE,
native_unit_of_measurement="°C",
native_unit_of_measurement=Units.TEMP_CELSIUS,
),
DeviceKey(key="temperature_probe_4", device_id=None): SensorDescription(
device_key=DeviceKey(key="temperature_probe_4", device_id=None),
name="Temperature " "Probe " "4",
device_class=DeviceClass.TEMPERATURE,
native_unit_of_measurement="°C",
native_unit_of_measurement=Units.TEMP_CELSIUS,
),
},
entity_values={
DeviceKey(key="signal_strength", device_id=None): SensorValue(
device_key=DeviceKey(key="signal_strength", device_id=None),
name="Signal Strength",
native_value=-60,
),
DeviceKey(key="temperature_probe_1", device_id=None): SensorValue(
device_key=DeviceKey(key="temperature_probe_1", device_id=None),
name="Temperature " "Probe " "1",
native_value=26.0,
),
DeviceKey(key="temperature_probe_2", device_id=None): SensorValue(
device_key=DeviceKey(key="temperature_probe_2", device_id=None),
name="Temperature " "Probe " "2",
native_value=25.0,
),
DeviceKey(key="temperature_probe_3", device_id=None): SensorValue(
device_key=DeviceKey(key="temperature_probe_3", device_id=None),
name="Temperature " "Probe " "3",
native_value=26.0,
),
DeviceKey(key="temperature_probe_4", device_id=None): SensorValue(
device_key=DeviceKey(key="temperature_probe_4", device_id=None),
name="Temperature " "Probe " "4",
native_value=25.0,
),
},
Expand Down

0 comments on commit 02d7ca1

Please sign in to comment.