17 esp_mqtt_client_handle_t client; ///< MQTT client handle |
17 esp_mqtt_client_handle_t client; ///< MQTT client handle |
18 const int TASK_MQTT_CONNECT = BIT0; ///< Request MQTT connection |
18 const int TASK_MQTT_CONNECT = BIT0; ///< Request MQTT connection |
19 const int TASK_MQTT_DISCONNECT = BIT1; ///< Request MQTT disconnect |
19 const int TASK_MQTT_DISCONNECT = BIT1; ///< Request MQTT disconnect |
20 const int TASK_MQTT_CONNECTED = BIT2; ///< MQTT is connected |
20 const int TASK_MQTT_CONNECTED = BIT2; ///< MQTT is connected |
21 |
21 |
22 const char *sensState[] = { "Ok", "Error" }; |
22 const char *sensState[] = { "OK", "ERROR" }; |
23 const char *unitMode[] = { "Off", "On" }; |
23 const char *unitMode[] = { "OFF", "ON" }; |
24 |
24 |
25 extern DS18B20_State *ds18b20_state; ///< DS18B20 state |
25 extern DS18B20_State *ds18b20_state; ///< DS18B20 state |
26 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore |
26 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore |
27 extern ADC_State *adc_state; ///< ADC state |
27 extern ADC_State *adc_state; ///< ADC state |
28 extern SemaphoreHandle_t xSemaphoreADC; ///< ADC lock semaphore |
28 extern SemaphoreHandle_t xSemaphoreADC; ///< ADC lock semaphore |
74 |
74 |
75 char *topic_base(char *msgtype) |
75 char *topic_base(char *msgtype) |
76 { |
76 { |
77 char *tmp; |
77 char *tmp; |
78 |
78 |
79 tmp = xstrcpy((char *)"mbv1.0/co2meter/"); |
79 tmp = xstrcpy((char *)"mbv1.0/co2meters/"); |
80 tmp = xstrcat(tmp, msgtype); |
80 tmp = xstrcat(tmp, msgtype); |
81 tmp = xstrcat(tmp, (char *)"/"); |
81 tmp = xstrcat(tmp, (char *)"/"); |
82 tmp = xstrcat(tmp, config.hostname); |
82 tmp = xstrcat(tmp, config.hostname); |
83 return tmp; |
83 return tmp; |
84 } |
84 } |
104 if (xSemaphoreTake(xSemaphoreUnits, 25) == pdTRUE) { |
104 if (xSemaphoreTake(xSemaphoreUnits, 25) == pdTRUE) { |
105 payload = xstrcpy((char *)"{\"uuid\":\""); |
105 payload = xstrcpy((char *)"{\"uuid\":\""); |
106 payload = xstrcat(payload, units[i].uuid); |
106 payload = xstrcat(payload, units[i].uuid); |
107 payload = xstrcat(payload, (char *)"\",\"alias\":\""); |
107 payload = xstrcat(payload, (char *)"\",\"alias\":\""); |
108 payload = xstrcat(payload, units[i].alias); |
108 payload = xstrcat(payload, units[i].alias); |
|
109 payload = xstrcat(payload, (char *)"\",\"mode\":\""); |
|
110 payload = xstrcat(payload, (char *)unitMode[units[i].mode]); |
|
111 payload = xstrcat(payload, (char *)"\",\"alarm\":"); |
|
112 sprintf(buf, "%d", units[i].alarm); |
|
113 payload = xstrcat(payload, buf); |
109 |
114 |
110 // temperature_state temperature_address temperature |
115 // temperature_state temperature_address temperature |
111 payload = xstrcat(payload, (char *)"\",\"temperature\":{\"state\":\""); |
116 payload = xstrcat(payload, (char *)",\"temperature\":{\"state\":\""); |
112 payload = xstrcat(payload, (char *)sensState[units[i].temperature_state]); |
117 payload = xstrcat(payload, (char *)sensState[units[i].temperature_state]); |
113 payload = xstrcat(payload, (char *)"\",\"address\":\""); |
118 payload = xstrcat(payload, (char *)"\",\"address\":\""); |
114 payload = xstrcat(payload, (char *)units[i].temperature_rom_code); |
119 payload = xstrcat(payload, (char *)units[i].temperature_rom_code); |
115 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
120 payload = xstrcat(payload, (char *)"\",\"temperature\":"); |
116 sprintf(buf, "%.3f", units[i].temperature / 1000.0); |
121 sprintf(buf, "%.3f", units[i].temperature / 1000.0); |
129 sprintf(buf, "%.3f", units[i].pressure_zero / 1000.0); |
134 sprintf(buf, "%.3f", units[i].pressure_zero / 1000.0); |
130 payload = xstrcat(payload, buf); |
135 payload = xstrcat(payload, buf); |
131 payload = xstrcat(payload, (char *)",\"bar\":"); |
136 payload = xstrcat(payload, (char *)",\"bar\":"); |
132 sprintf(buf, "%.2f", units[i].pressure / 1000.0); |
137 sprintf(buf, "%.2f", units[i].pressure / 1000.0); |
133 payload = xstrcat(payload, buf); |
138 payload = xstrcat(payload, buf); |
134 payload = xstrcat(payload, (char *)"},\"mode\":\""); |
139 payload = xstrcat(payload, (char *)"}}"); |
135 payload = xstrcat(payload, (char *)unitMode[units[i].mode]); |
|
136 payload = xstrcat(payload, (char *)"\"}"); |
|
137 xSemaphoreGive(xSemaphoreUnits); |
140 xSemaphoreGive(xSemaphoreUnits); |
138 } |
141 } |
139 return payload; |
142 return payload; |
140 } |
143 } |
141 |
144 |