Stop surfacing '_OFF'-suffixed placeholder alarm codes (#166)
Samsung pre-populates /alarms/vs/0 with one row per supported alarm type, each carrying a '<Name>_OFF' placeholder code (no 'Deleted' state at all) when that alarm isn't firing. common._active_alarm_codes only ever filtered on 'Deleted' state, so every device using this shared capability (including the AC family) showed these inert placeholders -- 'ErrorCode_OFF', 'FilterAlarm_OFF' -- as if they were live alarms. Confirmed the '_OFF' suffix convention holds across every alarm code seen in this repo's fixtures so far (ErrorCode_OFF, FilterAlarm_OFF, OV_E_OFF, CT_E_OFF, WaterTankFull_OFF, AC_V_0002_OFF, all placeholders; DoorA_Opened, FilterAlarm, SNSF_Reached, all genuinely active with no suffix) -- issue #166's own dump has both a FilterAlarm_OFF placeholder and, on a second unit, a live FilterAlarm/state=Created alert, which is what motivated generalizing range_hood.py's existing (but narrower, ErrorCode_OFF-only) special case into the shared helper instead of duplicating it further. The other three points in #166 (filter-usage percentage vs. filterStatus disagreement, an "air purification" config toggle the reporter says has no physical effect, a "beep on/off" control) don't have a confirmed code fix: the percentage math already matches the device's own filterUsage/ filterCapacity fields (filterStatus is a separate device-computed field we already relay verbatim, not something we derive), the air-purify resource is correctly wired to what the board reports and its absence from the official app's own options list suggests an inert shared-board-profile stub rather than an integration bug, and a "Beep volume" NumberDesc keyed off the same Volume_100 option both dumps report already exists (0 mutes it).
This commit is contained in:
2 files changed
+51
-3
No files matched your search
@@ -184,6 +184,40 @@ class TestWmSetinfoFlags:
|
||||
},
|
||||
]) == 'LE'
|
||||
|
||||
def test_off_suffixed_placeholder_codes_filtered(self):
|
||||
"""issue #166: Samsung pre-populates /alarms/vs/0 with one row per
|
||||
supported alarm *type*, each carrying a '<Name>_OFF' placeholder
|
||||
code (no 'Deleted' state at all) when that alarm isn't firing --
|
||||
confirmed not just for 'ErrorCode_OFF' but also 'FilterAlarm_OFF'
|
||||
on the same dump. These were previously shown as if they were
|
||||
active alarms."""
|
||||
assert common._active_alarm_codes([
|
||||
{
|
||||
'x.com.samsung.da.code': 'ErrorCode_OFF',
|
||||
'x.com.samsung.da.triggeredTime': '2026-07-28T12:59:22',
|
||||
},
|
||||
{
|
||||
'x.com.samsung.da.code': 'FilterAlarm_OFF',
|
||||
'x.com.samsung.da.triggeredTime': '2026-07-28T12:59:22',
|
||||
},
|
||||
]) == 'none'
|
||||
|
||||
def test_real_filter_alarm_not_off_suffixed_still_shown(self):
|
||||
"""issue #166's actual live filter alert: code 'FilterAlarm' (no
|
||||
'_OFF' suffix), state 'Created' -- distinct from the 'FilterAlarm_OFF'
|
||||
placeholder and must still surface."""
|
||||
assert common._active_alarm_codes([
|
||||
{
|
||||
'x.com.samsung.da.code': 'ErrorCode_OFF',
|
||||
'x.com.samsung.da.triggeredTime': '2026-07-28T12:59:22',
|
||||
},
|
||||
{
|
||||
'x.com.samsung.da.code': 'FilterAlarm',
|
||||
'x.com.samsung.da.state': 'Created',
|
||||
'x.com.samsung.da.triggeredTime': '2026-07-28T12:59:22',
|
||||
},
|
||||
]) == 'FilterAlarm'
|
||||
|
||||
|
||||
class TestKidsLockFallback:
|
||||
def test_generic_read_write(self):
|
||||
|
||||
Reference in new issue
Block a user