1- from bleak .backends .device import BLEDevice
2- from bleak .backends .scanner import AdvertisementData
3-
4- from ..connection import ConnectionState
51from ..devicebase import DeviceBase
62from ..entity import controls
73from ..entity .base import dynamic
@@ -42,11 +38,19 @@ class _BmsHeartbeatBattery2(DirectBmsMDeltaHeartbeatPack):
4238
4339
4440class Delta2Base (DeviceBase , RawDataProps ):
45- ac_output_power = raw_field (pb_inv .output_watts )
46- ac_input_voltage = raw_field (pb_inv .ac_in_vol , pdiv (1000 , 2 ))
47- ac_input_current = raw_field (pb_inv .ac_in_amp , pdiv (1000 , 2 ))
48- ac_output_voltage = raw_field (pb_inv .inv_out_vol , pdiv (1000 , 2 ))
49- ac_output_current = raw_field (pb_inv .inv_out_amp , pdiv (1000 , 2 ))
41+ ac_output_power = raw_field (pb_inv .output_watts ).default_when_missing (0 )
42+ ac_input_voltage = raw_field (pb_inv .ac_in_vol , pdiv (1000 , 2 )).default_when_missing (
43+ 0
44+ )
45+ ac_input_current = raw_field (pb_inv .ac_in_amp , pdiv (1000 , 2 )).default_when_missing (
46+ 0 ,
47+ )
48+ ac_output_voltage = raw_field (
49+ pb_inv .inv_out_vol , pdiv (1000 , 2 )
50+ ).default_when_missing (0 )
51+ ac_output_current = raw_field (
52+ pb_inv .inv_out_amp , pdiv (1000 , 2 )
53+ ).default_when_missing (0 )
5054
5155 battery_level_main = raw_field (pb_bms .f32_show_soc , pround (2 ))
5256
@@ -72,7 +76,9 @@ class Delta2Base(DeviceBase, RawDataProps):
7276 qc_usb1_output_power = raw_field (pb_pd .qc_usb1_watt )
7377 qc_usb2_output_power = raw_field (pb_pd .qc_usb2_watt )
7478
75- ac_ports = raw_field (pb_inv .cfg_ac_enabled , lambda x : x == 1 )
79+ ac_ports = raw_field (pb_inv .cfg_ac_enabled , lambda x : x == 1 ).default_when_missing (
80+ False
81+ )
7682 usb_ports = raw_field (pb_pd .dc_out_state , lambda x : x == 1 )
7783
7884 battery_charge_limit_min = raw_field (pb_ems .min_dsg_soc )
@@ -90,26 +96,6 @@ class Delta2Base(DeviceBase, RawDataProps):
9096 dc12v_output_voltage = raw_field (pb_mppt .car_out_vol , pdiv (1000 , 2 ))
9197 dc12v_output_current = raw_field (pb_mppt .car_out_amp , pdiv (1000 , 2 ))
9298
93- def __init__ (
94- self , ble_dev : BLEDevice , adv_data : AdvertisementData , sn : str
95- ) -> None :
96- super ().__init__ (ble_dev , adv_data , sn )
97- self .on_connection_state_change (self ._default_ac_ports_off_when_missing )
98-
99- def _default_ac_ports_off_when_missing (self , state : ConnectionState ) -> None :
100- # The inverter stops sending its heartbeat entirely while AC output is off, so
101- # `ac_ports` never gets a value after a fresh connect and the switch stays
102- # `unavailable`. Default it to off if nothing arrives within 10s - a real
103- # heartbeat afterwards still overrides this.
104- if state != ConnectionState .AUTHENTICATED :
105- return
106-
107- def _set_off_if_unknown () -> None :
108- if self .ac_ports is None :
109- self .notify_field (Delta2Base .ac_ports , False )
110-
111- self .call_later (10 , _set_off_if_unknown , key = "default_ac_ports_off" )
112-
11399 @property
114100 def pd_heart_type (self ):
115101 return BasePdHeart
0 commit comments