MindrustUK / Heatmiser-for-home-assistant

Heatmiser Neo-Hub / Neostat support for home-assistant.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bug: Climate state set to "Off" when using Hold feature.

Plawasan opened this issue · comments

I'm raising this here while I'm debating myself if this is an issue with Heatmiser or Powercalc..

I am using the Powercalc integration to create virtual power usage sensor for my floors - in principle it all works as expected, with one exception - when using the hold function on the thermostat then the heatmiser climate entity reports the following status:

image

Notice that hvac_action attribute is set to "heating" however the overall state of the entity is "off".

This then causes an issue downstream in Powercalc, which is configured to look for the state of the attribute however it apparently also checks the state of the entity itself before it sets the power value:

powercalc:
  sensors:
    - entity_id: climate.living_room
      fixed:
        states_power:
          hvac_action|heating: 3100

I tested this by forcing the entity state (from "off" to "heat") and that gave me the expected result.

So my question is - should Heatmiser set the climate entity to "heat" when using hold or should powercalc ignore the overall state of the entity and only consider the attribute?

An interesting question, I haven't investigated yet. Off the top of my head, I could take a guess that state and operation are not being correlated in a meaningful way. I'm in the process of overhauling much of the current plugin. I'll add this to my list to investigate. No promises on a time frame. I have a suspicion someone has mentioned something similar with regards to cooling before.

I don't know if this is quite right, but 'off' is actually 'standby' in Heatmiser world and 'hold' is not presently implemented as an HVAC preset 'boost'(I think this was raised in my boost/hold thread). As it stands, the hvac preset (mode) is reflective of what it will go back to once the hold is released.

Don't know if that helps.

This should now be addressed as part of the refactor of this plugin, please test the dev version here: https://github.com/MindrustUK/Heatmiser-for-home-assistant/tree/dev and provide feedback.

Sorry, took me a while to get to testing it... Dev version installed but doesn't seem to make a difference for me:

I've set hold time for 5 minutes (btw I had to set hours to 0 otherwise I was getting an error when I tried to use the Hold switch), the floor heating came on, I can see the timer running on the wall display (and in the device entity) however the climate entity status never changes from "Off"

image

image

@Plawasan Very interesting... Thanks for the report.

RE: Setting 0 hours, this is a known issue, I'm still considering how to best deal with the hold hours / minutes, noted regardless. Thanks for calling this out.

You should only really ever see "Heat" rather than "Off", "Off" should only appear if the Thermostat is in standby / frost mode.

  • Can you confirm if you're running the NeoStat V2 in Standby mode?
  • Also can you post the output of: printf '{"INFO":0}\0' | nc IP.ADDRESS.HERE 4242 for further diagnosis. (Please ensure the data is scrubbed to avoid any information you do not wish to make public).

a, Heatmiser App says neoStat V2, fw v33. (neohub fw v2199), in standby mode
b, here's the device I'm testing with, the rest look effectively identical (let me know if you need to see all of them (8)

{
   "devices":[
      {
         "AWAY":false,
         "COOLING":false,
         "COOLING_ENABLED":false,
         "COOLING_TEMPERATURE_IN_WHOLE_DEGREES":127,
         "COOL_INP":false,
         "COUNT_DOWN_TIME":"0:00",
         "CRADLE_PAIRED_TO_REMOTE_SENSOR":false,
         "CRADLE_PAIRED_TO_STAT":false,
         "CURRENT_FLOOR_TEMPERATURE":25,
         "CURRENT_SET_TEMPERATURE":"12.0",
         "CURRENT_TEMPERATURE":"25.5",
         "DEMAND":false,
         "DEVICE_TYPE":12,
         "ENABLE_BOILER":false,
         "ENABLE_COOLING":false,
         "ENABLE_PUMP":false,
         "ENABLE_VALVE":false,
         "ENABLE_ZONE":false,
         "FAILSAFE_STATE":false,
         "FAIL_SAFE_ENABLED":false,
         "FLOOR_LIMIT":false,
         "FULL/PARTIAL_LOCK_AVAILABLE":false,
         "HEAT/COOL_MODE":false,
         "HEATING":false,
         "HOLD_TEMPERATURE":29,
         "HOLD_TIME":"0:00",
         "HOLIDAY":false,
         "HOLIDAY_DAYS":0,
         "HUMIDITY":0,
         "LOCK":false,
         "LOCK_PIN_NUMBER":"xxxx",
         "LOW_BATTERY":false,
         "MAX_TEMPERATURE":"27.0",
         "MIN_TEMPERATURE":"22.0",
         "MODULATION_LEVEL":0,
         "NEXT_ON_TIME":"255 days 255:255",
         "OFFLINE":false,
         "OUPUT_DELAY":false,
         "OUTPUT_DELAY":0,
         "PREHEAT":false,
         "PREHEAT_TIME":"255:255",
         "PROGRAM_MODE":"5DAY/2DAY",
         "PUMP_DELAY":false,
         "RADIATORS_OR_UNDERFLOOR":false,
         "SENSOR_SELECTION":"FLOOR_SENSOR_ONLY",
         "SET_COUNTDOWN_TIME":0,
         "STANDBY":true,
         "STAT_MODE":{
            "4_HEAT_LEVELS":true,
            "MANUAL_OFF":true,
            "THERMOSTAT":true
         },
         "TEMPERATURE_FORMAT":false,
         "TEMP_HOLD":false,
         "TIMECLOCK_MODE":false,
         "TIMER":false,
         "TIME_CLOCK_OVERIDE_BIT":false,
         "ULTRA_VERSION":0,
         "VERSION_NUMBER":33,
         "WRITE_COUNT":6,
         "ZONE_1PAIRED_TO_MULTILINK":true,
         "ZONE_1_OR_2":false,
         "ZONE_2_PAIRED_TO_MULTILINK":false,
         "device":"Living Room"
      }
   ]
}

This is all as expected, the device is 'Off' as it's in Standby which maps to HVACMode.OFF

Documentation on HVAC_MODES and HVAC_ACTIONS can be found here: https://developers.home-assistant.io/docs/core/entity/climate/

Heatmiser's implementation of Standby / Frost de-rails the intended behavior that Home Assistant, as it expects as standby should be a true standby where the Thermostat is inactive rather than still able to take action on commands.

Going back to your original question, you could ignore the hvac_mode and evaluate only the hvac_action for your use case.