Honeywell T6 (Zwave) - Filter Monitor

As reported in Z-Wave JS - HA x86_64 version with Zooz ZST10_700 series (FW 7.18.3):
Core 2024.1.3
Supervisor 2023.12.1
Operating System 11.4
Frontend 20240104.0

Thermostat Info (Honeywell T6):
Model: TH6320ZW
Firmware: v1.3

I have had this thermostat about 1.25 years now…no problems. I got rid of my old Honeywell RTH9580WF (WiFi ColorTouch model) - as I wanted everything out of the hands of Lando (no ‘cloud’). It has been great, and with some help from the forums I am able to track when it is on/off for Heat and AC - kinda cool.

I know very little about creating cards, but here goes:

I know this one has a FILTER Notify icon which displays (and you can set when it triggers) - all of this can be changed in the Z-Wave JS add-on in HA. I have a nice card in HA (below) - and wanna know if there is anyway to have the Filter Replace Reminder (when it is triggered on the Thermostat) to show on the Thermostat card?

Seems that this thing has like 469 Entities it can view/control, etc.

image

If you click the hamburger, you - it will show the Humidity - would love to see that on the base card too.

If you need anything - please let me know…and thank you.

Check the available entities for the device, including disabled ones. If there is nothing relevant then it’s doubtful you can access it, AFAIK the device doesn’t communicate any filter notifications via Z-Wave. According to the ZWA DB, it only supports Power Management notifications. You can post a copy of the device diagnostic file (or use a pastebin site) if you’d like further validation. Also, you can check driver debug logs to see if it produces any other notifications via Z-Wave.

See also:

I have a couple T6s, you can configure the Air Filter replacement parameters but there appears to be no way to get the notification.

I’ve disabled these on the thermostat and instead use this package to track the filter life,

homeassistant:
  customize:
    sensor.um_hvac_uv_uv_usage:
      unit_of_measurement: hours

input_number:
  um_hvac_uv_filter_life:
    min: 0
    max: 50000
    step: 1
    unit_of_measurement: hours
    mode: box

input_button:
   um_hvac_uv_filter_reset:
     name: um_hvac_uv_filter_reset


template:
  - trigger:
      - platform: time_pattern
        minutes: "/1"
    sensor:
      - name: um_hvac_uv_per_hour
        unit_of_measurement: hours
        state: >-
          {{ iif(is_state("switch.hvac_uv","on"),1,0) }}
        attributes:
          triggered_at: "{{ now().hour }}"
  - sensor: 
      - name: um_hvac_uv_filter_life
        unit_of_measurement: "%"
        state: "{{ (((1.0 - ( states('sensor.um_hvac_uv_uv_running')|float(0) / states('input_number.um_hvac_uv_filter_life')|float(0) )))*100.0)|round(1) }}"

sensor:
  - platform: integration
    source: sensor.um_hvac_uv_per_hour
    name: um_hvac_uv_uv_usage
    unit_time: h
    method: left
    round: 2

utility_meter:
  um_hvac_uv_uv_running:
    source: sensor.um_hvac_uv_uv_usage

recorder:
  include:
    entities:
      - sensor.um_hvac_uv_uv_running
      - sensor.um_hvac_uv_uv_usage
      - sensor.um_hvac_uv_per_hour
      - input_number.um_hvac_uv_filter_life
      - input_button.um_hvac_uv_filter_reset
      - sensor.um_hvac_uv_filter_life

Automation

- id: reset um_hvac_uv filter
  alias: reset um_hvac_uv filter
  description: ""
  mode: single
  trigger:
    - platform: state
      entity_id: input_button.um_hvac_uv_filter_reset
  action:
    - service: utility_meter.calibrate
      data:
        value: "0"
      target:
        entity_id: sensor.um_hvac_uv_uv_running
        

2 Likes

Pete,

This looks very interesting. I will have to look through that code. One thing that jumps out at first is that I do not have UV or HUMIDIFIER on my home system.

I do have some code that someone had helped me setup to give me the following graph (strange - the colors have changed):

I wish I had a different graph of this…but it is what it is.

Here is the code it uses (it is in my sensors.yaml file):

  - platform: history_stats
    name: Furnace On Today
    entity_id: sensor.thermostat_hvac_action
    state: "heating"
    type: time
    start: "{{ today_at('00:00') }}"
    end: "{{ now() }}"

  - platform: history_stats
    name: AC On Today
    entity_id: sensor.thermostat_hvac_action
    state: "cooling"
    type: time
    start: "{{ today_at('00:00') }}"
    end: "{{ now() }}"

and this is from the templates.yaml file):

- sensor:
    - name: HVAC Action
      unique_id: thermostat-hvac-action
      icon: mdi:thermometer
      state: "{{ state_attr('climate.thermostat', 'hvac_action') }}"

The name UV is not important. Replace that with whatever you want to call it.

Basically it accumulates the number or hours that something is happening. For your application you want to accumulate the number of hours that the hvac_action is not idle or off, to determine when to change the filter

By Golly-gee-whiz…I think I remembered some things… LOL

I added the key parts - and changed the names for most of them, and look what I see now:

Need to do a little more digging and see how I get it to do days and a reset/reminder perhaps when I am at 90 days. And create a dashboard for the values and button.

Thank You for the share - and the code. Much appreciated.

Can you tell me where you put all of these?

I am still not getting any valid data for a couple of them. Also he HACS integration “The Watchman” is giving me all kinds of errors that things are missing or invalid.

I cleared out all entries that I made from your code - and pasted it into the bottom of my configuration.yaml file, and restarted HA. Getting even less information now.

:frowning:

You’ll need to post your configuration,yaml for me to see what you did wrong.

More than willing to post that for you. However, my configuration.yaml file is very clean. I use lots of !include statements to break out the various parts into separate .yaml files. When I cleaned out the other .yaml files (as I # (comment) any addition put into a .,yaml file) - and pasted all of your lines into the configuration.yaml file - lots of errors appeared for duplicate key {see image} - started moving your pieces (not changing names or anything in the seperate .yaml files, and got it down to one sensor I cannot seem to get to work.

Also - I have another template/sensor combo which now seems to have stopped working where HA was tracking when the thermostat was wither ‘heating’ or ‘cooling’ and ‘idle’. Do not understand that one yet. I was using that to provide historical heating/cooking gauge.

Still trying to figure out how to put a NOT EQUAL process into .yaml … nothing I have researched seems to work to capture when the thermostat is “Not Idle” - which is why I had the sensors capturing when the thermostat was ‘heating’ or ‘cooling’. :frowning:

Any suggestions you have are appreciated - even willing to move this to email or chat, if you want to .

This is the only one that I cannot seem to get a value or anything to show for it:

These lines are in the configuration.yaml file:

input_number:
  um_hvac_uv_filter_life:
    min: 0
    max: 50000
    step: 1
    unit_of_measurement: hours
    mode: box

and these lines are in the templates.yaml file:

- trigger:
      - platform: time_pattern
        minutes: "/1"
  sensor:
      - name: um_hvac_uv_per_hour
        unit_of_measurement: hours
        state: >-
          {{ iif(is_state("sensor.thermostat_hvac_action","heating"),1,0) }}
        attributes:
          triggered_at: "{{ now().hour }}"

- sensor: 
    - name: um_hvac_uv_filter_life
      unit_of_measurement: "%"
      state: "{{ (((1.0 - ( states('sensor.um_hvac_uv_uv_running')|float(0) / states('input_number.um_hvac_uv_filter_life')|float(0) )))*100.0)|round(1) }}"

I had to modify this part of your code:

        state: >-
          {{ iif(is_state("sensor.thermostat_hvac_action","heating"),1,0) }}
        attributes:
          triggered_at: "{{ now().hour }}"

as I do not have anything like what you had to track state on/off:
(from your original code) – did you create something which gave you the switch.hvac_uv

        state: >-
          {{ iif(is_state("switch.hvac_uv","on"),1,0) }}
        attributes:
          triggered_at: "{{ now().hour }}"

Here is a view of anything um_hvac - notice the only ‘unavailable’ one. I have tested the 'RESET" automation and if I run it the ‘filter_reset’ will show date and time that I ran it.

Looks like you are missing these elements?

Sorry…forgot to post those. They are in these .yaml files sensors.yaml and configuration.yaml:

As you can see here - the “Utility Meter” is collecting data:

…and depending on when you look at it the sensor.um_hvac_uv_per_hour is either a 0 or a 1.

Check the value of the last posting of the values…for this one it shows “triggered_at: 12” - so it has changed, to now show 16 - guessing as it is after the 16:00 hour, but before 17:00 hour.

To get the filter life calculation working, you’ll need to enter a value into the input_number for how long you expect the filter to last in hours. Right now that value is zero, so the calculation is doing a divide by zero (e.g. run_time / filter_life)

Yeah – I was getting that - but is not this set here?

image

Those values are from your code - no alteration. I have tried adjusting the 50000 to be 90 days (i.e., 9120 hours) made no difference. Have tried other values just to see if I can get anything to change. I have tried 12, 24, 48, 96 - none of them made a difference. It is currently 730 (which is 30 days).

Looking at the code - I cannot think of any other place I need to set something. Do you perhaps have a ‘Helper’ created that you forgot to mention?

As you can see - there is only one value which always says ‘unavailable’ - also odd that input_number.um_hvac_uv_filter_life and sensor.um_hvac_uv_per_hour also never change from 0.

@PeteRage,

OK - Your comment made me re-think. I manually added a value to ‘filter_life’ (I put in 9120 - 90 days), and then waited for the heat to come on and off again. I guess I was thinking that ‘value’ was on that changed. It did not. Then I noticed that the % of filter_life was now showing 100 - not 0.0. OUILA – “Light Bulb” That 9120 value was needed by me.

Now I think I understand how all this works. See, enough hammering - and I get it. :slight_smile:

OK – I think I finally got it. Got a dashboard panel created - still trying to decide how I want to name them.

image

This one still confounds me sensor.um_hvac_uv_uv_usage - as it appears to a cumulative total - but not sure how to rest it (if I wanted to). Also may play at some point to make this into ‘days’ not hours.

Gonna need to find a way to track ‘idle’ vs. ‘not-idle’ (or in my case “heating” and “cooling”) - to be an actual track of furnace/AC on time (my home they are basically one unit).

:trophy: Thanks again for the insight, and wisdom. I do truly appreciate the time.

Glad you got it. Big learning curve with HA and there are alot of components involved in this solution.

Yes it will increase forever. There is no easy way to reset it

You can add an “or” condition into the template to check for cooling. So if the hvac_action is heating or cooling it will increment. If you turn the thermostat off - the hvac_action should go to off instead of idle. Hence checking for the specific conditions (heating and cooling) will wok better. It could also go unavailable if there is a communication problem or zwave goes offline.

1 Like

Thanks…did not realize that ‘or’ would work. I have changed to the following…guess I see if it works. YAML checking in HA gave “green”.

- trigger:
    - platform: time_pattern
      minutes: /1
  sensor:
    - name: um_hvac_uv_per_hour
      unit_of_measurement: hours
      state: '{{ iif(is_state("sensor.thermostat_hvac_action","heating" or "cooling"),1,0) }}'
      attributes:
        triggered_at: '{{ now().hour }}'

Thanks again for the assistance.

A good place to test templates is in developers tools / templates

1 Like

Yes - learned that trick when I was setting up the other HVAC ‘Run Time’ stuff.

image

Thanks again for all you help.