188 sprintf(buf, "%.1f", bmp280_state->pressure / 100.0); |
198 sprintf(buf, "%.1f", bmp280_state->pressure / 100.0); |
189 payload = xstrcat(payload, buf); |
199 payload = xstrcat(payload, buf); |
190 xSemaphoreGive(xSemaphoreBMP280); |
200 xSemaphoreGive(xSemaphoreBMP280); |
191 } |
201 } |
192 payload = xstrcat(payload, (char *)"},\"output\":{\"relay1\":"); |
202 payload = xstrcat(payload, (char *)"},\"output\":{\"relay1\":"); |
193 |
203 sprintf(buf, "%d", Relay1); |
|
204 payload = xstrcat(payload, buf); |
194 payload = xstrcat(payload, (char *)",\"relay2\":"); |
205 payload = xstrcat(payload, (char *)",\"relay2\":"); |
195 |
206 sprintf(buf, "%d", Relay2); |
|
207 payload = xstrcat(payload, buf); |
196 payload = xstrcat(payload, (char *)",\"dimmer3\":"); |
208 payload = xstrcat(payload, (char *)",\"dimmer3\":"); |
197 |
209 sprintf(buf, "%d", Dimmer3); |
|
210 payload = xstrcat(payload, buf); |
198 payload = xstrcat(payload, (char *)",\"dimmer4\":"); |
211 payload = xstrcat(payload, (char *)",\"dimmer4\":"); |
199 |
212 sprintf(buf, "%d", Dimmer4); |
|
213 payload = xstrcat(payload, buf); |
200 payload = xstrcat(payload, (char *)"}}"); |
214 payload = xstrcat(payload, (char *)"}}"); |
201 topic = topic_base(); |
215 topic = topic_base(); |
202 topic = xstrcat(topic, (char *)"status"); |
216 topic = xstrcat(topic, (char *)"status"); |
203 ESP_LOGI(TAG, "%s %s", topic, payload); |
217 ESP_LOGI(TAG, "%s %s", topic, payload); |
204 // publisher(topic, payload); |
218 // publisher(topic, payload); |
210 |
224 |
211 |
225 |
212 |
226 |
213 static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event) |
227 static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event) |
214 { |
228 { |
|
229 char *topic = NULL; |
|
230 nvs_handle_t my_handle; |
|
231 |
215 switch (event->event_id) { |
232 switch (event->event_id) { |
216 |
233 |
217 case MQTT_EVENT_CONNECTED: |
234 case MQTT_EVENT_CONNECTED: |
218 ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); |
235 ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); |
219 char *topic = topic_base(); |
236 topic = topic_base(); |
220 topic = xstrcat(topic, (char *)"output/set/#"); |
237 topic = xstrcat(topic, (char *)"output/set/#"); |
221 ESP_LOGI(TAG, "Subscribe `%s' id %d", topic, esp_mqtt_client_subscribe(client, topic, 0)); |
238 ESP_LOGI(TAG, "Subscribe `%s' id %d", topic, esp_mqtt_client_subscribe(client, topic, 0)); |
222 free(topic); |
239 free(topic); |
|
240 topic = NULL; |
223 xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECTED); |
241 xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECTED); |
224 xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED); |
242 xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED); |
225 break; |
243 break; |
226 |
244 |
227 case MQTT_EVENT_DISCONNECTED: |
245 case MQTT_EVENT_DISCONNECTED: |
249 ESP_LOGE(TAG, "mqtt_event_handler_cb(() lock error event"); |
267 ESP_LOGE(TAG, "mqtt_event_handler_cb(() lock error event"); |
250 } |
268 } |
251 break; |
269 break; |
252 |
270 |
253 case MQTT_EVENT_DATA: |
271 case MQTT_EVENT_DATA: |
254 ESP_LOGI(TAG, "MQTT_EVENT_DATA"); |
272 ESP_LOGI(TAG, "MQTT_EVENT_DATA len=%d", event->data_len); |
255 printf("TOPIC=%.*s ", event->topic_len, event->topic); |
273 bool gotit = false; |
256 printf("DATA=%.*s\r\n", event->data_len, event->data); |
274 esp_err_t err; |
|
275 char data[65]; |
|
276 if (event->data_len < 65) |
|
277 snprintf(data, 64, "%.*s", event->data_len, event->data); |
|
278 else |
|
279 data[0] = '\0'; |
|
280 |
|
281 topic = topic_base(); |
|
282 topic = xstrcat(topic, (char *)"output/set/1"); |
|
283 if (strncmp(topic, event->topic, event->topic_len) == 0) { |
|
284 ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); |
|
285 gotit = true; |
|
286 if ((uint8_t)atoi(data) != Relay1) { |
|
287 Relay1 = (uint8_t)atoi(data); |
|
288 err = nvs_open("balkon", NVS_READWRITE, &my_handle); |
|
289 if (err == ESP_OK) { |
|
290 nvs_set_u8(my_handle, (char *)"out1", Relay1); |
|
291 nvs_commit(my_handle); |
|
292 nvs_close(my_handle); |
|
293 } |
|
294 } |
|
295 } |
|
296 free(topic); |
|
297 topic = NULL; |
|
298 |
|
299 topic = topic_base(); |
|
300 topic = xstrcat(topic, (char *)"output/set/2"); |
|
301 if (strncmp(topic, event->topic, event->topic_len) == 0) { |
|
302 ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); |
|
303 gotit = true; |
|
304 if ((uint8_t)atoi(data) != Relay2) { |
|
305 Relay2 = (uint8_t)atoi(data); |
|
306 err = nvs_open("balkon", NVS_READWRITE, &my_handle); |
|
307 if (err == ESP_OK) { |
|
308 nvs_set_u8(my_handle, (char *)"out2", Relay2); |
|
309 nvs_commit(my_handle); |
|
310 nvs_close(my_handle); |
|
311 } |
|
312 } |
|
313 } |
|
314 free(topic); |
|
315 topic = NULL; |
|
316 |
|
317 topic = topic_base(); |
|
318 topic = xstrcat(topic, (char *)"output/set/3"); |
|
319 if (strncmp(topic, event->topic, event->topic_len) == 0) { |
|
320 ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); |
|
321 gotit = true; |
|
322 if ((uint8_t)atoi(data) != Dimmer3) { |
|
323 Dimmer3 = (uint8_t)atoi(data); |
|
324 err = nvs_open("balkon", NVS_READWRITE, &my_handle); |
|
325 if (err == ESP_OK) { |
|
326 nvs_set_u8(my_handle, (char *)"out3", Dimmer3); |
|
327 nvs_commit(my_handle); |
|
328 nvs_close(my_handle); |
|
329 } |
|
330 } |
|
331 } |
|
332 free(topic); |
|
333 topic = NULL; |
|
334 |
|
335 topic = topic_base(); |
|
336 topic = xstrcat(topic, (char *)"output/set/4"); |
|
337 if (strncmp(topic, event->topic, event->topic_len) == 0) { |
|
338 ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data)); |
|
339 gotit = true; |
|
340 if ((uint8_t)atoi(data) != Dimmer4) { |
|
341 Dimmer4 = (uint8_t)atoi(data); |
|
342 err = nvs_open("balkon", NVS_READWRITE, &my_handle); |
|
343 if (err == ESP_OK) { |
|
344 nvs_set_u8(my_handle, (char *)"out4", Dimmer4); |
|
345 nvs_commit(my_handle); |
|
346 nvs_close(my_handle); |
|
347 } |
|
348 } |
|
349 } |
|
350 free(topic); |
|
351 topic = NULL; |
|
352 |
|
353 if (! gotit) { |
|
354 printf("TOPIC=%.*s ", event->topic_len, event->topic); |
|
355 printf("DATA=%.*s\r\n", event->data_len, event->data); |
|
356 } |
257 break; |
357 break; |
258 |
358 |
259 case MQTT_EVENT_ERROR: |
359 case MQTT_EVENT_ERROR: |
260 ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); |
360 ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); |
261 break; |
361 break; |