mirror of
https://github.com/Andre0512/pyhOn.git
synced 2026-10-25 19:07:07 +00:00
_on_publish_received() indexes appliance.attributes["parameters"]
directly by parName when applying an incoming appliancestatus push:
appliance.attributes["parameters"][parameter["parName"]].update(parameter)
If the payload contains a parName that hasn't been seen/initialized
locally yet, this raises KeyError before self._hon.notify() is
reached, so the entire push message (not just that one parameter) is
silently dropped for that appliance.
In practice this reproduced reliably on a Haier washing machine
(HW90-B14959U1-UK) at end-of-cycle, where the push includes a
"programStats" parameter:
Exception ignored in: <class 'KeyError'>
Traceback (most recent call last):
File ".../awscrt/mqtt5.py", line 1540, in _on_publish
self._on_publish_cb(publish_data)
File ".../pyhon/connection/mqtt.py", line 109, in _on_publish_received
appliance.attributes["parameters"][parameter["parName"]].update(
KeyError: 'programStats'
Because the exception is swallowed by the underlying MQTT client as
"Exception ignored in", it fails silently with no log entry pointing
at the cause - the visible symptom is just that dependent entities
(e.g. door-open state bundled in the same push) never update.
Fix: use setdefault() instead of a raw index so an unseen parName
initializes its entry instead of raising.
|
||
|---|---|---|
| .. | ||
| appliances | ||
| connection | ||
| parameter | ||
| __init__.py | ||
| __main__.py | ||
| appliance.py | ||
| attributes.py | ||
| command_loader.py | ||
| commands.py | ||
| const.py | ||
| diagnose.py | ||
| exceptions.py | ||
| helper.py | ||
| hon.py | ||
| printer.py | ||
| py.typed | ||
| rules.py | ||
| typedefs.py | ||