Skip to content

Commit

Permalink
add group support
Browse files Browse the repository at this point in the history
  • Loading branch information
mib1185 committed Jan 4, 2024
1 parent 5756c51 commit 78f07bb
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 1 deletion.
7 changes: 7 additions & 0 deletions pyfritzhome/devicetypes/fritzhomedevicebase.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ class FritzhomeDeviceBase(FritzhomeEntityBase):
"""The Fritzhome Device class."""

identifier = None
is_group = None
fw_version = None
group_members = None
manufacturer = None
productname = None
present = None
Expand Down Expand Up @@ -44,6 +46,11 @@ def _update_from_node(self, node):

self.present = bool(int(node.findtext("present")))

groupinfo = node.find("groupinfo")
self.is_group = groupinfo is not None
if self.is_group:
self.group_members = str(groupinfo.findtext("members")).split(",")

# General
def get_present(self):
"""Check if the device is present."""
Expand Down
2 changes: 1 addition & 1 deletion pyfritzhome/fritzhome.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def _get_listinfo_elements(self, entity_type):
plain = self._aha_request("get" + entity_type + "listinfos")
dom = ElementTree.fromstring(plain)
_LOGGER.debug(dom)
return dom.findall(entity_type)
return dom.findall("*")

def get_device_elements(self):
"""Get the DOM elements for the device list."""
Expand Down
101 changes: 101 additions & 0 deletions tests/responses/groups/device_list_thermostat.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?xml version="1.0"?>
<devicelist version="1" fwversion="7.57">
<device identifier="09995 0523646" id="16" functionbitmask="320" fwversion="05.08" manufacturer="AVM" productname="FRITZ!DECT 301">
<present>1</present>
<txbusy>0</txbusy>
<name>Wohnzimmer Couch</name>
<battery>80</battery>
<batterylow>0</batterylow>
<temperature>
<celsius>220</celsius>
<offset>-10</offset>
</temperature>
<hkr>
<tist>44</tist>
<tsoll>43</tsoll>
<absenk>35</absenk>
<komfort>43</komfort>
<lock>0</lock>
<devicelock>0</devicelock>
<errorcode>0</errorcode>
<windowopenactiv>0</windowopenactiv>
<windowopenactiveendtime>0</windowopenactiveendtime>
<boostactive>0</boostactive>
<boostactiveendtime>0</boostactiveendtime>
<batterylow>0</batterylow>
<battery>80</battery>
<nextchange>
<endperiod>0</endperiod>
<tchange>43</tchange>
</nextchange>
<summeractive>0</summeractive>
<holidayactive>0</holidayactive>
<adaptiveHeatingActive>1</adaptiveHeatingActive>
<adaptiveHeatingRunning>0</adaptiveHeatingRunning>
</hkr>
</device>
<device identifier="09995 0517495" id="17" functionbitmask="320" fwversion="05.08" manufacturer="AVM" productname="FRITZ!DECT 301">
<present>1</present>
<txbusy>0</txbusy>
<name>Wohnzimmer Tisch</name>
<battery>80</battery>
<batterylow>0</batterylow>
<temperature>
<celsius>220</celsius>
<offset>-10</offset>
</temperature>
<hkr>
<tist>44</tist>
<tsoll>43</tsoll>
<absenk>35</absenk>
<komfort>43</komfort>
<lock>0</lock>
<devicelock>0</devicelock>
<errorcode>0</errorcode>
<windowopenactiv>0</windowopenactiv>
<windowopenactiveendtime>0</windowopenactiveendtime>
<boostactive>0</boostactive>
<boostactiveendtime>0</boostactiveendtime>
<batterylow>0</batterylow>
<battery>80</battery>
<nextchange>
<endperiod>0</endperiod>
<tchange>43</tchange>
</nextchange>
<summeractive>0</summeractive>
<holidayactive>0</holidayactive>
<adaptiveHeatingActive>1</adaptiveHeatingActive>
<adaptiveHeatingRunning>0</adaptiveHeatingRunning>
</hkr>
</device>
<group synchronized="1" identifier="grp303E4F-3F7D9BE07" id="900" functionbitmask="4160" fwversion="1.0" manufacturer="AVM" productname="">
<present>1</present>
<txbusy>0</txbusy>
<name>Wohnzimmer</name>
<hkr>
<tist/>
<tsoll>43</tsoll>
<absenk>35</absenk>
<komfort>43</komfort>
<lock>0</lock>
<devicelock>0</devicelock>
<errorcode>0</errorcode>
<windowopenactiv>0</windowopenactiv>
<windowopenactiveendtime>0</windowopenactiveendtime>
<boostactive>0</boostactive>
<boostactiveendtime>0</boostactiveendtime>
<nextchange>
<endperiod>0</endperiod>
<tchange>43</tchange>
</nextchange>
<summeractive>0</summeractive>
<holidayactive>0</holidayactive>
<adaptiveHeatingActive>1</adaptiveHeatingActive>
<adaptiveHeatingRunning>0</adaptiveHeatingRunning>
</hkr>
<groupinfo>
<masterdeviceid>0</masterdeviceid>
<members>16,17</members>
</groupinfo>
</group>
</devicelist>
27 changes: 27 additions & 0 deletions tests/test_fritzhomedevicethermostat_group.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from unittest.mock import MagicMock

from pyfritzhome import Fritzhome

from .helper import Helper


class TestFritzhomeDeviceThermostat(object):
def setup_method(self):
self.mock = MagicMock()
self.fritz = Fritzhome("10.0.0.1", "user", "pass")
self.fritz._request = self.mock
self.fritz._devices = {}

def test_device_alert_on(self):
self.mock.side_effect = [
Helper.response("groups/device_list_thermostat"),
]

self.fritz.update_devices()
group = self.fritz.get_device_by_ain("grp303E4F-3F7D9BE07")
assert group.has_thermostat
assert group.is_group
assert group.group_members == ["16", "17"]

0 comments on commit 78f07bb

Please sign in to comment.