send status of all windows

This commit is contained in:
Flo
2026-03-17 09:31:35 +01:00
parent d1f264045c
commit 210bf06952
4 changed files with 40 additions and 43 deletions
+3 -29
View File
@@ -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":"<name>","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);
}
}
+2 -4
View File
@@ -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);
};
+4 -4
View File
@@ -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_ */
+31 -6
View File
@@ -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);
}
/**
*
*/