66import logging
77from typing import Any , Final
88
9- from ..api import NodeEvent , NodeFeature
9+ from ..api import NodeEvent , NodeFeature , Temperature , Humidity
1010from ..connection import StickController
1111from ..exceptions import MessageError , NodeError
1212from ..messages .responses import SENSE_REPORT_ID , PlugwiseResponse , SenseReportResponse
@@ -43,8 +43,8 @@ def __init__(
4343 """Initialize Scan Device."""
4444 super ().__init__ (mac , address , controller , loaded_callback )
4545
46- self ._humidity : float | None = None
47- self ._temperature : float | None = None
46+ self ._humidity : Humidity ()
47+ self ._temperature : Temperature ()
4848
4949 self ._sense_subscription : Callable [[], None ] | None = None
5050
@@ -56,16 +56,17 @@ async def load(self) -> bool:
5656 self ._node_info .is_battery_powered = True
5757 if self ._cache_enabled :
5858 _LOGGER .debug ("Loading Sense node %s from cache" , self ._node_info .mac )
59- if await self ._load_from_cache ():
60- self ._loaded = True
61- self ._setup_protocol (
62- SENSE_FIRMWARE_SUPPORT ,
63- (NodeFeature .INFO , NodeFeature .TEMPERATURE , NodeFeature .HUMIDITY ),
64- )
65- if await self .initialize ():
66- await self ._loaded_callback (NodeEvent .LOADED , self .mac )
67- return True
68-
59+ await self ._load_from_cache ()
60+ else :
61+ self ._load_defaults ()
62+ self ._loaded = True
63+ self ._setup_protocol (
64+ SENSE_FIRMWARE_SUPPORT ,
65+ (NodeFeature .INFO , NodeFeature .TEMPERATURE , NodeFeature .HUMIDITY ),
66+ )
67+ if await self .initialize ():
68+ await self ._loaded_callback (NodeEvent .LOADED , self .mac )
69+ return True
6970 _LOGGER .debug ("Loading of Sense node %s failed" , self ._node_info .mac )
7071 return False
7172
@@ -90,6 +91,32 @@ async def unload(self) -> None:
9091 self ._sense_subscription ()
9192 await super ().unload ()
9293
94+ def _load_defaults (self ) -> None :
95+ """Load default configuration settings."""
96+ super ()._load_defaults ()
97+ self ._temperature = Temperature (
98+ temperature = 0.0 ,
99+ )
100+ self ._humidity = Humidity (
101+ humidity = 0.0 ,
102+ )
103+ # region properties
104+
105+ @property
106+ @raise_not_loaded
107+ def temperature (self ) -> Temperature :
108+ """Temperature. """
109+ return self ._temperature
110+
111+
112+ @property
113+ @raise_not_loaded
114+ def humidity (self ) -> Humidity :
115+ """Humidity. """
116+ return self ._humidity
117+
118+ # end region
119+
93120 async def _sense_report (self , response : PlugwiseResponse ) -> bool :
94121 """Process sense report message to extract current temperature and humidity values."""
95122 if not isinstance (response , SenseReportResponse ):
@@ -99,7 +126,7 @@ async def _sense_report(self, response: PlugwiseResponse) -> bool:
99126 report_received = False
100127 await self ._available_update_state (True , response .timestamp )
101128 if response .temperature .value != 65535 :
102- self ._temperature = int (
129+ self ._temperature . temperature = float (
103130 SENSE_TEMPERATURE_MULTIPLIER * (response .temperature .value / 65536 )
104131 - SENSE_TEMPERATURE_OFFSET
105132 )
@@ -109,7 +136,7 @@ async def _sense_report(self, response: PlugwiseResponse) -> bool:
109136 report_received = True
110137
111138 if response .humidity .value != 65535 :
112- self ._humidity = int (
139+ self ._humidity . humidity = float (
113140 SENSE_HUMIDITY_MULTIPLIER * (response .humidity .value / 65536 )
114141 - SENSE_HUMIDITY_OFFSET
115142 )
0 commit comments