# HG changeset patch # User Michiel Broek # Date 1570792354 -7200 # Node ID c6bbd1380f22f7446f1d5452484d98d29a6993f8 # Parent 6eafc4c2bf3d0b69702ba77a8932ee899024812e Added alarm flag for units. diff -r 6eafc4c2bf3d -r c6bbd1380f22 main/co2meter.c --- a/main/co2meter.c Wed Oct 09 22:51:37 2019 +0200 +++ b/main/co2meter.c Fri Oct 11 13:12:34 2019 +0200 @@ -279,14 +279,21 @@ /* Copy measured data and calculate results */ if (xSemaphoreTake(xSemaphoreUnits, 25) == pdTRUE) { for (int i = 0; i < 3; i++) { + if (i == 0) + units[i].mode = 1; units[i].temperature = temp; units[i].temperature_state = state; + units[i].alarm = 0; + if (state) + units[i].alarm |= ALARM_SYS_TEMPERATURE & ALARM_UNIT_TEMPERATURE; strncpy(units[i].temperature_rom_code, rom_code, 17); if (xSemaphoreTake(xSemaphoreADC, 10) == pdTRUE) { units[i].pressure_state = adc_state->Pressure[i].error; units[i].pressure_channel = adc_state->Pressure[i].channel; units[i].pressure_voltage = adc_state->Pressure[i].voltage; units[i].pressure_zero = 110; + if (units[i].pressure_state || units[i].pressure_voltage < 80) + units[i].alarm |= ALARM_UNIT_PRESSURE; int P = (units[i].pressure_voltage / (adc_state->Batt_voltage / 1000) - units[i].pressure_zero) * 14; // in bar if (P < 0) P = 0; diff -r 6eafc4c2bf3d -r c6bbd1380f22 main/config.c --- a/main/config.c Wed Oct 09 22:51:37 2019 +0200 +++ b/main/config.c Fri Oct 11 13:12:34 2019 +0200 @@ -81,7 +81,7 @@ void read_units() { uint8_t *dst; uint8_t mac_addr[8] = {0}; - FILE *f = fopen("/spiffs/etc/units.conf", "r"); + FILE *f = fopen("/spiffs/etc/units.conft", "r"); if (f == NULL) { // No units yet, create them. diff -r 6eafc4c2bf3d -r c6bbd1380f22 main/config.h --- a/main/config.h Wed Oct 09 22:51:37 2019 +0200 +++ b/main/config.h Fri Oct 11 13:12:34 2019 +0200 @@ -178,8 +178,14 @@ uint32_t pressure_zero; ///< Zero offset in mV. uint32_t pressure; ///< Pressure in bar * 1000; int mode; ///< Unit mode + uint32_t alarm; ///< Alarm bits } unit_t; +#define ALARM_UNIT_PRESSURE 0x0001 ///< Unit pressure sensor error +#define ALARM_UNIT_TEMPERATURE 0x0002 ///< Unit temperature sensor error +#define ALARM_SYS_TEMPERATURE 0x0004 ///< System temperature sensor error + + /** * @brief Write units to disk. */ diff -r 6eafc4c2bf3d -r c6bbd1380f22 main/task_mqtt.c --- a/main/task_mqtt.c Wed Oct 09 22:51:37 2019 +0200 +++ b/main/task_mqtt.c Fri Oct 11 13:12:34 2019 +0200 @@ -19,8 +19,8 @@ const int TASK_MQTT_DISCONNECT = BIT1; ///< Request MQTT disconnect const int TASK_MQTT_CONNECTED = BIT2; ///< MQTT is connected -const char *sensState[] = { "Ok", "Error" }; -const char *unitMode[] = { "Off", "On" }; +const char *sensState[] = { "OK", "ERROR" }; +const char *unitMode[] = { "OFF", "ON" }; extern DS18B20_State *ds18b20_state; ///< DS18B20 state extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore @@ -76,7 +76,7 @@ { char *tmp; - tmp = xstrcpy((char *)"mbv1.0/co2meter/"); + tmp = xstrcpy((char *)"mbv1.0/co2meters/"); tmp = xstrcat(tmp, msgtype); tmp = xstrcat(tmp, (char *)"/"); tmp = xstrcat(tmp, config.hostname); @@ -106,9 +106,14 @@ payload = xstrcat(payload, units[i].uuid); payload = xstrcat(payload, (char *)"\",\"alias\":\""); payload = xstrcat(payload, units[i].alias); + payload = xstrcat(payload, (char *)"\",\"mode\":\""); + payload = xstrcat(payload, (char *)unitMode[units[i].mode]); + payload = xstrcat(payload, (char *)"\",\"alarm\":"); + sprintf(buf, "%d", units[i].alarm); + payload = xstrcat(payload, buf); // temperature_state temperature_address temperature - payload = xstrcat(payload, (char *)"\",\"temperature\":{\"state\":\""); + payload = xstrcat(payload, (char *)",\"temperature\":{\"state\":\""); payload = xstrcat(payload, (char *)sensState[units[i].temperature_state]); payload = xstrcat(payload, (char *)"\",\"address\":\""); payload = xstrcat(payload, (char *)units[i].temperature_rom_code); @@ -131,9 +136,7 @@ payload = xstrcat(payload, (char *)",\"bar\":"); sprintf(buf, "%.2f", units[i].pressure / 1000.0); payload = xstrcat(payload, buf); - payload = xstrcat(payload, (char *)"},\"mode\":\""); - payload = xstrcat(payload, (char *)unitMode[units[i].mode]); - payload = xstrcat(payload, (char *)"\"}"); + payload = xstrcat(payload, (char *)"}}"); xSemaphoreGive(xSemaphoreUnits); } return payload;