@@ -1187,7 +1187,7 @@ def create_ha_value_object(cls, device_value: DeviceValue) -> Any:
11871187 card_id_int = int (card_id , 16 )
11881188 # if card removed before
11891189 if card_id_int == 0 and device_value .last_value is not None :
1190- card_id = device_value .last_value .card_id
1190+ card_id = device_value .last_value .ha_value . card_id
11911191
11921192 interface = [state [0 ] == "1" , state [12 ] == "1" , state [10 ] == "1" ]
11931193
@@ -2041,6 +2041,9 @@ def create_command_payload(out1: int = 0, out2: int = 0) -> str:
20412041
20422042 @classmethod
20432043 def create_ha_value_object (cls , device_value : DeviceValue ) -> Any :
2044+ last_known_required = None
2045+ last_known_required_cool = None
2046+
20442047 temp_current : float = int (
20452048 trim_inels_status_values (device_value .inels_status_value , cls .DATA , CURRENT_TEMP , "" ), 16
20462049 )
@@ -2063,8 +2066,15 @@ def create_ha_value_object(cls, device_value: DeviceValue) -> Any:
20632066 )
20642067 if temp_required_heat == 0x7FFFFFFB :
20652068 temp_required_heat = 0
2069+ if hasattr (device_value .last_value , "ha_value" ):
2070+ last_known_required = device_value .last_value .ha_value .climate_controller .last_known_required
20662071 else :
20672072 temp_required_heat /= 100
2073+ if temp_required_heat == 0 and hasattr (device_value .last_value , "ha_value" ):
2074+ last_known_required = device_value .last_value .ha_value .climate_controller .last_known_required
2075+ else :
2076+ if temp_required_heat != 0 :
2077+ last_known_required = temp_required_heat
20682078
20692079 temp_critical_min = (
20702080 int (
@@ -2080,8 +2090,15 @@ def create_ha_value_object(cls, device_value: DeviceValue) -> Any:
20802090 )
20812091 if temp_required_cool == 0x7FFFFFFB :
20822092 temp_required_cool = 0
2093+ if hasattr (device_value .last_value , "ha_value" ):
2094+ last_known_required_cool = device_value .last_value .ha_value .climate_controller .last_known_required_cool
20832095 else :
20842096 temp_required_cool /= 100
2097+ if temp_required_cool == 0 and hasattr (device_value .last_value , "ha_value" ):
2098+ last_known_required_cool = device_value .last_value .ha_value .climate_controller .last_known_required_cool
2099+ else :
2100+ if temp_required_cool != 0 :
2101+ last_known_required_cool = temp_required_cool
20852102
20862103 temp_correction = (
20872104 int (trim_inels_status_values (device_value .inels_status_value , cls .DATA , TEMP_CORRECTION , "" ), 16 ) / 100
@@ -2142,7 +2159,9 @@ def create_ha_value_object(cls, device_value: DeviceValue) -> Any:
21422159 climate_controller = new_object (
21432160 current = temp_current , # current_temperature
21442161 required = temp_required_heat , # target_temperature / target_temperature_high
2162+ last_known_required = last_known_required ,
21452163 required_cool = temp_required_cool , # target_temperature_low
2164+ last_known_required_cool = last_known_required_cool ,
21462165 climate_mode = climate_mode , # hvac_mode: Off/Heat_cool/Heat/Cool
21472166 # Off -> controller is turned off
21482167 # Heat_cool -> follow temp range
@@ -2173,14 +2192,6 @@ def create_inels_set_value(cls, device_value: DeviceValue) -> str:
21732192 critical_temp = [int (x , 16 ) for x in break_into_bytes (f"{ int (cc .critical_temp * 100 ):08X} " )]
21742193 critical_temp .reverse ()
21752194
2176- manual_temp = [int (x , 16 ) for x in break_into_bytes (f"{ int ((cc .required + cc .correction_temp ) * 100 ):08X} " )]
2177- manual_temp .reverse ()
2178-
2179- manual_cool_temp = [
2180- int (x , 16 ) for x in break_into_bytes (f"{ int ((cc .required_cool + cc .correction_temp ) * 100 ):08X} " )
2181- ]
2182- manual_cool_temp .reverse ()
2183-
21842195 plan_in = 0
21852196 if cc .public_holiday > 0 :
21862197 plan_in = 128 # 0x80
@@ -2200,6 +2211,24 @@ def create_inels_set_value(cls, device_value: DeviceValue) -> str:
22002211 else :
22012212 byte18 = 1
22022213
2214+ required_heat = cc .required
2215+ required_cool = cc .required_cool
2216+ if (required_heat == 0 or required_cool == 0 ) and manual_in == 7 and (byte18 == 1 or byte18 == 3 ):
2217+ try :
2218+ climate_controller = device_value .last_value .ha_value .climate_controller
2219+ required_heat = climate_controller .last_known_required or required_heat
2220+ required_cool = climate_controller .last_known_required_cool or required_cool
2221+ except AttributeError :
2222+ pass
2223+
2224+ manual_temp = [int (x , 16 ) for x in break_into_bytes (f"{ int ((required_heat + cc .correction_temp ) * 100 ):08X} " )]
2225+ manual_temp .reverse ()
2226+
2227+ manual_cool_temp = [
2228+ int (x , 16 ) for x in break_into_bytes (f"{ int ((required_cool + cc .correction_temp ) * 100 ):08X} " )
2229+ ]
2230+ manual_cool_temp .reverse ()
2231+
22032232 set_val = current_temp + critical_temp + manual_temp + manual_cool_temp
22042233 set_val += [plan_in , manual_in , byte18 ]
22052234
0 commit comments