@@ -547,6 +547,21 @@ class Shelly3EMPro(Shelly):
547547 def GetPowermeterWatts (self ):
548548 return CastToInt (self .GetRpcJson ('/EM.GetStatus?id=0' )['total_act_power' ])
549549
550+ class ESPHome (Powermeter ):
551+ def __init__ (self , ip : str , port : str , domain : str , id : str ):
552+ self .ip = ip
553+ self .port = port
554+ self .domain = domain
555+ self .id = id
556+
557+ def GetJson (self , path ):
558+ url = f'http://{ self .ip } :{ self .port } { path } '
559+ return requests .get (url , timeout = 10 ).json ()
560+
561+ def GetPowermeterWatts (self ):
562+ ParsedData = self .GetJson (f'/{ self .domain } /{ self .id } ' )
563+ return CastToInt (ParsedData ['value' ])
564+
550565class Shrdzm (Powermeter ):
551566 def __init__ (self , ip : str , user : str , password : str ):
552567 self .ip = ip
@@ -1016,6 +1031,13 @@ def CreateIntermediatePowermeter(dtu: DTU) -> Powermeter:
10161031 return Shelly1PM (shelly_ip , shelly_user , shelly_pass )
10171032 elif config .getboolean ('SELECT_INTERMEDIATE_METER' , 'USE_SHELLY_PLUS_1PM_INTERMEDIATE' ):
10181033 return ShellyPlus1PM (shelly_ip , shelly_user , shelly_pass )
1034+ elif config .getboolean ('SELECT_INTERMEDIATE_METER' , 'USE_ESPHOME_INTERMEDIATE' ):
1035+ return ESPHome (
1036+ config .get ('INTERMEDIATE_ESPHOME' , 'ESPHOME_IP_INTERMEDIATE' ),
1037+ config .get ('INTERMEDIATE_ESPHOME' , 'ESPHOME_PORT_INTERMEDIATE' , fallback = '80' ),
1038+ config .get ('INTERMEDIATE_ESPHOME' , 'ESPHOME_DOMAIN_INTERMEDIATE' ),
1039+ config .get ('INTERMEDIATE_ESPHOME' , 'ESPHOME_ID_INTERMEDIATE' )
1040+ )
10191041 elif config .getboolean ('SELECT_INTERMEDIATE_METER' , 'USE_SHRDZM_INTERMEDIATE' ):
10201042 return Shrdzm (
10211043 config .get ('INTERMEDIATE_SHRDZM' , 'SHRDZM_IP_INTERMEDIATE' ),
0 commit comments