Passively detect if wood stove is burning

This might be a total one-off, but I am happy to share it with the OpenHAB community. I have a Wood/Coal stove near a Nest thermostat, and wanted a way to detect if the stove was actually burning to circulate the heat throughout the house using my whole house fan. Essentially the rule dictates if the thermostat’s observed temp is higher than the thermostat’s target temp, turn on the house fan to move the air.

This did the trick:

rule “Automatically turn on HVAC Fan if Target Temp is less than actual Temp”
Item HVAC_Temp changed
var int target = (HVAC_Target_Temp.state as DecimalType).intValue
var int temp = (HVAC_Temp.state as DecimalType).intValue
if (target < temp) {
//Fire going, circulate air via HVAC Fan
postUpdate(HVAC_Great_Stove, ON)
postUpdate(HVAC_Fan, ON)
else {
//Fire is out, turn off HVAC Fan
postUpdate(HVAC_Great_Stove, OFF)
postUpdate(HVAC_Fan, OFF)

Caveats - this rule needs expanded to consider that it is in fact the winter season (via the Astro binding) and that there isn’t an actual fire inside the house (planning to add an OpenHAB enabled smoke/co2 detector soon).

Thanks @watou for the awesome Nest binding which made this possible!!!


I wouldn’t say it is as one off as you would expect. My house has central forced air heating but no air conditioner. It also has a basement which is where the fan is so if the temp gets above the target temp it turns on the fan to circulate the cooler (up to 20 degree cooler in late afternoons in August) throughout the house. This is my greatest HA success story.

rule "Turn on fan when it gets hot"
        Time cron "0 0/30 * * * ?" or
        Item N_V_NestCurrTemp changed or
        Item S_V_NestTargetTemp changed
    val curr = N_V_NestCurrTemp.state as DecimalType
    val tgt = S_V_NestTargetTemp.state as DecimalType

    val outside = Weather_Temperature.state as DecimalType

        if(tgt < outside) { // only turn on the fan if the outside temp is greater than tgt
                if(curr > (tgt + 1) && S_C_NestFan.state != ON){
                        logInfo("Nest", "The temp is " + curr + ". Turning on the fan")
                        sendCommand(S_C_NestFan, ON)
                } else if(curr <= tgt && S_C_NestFan.state == ON) {
                        logInfo("Nest", "The temp is " + curr + ". Turning off the fan")
                        sendCommand(S_C_NestFan, OFF)


The sleeps are there to prevent hitting the Nest API too often. I’m not certain the first two are still required but have left them in as they don’t cause any trouble.

Also, rather than caring about the season, I just check that the outside temp is indeed warmer than the target temp which pretty effectively makes the rule only function in the summer.

I like the idea of cutting the fan though on an alarm. They just got support for my fire/co2 alarms into the 1.8 zwave binding and I’ve been looking for the time download it and get the alarms added. When I do I plan on adding a rule to cut the fan if the smoke alarm does go off, and maybe run the fan if the co2 alarm goes off. It might be a good idea to mix the air and thin out the co2…I’ll have to think on that some. Of course, I have no idea if the zcombo alarm creates an alarm message that distinguishes between the two yet.

1 Like

Focusing on the outside temperature instead of the current season is the right way forward - working that into my next iteration of the rule. :slight_smile:

I am also very interested in the accuracy of monitoring co2 and indoor air quality via OpenHAB. The zcombo alarms are cost effective for smoke detection, but I am leaning towards using the Netamo for many indoor/crawlspace/outdoor sensors.

Is there something else available at the moment that is more accurate and/or cost effective?

I’ve spent all of five minutes deciding which alarm to get and it had as much to do with the potential option of having z-wave then anything else. I figured (perhaps erroneously) that there is a certain minimum standard required for the accuracy and sensitivity of these alarms.