# HG changeset patch # User Michiel Broek # Date 1495204461 -7200 # Node ID 2da3d334040327687e2161cff0b5846011f410f9 # Parent b5ae9017194f42e60aaab08fadb6c6eb6cc03628 Version 0.6.0. The MQTT data messages are now allways the same length so that openhab will function with the message updates. diff -r b5ae9017194f -r 2da3d3340403 configure --- a/configure Mon May 08 20:54:51 2017 +0200 +++ b/configure Fri May 19 16:34:21 2017 +0200 @@ -2035,7 +2035,7 @@ PACKAGE="mbsePi-apps" -VERSION="0.5.9" +VERSION="0.6.0" COPYRIGHT="Copyright (C) 2014-2017 Michiel Broek, All Rights Reserved" CYEARS="2014-2017" diff -r b5ae9017194f -r 2da3d3340403 configure.ac --- a/configure.ac Mon May 08 20:54:51 2017 +0200 +++ b/configure.ac Fri May 19 16:34:21 2017 +0200 @@ -8,7 +8,7 @@ dnl General settings dnl After changeing the version number, run autoconf! PACKAGE="mbsePi-apps" -VERSION="0.5.9" +VERSION="0.6.0" COPYRIGHT="Copyright (C) 2014-2017 Michiel Broek, All Rights Reserved" CYEARS="2014-2017" AC_SUBST(PACKAGE) diff -r b5ae9017194f -r 2da3d3340403 thermferm/mqtt.c --- a/thermferm/mqtt.c Mon May 08 20:54:51 2017 +0200 +++ b/thermferm/mqtt.c Fri May 19 16:34:21 2017 +0200 @@ -187,219 +187,168 @@ prof_step *pstep; payload = xstrcat(payload, (char *)"{"); - if (birth || unit->mqtt_flag & MQTT_FLAG_MODE) { - // Also send these on mode change + if (birth) { payload = xstrcat(payload, (char *)"\"uuid\":\""); payload = xstrcat(payload, unit->uuid); payload = xstrcat(payload, (char *)"\",\"alias\":\""); payload = xstrcat(payload, unit->alias); - payload = xstrcat(payload, (char *)"\",\"name\":\""); - payload = xstrcat(payload, unit->name); - payload = xstrcat(payload, (char *)"\""); - comma = true; + payload = xstrcat(payload, (char *)"\","); } - if (birth || unit->mqtt_flag & MQTT_FLAG_AIR) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->air_address) { - payload = xstrcat(payload, (char *)"\"air\":{\"address\":\""); - payload = xstrcat(payload, unit->air_address); - payload = xstrcat(payload, (char *)"\",\"state\":\""); - payload = xstrcat(payload, (char *)TEMPSTATE[unit->air_state]); - payload = xstrcat(payload, (char *)"\",\"temperature\":"); - sprintf(buf, "%.3f", unit->air_temperature / 1000.0); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"air\":null"); - } - comma = true; + + payload = xstrcat(payload, (char *)"\"name\":\""); + payload = xstrcat(payload, unit->name); + if (unit->air_address) { + payload = xstrcat(payload, (char *)"\",\"air\":{\"address\":\""); + payload = xstrcat(payload, unit->air_address); + payload = xstrcat(payload, (char *)"\",\"state\":\""); + payload = xstrcat(payload, (char *)TEMPSTATE[unit->air_state]); + payload = xstrcat(payload, (char *)"\",\"temperature\":"); + sprintf(buf, "%.3f", unit->air_temperature / 1000.0); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)"\",\"air\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_BEER) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->beer_address) { - payload = xstrcat(payload, (char *)"\"beer\":{\"address\":\""); - payload = xstrcat(payload, unit->beer_address); - payload = xstrcat(payload, (char *)"\",\"state\":\""); - payload = xstrcat(payload, (char *)TEMPSTATE[unit->beer_state]); - payload = xstrcat(payload, (char *)"\",\"temperature\":"); - sprintf(buf, "%.3f", unit->beer_temperature / 1000.0); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"beer\":null"); - } - comma = true; + + if (unit->beer_address) { + payload = xstrcat(payload, (char *)",\"beer\":{\"address\":\""); + payload = xstrcat(payload, unit->beer_address); + payload = xstrcat(payload, (char *)"\",\"state\":\""); + payload = xstrcat(payload, (char *)TEMPSTATE[unit->beer_state]); + payload = xstrcat(payload, (char *)"\",\"temperature\":"); + sprintf(buf, "%.3f", unit->beer_temperature / 1000.0); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"beer\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_HEATER) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->heater_address) { - payload = xstrcat(payload, (char *)"\"heater\":{\"address\":\""); - payload = xstrcat(payload, unit->heater_address); - payload = xstrcat(payload, (char *)"\",\"state\":"); - sprintf(buf, "%d", unit->heater_state); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"heater\":null"); - } - comma = true; + + if (unit->heater_address) { + payload = xstrcat(payload, (char *)",\"heater\":{\"address\":\""); + payload = xstrcat(payload, unit->heater_address); + payload = xstrcat(payload, (char *)"\",\"state\":"); + sprintf(buf, "%d", unit->heater_state); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"heater\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_COOLER) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->cooler_address) { - payload = xstrcat(payload, (char *)"\"cooler\":{\"address\":\""); - payload = xstrcat(payload, unit->cooler_address); - payload = xstrcat(payload, (char *)"\",\"state\":"); - sprintf(buf, "%d", unit->cooler_state); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"cooler\":null"); - } - comma = true; + + if (unit->cooler_address) { + payload = xstrcat(payload, (char *)",\"cooler\":{\"address\":\""); + payload = xstrcat(payload, unit->cooler_address); + payload = xstrcat(payload, (char *)"\",\"state\":"); + sprintf(buf, "%d", unit->cooler_state); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"cooler\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_FAN) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->fan_address) { - payload = xstrcat(payload, (char *)"\"fan\":{\"address\":\""); - payload = xstrcat(payload, unit->fan_address); - payload = xstrcat(payload, (char *)"\",\"state\":"); - sprintf(buf, "%d", unit->fan_state); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"fan\":null"); - } - comma = true; + + if (unit->fan_address) { + payload = xstrcat(payload, (char *)",\"fan\":{\"address\":\""); + payload = xstrcat(payload, unit->fan_address); + payload = xstrcat(payload, (char *)"\",\"state\":"); + sprintf(buf, "%d", unit->fan_state); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"fan\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_DOOR) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->door_address) { - payload = xstrcat(payload, (char *)"\"door\":{\"address\":\""); - payload = xstrcat(payload, unit->door_address); - payload = xstrcat(payload, (char *)"\",\"state\":"); - sprintf(buf, "%d", unit->door_state); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"door\":null"); - } - comma = true; + + if (unit->door_address) { + payload = xstrcat(payload, (char *)",\"door\":{\"address\":\""); + payload = xstrcat(payload, unit->door_address); + payload = xstrcat(payload, (char *)"\",\"state\":"); + sprintf(buf, "%d", unit->door_state); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"door\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_LIGHT) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->light_address) { - payload = xstrcat(payload, (char *)"\"light\":{\"address\":\""); - payload = xstrcat(payload, unit->light_address); - payload = xstrcat(payload, (char *)"\",\"state\":"); - sprintf(buf, "%d", unit->light_state); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"light\":null"); - } - comma = true; + + if (unit->light_address) { + payload = xstrcat(payload, (char *)",\"light\":{\"address\":\""); + payload = xstrcat(payload, unit->light_address); + payload = xstrcat(payload, (char *)"\",\"state\":"); + sprintf(buf, "%d", unit->light_state); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"light\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_PSU) { - if (comma) - payload = xstrcat(payload, (char *)","); - if (unit->psu_address) { - payload = xstrcat(payload, (char *)"\"psu\":{\"address\":\""); - payload = xstrcat(payload, unit->psu_address); - payload = xstrcat(payload, (char *)"\",\"state\":"); - sprintf(buf, "%d", unit->psu_state); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - } else { - payload = xstrcat(payload, (char *)"\"psu\":null"); - } - comma = true; - } - if (birth || unit->mqtt_flag & MQTT_FLAG_MODE) { - if (comma) - payload = xstrcat(payload, (char *)","); - payload = xstrcat(payload, (char *)"\"mode\":\""); - payload = xstrcat(payload, (char *)UNITMODE[unit->mode]); - payload = xstrcat(payload, (char *)"\""); - comma = true; - } - if (birth || unit->mqtt_flag & MQTT_FLAG_SP) { - if (unit->mode != UNITMODE_OFF) { - if (comma) - payload = xstrcat(payload, (char *)","); - payload = xstrcat(payload, (char *)"\"setpoint\":{\"low\":"); - sprintf(buf, "%.1f", unit->PID_heat->SetP); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)",\"high\":"); - sprintf(buf, "%.1f", unit->PID_cool->SetP); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - comma = true; - } + + if (unit->psu_address) { + payload = xstrcat(payload, (char *)",\"psu\":{\"address\":\""); + payload = xstrcat(payload, unit->psu_address); + payload = xstrcat(payload, (char *)"\",\"state\":"); + sprintf(buf, "%d", unit->psu_state); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"psu\":null"); } - if (birth || unit->mqtt_flag & MQTT_FLAG_PROFILE || unit->mqtt_flag & MQTT_FLAG_PERCENT) { - if (unit->mode == UNITMODE_PROFILE && unit->profile) { - for (profile = Config.profiles; profile; profile = profile->next) { - if (strcmp(unit->profile, profile->uuid) == 0) { - if (comma) - payload = xstrcat(payload, (char *)","); - payload = xstrcat(payload, (char *)"\"profile\":{\"uuid\":\""); - payload = xstrcat(payload, unit->profile); - payload = xstrcat(payload, (char *)",\"name\":\""); - payload = xstrcat(payload, profile->name); - payload = xstrcat(payload, (char *)"\",\"inittemp\":{\"low\":"); - sprintf(buf, "%.1f", profile->inittemp_lo); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)",\"high\":"); - sprintf(buf, "%.1f", profile->inittemp_hi); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"},\"fridgemode\":"); - sprintf(buf, "%d", profile->fridge_mode); - payload = xstrcat(payload, buf); - comma = false; - if (profile->steps) { - payload = xstrcat(payload, (char *)",\"steps\":["); - for (pstep = profile->steps; pstep; pstep = pstep->next) { - if (comma) - payload = xstrcat(payload, (char *)","); - payload = xstrcat(payload, (char *)"{\"resttime\":"); - sprintf(buf, "%d", pstep->resttime); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)",\"steptime\":"); - sprintf(buf, "%d", pstep->steptime); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)",\"target\":{\"low\":"); - sprintf(buf, "%.1f", pstep->target_lo); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)",\"high\":"); - sprintf(buf, "%.1f", pstep->target_hi); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"},\"fridgemode\":"); - sprintf(buf, "%d", pstep->fridge_mode); - payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - comma = true; - } - payload = xstrcat(payload, (char *)"]"); - } else { - payload = xstrcat(payload, (char *)",\"steps\":null"); + + payload = xstrcat(payload, (char *)",\"mode\":\""); + payload = xstrcat(payload, (char *)UNITMODE[unit->mode]); + payload = xstrcat(payload, (char *)"\",\"setpoint\":{\"low\":"); + sprintf(buf, "%.1f", unit->PID_heat->SetP); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"high\":"); + sprintf(buf, "%.1f", unit->PID_cool->SetP); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + + if (unit->mode == UNITMODE_PROFILE && unit->profile) { + for (profile = Config.profiles; profile; profile = profile->next) { + if (strcmp(unit->profile, profile->uuid) == 0) { + payload = xstrcat(payload, (char *)",\"profile\":{\"uuid\":\""); + payload = xstrcat(payload, unit->profile); + payload = xstrcat(payload, (char *)",\"name\":\""); + payload = xstrcat(payload, profile->name); + payload = xstrcat(payload, (char *)"\",\"inittemp\":{\"low\":"); + sprintf(buf, "%.1f", profile->inittemp_lo); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"high\":"); + sprintf(buf, "%.1f", profile->inittemp_hi); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"},\"fridgemode\":"); + sprintf(buf, "%d", profile->fridge_mode); + payload = xstrcat(payload, buf); + comma = false; + if (profile->steps) { + payload = xstrcat(payload, (char *)",\"steps\":["); + for (pstep = profile->steps; pstep; pstep = pstep->next) { + if (comma) + payload = xstrcat(payload, (char *)","); + payload = xstrcat(payload, (char *)"{\"resttime\":"); + sprintf(buf, "%d", pstep->resttime); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"steptime\":"); + sprintf(buf, "%d", pstep->steptime); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"target\":{\"low\":"); + sprintf(buf, "%.1f", pstep->target_lo); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)",\"high\":"); + sprintf(buf, "%.1f", pstep->target_hi); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"},\"fridgemode\":"); + sprintf(buf, "%d", pstep->fridge_mode); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + comma = true; } - payload = xstrcat(payload, (char *)"}"); - break; - } + payload = xstrcat(payload, (char *)"]"); + } else { + payload = xstrcat(payload, (char *)",\"steps\":null"); + } + payload = xstrcat(payload, (char *)"}"); + break; } - } else { - if (comma) - payload = xstrcat(payload, (char *)","); - payload = xstrcat(payload, (char *)"\"profile\":null"); - } + } + } else { + payload = xstrcat(payload, (char *)",\"profile\":null"); } payload = xstrcat(payload, (char *)"}"); @@ -493,25 +442,23 @@ comma = true; } - if (birth || flag & MQTT_NODE_HT) { - if (Config.temp_address || Config.hum_address) { - if (comma) - payload = xstrcat(payload, (char *)","); - payload = xstrcat(payload, (char *)"\"HT\":{"); - if (Config.temp_address) { - payload = xstrcat(payload, (char *)"\"temperature\":"); - sprintf(buf, "%.1f", Config.temp_value / 1000.0); - payload = xstrcat(payload, buf); - } - if (Config.temp_address && Config.hum_address) - payload = xstrcat(payload, (char *)","); - if (Config.hum_address) { - payload = xstrcat(payload, (char *)"\"humidity\":"); - sprintf(buf, "%.1f", Config.hum_value / 1000.0); - payload = xstrcat(payload, buf); - } - payload = xstrcat(payload, (char *)"}"); - } + if (Config.temp_address || Config.hum_address) { + if (comma) + payload = xstrcat(payload, (char *)","); + payload = xstrcat(payload, (char *)"\"HT\":{"); + if (Config.temp_address) { + payload = xstrcat(payload, (char *)"\"temperature\":"); + sprintf(buf, "%.1f", Config.temp_value / 1000.0); + payload = xstrcat(payload, buf); + } + if (Config.temp_address && Config.hum_address) + payload = xstrcat(payload, (char *)","); + if (Config.hum_address) { + payload = xstrcat(payload, (char *)"\"humidity\":"); + sprintf(buf, "%.1f", Config.hum_value / 1000.0); + payload = xstrcat(payload, buf); + } + payload = xstrcat(payload, (char *)"}"); } payload = xstrcat(payload, (char *)"}}"); diff -r b5ae9017194f -r 2da3d3340403 thermferm/server.c --- a/thermferm/server.c Mon May 08 20:54:51 2017 +0200 +++ b/thermferm/server.c Fri May 19 16:34:21 2017 +0200 @@ -2195,7 +2195,7 @@ free(unit->name); } unit->name = xstrcpy(val); - unit->mqtt_flag |= (MQTT_FLAG_MODE); + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (val && (strcmp(kwd, (char *)"VOLUME") == 0)) { if (sscanf(val, "%f", &fval) == 1) { @@ -2216,7 +2216,7 @@ device_count(TRUE, unit->air_address); } else unit->air_address = NULL; - unit->mqtt_flag |= MQTT_FLAG_AIR; + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (strcmp(kwd, (char *)"BEER_ADDRESS") == 0) { if (val && unit->beer_address && (strcmp(val, unit->beer_address))) @@ -2230,7 +2230,7 @@ device_count(TRUE, unit->beer_address); } else unit->beer_address = NULL; - unit->mqtt_flag |= MQTT_FLAG_BEER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (strcmp(kwd, (char *)"HEATER_ADDRESS") == 0) { if (val && unit->heater_address && (strcmp(val, unit->heater_address))) @@ -2244,14 +2244,14 @@ device_count(TRUE, unit->heater_address); } else unit->heater_address = NULL; - unit->mqtt_flag |= MQTT_FLAG_HEATER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (val && (strcmp(kwd, (char *)"HEATER_STATE") == 0)) { if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) { if (unit->heater_state != ival) syslog(LOG_NOTICE, "Fermenter unit %s heater state %d to %d", unit->uuid, unit->heater_state, ival); unit->heater_state = ival; - unit->mqtt_flag |= MQTT_FLAG_HEATER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else if (val && (strcmp(kwd, (char *)"HEATER_DELAY") == 0)) { @@ -2273,14 +2273,14 @@ device_count(TRUE, unit->cooler_address); } else unit->cooler_address = NULL; - unit->mqtt_flag |= MQTT_FLAG_COOLER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (val && (strcmp(kwd, (char *)"COOLER_STATE") == 0)) { if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) { if (unit->cooler_state != ival) syslog(LOG_NOTICE, "Fermenter unit %s cooler state %d to %d", unit->uuid, unit->cooler_state, ival); unit->cooler_state = ival; - unit->mqtt_flag |= MQTT_FLAG_COOLER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else if (val && (strcmp(kwd, (char *)"COOLER_DELAY") == 0)) { @@ -2302,14 +2302,14 @@ device_count(TRUE, unit->fan_address); } else unit->fan_address = NULL; - unit->mqtt_flag |= MQTT_FLAG_FAN; + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (val && (strcmp(kwd, (char *)"FAN_STATE") == 0)) { if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) { if (unit->fan_state != ival) syslog(LOG_NOTICE, "Fermenter unit %s fan state %d to %d", unit->uuid, unit->fan_state, ival); unit->fan_state = ival; - unit->mqtt_flag |= MQTT_FLAG_FAN; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else if (val && (strcmp(kwd, (char *)"FAN_DELAY") == 0)) { @@ -2331,14 +2331,14 @@ device_count(TRUE, unit->light_address); } else unit->light_address = NULL; - unit->mqtt_flag |= MQTT_FLAG_LIGHT; + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (val && (strcmp(kwd, (char *)"LIGHT_STATE") == 0)) { if ((sscanf(val, "%d", &ival) == 1) && ((ival == 0) || (ival == 100))) { if (unit->light_state != ival) syslog(LOG_NOTICE, "Fermenter unit %s light state %d to %d", unit->uuid, unit->light_state, ival); unit->light_state = ival; - unit->mqtt_flag |= MQTT_FLAG_LIGHT; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else if (val && (strcmp(kwd, (char *)"LIGHT_DELAY") == 0)) { @@ -2373,7 +2373,7 @@ device_count(TRUE, unit->psu_address); } else unit->psu_address = NULL; - unit->mqtt_flag |= MQTT_FLAG_PSU; + unit->mqtt_flag |= MQTT_FLAG_DATA; } else if (val && (strcmp(kwd, (char *)"MODE") == 0)) { for (i = 0; i < 5; i++) { @@ -2383,7 +2383,7 @@ initlog(unit->name); syslog(LOG_NOTICE, "Fermenter unit %s mode %s to %s", unit->uuid, UNITMODE[unit->mode], UNITMODE[i]); unit->mode = i; - unit->mqtt_flag |= (MQTT_FLAG_MODE | MQTT_FLAG_SP); + unit->mqtt_flag |= MQTT_FLAG_DATA; /* Allways turn everything off after a mode change */ unit->PID_cool->OutP = unit->PID_heat->OutP = 0.0; unit->PID_cool->Mode = unit->PID_heat->Mode = PID_MODE_NONE; @@ -2401,8 +2401,7 @@ unit->prof_target_lo = unit->prof_target_hi = 20.0; unit->prof_fridge_mode = 0; if (unit->profile) { - unit->mqtt_flag |= MQTT_FLAG_PROFILE; - unit->mqtt_flag |= MQTT_FLAG_SP; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } break; @@ -2414,7 +2413,7 @@ if (unit->fridge_set != fval) syslog(LOG_NOTICE, "Fermenter unit %s fridge temperature %.1f to %.1f", unit->uuid, unit->fridge_set, fval); unit->fridge_set = fval; - unit->mqtt_flag |= MQTT_FLAG_SP; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else if (val && (strcmp(kwd, (char *)"BEER_SET") == 0)) { @@ -2422,7 +2421,7 @@ if (unit->beer_set != fval) syslog(LOG_NOTICE, "Fermenter unit %s beer temperature %.1f to %.1f", unit->uuid, unit->beer_set, fval); unit->beer_set = fval; - unit->mqtt_flag |= MQTT_FLAG_SP; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else if (val && (strcmp(kwd, (char *)"PIDC_IMAX") == 0)) { @@ -2520,7 +2519,7 @@ device_out(unit->cooler_address, unit->cooler_state); device_out(unit->fan_address, unit->fan_state); device_out(unit->light_address, unit->light_state); - unit->mqtt_flag |= (MQTT_FLAG_PROFILE | MQTT_FLAG_SP | MQTT_FLAG_HEATER | MQTT_FLAG_COOLER | MQTT_FLAG_FAN); + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else if (val && (strcmp(kwd, (char *)"PROF_STATE") == 0)) { @@ -2556,7 +2555,7 @@ } break; } - unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT); + unit->mqtt_flag |= MQTT_FLAG_DATA; break; } } diff -r b5ae9017194f -r 2da3d3340403 thermferm/thermferm.c --- a/thermferm/thermferm.c Mon May 08 20:54:51 2017 +0200 +++ b/thermferm/thermferm.c Fri May 19 16:34:21 2017 +0200 @@ -395,7 +395,7 @@ initlog(current_unit->name); syslog(LOG_NOTICE, "Mode from %s to %s via panel interface", UNITMODE[current_unit->mode], UNITMODE[mode]); current_unit->mode = mode; - current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_MODE); + current_unit->mqtt_flag |= MQTT_FLAG_DATA; /* Allways turn everything off after a mode change */ current_unit->PID_cool->OutP = current_unit->PID_heat->OutP = 0.0; current_unit->PID_cool->Mode = current_unit->PID_heat->Mode = PID_MODE_NONE; @@ -610,7 +610,7 @@ if (temp_temp != current_unit->fridge_set) { syslog(LOG_NOTICE, "Fridge temperature changed from %.1f to %.1f degrees from the panel", current_unit->fridge_set, temp_temp); current_unit->fridge_set = temp_temp; - current_unit->mqtt_flag |= MQTT_FLAG_SP; + current_unit->mqtt_flag |= MQTT_FLAG_DATA; } go_menu(MENU_MODE_FRIDGE); } @@ -651,7 +651,7 @@ if (temp_temp != current_unit->beer_set) { syslog(LOG_NOTICE, "Beer temperature changed from %.1f to %.1f degrees from the panel", current_unit->beer_set, temp_temp); current_unit->beer_set = temp_temp; - current_unit->mqtt_flag |= MQTT_FLAG_SP; + current_unit->mqtt_flag |= MQTT_FLAG_DATA; } go_menu(MENU_MODE_BEER); } @@ -733,7 +733,7 @@ current_unit->prof_paused = current_unit->prof_primary_done = 0; current_unit->prof_peak_abs = current_unit->prof_peak_rel = 0.0; syslog(LOG_NOTICE, "Profile started from the panel"); - current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT); + current_unit->mqtt_flag |= MQTT_FLAG_DATA; go_menu(MENU_MODE_PROFILE); } break; @@ -745,7 +745,7 @@ go_menu(MENU_PROFILE_ABORT); if (key == KEY_ENTER) { current_unit->prof_state = PROFILE_PAUSE; - current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT); + current_unit->mqtt_flag |= MQTT_FLAG_DATA; syslog(LOG_NOTICE, "Profile pause from the panel"); go_menu(MENU_MODE_PROFILE); } @@ -764,7 +764,7 @@ current_unit->prof_state = PROFILE_OFF; current_unit->prof_started = 0; syslog(LOG_NOTICE, "Profile aborted from the panel"); - current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT); + current_unit->mqtt_flag |= MQTT_FLAG_DATA; go_menu(MENU_MODE_PROFILE); } break; @@ -777,7 +777,7 @@ if (key == KEY_ENTER) { current_unit->prof_state = PROFILE_RUN; syslog(LOG_NOTICE, "Profile resume from the panel"); - current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT); + current_unit->mqtt_flag |= MQTT_FLAG_DATA; go_menu(MENU_MODE_PROFILE); } break; @@ -788,7 +788,7 @@ if (key == KEY_ENTER) { if (current_unit->prof_state == PROFILE_DONE) { current_unit->prof_state = PROFILE_OFF; - current_unit->mqtt_flag |= (MQTT_FLAG_SP | MQTT_FLAG_PROFILE | MQTT_FLAG_PERCENT); + current_unit->mqtt_flag |= MQTT_FLAG_DATA; syslog(LOG_NOTICE, "Profile from done to off from the panel"); } } @@ -1212,7 +1212,7 @@ } row++; if (updateHT) - publishNData(false, MQTT_NODE_HT); + publishNData(false, 0); LCDunit = 0; for (unit = Config.units; unit; unit = unit->next) { @@ -1234,7 +1234,7 @@ if ((unit->air_temperature == 0) || (unit->air_temperature && (temp > (int)unit->air_temperature - deviation) && (temp < ((int)unit->air_temperature + deviation)))) { if (unit->air_temperature != temp) - unit->mqtt_flag |= MQTT_FLAG_AIR; + unit->mqtt_flag |= MQTT_FLAG_DATA; unit->air_temperature = temp; unit->air_state = 0; } else { @@ -1254,7 +1254,7 @@ if ((unit->beer_temperature == 0) || (unit->beer_temperature && (temp > (int)unit->beer_temperature - deviation) && (temp < ((int)unit->beer_temperature + deviation)))) { if (unit->beer_temperature != temp) - unit->mqtt_flag |= MQTT_FLAG_BEER; + unit->mqtt_flag |= MQTT_FLAG_DATA; unit->beer_temperature = temp; unit->beer_state = 0; } else { @@ -1277,13 +1277,13 @@ if (unit->door_state == 0) { syslog(LOG_NOTICE, "Unit `%s' door closed", unit->name); unit->door_state = 1; - unit->mqtt_flag |= MQTT_FLAG_DOOR; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else { if (unit->door_state) { syslog(LOG_NOTICE, "Unit `%s' door opened", unit->name); unit->door_state = 0; - unit->mqtt_flag |= MQTT_FLAG_DOOR; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } else { @@ -1303,13 +1303,13 @@ if (unit->psu_state == 0) { syslog(LOG_NOTICE, "Unit `%s' PSU (12 volt) is on", unit->name); unit->psu_state = 1; - unit->mqtt_flag |= MQTT_FLAG_PSU; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else { if (unit->psu_state) { syslog(LOG_NOTICE, "Unit `%s' PSU (12 volt) is off", unit->name); unit->psu_state = 0; - unit->mqtt_flag |= MQTT_FLAG_PSU; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } else { @@ -1465,7 +1465,7 @@ profile->name, run_hours / 24, run_hours % 24, run_minutes % 60, current_step, unit->prof_percent, unit->prof_fridge_mode ? (char *)"air":(char *)"beer", unit->prof_target_lo, unit->prof_target_hi); - unit->mqtt_flag |= (MQTT_FLAG_PERCENT | MQTT_FLAG_PROFILE | MQTT_FLAG_SP); + unit->mqtt_flag |= MQTT_FLAG_DATA; } } else { /* @@ -1474,7 +1474,7 @@ unit->prof_state = PROFILE_DONE; unit->prof_percent = 100; syslog(LOG_NOTICE, "Profile `%s' is done", profile->name); - unit->mqtt_flag |= (MQTT_FLAG_PERCENT | MQTT_FLAG_PROFILE | MQTT_FLAG_SP); + unit->mqtt_flag |= MQTT_FLAG_DATA; } break; @@ -1541,13 +1541,13 @@ } else { unit->light_state = 0; syslog(LOG_NOTICE, "Unit `%s' lights On => Off", unit->name); - unit->mqtt_flag |= MQTT_FLAG_LIGHT; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } if (!unit->door_state && !unit->light_state) { unit->light_wait = unit->light_delay; /* No delay to turn lights on */ unit->light_state = 1; - unit->mqtt_flag |= MQTT_FLAG_LIGHT; + unit->mqtt_flag |= MQTT_FLAG_DATA; syslog(LOG_NOTICE, "Unit `%s' lights Off => On", unit->name); } device_out(unit->light_address, unit->light_state); @@ -1652,7 +1652,7 @@ syslog(LOG_NOTICE, "Unit `%s' heater %d%% => %d%%", unit->name, unit->heater_state, power); unit->heater_state = power; if (unit->heater_address) - unit->mqtt_flag |= MQTT_FLAG_HEATER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } else { @@ -1663,7 +1663,7 @@ syslog(LOG_NOTICE, "Unit `%s' heater On => Off", unit->name); unit->heater_state = 0; if (unit->heater_address) - unit->mqtt_flag |= MQTT_FLAG_HEATER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } @@ -1683,7 +1683,7 @@ syslog(LOG_NOTICE, "Unit `%s' cooler %d%% => %d%%", unit->name, unit->cooler_state, power); unit->cooler_state = power; if (unit->cooler_address) - unit->mqtt_flag |= MQTT_FLAG_COOLER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } else { @@ -1694,7 +1694,7 @@ syslog(LOG_NOTICE, "Unit `%s' cooler On => Off", unit->name); unit->cooler_state = 0; if (unit->cooler_address) - unit->mqtt_flag |= MQTT_FLAG_COOLER; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } @@ -1720,7 +1720,7 @@ syslog(LOG_NOTICE, "Unit `%s' Fan Off => On", unit->name); unit->fan_state = 100; if (unit->fan_address) - unit->mqtt_flag |= MQTT_FLAG_FAN; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } else { @@ -1731,7 +1731,7 @@ syslog(LOG_NOTICE, "Unit `%s' Fan On => Off", unit->name); unit->fan_state = 0; if (unit->fan_address) - unit->mqtt_flag |= MQTT_FLAG_FAN; + unit->mqtt_flag |= MQTT_FLAG_DATA; } } } @@ -1772,7 +1772,7 @@ } } if ((seconds == 60) && ((unit->mode == UNITMODE_FRIDGE) || (unit->mode == UNITMODE_BEER) || (unit->mode == UNITMODE_PROFILE))) { - unit->mqtt_flag |= MQTT_FLAG_SP; + unit->mqtt_flag |= MQTT_FLAG_DATA; } #ifdef HAVE_WIRINGPI_H piLock(LOCK_LCD); @@ -1915,7 +1915,7 @@ device_out(unit->cooler_address, unit->cooler_state); device_out(unit->fan_address, unit->fan_state); device_out(unit->light_address, unit->light_state); - unit->mqtt_flag = MQTT_FLAG_HEATER | MQTT_FLAG_COOLER | MQTT_FLAG_FAN | MQTT_FLAG_LIGHT; + unit->mqtt_flag = MQTT_FLAG_DATA; publishDData(unit); syslog(LOG_NOTICE, "Unit `%s' stopped in mode %s", unit->name, UNITMODE[unit->mode]); } diff -r b5ae9017194f -r 2da3d3340403 thermferm/thermferm.h --- a/thermferm/thermferm.h Mon May 08 20:54:51 2017 +0200 +++ b/thermferm/thermferm.h Fri May 19 16:34:21 2017 +0200 @@ -191,21 +191,9 @@ #define UNITMODE_BEER 3 /* Unit acts as beer cooler */ #define UNITMODE_PROFILE 4 /* Unit runs in profile mode */ -#define MQTT_FLAG_SP 0x0001 /* Show setpoint values */ -#define MQTT_FLAG_AIR 0x0002 /* Show air temperature */ -#define MQTT_FLAG_BEER 0x0004 /* Show beer temperature */ -#define MQTT_FLAG_MODE 0x0008 /* Show unit mode */ -#define MQTT_FLAG_HEATER 0x0010 /* Show heater state */ -#define MQTT_FLAG_COOLER 0x0020 /* Show cooler state */ -#define MQTT_FLAG_FAN 0x0040 /* Show fan state */ -#define MQTT_FLAG_DOOR 0x0080 /* Show door state */ -#define MQTT_FLAG_LIGHT 0x0100 /* Show light state */ -#define MQTT_FLAG_PSU 0x0200 /* Show PSU state */ -#define MQTT_FLAG_PROFILE 0x0400 /* Show profile settings */ -#define MQTT_FLAG_PERCENT 0x0800 /* Show profile percent */ +#define MQTT_FLAG_DATA 0x0001 /* Show updated data values */ #define MQTT_NODE_CONTROL 0x0001 /* Show node control */ -#define MQTT_NODE_HT 0x0002 /* Show node humidity/temp */