Skip to content

Commit

Permalink
Patch issue for missing data points from message updates
Browse files Browse the repository at this point in the history
  • Loading branch information
natekspencer committed Dec 10, 2021
1 parent 9364341 commit 7204bed
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 26 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 1.1.1 (2021-12-10)

- Better handling of missing data points when parsing messages which may occure when the firmware revision changes

# 1.1.0 (2021-12-10)

- Deprecated rain_amount_previous_minute due to name/units inconsistency
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "pyweatherflowudp"
version = "1.1.0"
version = "1.1.1"
description = "An event-based asynchronous library to read UDP packets from Weatherflow weather systems on a local network without any reliance on the cloud."
license = "MIT"
authors = ["Nathan Spencer <natekspencer@gmail.com>"]
Expand Down
2 changes: 1 addition & 1 deletion pyweatherflowudp/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
"""Asynchronous library to read UDP Packets from Weatherflow weather systems."""
__version__ = "1.1.0"
__version__ = "1.1.1"
42 changes: 19 additions & 23 deletions pyweatherflowudp/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,8 @@
DATA_DEBUG = "debug"
DATA_EVENT = "evt"
DATA_FIRMWARE_REVISION = "firmware_revision"
DATA_FS = "fs"
DATA_HUB_RSSI = "hub_rssi"
DATA_HUB_SN = "hub_sn"
DATA_MQTT_STATS = "mqtt_stats"
DATA_OBSERVATION = "ob"
DATA_OBSERVATIONS = "obs"
DATA_RADIO_STATS = "radio_stats"
Expand Down Expand Up @@ -143,10 +141,12 @@ def register_parse_handlers(
@final
def parse_message(self, data: dict[str, Any]) -> None:
"""Parse a device message."""
if handler := self._parse_message_map.get(message_type := data[DATA_TYPE]):
if handler := self._parse_message_map.get(
message_type := data.get(DATA_TYPE, "")
):
if isinstance(handler, tuple):
handler, field = handler
data = data[field]
data = data.get(field, {})
handler(data)
else:
_LOGGER.warning("Unhandled %s message: %s", message_type, data)
Expand All @@ -163,9 +163,7 @@ def __init__(self, serial_number: str, data: dict[str, Any] | None = None) -> No

self._reset_flags: str = ""
self._seq: int = 0
self._fs: list[int] = []
self._radio_stats: list[int] = []
self._mqtt_stats: list[int] = []

self.register_parse_handlers({EVENT_STATUS_HUB: self.parse_hub_status})

Expand All @@ -184,15 +182,13 @@ def reset_flags(self) -> list[str] | None:

def parse_hub_status(self, data: dict[str, Any]) -> None:
"""Parse hub status."""
self._firmware_revision = data[DATA_FIRMWARE_REVISION]
self._uptime = data[DATA_UPTIME]
self._rssi = data[DATA_RSSI]
self._timestamp = data[DATA_TIMESTAMP]
self._reset_flags = data[DATA_RESET_FLAGS]
self._seq = data[DATA_SEQ]
self._fs = data[DATA_FS]
self._radio_stats = data[DATA_RADIO_STATS]
self._mqtt_stats = data[DATA_MQTT_STATS]
self._firmware_revision = data.get(DATA_FIRMWARE_REVISION)
self._uptime = data.get(DATA_UPTIME, 0)
self._rssi = data.get(DATA_RSSI, 0)
self._timestamp = data.get(DATA_TIMESTAMP)
self._reset_flags = data.get(DATA_RESET_FLAGS, "")
self._seq = data.get(DATA_SEQ, 0)
self._radio_stats = data.get(DATA_RADIO_STATS, [])

assert self._timestamp

Expand Down Expand Up @@ -282,14 +278,14 @@ def sensor_status(self) -> list[str]:

def parse_device_status(self, data: dict[str, Any]) -> None:
"""Parse the device status."""
self._timestamp = data[DATA_TIMESTAMP]
self._uptime = data[DATA_UPTIME]
self._voltage = data[DATA_VOLTAGE]
self._firmware_revision = data[DATA_FIRMWARE_REVISION]
self._rssi = data[DATA_RSSI]
self._hub_rssi = data[DATA_HUB_RSSI]
self._sensor_status = data[DATA_SENSOR_STATUS]
self._debug = truebool(data[DATA_DEBUG])
self._timestamp = data.get(DATA_TIMESTAMP)
self._uptime = data.get(DATA_UPTIME, 0)
self._voltage = data.get(DATA_VOLTAGE, 0)
self._firmware_revision = data.get(DATA_FIRMWARE_REVISION)
self._rssi = data.get(DATA_RSSI, 0)
self._hub_rssi = data.get(DATA_HUB_RSSI, 0)
self._sensor_status = data.get(DATA_SENSOR_STATUS, 0)
self._debug = truebool(data.get(DATA_DEBUG))

if not self._initial_status:
self._initial_status = True
Expand Down
2 changes: 1 addition & 1 deletion test/test_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@

def test_version() -> None:
"""Test version."""
assert __version__ == "1.1.0"
assert __version__ == "1.1.1"

0 comments on commit 7204bed

Please sign in to comment.