main/task_mqtt.c

changeset 9
1659bd3c7a2b
parent 7
2b337dd92f25
child 10
eee990609da7
--- a/main/task_mqtt.c	Fri Mar 31 21:12:39 2023 +0200
+++ b/main/task_mqtt.c	Sat Apr 01 21:06:59 2023 +0200
@@ -39,6 +39,11 @@
 extern float			solarCurrent;
 extern float			solarPower;
 
+extern uint8_t			Relay1;
+extern uint8_t			Relay2;
+extern uint8_t			Dimmer3;
+extern uint8_t			Dimmer4;
+
 
 void connect_mqtt(bool state)
 {
@@ -133,6 +138,11 @@
 
 
 
+bool do_event_data(char *check, char *topic, char *data) {
+    return false;
+}
+
+
 void publish(void)
 {
     char        		*topic = NULL, *payload = NULL, buf[64];
@@ -190,13 +200,17 @@
 	xSemaphoreGive(xSemaphoreBMP280);
     }
     payload = xstrcat(payload, (char *)"},\"output\":{\"relay1\":");
-
+    sprintf(buf, "%d", Relay1);
+    payload = xstrcat(payload, buf);
     payload = xstrcat(payload, (char *)",\"relay2\":");
-
+    sprintf(buf, "%d", Relay2);
+    payload = xstrcat(payload, buf);
     payload = xstrcat(payload, (char *)",\"dimmer3\":");
-
+    sprintf(buf, "%d", Dimmer3);
+    payload = xstrcat(payload, buf);
     payload = xstrcat(payload, (char *)",\"dimmer4\":");
-
+    sprintf(buf, "%d", Dimmer4);
+    payload = xstrcat(payload, buf);
     payload = xstrcat(payload, (char *)"}}");
     topic = topic_base();
     topic = xstrcat(topic, (char *)"status");
@@ -212,14 +226,18 @@
 
 static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
 {
+    char		*topic = NULL;
+    nvs_handle_t        my_handle;
+
     switch (event->event_id) {
 
         case MQTT_EVENT_CONNECTED:
             ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
-	    char *topic = topic_base();
+	    topic = topic_base();
             topic = xstrcat(topic, (char *)"output/set/#");
             ESP_LOGI(TAG, "Subscribe `%s' id %d", topic, esp_mqtt_client_subscribe(client, topic, 0));
             free(topic);
+	    topic = NULL;
 	    xEventGroupSetBits(xEventGroupMQTT, TASK_MQTT_CONNECTED);
 	    xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_DISCONNECTED);
             break;
@@ -251,9 +269,91 @@
             break;
 
         case MQTT_EVENT_DATA:
-            ESP_LOGI(TAG, "MQTT_EVENT_DATA");
-            printf("TOPIC=%.*s ", event->topic_len, event->topic);
-            printf("DATA=%.*s\r\n", event->data_len, event->data);
+            ESP_LOGI(TAG, "MQTT_EVENT_DATA len=%d", event->data_len);
+	    bool gotit = false;
+	    esp_err_t err;
+	    char data[65];
+	    if (event->data_len < 65)
+		snprintf(data, 64, "%.*s", event->data_len, event->data);
+	    else
+		data[0] = '\0';
+
+	    topic = topic_base();
+            topic = xstrcat(topic, (char *)"output/set/1");
+	    if (strncmp(topic, event->topic, event->topic_len) == 0) {
+		ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data));
+		gotit = true;
+		if ((uint8_t)atoi(data) != Relay1) {
+		    Relay1 = (uint8_t)atoi(data);
+		    err = nvs_open("balkon", NVS_READWRITE, &my_handle);
+		    if (err == ESP_OK) {
+		    	nvs_set_u8(my_handle, (char *)"out1", Relay1);
+		    	nvs_commit(my_handle);
+		    	nvs_close(my_handle);
+		    }
+		}
+	    }
+	    free(topic);
+	    topic = NULL;
+
+	    topic = topic_base();
+            topic = xstrcat(topic, (char *)"output/set/2");
+	    if (strncmp(topic, event->topic, event->topic_len) == 0) {
+                ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data));
+                gotit = true;
+		if ((uint8_t)atoi(data) != Relay2) {
+                    Relay2 = (uint8_t)atoi(data);
+                    err = nvs_open("balkon", NVS_READWRITE, &my_handle);
+                    if (err == ESP_OK) {
+                        nvs_set_u8(my_handle, (char *)"out2", Relay2);
+                        nvs_commit(my_handle);
+                        nvs_close(my_handle);
+                    }
+                }
+            }
+            free(topic);
+            topic = NULL;
+
+	    topic = topic_base();
+            topic = xstrcat(topic, (char *)"output/set/3");
+            if (strncmp(topic, event->topic, event->topic_len) == 0) {
+                ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data));
+                gotit = true;
+		if ((uint8_t)atoi(data) != Dimmer3) {
+                    Dimmer3 = (uint8_t)atoi(data);
+                    err = nvs_open("balkon", NVS_READWRITE, &my_handle);
+                    if (err == ESP_OK) {
+                        nvs_set_u8(my_handle, (char *)"out3", Dimmer3);
+                        nvs_commit(my_handle);
+                        nvs_close(my_handle);
+                    }
+                }
+            }
+            free(topic);
+            topic = NULL;
+
+	    topic = topic_base();
+            topic = xstrcat(topic, (char *)"output/set/4");
+            if (strncmp(topic, event->topic, event->topic_len) == 0) {
+                ESP_LOGI(TAG, "Got %s `%s' %d", topic, data, atoi(data));
+                gotit = true;
+		if ((uint8_t)atoi(data) != Dimmer4) {
+                    Dimmer4 = (uint8_t)atoi(data);
+                    err = nvs_open("balkon", NVS_READWRITE, &my_handle);
+                    if (err == ESP_OK) {
+                        nvs_set_u8(my_handle, (char *)"out4", Dimmer4);
+                        nvs_commit(my_handle);
+                        nvs_close(my_handle);
+                    }
+                }
+            }
+            free(topic);
+            topic = NULL;
+
+	    if (! gotit) {
+            	printf("TOPIC=%.*s ", event->topic_len, event->topic);
+            	printf("DATA=%.*s\r\n", event->data_len, event->data);
+	    }
             break;
 
         case MQTT_EVENT_ERROR:

mercurial