84
84
icon = "mdi:flash" ,
85
85
native_unit_of_measurement = UnitOfPower .WATT ,
86
86
device_class = SensorDeviceClass .POWER ,
87
+ state_class = SensorStateClass .MEASUREMENT ,
87
88
),
88
89
SensorEntityDescription (
89
90
key = "elecusageflowlow" ,
@@ -255,43 +256,28 @@ def __init__(self, session, host, port):
255
256
256
257
self ._session = session
257
258
self ._url = BASE_URL .format (host , port )
258
- self ._data = None
259
+ self .data = {}
259
260
260
261
@Throttle (MIN_TIME_BETWEEN_UPDATES )
261
262
async def async_update (self ):
262
263
"""Download and update data from Toon."""
263
264
264
265
try :
265
- with async_timeout .timeout (5 ):
266
+ async with async_timeout .timeout (5 ):
266
267
response = await self ._session .get (
267
268
self ._url , headers = {"Accept-Encoding" : "identity" }
268
269
)
270
+ self .data = await response .json (content_type = "text/javascript" )
271
+ _LOGGER .debug ("Data received from Toon: %s" , self .data )
269
272
except aiohttp .ClientError :
270
- _LOGGER .error ("Cannot poll Toon using url: %s" , self ._url )
271
- return
273
+ _LOGGER .error ("Cannot connect to Toon using url '%s'" , self ._url )
272
274
except asyncio .TimeoutError :
273
275
_LOGGER .error (
274
- "Timeout error occurred while polling Toon using url: %s" , self ._url
276
+ "Timeout error occurred while connecting to Toon using url '%s'" ,
277
+ self ._url
275
278
)
276
- return
277
- except Exception as err :
278
- _LOGGER .error ("Unknown error occurred while polling Toon: %s" , err )
279
- self ._data = None
280
- return
281
-
282
- try :
283
- self ._data = await response .json (content_type = "text/javascript" )
284
- _LOGGER .debug ("Data received from Toon: %s" , self ._data )
285
- except Exception as err :
286
- _LOGGER .error ("Cannot parse data received from Toon: %s" , err )
287
- self ._data = None
288
-
289
- @property
290
- def latest_data (self ):
291
- """Return the latest data object."""
292
- if self ._data :
293
- return self ._data
294
- return None
279
+ except (TypeError , KeyError ) as err :
280
+ _LOGGER .error (f"Cannot parse data received from Toon: %s" , err )
295
281
296
282
297
283
class ToonSmartMeterSensor (SensorEntity ):
@@ -339,7 +325,7 @@ async def async_update(self):
339
325
"""Get the latest data and use it to update our sensor state."""
340
326
341
327
await self ._data .async_update ()
342
- energy = self ._data .latest_data
328
+ energy = self ._data .data
343
329
344
330
if not energy :
345
331
return
@@ -446,6 +432,7 @@ async def async_update(self):
446
432
if (
447
433
dev ["type" ]
448
434
in [
435
+ "elec_solar" ,
449
436
"HAE_METER_v3_3" ,
450
437
"HAE_METER_v4_3" ,
451
438
]
@@ -459,8 +446,9 @@ async def async_update(self):
459
446
460
447
"""heat"""
461
448
if (
462
- dev ["type " ]
449
+ dev ["name " ]
463
450
in [
451
+ "heat" ,
464
452
"HAE_METER_v3_8" ,
465
453
"HAE_METER_v4_8" ,
466
454
"HAE_METER_HEAT_1" ,
0 commit comments