Thermostat card not transitioning to single temp mode

So I’ve built my own thermostat - D1 mini based, and am using MQTT to integrate with the Thermostat Card. Have it working 95%, but am struggling with one issue:

When in Auto mode it shows the correct upper and lower temperatures on the display - and works perfectly, but when I change over to Heat or Cool mode it refuses to change to a single temperature setting. I still have two points on the dial, and two numeric temps inside the dial. The modes change correctly too.

Additionally, if I start up HA and the thermostat in a single mode - ‘heat’ or ‘cool’, I get the single temp control and proper setting, and hte card is using the proper topic …but as soon as I transition it to ‘heat_cool’ mode it corrently changes to the dual temp setting mode - also correctly. BUT, it won’t change back when ‘heat’ or ‘cool’ is selected.

I think I have the proper climate config in place for it, but am at a loss here. I’m sure I am missing something stupid, but am stuck. Here’s the climate config:

mqtt:
  climate:
    - name: Upstairs
      qos: 1
      min_temp: 55
      max_temp: 90
      modes: ["heat_cool","off","cool","heat","fan_only"]
      mode_command_topic: "PTherm/2/Action"
      mode_state_topic: "PTherm/2/notify"
      mode_state_template: "{{ value_json.S }}"
      action_topic: "PTherm/2/notify"
      action_template: "{{ value_json.M }}"
      temperature_high_state_topic: "PTherm/2/notify"
      temperature_high_state_template: "{{ value_json.temps.rmax }}"
      temperature_low_state_topic: "PTherm/2/notify"
      temperature_low_state_template: "{{ value_json.temps.rmin }}"
      temperature_low_command_topic: "PTherm/2/minTempSet"
      temperature_high_command_topic: "PTherm/2/maxTempSet"
      preset_mode_state_topic: "PTherm/2/notify"
      preset_mode_value_template: '{{ value_json.O }}' 
      preset_mode_command_topic: "PTherm/2/mode"
      preset_modes: ["Away","Home","Sleep"]
      current_temperature_topic: "PTherm/2/notify"
      current_temperature_template: "{{ value_json.T }}"
      temperature_command_topic: "PTherm/2/tempset"
      temperature_state_topic: "PTherm/2/notify"
      temperature_state_template: "{{ value_json.temps.man }}"

Hi! I’m observing the same behavior with my custom thermostat I set up in ESPHome. Did you manage to solve this somehow?

Nope. Moved on to other things. I am going to look at it again now that the control has been updating. Not expecting anything, but hey…

I know the issue is with the yaml cfg, and the docs are not terribly clear. Is yours close? …at least in terms of params used?

My understanding of MQTT is bery limited, but could it be that in your case it works correctly after restart because it doesn’t yet “know” that your thermostat is dual point? Only once the mode is activated it recognizes it as such and thats why you have this behaviour?
In my case it’s always dual point, even after restart.

Comparing YAML will not tell us much, since the thermostats are setup in different integrations. Nonetheless, you’ll find it below.

It feels to me like this is a feature request for the frontend - an option to hide not applicable setpoint.
There might be custom cards with this feature already. It’s a pity, considering how nice the new built in cards look

ESPHome config YAML
climate:
  - platform: thermostat
    id: espthermostat
    name: "Thermostat Climate Controller"
    sensor: temperature
    min_cooling_off_time: 3s
    min_cooling_run_time: 3s 
    min_heating_off_time: 3s
    min_heating_run_time: 3s
    min_idle_time: 3s
    cool_deadband: 0.3
    heat_deadband: 0.3
    cool_overrun: 0.3
    heat_overrun: 0.3

    cool_action:
      - switch.turn_on: group_1
      - switch.turn_on: valve_cold
      - script.execute: recirculate
    heat_action:
      - switch.turn_on: group_1
      - script.execute: recirculate
      - if:
          condition:
            switch.is_on: allow_run
          then:
            - switch.turn_on: valve_hot
    idle_action:
      - switch.turn_off: group_1
      - switch.turn_off: valve_hot
      - switch.turn_off: valve_cold
    preset:
      - name: home
        default_target_temperature_low: 20.5
        default_target_temperature_high: 26

I probably did not phrase that right. It’s a combination of using the correct topics (defined in yaml) and in how those are used in real time over MQTT. I agree that the problem is likely what is expected and when in terms of MQTT messages, but that is just not in any of the docs I could find. I would have assumed that having my thermostat notify the change in mode from auto to heat or heat to auto would be the trigger, but that does not seem to be the case.
Oh well… I’m gonna try to get back to it this weekend.

I also created a thermostat in ESPhome and I use the Home Assistant API and I have the same issue. Dual Point Thermostats always show low and high temp settings, even when choosing just to heat or just cool. Hoping someone finds a fix for this.

Adding myself to this issue. All my heat only or cool only Bang Bangs from EspHome devices are all showing with a dual point (Heat and Cool) in the new HA thermostat card.

Still nothing?