1- from .device import Device
2- from typing import Any , Dict
1+ import logging
32import enum
3+ from typing import Dict , Any , Optional
4+ from collections import defaultdict
5+ from .device import Device
6+
7+ _LOGGER = logging .getLogger (__name__ )
48
59
610class PowerMode (enum .Enum ):
711 Eco = 'green'
812 Normal = 'normal'
913
1014
11- class Strip (Device ):
12- """Main class representing the smart strip."""
13-
14- def on (self ):
15- """Power on."""
16- return self .send ("set_power" , ["on" ])
17-
18- def off (self ):
19- """Power off."""
20- return self .send ("set_power" , ["off" ])
21-
22- def status (self ):
23- """Retrieve properties."""
24- properties = ['power' , 'temperature' , 'current' , 'mode' ]
25- values = self .send (
26- "get_prop" ,
27- properties
28- )
29- return StripStatus (dict (zip (properties , values )))
30-
31- def set_power_mode (self , mode : PowerMode ):
32- """Set mode."""
33-
34- # green, normal
35- return self .send ("set_power_mode" , [mode .value ])
36-
37-
3815class StripStatus :
3916 """Container for status reports from the strip."""
4017
4118 def __init__ (self , data : Dict [str , Any ]) -> None :
19+ # Device model: qmi.powerstrip.v1, zimi.powerstrip.v2
20+ #
4221 # {'power': 'on', 'temperature': 48.11,
4322 # 'current': 0.06, 'mode': 'green'}
4423 self .data = data
@@ -56,16 +35,59 @@ def temperature(self) -> float:
5635 return self .data ["temperature" ]
5736
5837 @property
59- def current (self ) -> float :
60- return self .data ["current" ]
38+ def load_power (self ) -> Optional [float ]:
39+ if self .data ["current" ] is not None :
40+ # The constant of 110V is used intentionally. The current was
41+ # calculated with a wrong reference voltage already.
42+ return self .data ["current" ] * 110
43+ return None
6144
6245 @property
6346 def mode (self ) -> PowerMode :
6447 return PowerMode (self .data ["mode" ])
6548
6649 def __str__ (self ) -> str :
6750 s = "<StripStatus power=%s, temperature=%s, " \
68- "current=%s mode=%s>" % \
69- (self .power , self .temperature ,
70- self .current , self .mode )
51+ "load_power=%s mode=%s>" % \
52+ (self .power ,
53+ self .temperature ,
54+ self .load_power ,
55+ self .mode )
7156 return s
57+
58+
59+ class Strip (Device ):
60+ """Main class representing the smart strip."""
61+
62+ def on (self ):
63+ """Power on."""
64+ return self .send ("set_power" , ["on" ])
65+
66+ def off (self ):
67+ """Power off."""
68+ return self .send ("set_power" , ["off" ])
69+
70+ def status (self ):
71+ """Retrieve properties."""
72+ properties = ['power' , 'temperature' , 'current' , 'mode' ]
73+ values = self .send (
74+ "get_prop" ,
75+ properties
76+ )
77+
78+ properties_count = len (properties )
79+ values_count = len (values )
80+ if properties_count != values_count :
81+ _LOGGER .debug (
82+ "Count (%s) of requested properties does not match the "
83+ "count (%s) of received values." ,
84+ properties_count , values_count )
85+
86+ return StripStatus (
87+ defaultdict (lambda : None , zip (properties , values )))
88+
89+ def set_power_mode (self , mode : PowerMode ):
90+ """Set mode."""
91+
92+ # green, normal
93+ return self .send ("set_power_mode" , [mode .value ])
0 commit comments