diff --git a/src/MyMqttClient.cpp b/src/MyMqttClient.cpp index 140ac01..4bacad2 100644 --- a/src/MyMqttClient.cpp +++ b/src/MyMqttClient.cpp @@ -62,7 +62,7 @@ bool MyMqttClient::ensureConnected() { Serial.println("[MQTT] Connected"); mqttClient.publish(MQTT_TOPIC_STATUS, - "{\"event\":\"hello\",\"client\":\"" MQTT_CLIENT_ID VERSION_STR "\"}"); + "{\"e\":\"hello\",\"client\":\"" MQTT_CLIENT_ID VERSION_STR "\"}"); } else { @@ -72,32 +72,6 @@ bool MyMqttClient::ensureConnected() return ok; } -/** - * Publishes a window open/close event to MQTT_TOPIC_FENSTER. - * Payload: {"fenster":"","event":"open"|"close"} - */ -void MyMqttClient::publishFensterEvent(const char* name, bool bOpen) -{ - if (!ensureConnected()) - { - Serial.println("[MQTT] Cannot publish – not connected"); - return; - } - - char payload[64]; - snprintf(payload, sizeof(payload), - "{\"fenster\":\"%s\",\"event\":\"%s\"}", name, bOpen ? "open" : "close"); - - if (mqttClient.publish(MQTT_TOPIC_FENSTER, payload)) - { - Serial.printf("[MQTT] Published: %s\n", payload); - } - else - { - Serial.println("[MQTT] Publish failed"); - } -} - /** * Publishes an arbitrary status payload to MQTT_TOPIC_STATUS. */ @@ -107,7 +81,7 @@ void MyMqttClient::publishStatus(const char* payload) { return; } - mqttClient.publish(MQTT_TOPIC_STATUS, payload); + mqttClient.publish(MQTT_TOPIC_STATUS , payload); } /** @@ -140,7 +114,7 @@ void MyMqttClient::onLoop() { char payload[48]; snprintf(payload, sizeof(payload), - "{\"rssi\":%d, \"variant\": \"" PROJECT_VARIANT "\" }", (int)WiFi.RSSI()); + "{\"rssi\":%d }", (int)WiFi.RSSI()); mqttClient.publish(MQTT_TOPIC_RSSI, payload); } } diff --git a/src/MyMqttClient.h b/src/MyMqttClient.h index 584d28b..b16a442 100644 --- a/src/MyMqttClient.h +++ b/src/MyMqttClient.h @@ -16,9 +16,8 @@ #define MQTT_BROKER_IP "flokke.de" #define MQTT_BROKER_PORT 1883 #define MQTT_CLIENT_ID "Fensterpiepser" PROJECT_VARIANT -#define MQTT_TOPIC_FENSTER "fenster/events" -#define MQTT_TOPIC_STATUS "fenster/status" -#define MQTT_TOPIC_RSSI "fenster/rssi" +#define MQTT_TOPIC_STATUS "fenster/status/" PROJECT_VARIANT +#define MQTT_TOPIC_RSSI "fenster/rssi/" PROJECT_VARIANT // Optional: set to "" if no authentication required #define MQTT_USER "lightcontrol" #define MQTT_PASSWORD "mR9o3OYpAzUZvS" @@ -38,7 +37,6 @@ private: public: MyMqttClient(); - void publishFensterEvent(const char* name, bool bOpen); void onLoop(); void publishStatus(const char* payload); }; diff --git a/src/Version.h b/src/Version.h index 7c48057..e4120c2 100644 --- a/src/Version.h +++ b/src/Version.h @@ -11,13 +11,13 @@ #include "main.h" #if VERSION_DG_ONLY -#define PROJECT_VARIANT "_DG" +#define PROJECT_VARIANT "DG" #else -#define PROJECT_VARIANT "_EG" +#define PROJECT_VARIANT "EG" #endif -#define PROJECT_NAME "FENSTER_PIEPSER_NODEMCU_32_S" PROJECT_VARIANT -#define VERSION_STR "v2.0.1" +#define PROJECT_NAME "FENSTER_PIEPSER_NODEMCU_32_S_" PROJECT_VARIANT +#define VERSION_STR "_v2.0.3" #endif /* VERSION_H_ */ diff --git a/src/fensterPiepser_NodeMCU_32S.cpp b/src/fensterPiepser_NodeMCU_32S.cpp index 4e2b8c1..88976f2 100644 --- a/src/fensterPiepser_NodeMCU_32S.cpp +++ b/src/fensterPiepser_NodeMCU_32S.cpp @@ -147,6 +147,7 @@ static uint32_t tBeepingStartWithoutWindowClose = 0u; static void handleManualInputRequest(); static void updateWaittime(void); +static void publishAllFensterStatus(const char *event); static void xcpLoop(void); #ifdef TEST_WAITTIME static void testWaitTime(void); @@ -461,8 +462,7 @@ static void handleKeyReceived(void) bUpdateDisp = true; dataSender.requestSend(); bRequestShortBeep = true; - myMqttClient.publishFensterEvent(alleFenster[i]->name, - lastKeyDirection == DIRECTION_OPEN); + publishAllFensterStatus("move"); if (lastKeyDirection == DIRECTION_CLOSE) { tBeepingStartWithoutWindowClose = 0u; @@ -488,10 +488,7 @@ static void handleKeyReceived(void) tBeepingStartWithoutWindowClose = Seconds::Get(); piepPattern->Start(DOUT_PIEP_PWM); bUpdateDisp = true; - - char payload[64]; - snprintf(payload, sizeof(payload), "{\"event\":\"start_beep\", \"variant\": \"" PROJECT_VARIANT "\" }"); - myMqttClient.publishStatus(payload); + publishAllFensterStatus("beep"); } shallPiepPrevious = shallPiepNew; numberWindowsOpen = numberWindowsOpenNew; @@ -520,6 +517,34 @@ static void testWaitTime() } #endif +static void publishAllFensterStatus(const char *event) +{ + char payload[256]; + sprintf(payload, "{ \"e\": \"%s\", \"n\": %d, \"f\": [", event, NUM_FENSTER); + for (uint8_t i = 0; i < NUM_FENSTER; i++) + { + if (i>0) strcat(payload, ","); + strcat(payload, "\""); + strcat(payload, alleFenster[i]->name); + strcat(payload, "\""); + } + strcat(payload, "], \"o\" : ["); + for (uint8_t i = 0; i < NUM_FENSTER; i++) + { + if (i>0) strcat(payload, ","); + strcat(payload, alleFenster[i]->IsOpen() ? "1" : "0"); + } + strcat(payload, "], \"b\" : ["); + for (uint8_t i = 0; i < NUM_FENSTER; i++) + { + if (i>0) strcat(payload, ","); + strcat(payload, alleFenster[i]->ShallPiep() ? "1" : "0"); + } + strcat(payload, "] }"); + + myMqttClient.publishStatus(payload); +} + /** * */