echavet/MitsubishiCN105ESPHome

Delay in Applying Target Temperature Setting - requires calling twice

jasestu opened this issue · 9 comments

With https://github.com/geoffdavis/esphome-mitsubishiheatpump I was able to use a badge button on a dashboard to turn on and set temperature:

badges:
  - entity: climate.kitchen_heat_pump_2
    type: custom:climate-mode-entity-row
    modes:
      - hvac_mode: cool
        temperature: 23
        icon: mdi:snowflake
        color: '#B3E5FC'
      - hvac_mode: 'off'
      - hvac_mode: heat
        temperature: 21
        icon: mdi:fire
        color: '#FFC107'

However, I'm finding with this component I need to hit the button twice - the first time turns it on, but doesn't set the temperature, I need to hit the button a second time to have that happen.

Logs:

Click here to expand logs

[12:37:00][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:00][D][climate:399]:   Mode: OFF
[12:37:00][D][climate:401]:   Action: OFF
[12:37:00][D][climate:404]:   Fan Mode: AUTO
[12:37:00][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:00][D][climate:419]:   Current Temperature: 24.00°C
[12:37:00][D][climate:425]:   Target Temperature: 27.00°C
[12:37:00][D][sensor:093]: 'Compressor Frequency': Sending state 0.00000 Hz with 0 decimals of accuracy
[12:37:01][D][climate:011]: 'Office Heat Pump' - Setting
[12:37:01][D][climate:015]:   Mode: COOL
[12:37:01][D][control:037]: espHome control() interface method called...
[12:37:01][D][control:041]: Mode change asked
[12:37:01][I][control:160]: changing mode to COOL
[12:37:01][D][EVT_SETS:074]: clim.control() -> User changed something...
[12:37:01][I][EVT_SETS:059]: [control (wantedSettings)]-> [power: ON , target °C: 27.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING , hasChanged ? -> YES, hasBeenSent ? ->  NO]
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][I][CN105:162]: sending wantedSettings..
[12:37:01][I][EVT_SETS:059]: [wantedSettings ]-> [power: ON , target °C: 27.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING , hasChanged ? -> YES, hasBeenSent ? -> YES]
[12:37:01][D][CN105:167]: cancelling the update loop during the push of the settings..
[12:37:01][D][CN105:102]: checking differences bw asked settings and current ones...
[12:37:01][D][CN105:107]: power is always set -> ON
[12:37:01][D][CN105:113]: heatpump mode changed -> COOL
[12:37:01][D][CN105:124]: temperature changed (tempmode is true) -> 27.000000
[12:37:01][D][CN105:131]: heatpump fan changed -> AUTO
[12:37:01][D][CN105:137]: heatpump vane changed -> AUTO
[12:37:01][D][CN105:081]: writing packet...
[12:37:01][D][WRITE:142]: FC 41 01 30 10 01 1F 00 01 03 00 00 00 00 00 00 00 00 00 B6 00 A4 
[12:37:01][D][WRITE_SETTINGS:142]: FC 41 01 30 10 01 1F 00 01 03 00 00 00 00 00 00 00 00 00 B6 00 A4 
[12:37:01][D][climate:011]: 'Office Heat Pump' - Setting
[12:37:01][D][climate:040]:   Target Temperature: 23.00
[12:37:01][D][control:037]: espHome control() interface method called...
[12:37:01][I][control:050]: Setting heatpump setpoint : 23.0
[12:37:01][D][EVT_SETS:074]: clim.control() -> User changed something...
[12:37:01][I][EVT_SETS:059]: [control (wantedSettings)]-> [power: ON , target °C: 23.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING , hasChanged ? -> YES, hasBeenSent ? ->  NO]
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][D][CN105:197]: will sendWantedSettings later because we've sent one too recently...
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][D][CN105:197]: will sendWantedSettings later because we've sent one too recently...
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][D][CN105:197]: will sendWantedSettings later because we've sent one too recently...
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][D][CN105:197]: will sendWantedSettings later because we've sent one too recently...
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][D][CN105:197]: will sendWantedSettings later because we've sent one too recently...
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][D][CN105:197]: will sendWantedSettings later because we've sent one too recently...
[12:37:01][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:01][D][CN105:197]: will sendWantedSettings later because we've sent one too recently...
[12:37:01][D][Header:091]: command: (61) data length: [10]<-- header
[12:37:01][D][READ:142]: FC 61 01 30 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5E 
[12:37:01][D][chkSum:077]: OK-> 5E=5E 
[12:37:01][I][CN105:284]: Last heatpump data update successful!
[12:37:01][I][CN105:289]: And it was a wantedSetting ACK!
[12:37:01][D][EVT_SETS:377]: WantedSettings update success
[12:37:01][I][CN105:562]: power or mode changed
[12:37:01][D][CN105:200]: setting action to -> 4
[12:37:01][D][CN105:248]: Climate mode is: 2
[12:37:01][D][CN105:249]: Climate action is: 4
[12:37:01][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:01][D][climate:399]:   Mode: COOL
[12:37:01][D][climate:401]:   Action: IDLE
[12:37:01][D][climate:404]:   Fan Mode: AUTO
[12:37:01][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:01][D][climate:419]:   Current Temperature: 24.00°C
[12:37:01][D][climate:425]:   Target Temperature: 23.00°C
[12:37:01][I][SETTINGS:085]: [current        ]-> [power: ON , target °C: 23.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING ]
[12:37:01][D][CN105:073]: Autoupdate is ON --> creating a loop for reccurent updates...
[12:37:01][D][CN105:074]: Programming update interval : 4000
[12:37:05][D][CONTROL_WANTED_SETTINGS:259]: buildAndSendRequestsInfoPackets() wantedSettings.hasChanged is false
[12:37:05][D][CN105:271]: buildAndSendRequestsInfoPackets: sending 3 request packet at interval: 300
[12:37:05][D][CN105:273]: sending a request for settings packet (0x02)
[12:37:05][D][CN105:315]: creating Info packet
[12:37:05][D][CN105:081]: writing packet...
[12:37:05][D][WRITE:142]: FC 42 01 30 10 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7B 
[12:37:05][D][CN105:073]: Autoupdate is ON --> creating a loop for reccurent updates...
[12:37:05][D][CN105:074]: Programming update interval : 4000
[12:37:05][D][Header:091]: command: (62) data length: [10]<-- header
[12:37:06][D][READ:142]: FC 62 01 30 10 02 00 00 01 03 04 00 00 00 00 8C B6 46 00 00 00 CB 
[12:37:06][D][chkSum:077]: OK-> CB=CB 
[12:37:06][D][Decoder:138]: [0x02 is settings]
[12:37:06][D][Decoder:145]: [Power : ON]
[12:37:06][D][Decoder:146]: [iSee  : 0]
[12:37:06][D][Decoder:147]: [Mode  : COOL]
[12:37:06][D][Decoder:154]: tempMode is true
[12:37:06][D][Decoder:159]: [Consigne °C: 27.000000]
[12:37:06][D][Decoder:162]: [Fan: AUTO]
[12:37:06][D][Decoder:165]: [Vane: AUTO]
[12:37:06][D][Decoder:174]: [wideVane: SWING (adj:1)]
[12:37:06][D][EVT_SETS:397]: Settings received
[12:37:06][I][SETTINGS:085]: [current        ]-> [power: ON , target °C: 23.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING ]
[12:37:06][I][EVT_SETS:059]: [wanted         ]-> [power: ON , target °C: 23.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING , hasChanged ? ->  NO, hasBeenSent ? ->  NO]
[12:37:06][D][CN105:200]: setting action to -> 4
[12:37:06][D][CN105:248]: Climate mode is: 2
[12:37:06][D][CN105:249]: Climate action is: 4
[12:37:06][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:06][D][climate:399]:   Mode: COOL
[12:37:06][D][climate:401]:   Action: IDLE
[12:37:06][D][climate:404]:   Fan Mode: AUTO
[12:37:06][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:06][D][climate:419]:   Current Temperature: 24.00°C
[12:37:06][D][climate:425]:   Target Temperature: 27.00°C
[12:37:06][I][SETTINGS:085]: [receivedIR     ]-> [power: ON , target °C: 27.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING ]
[12:37:06][I][CN105:021]: checkPendingWantedSettings - detected a change from IR Remote Control
[12:37:06][D][CN105:276]: sending a request room temp packet (0x03)
[12:37:06][D][CN105:315]: creating Info packet
[12:37:06][D][CN105:081]: writing packet...
[12:37:06][D][WRITE:142]: FC 42 01 30 10 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7A 
[12:37:06][D][Header:091]: command: (62) data length: [10]<-- header
[12:37:06][D][READ:142]: FC 62 01 30 10 03 00 00 0E 00 B8 B0 B0 FE 42 00 01 B8 B5 00 00 86 
[12:37:06][D][chkSum:077]: OK-> 86=86 
[12:37:06][D][Decoder:198]: [0x03 room temperature]
[12:37:06][D][Decoder:208]: [Room °C: 24.000000]
[12:37:06][I][STATUS:106]: [received       ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:06][I][STATUS:106]: [current        ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:06][D][CN105:200]: setting action to -> 4
[12:37:06][D][CN105:248]: Climate mode is: 2
[12:37:06][D][CN105:249]: Climate action is: 4
[12:37:06][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:06][D][climate:399]:   Mode: COOL
[12:37:06][D][climate:401]:   Action: IDLE
[12:37:06][D][climate:404]:   Fan Mode: AUTO
[12:37:06][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:06][D][climate:419]:   Current Temperature: 24.00°C
[12:37:06][D][climate:425]:   Target Temperature: 27.00°C
[12:37:06][D][sensor:093]: 'Compressor Frequency': Sending state 0.00000 Hz with 0 decimals of accuracy
[12:37:06][D][CN105:279]: sending a request status paquet (0x06)
[12:37:06][D][CN105:315]: creating Info packet
[12:37:06][D][CN105:081]: writing packet...
[12:37:06][D][WRITE:142]: FC 42 01 30 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 77 
[12:37:06][D][Header:091]: command: (62) data length: [10]<-- header
[12:37:06][D][READ:142]: FC 62 01 30 10 06 00 00 00 00 00 02 00 D7 00 00 42 00 00 00 00 3C 
[12:37:06][D][chkSum:077]: OK-> 3C=3C 
[12:37:06][D][Decoder:233]: [0x06 is status]
[12:37:06][I][STATUS:106]: [received       ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:06][I][STATUS:106]: [current        ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:06][D][CN105:200]: setting action to -> 4
[12:37:06][D][CN105:248]: Climate mode is: 2
[12:37:06][D][CN105:249]: Climate action is: 4
[12:37:06][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:06][D][climate:399]:   Mode: COOL
[12:37:06][D][climate:401]:   Action: IDLE
[12:37:06][D][climate:404]:   Fan Mode: AUTO
[12:37:06][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:06][D][climate:419]:   Current Temperature: 24.00°C
[12:37:06][D][climate:425]:   Target Temperature: 27.00°C
[12:37:06][D][sensor:093]: 'Compressor Frequency': Sending state 0.00000 Hz with 0 decimals of accuracy
[12:37:08][D][sensor:093]: 'office-heatpump WiFi Signal': Sending state -65.00000 dBm with 0 decimals of accuracy
[12:37:09][D][CONTROL_WANTED_SETTINGS:259]: buildAndSendRequestsInfoPackets() wantedSettings.hasChanged is false
[12:37:09][D][CN105:271]: buildAndSendRequestsInfoPackets: sending 3 request packet at interval: 300
[12:37:09][D][CN105:273]: sending a request for settings packet (0x02)
[12:37:09][D][CN105:315]: creating Info packet
[12:37:09][D][CN105:081]: writing packet...
[12:37:09][D][WRITE:142]: FC 42 01 30 10 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7B 
[12:37:09][D][CN105:073]: Autoupdate is ON --> creating a loop for reccurent updates...
[12:37:09][D][CN105:074]: Programming update interval : 4000
[12:37:09][D][Header:091]: command: (62) data length: [10]<-- header
[12:37:10][D][READ:142]: FC 62 01 30 10 02 00 00 01 03 04 00 00 00 00 8C B6 46 00 00 00 CB 
[12:37:10][D][chkSum:077]: OK-> CB=CB 
[12:37:10][D][Decoder:138]: [0x02 is settings]
[12:37:10][D][Decoder:145]: [Power : ON]
[12:37:10][D][Decoder:146]: [iSee  : 0]
[12:37:10][D][Decoder:147]: [Mode  : COOL]
[12:37:10][D][Decoder:154]: tempMode is true
[12:37:10][D][Decoder:159]: [Consigne °C: 27.000000]
[12:37:10][D][Decoder:162]: [Fan: AUTO]
[12:37:10][D][Decoder:165]: [Vane: AUTO]
[12:37:10][D][Decoder:174]: [wideVane: SWING (adj:1)]
[12:37:10][D][EVT_SETS:397]: Settings received
[12:37:10][D][CN105:276]: sending a request room temp packet (0x03)
[12:37:10][D][CN105:315]: creating Info packet
[12:37:10][D][CN105:081]: writing packet...
[12:37:10][D][WRITE:142]: FC 42 01 30 10 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7A 
[12:37:10][D][Header:091]: command: (62) data length: [10]<-- header
[12:37:10][D][READ:142]: FC 62 01 30 10 03 00 00 0E 00 B8 B0 B0 FE 42 00 01 B8 B5 00 00 86 
[12:37:10][D][chkSum:077]: OK-> 86=86 
[12:37:10][D][Decoder:198]: [0x03 room temperature]
[12:37:10][D][Decoder:208]: [Room °C: 24.000000]
[12:37:10][I][STATUS:106]: [received       ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:10][I][STATUS:106]: [current        ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:10][D][CN105:200]: setting action to -> 4
[12:37:10][D][CN105:248]: Climate mode is: 2
[12:37:10][D][CN105:249]: Climate action is: 4
[12:37:10][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:10][D][climate:399]:   Mode: COOL
[12:37:10][D][climate:401]:   Action: IDLE
[12:37:10][D][climate:404]:   Fan Mode: AUTO
[12:37:10][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:10][D][climate:419]:   Current Temperature: 24.00°C
[12:37:10][D][climate:425]:   Target Temperature: 27.00°C
[12:37:10][D][sensor:093]: 'Compressor Frequency': Sending state 0.00000 Hz with 0 decimals of accuracy
[12:37:10][D][CN105:279]: sending a request status paquet (0x06)
[12:37:10][D][CN105:315]: creating Info packet
[12:37:10][D][CN105:081]: writing packet...
[12:37:10][D][WRITE:142]: FC 42 01 30 10 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 77 
[12:37:10][D][Header:091]: command: (62) data length: [10]<-- header
[12:37:10][D][READ:142]: FC 62 01 30 10 06 00 00 00 00 00 02 00 D7 00 00 42 00 00 00 00 3C 
[12:37:10][D][chkSum:077]: OK-> 3C=3C 
[12:37:10][D][Decoder:233]: [0x06 is status]
[12:37:10][I][STATUS:106]: [received       ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:10][I][STATUS:106]: [current        ]-> [room C°: 24.0, operating: NO , compressor freq:  0 Hz]
[12:37:10][D][CN105:200]: setting action to -> 4
[12:37:10][D][CN105:248]: Climate mode is: 2
[12:37:10][D][CN105:249]: Climate action is: 4
[12:37:10][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:10][D][climate:399]:   Mode: COOL
[12:37:10][D][climate:401]:   Action: IDLE
[12:37:10][D][climate:404]:   Fan Mode: AUTO
[12:37:10][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:10][D][climate:419]:   Current Temperature: 24.00°C
[12:37:10][D][climate:425]:   Target Temperature: 27.00°C
[12:37:10][D][sensor:093]: 'Compressor Frequency': Sending state 0.00000 Hz with 0 decimals of accuracy
[12:37:13][D][climate:011]: 'Office Heat Pump' - Setting
[12:37:13][D][climate:040]:   Target Temperature: 23.00
[12:37:13][D][control:037]: espHome control() interface method called...
[12:37:13][I][control:050]: Setting heatpump setpoint : 23.0
[12:37:13][D][EVT_SETS:074]: clim.control() -> User changed something...
[12:37:13][I][EVT_SETS:059]: [control (wantedSettings)]-> [power: ON , target °C: 23.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING , hasChanged ? -> YES, hasBeenSent ? ->  NO]
[12:37:13][D][CN105:016]: checkPendingWantedSettings - wanted settings have changed, sending them to the heatpump...
[12:37:13][I][CN105:162]: sending wantedSettings..
[12:37:13][I][EVT_SETS:059]: [wantedSettings ]-> [power: ON , target °C: 23.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING , hasChanged ? -> YES, hasBeenSent ? -> YES]
[12:37:13][D][CN105:167]: cancelling the update loop during the push of the settings..
[12:37:13][D][CN105:102]: checking differences bw asked settings and current ones...
[12:37:13][D][CN105:107]: power is always set -> ON
[12:37:13][D][CN105:113]: heatpump mode changed -> COOL
[12:37:13][D][CN105:124]: temperature changed (tempmode is true) -> 23.000000
[12:37:13][D][CN105:131]: heatpump fan changed -> AUTO
[12:37:13][D][CN105:137]: heatpump vane changed -> AUTO
[12:37:13][D][CN105:081]: writing packet...
[12:37:13][D][WRITE:142]: FC 41 01 30 10 01 1F 00 01 03 00 00 00 00 00 00 00 00 00 AE 00 AC 
[12:37:13][D][WRITE_SETTINGS:142]: FC 41 01 30 10 01 1F 00 01 03 00 00 00 00 00 00 00 00 00 AE 00 AC 
[12:37:13][D][Header:091]: command: (61) data length: [10]<-- header
[12:37:13][D][READ:142]: FC 61 01 30 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5E 
[12:37:13][D][chkSum:077]: OK-> 5E=5E 
[12:37:13][I][CN105:284]: Last heatpump data update successful!
[12:37:13][I][CN105:289]: And it was a wantedSetting ACK!
[12:37:13][D][EVT_SETS:377]: WantedSettings update success
[12:37:13][D][CN105:200]: setting action to -> 4
[12:37:13][D][CN105:248]: Climate mode is: 2
[12:37:13][D][CN105:249]: Climate action is: 4
[12:37:13][D][climate:396]: 'Office Heat Pump' - Sending state:
[12:37:13][D][climate:399]:   Mode: COOL
[12:37:13][D][climate:401]:   Action: IDLE
[12:37:13][D][climate:404]:   Fan Mode: AUTO
[12:37:13][D][climate:416]:   Swing Mode: HORIZONTAL
[12:37:13][D][climate:419]:   Current Temperature: 24.00°C
[12:37:13][D][climate:425]:   Target Temperature: 23.00°C
[12:37:13][I][SETTINGS:085]: [current        ]-> [power: ON , target °C: 23.000000, mode: COOL  , fan: AUTO  , vane: AUTO  , wvane: SWING ]

Expected Behavior:
The heat pump should set the target temperature to 23°C immediately upon setting the mode to cool without requiring a second command.

Actual Behavior:
The target temperature initially remains at an incorrect setting (27°C) until the command is sent again, after which it correctly updates to 23°C.

Steps to Reproduce:
Set the heat pump to cool mode with a target temperature of 23°C through the Home Assistant interface.
Observe that the target temperature does not apply until the command is issued a second time.

Thanks for this nice feedback.
I'll have a look.

Thank you for the lovelace-climate-mode-entity-row tip, I didn't know this one.
So I installed it and test your scenario on both of my units, one is esp32 the other is esp8266. And it works fine. I mean, no problem with setting both the power ON and the temperature.
But I've had the idea to test the "mqtt pathway". Because I have a MQTT section in my climates yaml configuration. Do you have one too?
What I found is that I can reproduce the exact same behavior when lovelace-climate-mode-entity-row points to the MQTT entity.
Of course it doesn't mean this is not an issue but a MQTT control one...
If it is your case please test with a reference of you unit through the esphome integration.
If not, I will have to dig more...

I'll try and do some more structured testing later today and see what I can find.
Not using MQTT, but I do have an external temperature sensor for this one (although I have others without external temperature sensors and I get the same behaviour).

substitutions:
  name: "kitchen-heatpump"
  friendly_name: Kitchen Heat Pump

esphome:
  name: ${name}

esp8266:
  board: d1_mini

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

captive_portal:

external_components:
  - source: github://echavet/MitsubishiCN105ESPHome

uart:
  id: HP_UART
  baud_rate: 2400
  tx_pin: 1
  rx_pin: 3

climate:
  - platform: cn105
    name: ${friendly_name}
    id: kithp
    update_interval: 4s
    remote_temperature_timeout: 30min

logger:
  baud_rate: 0

web_server:
  port: 80

time:
  - platform: homeassistant
    id: homeassistant_time

text_sensor:
  - platform: version
    name: ${name} ESPHome Version
  - platform: wifi_info
    ip_address:
      name: ${name} IP
    ssid:
      name: ${name} SSID
    bssid:
      name: ${name} BSSID

sensor:
  - platform: uptime
    name: ${name} Uptime
  - platform: wifi_signal
    name: ${name} WiFi Signal
    update_interval: 60s
  # External Temperature Sensor
  - platform: homeassistant
    name: "'AG One' Temperature Sensor From Home Assistant"
    entity_id: sensor.ag_one_temperature
    on_value:
      then:
        - lambda: 'id(kithp).set_remote_temperature(x);'

Thanks for all that.
I know what's happening. It is a real bug. Requests are coming very closed to each others because the lovelace-climate-mode-entity-row component in the setMode() method line 113, is calling this._hass.callService("climate", ...) as many times as there are settings assigned to a button. So the my climate control() method is called as many times in a short period.
It would have been simpler if a service was available to send all the settings in one call.
However my component shouldn't loose any of these settings. But it does!!
So I'm gonna work on this and come back to you.
Sorry for the issue!

Thank you for the lovelace-climate-mode-entity-row tip, I didn't know this one.

I haven't been able to codify a complete set and forget model for what I want the heat pumps to do, so little buttons are nice to have:

image

Sorry for the issue!

Don't be! It's awesome to have someone actively developing for this. I was excited to tap into the compressor data, but my units don't seem to send anything.

Indoor <> Outdoor
MSZ-AP35VGD <> MUZ-AP35VG
MSZ-AP60VGD <> MUZ-AP60VG
MSZ-AP25VGD (x4) <> MXZ-4F80VGD
MSZ-AP71VGD <> MUZ-AP71VG

Yes it's a nice interface.
It would be nice to have the cool or the heat but not both depending on the season.

I was excited to tap into the compressor data, but my units don't seem to send anything.

It seems to have a lot of units not supporting the compressor data.
I think swicago libraries has been developed with a reverse engineering of a regular WiFi module.
There might be slight differences between different unit ref.
Having said that, I don't see data in your logs because the unit is always OFF. But I see in your configuration that you did not define the option for the compressor sensor to be advertise. I don't want to give you false hopes as it looks like you don't have the up to date version that featured this change, but for the last version, you now have to define a compressor_frequency_sensor section in the climate component.

climate:
  - platform: cn105  
    name: ${friendly_name}
    id: "esp32_clim"
    compressor_frequency_sensor:
      name: Compressor frequency (clim Sejour)    
    vertical_vane_select:
      name: Orientation de la Vane Verticale
    horizontal_vane_select:
      name: Orientation de la Vane Horizontale
    isee_sensor:
      name: ISEE Sensor
    remote_temperature_timeout: 30min
    update_interval: 10s         # shouldn't be less

if you want to be sure to compile the last head sources each time you build the firmware, you also have to add the
refresh: 0s option in the external_components: section.

I've just committed a correction to address this issue.
A new parameter can be customized is debounce_delay. It prevent multiple wantedSettings from being sent if control method is called too many times in a short delay.
By default the delay is set to 400ms.

Configuration example:

uart:
  id: HP_UART
  baud_rate: 2400
  tx_pin: GPIO17
  rx_pin: GPIO16

climate:
  - platform: cn105  
    name: ${friendly_name}
    id: "esp32_clim"
    compressor_frequency_sensor:
      name: Compressor frequency (clim Sejour)    
    vertical_vane_select:
      name: Orientation de la Vane Verticale
    horizontal_vane_select:
      name: Orientation de la Vane Horizontale
    isee_sensor:
      name: ISEE Sensor
    remote_temperature_timeout: 5min
    update_interval: 1s         # shouldn't be less than 1 second
    debounce_delay : 500ms       # delay to prevent bouncing 

Brilliant - I recompiled without modifying my config and the default debounce delay seems to have done the trick.
I'll refresh the rest of my heat pumps and see if it's working as expected over the next couple of days.

Regarding the compressor reporting - whether or not I define the sensor in the configuration, I still get 0hz reported, so I'm assuming my models aren't compatible.

[17:21:26][I][STATUS:106]: [received ]-> [room C°: 25.5, operating: NO , compressor freq: 0 Hz]
[17:21:26][I][STATUS:106]: [current ]-> [room C°: 25.0, operating: NO , compressor freq: 0 Hz]
[17:21:26][D][sensor:093]: 'Compressor frequency (Office)': Sending state 0.00000 Hz with 0 decimals of accuracy
[17:22:02][I][STATUS:106]: [received ]-> [room C°: 25.5, operating: YES, compressor freq: 0 Hz]
[17:22:02][I][STATUS:106]: [current ]-> [room C°: 25.5, operating: NO , compressor freq: 0 Hz]
[17:22:02][D][sensor:093]: 'Compressor frequency (Office)': Sending state 0.00000 Hz with 0 decimals of accuracy
[17:22:41][I][STATUS:106]: [received ]-> [room C°: 25.0, operating: YES, compressor freq: 0 Hz]
[17:22:41][I][STATUS:106]: [current ]-> [room C°: 25.5, operating: YES, compressor freq: 0 Hz]
[17:22:41][D][sensor:093]: 'Compressor frequency (Office)': Sending state 0.00000 Hz with 0 decimals of accuracy

Yes SwiCago lib gets the data from the packet whether the feature is supported or not.
Defining the sensor or not only advertises a compressor frequency Homeassistant sensor or not.
But you will still see the info in the logs.
At the end we are supposed to set the logs off, for production purposes.