Skip to content

Commit 812833c

Browse files
committed
Refactor method that logs cube state
1 parent 3bd9ec0 commit 812833c

File tree

6 files changed

+57
-51
lines changed

6 files changed

+57
-51
lines changed

maxcube/cube.py

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -64,55 +64,15 @@ def use_persistent_connection(self, value: bool) -> None:
6464
def disconnect(self):
6565
self.__commander.disconnect()
6666

67+
def __str__(self):
68+
return self.describe("CUBE", f"firmware={self.firmware_version}")
69+
6770
def log(self):
68-
logger.info(
69-
"Cube (rf=%s, firmware=%s)" % (self.rf_address, self.firmware_version)
70-
)
71-
for device in self.devices:
72-
if device.is_thermostat():
73-
logger.info(
74-
"Thermostat (type=%s, rf=%s, room=%s, name=%s, mode=%s, min=%s, max=%s, actual=%s, target=%s, valve=%s)"
75-
% (
76-
device.type,
77-
device.rf_address,
78-
self.room_by_id(device.room_id).name,
79-
device.name,
80-
device.mode,
81-
device.min_temperature,
82-
device.max_temperature,
83-
device.actual_temperature,
84-
device.target_temperature,
85-
device.valve_position,
86-
)
87-
)
88-
elif device.is_wallthermostat():
89-
logger.info(
90-
"WallThermostat (type=%s, rf=%s, room=%s, name=%s, min=%s, max=%s, actual=%s, target=%s)"
91-
% (
92-
device.type,
93-
device.rf_address,
94-
self.room_by_id(device.room_id).name,
95-
device.name,
96-
device.min_temperature,
97-
device.max_temperature,
98-
device.actual_temperature,
99-
device.target_temperature,
100-
)
101-
)
102-
elif device.is_windowshutter():
103-
logger.info(
104-
"WindowShutter (type=%s, rf=%s, room=%s, name=%s, init=%s, open=%s)"
105-
% (
106-
device.type,
107-
device.rf_address,
108-
self.room_by_id(device.room_id).name,
109-
device.name,
110-
device.initialized,
111-
device.is_open,
112-
)
113-
)
114-
else:
115-
logger.info("Device (rf=%s, name=%s" % (device.rf_address, device.name))
71+
logger.info(str(self))
72+
for room in self.rooms:
73+
logger.info(f" * ROOM {room.name}")
74+
for device in self.devices_by_room(room):
75+
logger.info(" --- " + str(device))
11676

11777
def update(self):
11878
self.__parse_responses(self.__commander.update())

maxcube/device.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Tuple
2+
13
MAX_CUBE = 0
24
MAX_THERMOSTAT = 1
35
MAX_THERMOSTAT_PLUS = 2
@@ -13,6 +15,13 @@
1315
MAX_DEVICE_BATTERY_OK = 0
1416
MAX_DEVICE_BATTERY_LOW = 1
1517

18+
MODE_NAMES = {
19+
MAX_DEVICE_MODE_AUTOMATIC: "auto",
20+
MAX_DEVICE_MODE_MANUAL: "manual",
21+
MAX_DEVICE_MODE_VACATION: "away",
22+
MAX_DEVICE_MODE_BOOST: "boost",
23+
}
24+
1625

1726
class MaxDevice(object):
1827
def __init__(self):
@@ -36,6 +45,15 @@ def is_windowshutter(self):
3645
def is_room(self):
3746
return False
3847

48+
def describe(self, kind: str, *args: Tuple[str]):
49+
state = "".join("," + s for s in args if s)
50+
if self.battery == MAX_DEVICE_BATTERY_LOW:
51+
state = ",LOW_BATT" + state
52+
return f"{kind} sn={self.serial},rf={self.rf_address},name={self.name}" + state
53+
54+
def __str__(self):
55+
return self.describe(str(self.type))
56+
3957
def to_dict(self):
4058
data = {}
4159
keys = [

maxcube/thermostat.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from time import localtime
22
from typing import Dict, List
33

4-
from maxcube.device import MaxDevice
4+
from maxcube.device import MODE_NAMES, MaxDevice
55

66
PROG_DAYS = [
77
"monday",
@@ -27,6 +27,18 @@ def __init__(self):
2727
self.mode = None
2828
self.programme: Dict[str, List[Dict[str, int]]] = {}
2929

30+
def __str__(self):
31+
return self.describe(
32+
"THERMOSTAT",
33+
f"mode={MODE_NAMES.get(self.mode, str(self.mode))}",
34+
f"actual={self.actual_temperature}",
35+
f"target={self.target_temperature}",
36+
f"eco={self.eco_temperature}",
37+
f"comfort={self.comfort_temperature}",
38+
f"range=[{self.min_temperature},{self.max_temperature}]",
39+
f"valve={self.valve_position}",
40+
)
41+
3042
def get_current_temp_in_auto_mode(self):
3143
t = localtime()
3244
weekday = PROG_DAYS[t.tm_wday]

maxcube/wallthermostat.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from maxcube.device import MaxDevice
1+
from maxcube.device import MODE_NAMES, MaxDevice
22

33

44
class MaxWallThermostat(MaxDevice):
@@ -11,3 +11,14 @@ def __init__(self):
1111
self.actual_temperature = None
1212
self.target_temperature = None
1313
self.mode = None
14+
15+
def __str__(self):
16+
return self.describe(
17+
"WALLTHERMO",
18+
f"mode={MODE_NAMES.get(self.mode, str(self.mode))}",
19+
f"actual={self.actual_temperature}",
20+
f"target={self.target_temperature}",
21+
f"eco={self.eco_temperature}",
22+
f"comfort={self.comfort_temperature}",
23+
f"range=[{self.min_temperature},{self.max_temperature}]",
24+
)

maxcube/windowshutter.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ def __init__(self):
66
super(MaxWindowShutter, self).__init__()
77
self.is_open = False
88
self.initialized = None
9+
10+
def __str__(self):
11+
return self.describe("WINDOW", f"open={self.is_open}")

tests/test_cube.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from maxcube.cube import MaxCube
77
from maxcube.device import (
88
MAX_CUBE,
9+
MAX_DEVICE_BATTERY_LOW,
910
MAX_DEVICE_MODE_AUTOMATIC,
1011
MAX_DEVICE_MODE_MANUAL,
1112
MAX_THERMOSTAT,
@@ -61,7 +62,7 @@ def to_messages(lines):
6162
b"C:0e2eba,0g4uugEBEKBLRVExMDg2NDM3KyE9CQcYAzAM/wAgYFR4ISAhICEgISAhIEUgRSBFIEUgRSBFICBgVHghICEgISAhICEgRSBFIEUgR"
6263
b"SBFIEUgIEJUTiEfISAhICEgISBFIEUgRSBFIEUgRSAgQlROIR8hICEgISAhIEUgRSBFIEUgRSBFICBCVE4hHyEgISAhICEgRSBFIEUgRSBFIEU"
6364
b"gIEJUTiEfISAhICEgISBFIEUgRSBFIEUgRSAgQlROIR8hICEgISAhIEUgRSBFIEUgRSBFIA==",
64-
b"L:DAoIgewSGAQQAAAA5QYMorL3EhALDi66ChIYABAAAAA=",
65+
b"L:DAoIgewSGAQQAAAA5QYMorL3EpALDi66ChIYABAAAAA=",
6566
]
6667
)
6768

@@ -288,6 +289,7 @@ def test_init_2(self, ClassMock):
288289

289290
device = self.cube.devices[2]
290291
self.assertFalse(device.is_open)
292+
self.assertTrue(device.battery == MAX_DEVICE_BATTERY_LOW)
291293

292294
def test_parse_m_message(self, ClassMock):
293295
self.init(ClassMock, INIT_RESPONSE_2)

0 commit comments

Comments
 (0)