1818 TOPIC_FRAGMENTS ,
1919 VERSION ,
2020)
21- from inelsmqtt .utils .core import DUMMY_VAL , DeviceClassProtocol , DeviceTypeNotFound , DeviceValue , ProtocolHandlerMapper
21+ from inelsmqtt .utils .core import (
22+ DUMMY_VAL ,
23+ DeviceClassProtocol ,
24+ DeviceTypeNotFound ,
25+ DeviceValue ,
26+ LastHAValue ,
27+ ProtocolHandlerMapper ,
28+ )
2229
2330_LOGGER = logging .getLogger (__name__ )
2431
@@ -234,24 +241,23 @@ def values(self) -> Optional[DeviceValue]:
234241 return self .__values
235242
236243 @property
237- def last_values (self ) -> DeviceValue :
244+ def last_values (self ) -> LastHAValue :
238245 """Get last value of the device
239246
240247 Returns:
241- DeviceValue: latest values in many formats
248+ LastHAValue: Container for the previous Home Assistant value.
242249 """
243- try :
244- if hasattr (self .__values .last_value .ha_value , "__dict__" ):
245- return self .__values .last_value
246- raise AttributeError
247- except AttributeError :
250+ if self .__values : # previous state exists
251+ return self .__values .last_value
252+ else :
248253 val = self .__mqtt .last_value (self .__state_topic )
249- return DeviceValue (
254+ device_value = DeviceValue (
250255 self .__device_type ,
251256 self .__inels_type ,
252257 self .__device_class ,
253258 inels_value = val .decode () if val is not None else None , # type: ignore[attr-defined]
254259 )
260+ return LastHAValue (device_value .ha_value )
255261
256262 @property
257263 def mqtt (self ) -> InelsMqtt :
@@ -270,10 +276,9 @@ def __get_value(self, val: Any) -> DeviceValue:
270276 self .__inels_type ,
271277 self .__device_class ,
272278 inels_value = (val .decode () if val is not None else None ),
273- # last_value=self.last_values,
274- last_value = self .__values , # because it is already the last value at this moment
279+ last_value = LastHAValue (self .__values .ha_value ) if self .__values else self .last_values ,
275280 )
276- self .__state = dev_value .ha_value
281+ self .__state = dev_value .ha_value . copy () if dev_value . ha_value is not DUMMY_VAL else DUMMY_VAL
277282 self .__values = dev_value
278283
279284 return dev_value
@@ -302,12 +307,11 @@ def set_ha_value(self, value: Any) -> bool:
302307 self .__inels_type ,
303308 self .__device_class ,
304309 ha_value = value ,
305- # last_value=self.__state,
306- last_value = self .__values , # because the last_value will be accessible
310+ last_value = LastHAValue (self .__values .ha_value if self .__values else None ),
307311 )
308312
309- self .__state = dev .ha_value
310- self .__values = dev
313+ # self.__state = dev.ha_value
314+ # self.__values = dev
311315
312316 ret = False
313317 if self .__set_topic is not None :
0 commit comments