Scheduling HVAC filter and service reminders from thermostat runtime?

Hi all, I’m Emily. I’m with HVAC Pro Solutions, a heating and cooling company on Long Island, New York, and on the [HVAC maintenance visits](https://www.hvacprosolutionsny.com/) we do, the most common problem we see is missed filter changes and skipped spring/fall tune-ups.

I’m curious how openHAB users handle this. Has anyone set up a rule that tracks furnace or heat pump runtime from a smart thermostat (ecobee, Nest, Z-Wave, etc.) and sends a reminder after a set number of run hours, say every 1-3 months for filters, plus a seasonal reminder for a professional service visit?

Would love to see how you structured the items and rules, and whether runtime-based reminders worked better for you than plain calendar dates. Thanks!

There are sure to be more complicated solutions. I just use a cron to turn a switch item ON. Then deal with that. Personally, I group all items (if any ON) of this type (6-7) and have the widget on the overview page.

rule "Furnace Filter Replacement"
when
    Time cron "0 0 9 20 3,6,9,12 * *"
then
    Furnace_Filter_Replace.sendCommand(ON)
end

I once worked with someone who tried to build a whole HVAC monitoring system using OH which included all to that sort of thing. It never really went anywhere. It was for OH 2 and I’m not 100% certain I still have any of that code but even if I did it probably wouldn’t be all that useful these days.

Exactly how to track the runtime of the furnace is largely going to depend on how that information gets into OH in the first place. It would be so great if the runtimes were tracked by the thermostats themselves but I know of none that do. So you need to have when the device turns on or off and either use persistence to calculate the runtime for the day or week or whatever based on saved data in the database or keep a running total as the furnace turns on or off. For example (javascript, assumes triggered by a Switch that changes as the HVAC turns ON and OFF):

if(event.newState == "ON") cache.private.put("hvacOnStart", time.toZDT());
else if(event.newState == "OFF") {
  const startTime = cache.private.get("hvacOnStart");
  if(startTime === null) {
    console.error("HVAC changed to OFF but we don't have the ON timestamp!");
    return;
  }
  const runtime = time.Duration.between(startTime, time.toZDT());
  const totalRuntime = items.HVACRuntime.quantityState.addition(runtime.seconds(), 's');
  items.HVACRuntime.postUpdate(totalRuntime); 
}

That keeps a running total. To reset at the end of the monitoring period update the runtime Item with “0 s”.

Trigger a rule with an alert when the runtime Item gets above the threshold runtime.

But as to what do I do? I have the air filters coming on a subscription. When the new one arrives I replace it. Maintenance I do a little bit on my own and every other year I’ll bring someone in to do it. We used to have it done twice a year but the company we bought the AC from changed hands and they ended the five year maintenance program we paid extra for. :angry: So we get to it when we get to it and we definitely use a different company.

I’m afraid this OP is also a bot :upside_down_face:

And again, interesting topic, same as privacy data leaking out of Canada, or small pc server setup :slight_smile:

So, heck, we can just go with it…still a tad annoying in my book :disguised_face:

I am pretty sure you are right :innocent:

The question in my mind is why? None of the bot OP questions seem relevant for world domination or seem to have deeper nefarious intent. Are they rogues on a scavenger hunt to collect random information? With token costs that doesn’t seem likely (IMO anyway). A couple had links, so maybe it is to generate traffic (ads)? (I didn’t click the link as I also suspected a bot.)

My working theory is that there is a person behind the curtain (like wizard of OZ) that has a question, but doesn’t want to register with their own credentials. But who knows