# HG changeset patch # User Michiel Broek # Date 1531997740 -7200 # Node ID d2e8626e71183ce8a9b074b76da13d343bc03b5d # Parent c382a6c58c20ab90cfc5555525bbeea4669b95cf Changed alarm message and mqtt message order diff -r c382a6c58c20 -r d2e8626e7118 thermferm/mqtt.c --- a/thermferm/mqtt.c Thu Jul 19 12:47:52 2018 +0200 +++ b/thermferm/mqtt.c Thu Jul 19 12:55:40 2018 +0200 @@ -236,6 +236,10 @@ prof_step *pstep; payload = xstrcat(payload, (char *)"{"); + + /* + * Fixed unit values, never change these! + */ if (birth) { payload = xstrcat(payload, (char *)"\"uuid\":\""); payload = xstrcat(payload, unit->uuid); @@ -244,10 +248,23 @@ payload = xstrcat(payload, (char *)"\","); } - payload = xstrcat(payload, (char *)"\"name\":\""); - payload = xstrcat(payload, unit->name); + /* + * Product (beer) loaded information. + * TODO: extend with uuid and product code. + */ + if (unit->name || strlen(unit->name)) { + payload = xstrcat(payload, (char *)"\"product\":{\"code\":null,\"name\":\""); + payload = xstrcat(payload, unit->name); + payload = xstrcat(payload, (char *)"\"}"); + } else { + payload = xstrcat(payload, (char *)"\"product\":null"); + } + + /* + * Air temperature sensor + */ if (unit->air_address) { - payload = xstrcat(payload, (char *)"\",\"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]); @@ -256,9 +273,12 @@ payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); } else { - payload = xstrcat(payload, (char *)"\",\"air\":null"); + payload = xstrcat(payload, (char *)",\"air\":null"); } + /* + * Beer temperature sensor + */ if (unit->beer_address) { payload = xstrcat(payload, (char *)",\"beer\":{\"address\":\""); payload = xstrcat(payload, unit->beer_address); @@ -272,6 +292,9 @@ payload = xstrcat(payload, (char *)",\"beer\":null"); } + /* + * External chiller temperature sensor + */ if (unit->chiller_address) { payload = xstrcat(payload, (char *)",\"chiller\":{\"address\":\""); payload = xstrcat(payload, unit->chiller_address); @@ -285,39 +308,77 @@ payload = xstrcat(payload, (char *)",\"chiller\":null"); } + /* + * Heater control, power 0..100% and usage count. + */ 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 *)",\"usage\":"); + sprintf(buf, "%d", unit->heater_usage); + payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); } else { payload = xstrcat(payload, (char *)",\"heater\":null"); } + /* + * Cooler control, power 0..100% and usage counter. + */ 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 *)",\"usage\":"); + sprintf(buf, "%d", unit->cooler_usage); + payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); } else { payload = xstrcat(payload, (char *)",\"cooler\":null"); } + /* + * Fan control, 0..100% and usage counter. + */ 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 *)",\"usage\":"); + sprintf(buf, "%d", unit->fan_usage); + payload = xstrcat(payload, buf); payload = xstrcat(payload, (char *)"}"); } else { payload = xstrcat(payload, (char *)",\"fan\":null"); } + /* + * Interior lights control, 0..100% and usage counter. + */ + 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 *)",\"usage\":"); + sprintf(buf, "%d", unit->light_usage); + payload = xstrcat(payload, buf); + payload = xstrcat(payload, (char *)"}"); + } else { + payload = xstrcat(payload, (char *)",\"light\":null"); + } + + /* + * Door sensor. + */ if (unit->door_address) { payload = xstrcat(payload, (char *)",\"door\":{\"address\":\""); payload = xstrcat(payload, unit->door_address); @@ -329,17 +390,9 @@ payload = xstrcat(payload, (char *)",\"door\":null"); } - 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"); - } - + /* + * PSU status + */ if (unit->psu_address) { payload = xstrcat(payload, (char *)",\"psu\":{\"address\":\""); payload = xstrcat(payload, unit->psu_address); @@ -351,6 +404,9 @@ payload = xstrcat(payload, (char *)",\"psu\":null"); } + /* + * Working mode and setpoints + */ payload = xstrcat(payload, (char *)",\"mode\":\""); payload = xstrcat(payload, (char *)UNITMODE[unit->mode]); payload = xstrcat(payload, (char *)"\",\"setpoint\":{\"low\":"); @@ -359,8 +415,13 @@ payload = xstrcat(payload, (char *)",\"high\":"); sprintf(buf, "%.1f", unit->PID_cool->SetP); payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"}"); - + payload = xstrcat(payload, (char *)"},\"alarm\":"); + sprintf(buf, "%d", unit->alarm_flag); + payload = xstrcat(payload, buf); + + /* + * Loaded profile and state + */ if (unit->mode == UNITMODE_PROFILE && unit->profile) { for (profile = Config.profiles; profile; profile = profile->next) { if (strcmp(unit->profile, profile->uuid) == 0) {