From 0a7f70310080a129c988e9607331baa2f6c691e0 Mon Sep 17 00:00:00 2001 From: RyanClark123 Date: Wed, 20 Sep 2023 15:03:10 +0100 Subject: [PATCH] Fix for new sock revision 5 ### Fix * Bumping pyowletapi to 2023.9.1 to allow for revisions * New revision of sock, revision 5 doesn't report all vitals as before, this would cause the integration to fail to update. Have adjusted the integration to detect the revision and ignore the vitals that are no longer reported --- custom_components/owlet/binary_sensor.py | 10 ++----- custom_components/owlet/entity.py | 2 +- custom_components/owlet/manifest.json | 12 +++++--- custom_components/owlet/sensor.py | 35 +++++++++++++++--------- 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/custom_components/owlet/binary_sensor.py b/custom_components/owlet/binary_sensor.py index 5377520..7854b66 100644 --- a/custom_components/owlet/binary_sensor.py +++ b/custom_components/owlet/binary_sensor.py @@ -42,7 +42,6 @@ SENSORS: tuple[OwletBinarySensorEntityDescription, ...] = ( key="high_oxygen_alert", translation_key="high_ox_alrt", device_class=BinarySensorDeviceClass.SOUND, - entity_registry_enabled_default=False, ), OwletBinarySensorEntityDescription( key="low_oxygen_alert", @@ -111,12 +110,9 @@ class OwletBinarySensor(OwletBaseEntity, BinarySensorEntity): """Return true if the binary sensor is on.""" state = self.sock.properties[self.entity_description.key] - entity = self.entity_description.key - - if self.sock.properties["charging"] and entity in ["sleep_state"]: - return None - - if entity == "sleep_state": + if self.entity_description.key == "sleep_state": + if self.sock.properties["charging"]: + return None if state in [8, 15]: state = False else: diff --git a/custom_components/owlet/entity.py b/custom_components/owlet/entity.py index 2c3356c..714e633 100644 --- a/custom_components/owlet/entity.py +++ b/custom_components/owlet/entity.py @@ -30,5 +30,5 @@ class OwletBaseEntity(CoordinatorEntity[OwletCoordinator], Entity): manufacturer=MANUFACTURER, model=self.sock.model, sw_version=self.sock.sw_version, - hw_version=self.sock.version, + hw_version=f"{self.sock.version}r{self.sock.revision}", ) diff --git a/custom_components/owlet/manifest.json b/custom_components/owlet/manifest.json index af73e88..3969988 100644 --- a/custom_components/owlet/manifest.json +++ b/custom_components/owlet/manifest.json @@ -1,11 +1,15 @@ { "domain": "owlet", "name": "Owlet Smart Sock", - "codeowners": ["@ryanbdclark"], + "codeowners": [ + "@ryanbdclark" + ], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/owlet", "iot_class": "cloud_polling", "issue_tracker": "https://github.com/ryanbdclark/owlet/issues", - "requirements": ["pyowletapi==2023.7.2"], - "version":"2023.8.1" -} + "requirements": [ + "pyowletapi==2023.9.1" + ], + "version": "2023.9.1" +} \ No newline at end of file diff --git a/custom_components/owlet/sensor.py b/custom_components/owlet/sensor.py index 6e2cf8a..b091dc3 100644 --- a/custom_components/owlet/sensor.py +++ b/custom_components/owlet/sensor.py @@ -30,7 +30,7 @@ class OwletSensorEntityDescription(SensorEntityDescription): """Represent the owlet sensor entity description.""" -SENSORS: tuple[OwletSensorEntityDescription, ...] = ( +SENSORS_ALL: tuple[OwletSensorEntityDescription, ...] = ( OwletSensorEntityDescription( key="battery_percentage", translation_key="batterypercent", @@ -45,13 +45,6 @@ SENSORS: tuple[OwletSensorEntityDescription, ...] = ( state_class=SensorStateClass.MEASUREMENT, icon="mdi:leaf", ), - OwletSensorEntityDescription( - key="oxygen_10_av", - translation_key="o2saturation10a", - native_unit_of_measurement=PERCENTAGE, - state_class=SensorStateClass.MEASUREMENT, - icon="mdi:leaf", - ), OwletSensorEntityDescription( key="heart_rate", translation_key="heartrate", @@ -92,6 +85,16 @@ SENSORS: tuple[OwletSensorEntityDescription, ...] = ( icon="mdi:cursor-move", entity_registry_enabled_default=False, ), +) + +SENSORS_OLD: tuple[OwletSensorEntityDescription, ...] = ( + OwletSensorEntityDescription( + key="oxygen_10_av", + translation_key="o2saturation10a", + native_unit_of_measurement=PERCENTAGE, + state_class=SensorStateClass.MEASUREMENT, + icon="mdi:leaf", + ), OwletSensorEntityDescription( key="movement_bucket", translation_key="movementbucket", @@ -113,11 +116,17 @@ async def async_setup_entry( hass.data[DOMAIN][config_entry.entry_id].values() ) - async_add_entities( - OwletSensor(coordinator, sensor) - for coordinator in coordinators - for sensor in SENSORS - ) + sensors = [] + + sensor_list = SENSORS_ALL + for coordinator in coordinators: + if coordinator.sock.revision < 5: + sensor_list += SENSORS_OLD + + for sensor in sensor_list: + sensors.append(OwletSensor(coordinator, sensor)) + + async_add_entities(sensors) class OwletSensor(OwletBaseEntity, SensorEntity):