diff --git a/README.md b/README.md index 91c413d..e1c9d8a 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ from moehlenhoff_alpha2 import Alpha2Base async def main(): base = Alpha2Base("192.168.1.1") await base.update_data() + # Set current date and time in base + await base.set_datetime() + # Increase the temperature of heatarea by 0.2 degrees heat_area = list(base.heat_areas)[0] t_target = heat_area["T_TARGET"] + 0.2 await base.update_heat_area(heat_area["ID"], {"T_TARGET": t_target}) diff --git a/moehlenhoff_alpha2/__init__.py b/moehlenhoff_alpha2/__init__.py index 3dec590..6cb5b69 100644 --- a/moehlenhoff_alpha2/__init__.py +++ b/moehlenhoff_alpha2/__init__.py @@ -10,11 +10,12 @@ import asyncio import aiohttp import xmltodict +from datetime import datetime logger = logging.getLogger(__name__) -__version__ = "1.1.2" +__version__ = "1.3.0" class Alpha2Base: @@ -285,3 +286,10 @@ async def update_heat_area(self, heat_area_id: Union[str, int], attributes: dict command += "" async with self._update_lock: await self._send_command(device_id, command) + + async def set_datetime(self, value: datetime = None) -> None: + """Set base date and time""" + value = value or datetime.now() + command = f"{value.strftime('%Y-%m-%dT%H:%M:%S')}" + async with self._update_lock: + await self._send_command(self.id, command) diff --git a/pyproject.toml b/pyproject.toml index dce1bf2..7a99d84 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "moehlenhoff-alpha2" -version = "1.2.1" +version = "1.3.0" description = "Python client for the Moehlenhoff Alpha2 underfloor heating system" authors = ["Jan Schneider "] license = "GPL" diff --git a/tests/test_moehlenhoff_alpha2.py b/tests/test_moehlenhoff_alpha2.py index b4c8577..1cefd87 100644 --- a/tests/test_moehlenhoff_alpha2.py +++ b/tests/test_moehlenhoff_alpha2.py @@ -2,6 +2,7 @@ import os import asyncio from unittest.mock import patch +from datetime import datetime import pytest @@ -113,6 +114,7 @@ async def _fetch_static_data(_self): @pytest.mark.asyncio +@pytest.mark.skipif(not ALPHA2_BASE_ADDRESS, reason="ALPHA2_BASE_ADDRESS not set in environment") async def test_ensure_static_data(): """Test _ensure_static_data""" base = Alpha2Base(ALPHA2_BASE_ADDRESS) @@ -216,3 +218,23 @@ async def test_update_lock(): base.update_data() ] await asyncio.gather(*coros) + +@pytest.mark.asyncio +@pytest.mark.skipif(not ALPHA2_BASE_ADDRESS, reason="ALPHA2_BASE_ADDRESS not set in environment") +async def test_set_datetime(): + """Test set datetime""" + base = Alpha2Base(ALPHA2_BASE_ADDRESS) + await base.update_data() + + value = datetime(2010, 1, 1, 0, 0, 0) + await base.set_datetime(value) + await asyncio.sleep(5) + await base.update_data() + base_dt = datetime.strptime(base.static_data["Devices"]["Device"]["DATETIME"], "%Y-%m-%dT%H:%M:%S") + assert abs((base_dt - value).total_seconds()) < 10 + + await base.set_datetime() + await asyncio.sleep(5) + await base.update_data() + base_dt = datetime.strptime(base.static_data["Devices"]["Device"]["DATETIME"], "%Y-%m-%dT%H:%M:%S") + assert abs((base_dt - datetime.now()).total_seconds()) < 10