Skip to content

Commit

Permalink
Alarm resolve
Browse files Browse the repository at this point in the history
  • Loading branch information
yozik04 committed Feb 12, 2024
1 parent 6c37091 commit 80e703b
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 10 deletions.
19 changes: 19 additions & 0 deletions tests/test_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,22 @@ def test_log_read_response(messages: Messages):
result = messages.log_read_response1.parse(response)

assert 6 == result.fields.value.pages


def test_alarm_resolve(messages: Messages, data_model: DataModel):
expected = binascii.unhexlify("0400 f900 0790 0200 0691".replace(" ", ""))

assert expected == messages.write_request.build(
{
"fields": {
"value": {
"items": [
{
"address": data_model.addresses["A_CYC_FAULT_ACTIVITY"],
"value": 2,
}
]
}
}
}
)
28 changes: 27 additions & 1 deletion tests/test_vallox_alarm.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import datetime
from unittest import mock

import pytest

from vallox_websocket_api.vallox import Alarm, MetricData
from vallox_websocket_api.vallox import Alarm, MetricData, Vallox


@pytest.fixture
def vallox():
client = Vallox("127.0.0.1")
client.set_values = mock.AsyncMock()

return client


@pytest.fixture
Expand Down Expand Up @@ -217,10 +226,27 @@ async def test_get_info(metrics: dict):
assert len(alarms) == 1

alarm = alarms[0]
assert alarm.nr == 1
assert alarm.code == 23
assert alarm.severity == Alarm.Severity.SEVERE
assert alarm.activity == Alarm.Activity.SOLVED
assert alarm.count == 0
assert alarm.first_date == datetime.date(2024, 1, 2)
assert alarm.last_date == datetime.date(2024, 1, 7)
assert alarm.message == "Low supply air temperature"


async def test_resolve_alarm(vallox: Vallox):
alarm = Alarm(
nr=1,
code=23,
severity=Alarm.Severity.SEVERE,
first_date=datetime.date(2024, 1, 2),
last_date=datetime.date(2024, 1, 7),
count=0,
activity=Alarm.Activity.ACTIVE,
)

await vallox.resolve_alarm(alarm)

vallox.set_values.assert_called_once_with({"A_CYC_FAULT_ACTIVITY": 2})
17 changes: 9 additions & 8 deletions vallox_websocket_api/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,16 +93,17 @@ class Client:
"""Client for Vallox Websocket API"""

SETTABLE_INT_VALS = {
re.compile("^A_CYC_MODE$"),
re.compile("^A_CYC_STATE$"),
re.compile("^A_CYC_(?:HOME|AWAY|BOOST|EXTRA)_AIR_TEMP_TARGET$"),
re.compile("^A_CYC_(?:HOME|AWAY|BOOST)_SPEED_SETTING$"),
re.compile("^A_CYC_(?:BOOST|FIREPLACE|EXTRA)_TIMER$"),
re.compile("^A_CYC_(?:FIREPLACE|EXTRA)_(?:EXTR|SUPP)_FAN$"),
re.compile("^A_CYC_(?:EXTR|SUPP)_FAN_BALANCE_BASE$"),
re.compile(r"^A_CYC_MODE$"),
re.compile(r"^A_CYC_STATE$"),
re.compile(r"^A_CYC_(?:HOME|AWAY|BOOST|EXTRA)_AIR_TEMP_TARGET$"),
re.compile(r"^A_CYC_(?:HOME|AWAY|BOOST)_SPEED_SETTING$"),
re.compile(r"^A_CYC_(?:BOOST|FIREPLACE|EXTRA)_TIMER$"),
re.compile(r"^A_CYC_(?:FIREPLACE|EXTRA)_(?:EXTR|SUPP)_FAN$"),
re.compile(r"^A_CYC_(?:EXTR|SUPP)_FAN_BALANCE_BASE$"),
re.compile(
"^A_CYC_FILTER_CHANGED_(?:DAY|MONTH|YEAR)|A_CYC_FILTER_CHANGE_INTERVAL$"
r"^A_CYC_FILTER_CHANGED_(?:DAY|MONTH|YEAR)|A_CYC_FILTER_CHANGE_INTERVAL$"
),
re.compile(r"^A_CYC_FAULT_ACTIVITY(?:_\d{1,2})?$"),
}

_settable_addresses: Dict[int, type]
Expand Down
12 changes: 11 additions & 1 deletion vallox_websocket_api/vallox.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ def get_alarms(self, skip_solved=True) -> list["Alarm"]:

alarms.append(
Alarm(
nr=i,
code=code,
severity=Alarm.Severity(severity),
first_date=first_date,
Expand All @@ -256,6 +257,7 @@ def get_alarms(self, skip_solved=True) -> list["Alarm"]:
class Alarm:
"""Alarm dataclass"""

nr: int
code: int
severity: "Severity"
first_date: datetime.date
Expand Down Expand Up @@ -287,7 +289,7 @@ def message(self) -> str:

def __repr__(self):
return (
f"Alarm(code={self.code}, severity={self.severity}, first_date={self.first_date}, "
f"Alarm(nr={self.nr}, code={self.code}, severity={self.severity}, first_date={self.first_date}, "
f"last_date={self.last_date}, count={self.count}, activity={self.activity}, "
f"message='{self.message}')"
)
Expand Down Expand Up @@ -436,3 +438,11 @@ async def set_filter_change_date(self, _date: date) -> None:
"A_CYC_FILTER_CHANGED_YEAR": _date.year - 2000,
}
)

async def resolve_alarm(self, alarm: Alarm) -> None:
"""Resolve an alarm"""

suffix = "" if alarm.nr == 1 else f"_{alarm.nr}"
await self.set_values(
{f"A_CYC_FAULT_ACTIVITY{suffix}": Alarm.Activity.SOLVED.value}
)

0 comments on commit 80e703b

Please sign in to comment.