66import time
77from asyncio import CancelledError
88from datetime import timedelta
9+ from numbers import Number
910from typing import Final , Any
1011
1112import aiohttp
@@ -556,22 +557,29 @@ class TibberLocalBridge:
556557 PLAIN_TEXT_LINE : re .Pattern = re .compile (r'(.*?)-(.*?):(.*?)\.(.*?)\.(.*?)(?:\*(.*?)|)\((.*?)\)' )
557558 TWO_DIGIT_CODE_PATTERN = re .compile (r'^([^.]*\.[^.]*)(\(.*$)' )
558559
559- def _get_value_internal (self , key , divisor : int = 1 ):
560+ def _get_numeric_value_internal (self , key , divisor : int = 1 ):
560561 if isinstance (key , list ):
561562 val = None
562563 for a_key in key :
563564 if val is None :
564- val = self ._get_value_internal (a_key , divisor )
565+ val = self ._get_numeric_value_internal (a_key , divisor )
565566 return val
566567
567568 if key in self ._obis_values :
568569 a_obis = self ._obis_values .get (key )
569- if hasattr (a_obis , 'scaler' ):
570- return a_obis .value * 10 ** int (a_obis .scaler ) / divisor
571- else :
572- return a_obis .value / divisor
570+ if isinstance (a_obis .value , Number ):
571+ if hasattr (a_obis , 'scaler' ):
572+ try :
573+ return a_obis .value * 10 ** int (a_obis .scaler ) / divisor
574+ except (TypeError , ValueError ):
575+ _LOGGER (f"_get_numeric_value_internal(): could not convert scaler to int for key { key } - { a_obis } " )
576+ return None
577+ else :
578+ return a_obis .value / divisor
579+
580+ return None
573581
574- def _get_str_internal (self , key ):
582+ def _get_string_internal (self , key ):
575583 if key in self ._obis_values :
576584 return self ._obis_values .get (key ).value
577585
@@ -1281,19 +1289,19 @@ def attrhub_compression_error_readings_count(self):
12811289
12821290 @property
12831291 def attr010060320101 (self ) -> str : # XYZ
1284- return self ._get_str_internal ('010060320101' )
1292+ return self ._get_string_internal ('010060320101' )
12851293
12861294 @property
12871295 def attr0100600100ff (self ) -> str : # 0a123b4c567890d12e34
1288- return self ._get_str_internal ('0100600100ff' )
1296+ return self ._get_string_internal ('0100600100ff' )
12891297
12901298 @property
12911299 def attr0100010800ff (self ) -> float :
1292- return self ._get_value_internal ('0100010800ff' )
1300+ return self ._get_numeric_value_internal ('0100010800ff' )
12931301
12941302 @property
12951303 def attr0100010800ff_in_k (self ) -> float :
1296- return self ._get_value_internal ('0100010800ff' , divisor = 1000 )
1304+ return self ._get_numeric_value_internal ('0100010800ff' , divisor = 1000 )
12971305
12981306 @property
12991307 def attr0100010800ff_status (self ) -> float :
@@ -1302,120 +1310,120 @@ def attr0100010800ff_status(self) -> float:
13021310
13031311 @property
13041312 def attr0100010801ff (self ) -> float :
1305- return self ._get_value_internal ('0100010801ff' )
1313+ return self ._get_numeric_value_internal ('0100010801ff' )
13061314
13071315 @property
13081316 def attr0100010801ff_in_k (self ) -> float :
1309- return self ._get_value_internal ('0100010801ff' , divisor = 1000 )
1317+ return self ._get_numeric_value_internal ('0100010801ff' , divisor = 1000 )
13101318
13111319 @property
13121320 def attr0100010802ff (self ) -> float :
1313- return self ._get_value_internal ('0100010802ff' )
1321+ return self ._get_numeric_value_internal ('0100010802ff' )
13141322
13151323 @property
13161324 def attr0100010802ff_in_k (self ) -> float :
1317- return self ._get_value_internal ('0100010802ff' , divisor = 1000 )
1325+ return self ._get_numeric_value_internal ('0100010802ff' , divisor = 1000 )
13181326
13191327 @property
13201328 def attr0100010803ff (self ) -> float :
1321- return self ._get_value_internal ('0100010803ff' )
1329+ return self ._get_numeric_value_internal ('0100010803ff' )
13221330
13231331 @property
13241332 def attr0100010803ff_in_k (self ) -> float :
1325- return self ._get_value_internal ('0100010803ff' , divisor = 1000 )
1333+ return self ._get_numeric_value_internal ('0100010803ff' , divisor = 1000 )
13261334
13271335 @property
13281336 def attr0100010804ff (self ) -> float :
1329- return self ._get_value_internal ('0100010804ff' )
1337+ return self ._get_numeric_value_internal ('0100010804ff' )
13301338
13311339 @property
13321340 def attr0100010804ff_in_k (self ) -> float :
1333- return self ._get_value_internal ('0100010804ff' , divisor = 1000 )
1341+ return self ._get_numeric_value_internal ('0100010804ff' , divisor = 1000 )
13341342
13351343 @property
13361344 def attr0100020800ff (self ) -> float :
1337- return self ._get_value_internal ('0100020800ff' )
1345+ return self ._get_numeric_value_internal ('0100020800ff' )
13381346
13391347 @property
13401348 def attr0100020800ff_in_k (self ) -> float :
1341- return self ._get_value_internal (key = '0100020800ff' , divisor = 1000 )
1349+ return self ._get_numeric_value_internal (key = '0100020800ff' , divisor = 1000 )
13421350
13431351 @property
13441352 def attr0100100700ff (self ) -> float :
13451353 # search for SUM (0), POS (0), POS (255), NEG (0), ABS (0)
1346- return self ._get_value_internal (
1354+ return self ._get_numeric_value_internal (
13471355 ['0100100700ff' , '0100010700ff' , '01000107ffff' , '0100020700ff' , '01000f0700ff' ])
13481356
13491357 @property
13501358 def attr0100240700ff (self ) -> float :
13511359 # search for SUM (0), POS (0), POS (255), NEG (0), ABS (0)
1352- return self ._get_value_internal (
1360+ return self ._get_numeric_value_internal (
13531361 ['0100240700ff' , '0100150700ff' , '01001507ffff' , '0100160700ff' , '0100230700ff' ])
13541362
13551363 @property
13561364 def attr0100380700ff (self ) -> float :
13571365 # search for SUM (0), POS (0), POS (255), NEG (0), ABS (0)
1358- return self ._get_value_internal (
1366+ return self ._get_numeric_value_internal (
13591367 ['0100380700ff' , '0100290700ff' , '01002907ffff' , '01002a0700ff' , '0100370700ff' ])
13601368
13611369 @property
13621370 def attr01004c0700ff (self ) -> float :
13631371 # search for SUM (0), POS (0), POS (255), NEG (0), ABS (0)
1364- return self ._get_value_internal (
1372+ return self ._get_numeric_value_internal (
13651373 ['01004c0700ff' , '01003d0700ff' , '01003d07ffff' , '01003e0700ff' , '01004b0700ff' ])
13661374
13671375 @property
13681376 def attr0100200700ff (self ) -> float :
1369- return self ._get_value_internal ('0100200700ff' )
1377+ return self ._get_numeric_value_internal ('0100200700ff' )
13701378
13711379 @property
13721380 def attr0100340700ff (self ) -> float :
1373- return self ._get_value_internal ('0100340700ff' )
1381+ return self ._get_numeric_value_internal ('0100340700ff' )
13741382
13751383 @property
13761384 def attr0100480700ff (self ) -> float :
1377- return self ._get_value_internal ('0100480700ff' )
1385+ return self ._get_numeric_value_internal ('0100480700ff' )
13781386
13791387 @property
13801388 def attr01001f0700ff (self ) -> float :
1381- return self ._get_value_internal ('01001f0700ff' )
1389+ return self ._get_numeric_value_internal ('01001f0700ff' )
13821390
13831391 @property
13841392 def attr0100330700ff (self ) -> float :
1385- return self ._get_value_internal ('0100330700ff' )
1393+ return self ._get_numeric_value_internal ('0100330700ff' )
13861394
13871395 @property
13881396 def attr0100470700ff (self ) -> float :
1389- return self ._get_value_internal ('0100470700ff' )
1397+ return self ._get_numeric_value_internal ('0100470700ff' )
13901398
13911399 @property
13921400 def attr0100510701ff (self ) -> float :
1393- return self ._get_value_internal ('0100510701ff' )
1401+ return self ._get_numeric_value_internal ('0100510701ff' )
13941402
13951403 @property
13961404 def attr0100510702ff (self ) -> float :
1397- return self ._get_value_internal ('0100510702ff' )
1405+ return self ._get_numeric_value_internal ('0100510702ff' )
13981406
13991407 @property
14001408 def attr0100510704ff (self ) -> float :
1401- return self ._get_value_internal ('0100510704ff' )
1409+ return self ._get_numeric_value_internal ('0100510704ff' )
14021410
14031411 @property
14041412 def attr010051070fff (self ) -> float :
1405- return self ._get_value_internal ('010051070fff' )
1413+ return self ._get_numeric_value_internal ('010051070fff' )
14061414
14071415 @property
14081416 def attr010051071aff (self ) -> float :
1409- return self ._get_value_internal ('010051071aff' )
1417+ return self ._get_numeric_value_internal ('010051071aff' )
14101418
14111419 @property
14121420 def attr01000e0700ff (self ) -> float :
1413- return self ._get_value_internal ('01000e0700ff' )
1421+ return self ._get_numeric_value_internal ('01000e0700ff' )
14141422
14151423 @property
14161424 def attr010000020000 (self ) -> str : # 01
1417- return self ._get_str_internal ('010000020000' )
1425+ return self ._get_string_internal ('010000020000' )
14181426
14191427 @property
14201428 def attr0100605a0201 (self ) -> str : # 123a4567
1421- return self ._get_str_internal ('0100605a0201' )
1429+ return self ._get_string_internal ('0100605a0201' )
0 commit comments