Skip to content

Commit

Permalink
Fix for new sock revision 5
Browse files Browse the repository at this point in the history
### 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
  • Loading branch information
ryanbdclark committed Sep 20, 2023
1 parent cab737c commit 0a7f703
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 25 deletions.
10 changes: 3 additions & 7 deletions custom_components/owlet/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ class OwletBinarySensorEntityDescription(BinarySensorEntityDescription):
key="high_oxygen_alert",
translation_key="high_ox_alrt",
device_class=BinarySensorDeviceClass.SOUND,
entity_registry_enabled_default=False,
),
OwletBinarySensorEntityDescription(
key="low_oxygen_alert",
Expand Down Expand Up @@ -111,12 +110,9 @@ def is_on(self) -> bool:
"""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:
Expand Down
2 changes: 1 addition & 1 deletion custom_components/owlet/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,5 @@ def device_info(self) -> DeviceInfo:
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}",
)
12 changes: 8 additions & 4 deletions custom_components/owlet/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
35 changes: 22 additions & 13 deletions custom_components/owlet/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -45,13 +45,6 @@ class OwletSensorEntityDescription(SensorEntityDescription):
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",
Expand Down Expand Up @@ -92,6 +85,16 @@ class OwletSensorEntityDescription(SensorEntityDescription):
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",
Expand All @@ -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):
Expand Down

0 comments on commit 0a7f703

Please sign in to comment.