main/task_mqtt.c

changeset 9
1659bd3c7a2b
parent 7
2b337dd92f25
child 10
eee990609da7
equal deleted inserted replaced
8:115e93bf8796 9:1659bd3c7a2b
37 extern float batteryPower; 37 extern float batteryPower;
38 extern float solarVolts; 38 extern float solarVolts;
39 extern float solarCurrent; 39 extern float solarCurrent;
40 extern float solarPower; 40 extern float solarPower;
41 41
42 extern uint8_t Relay1;
43 extern uint8_t Relay2;
44 extern uint8_t Dimmer3;
45 extern uint8_t Dimmer4;
46
42 47
43 void connect_mqtt(bool state) 48 void connect_mqtt(bool state)
44 { 49 {
45 if (state) 50 if (state)
46 xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECT); 51 xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECT);
131 esp_mqtt_client_publish(client, topic, NULL, 0, 1, 0); 136 esp_mqtt_client_publish(client, topic, NULL, 0, 1, 0);
132 } 137 }
133 138
134 139
135 140
141 bool do_event_data(char *check, char *topic, char *data) {
142 return false;
143 }
144
145
136 void publish(void) 146 void publish(void)
137 { 147 {
138 char *topic = NULL, *payload = NULL, buf[64]; 148 char *topic = NULL, *payload = NULL, buf[64];
139 const esp_app_desc_t *app_desc = esp_app_get_description(); 149 const esp_app_desc_t *app_desc = esp_app_get_description();
140 150
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;

mercurial