Added alarm flag for units.

Fri, 11 Oct 2019 13:12:34 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 11 Oct 2019 13:12:34 +0200
changeset 8
c6bbd1380f22
parent 7
6eafc4c2bf3d
child 9
a85995941d0d

Added alarm flag for units.

main/co2meter.c file | annotate | diff | comparison | revisions
main/config.c file | annotate | diff | comparison | revisions
main/config.h file | annotate | diff | comparison | revisions
main/task_mqtt.c file | annotate | diff | comparison | revisions
--- 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;
--- 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.
--- 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.
  */
--- 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;

mercurial