send status of all windows
This commit is contained in:
+2
-28
@@ -62,7 +62,7 @@ bool MyMqttClient::ensureConnected()
|
|||||||
{
|
{
|
||||||
Serial.println("[MQTT] Connected");
|
Serial.println("[MQTT] Connected");
|
||||||
mqttClient.publish(MQTT_TOPIC_STATUS,
|
mqttClient.publish(MQTT_TOPIC_STATUS,
|
||||||
"{\"event\":\"hello\",\"client\":\"" MQTT_CLIENT_ID VERSION_STR "\"}");
|
"{\"e\":\"hello\",\"client\":\"" MQTT_CLIENT_ID VERSION_STR "\"}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -72,32 +72,6 @@ bool MyMqttClient::ensureConnected()
|
|||||||
return ok;
|
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.
|
* Publishes an arbitrary status payload to MQTT_TOPIC_STATUS.
|
||||||
*/
|
*/
|
||||||
@@ -140,7 +114,7 @@ void MyMqttClient::onLoop()
|
|||||||
{
|
{
|
||||||
char payload[48];
|
char payload[48];
|
||||||
snprintf(payload, sizeof(payload),
|
snprintf(payload, sizeof(payload),
|
||||||
"{\"rssi\":%d, \"variant\": \"" PROJECT_VARIANT "\" }", (int)WiFi.RSSI());
|
"{\"rssi\":%d }", (int)WiFi.RSSI());
|
||||||
mqttClient.publish(MQTT_TOPIC_RSSI, payload);
|
mqttClient.publish(MQTT_TOPIC_RSSI, payload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -16,9 +16,8 @@
|
|||||||
#define MQTT_BROKER_IP "flokke.de"
|
#define MQTT_BROKER_IP "flokke.de"
|
||||||
#define MQTT_BROKER_PORT 1883
|
#define MQTT_BROKER_PORT 1883
|
||||||
#define MQTT_CLIENT_ID "Fensterpiepser" PROJECT_VARIANT
|
#define MQTT_CLIENT_ID "Fensterpiepser" PROJECT_VARIANT
|
||||||
#define MQTT_TOPIC_FENSTER "fenster/events"
|
#define MQTT_TOPIC_STATUS "fenster/status/" PROJECT_VARIANT
|
||||||
#define MQTT_TOPIC_STATUS "fenster/status"
|
#define MQTT_TOPIC_RSSI "fenster/rssi/" PROJECT_VARIANT
|
||||||
#define MQTT_TOPIC_RSSI "fenster/rssi"
|
|
||||||
// Optional: set to "" if no authentication required
|
// Optional: set to "" if no authentication required
|
||||||
#define MQTT_USER "lightcontrol"
|
#define MQTT_USER "lightcontrol"
|
||||||
#define MQTT_PASSWORD "mR9o3OYpAzUZvS"
|
#define MQTT_PASSWORD "mR9o3OYpAzUZvS"
|
||||||
@@ -38,7 +37,6 @@ private:
|
|||||||
public:
|
public:
|
||||||
MyMqttClient();
|
MyMqttClient();
|
||||||
|
|
||||||
void publishFensterEvent(const char* name, bool bOpen);
|
|
||||||
void onLoop();
|
void onLoop();
|
||||||
void publishStatus(const char* payload);
|
void publishStatus(const char* payload);
|
||||||
};
|
};
|
||||||
|
|||||||
+4
-4
@@ -11,13 +11,13 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#if VERSION_DG_ONLY
|
#if VERSION_DG_ONLY
|
||||||
#define PROJECT_VARIANT "_DG"
|
#define PROJECT_VARIANT "DG"
|
||||||
#else
|
#else
|
||||||
#define PROJECT_VARIANT "_EG"
|
#define PROJECT_VARIANT "EG"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PROJECT_NAME "FENSTER_PIEPSER_NODEMCU_32_S" PROJECT_VARIANT
|
#define PROJECT_NAME "FENSTER_PIEPSER_NODEMCU_32_S_" PROJECT_VARIANT
|
||||||
#define VERSION_STR "v2.0.1"
|
#define VERSION_STR "_v2.0.3"
|
||||||
|
|
||||||
|
|
||||||
#endif /* VERSION_H_ */
|
#endif /* VERSION_H_ */
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ static uint32_t tBeepingStartWithoutWindowClose = 0u;
|
|||||||
|
|
||||||
static void handleManualInputRequest();
|
static void handleManualInputRequest();
|
||||||
static void updateWaittime(void);
|
static void updateWaittime(void);
|
||||||
|
static void publishAllFensterStatus(const char *event);
|
||||||
static void xcpLoop(void);
|
static void xcpLoop(void);
|
||||||
#ifdef TEST_WAITTIME
|
#ifdef TEST_WAITTIME
|
||||||
static void testWaitTime(void);
|
static void testWaitTime(void);
|
||||||
@@ -461,8 +462,7 @@ static void handleKeyReceived(void)
|
|||||||
bUpdateDisp = true;
|
bUpdateDisp = true;
|
||||||
dataSender.requestSend();
|
dataSender.requestSend();
|
||||||
bRequestShortBeep = true;
|
bRequestShortBeep = true;
|
||||||
myMqttClient.publishFensterEvent(alleFenster[i]->name,
|
publishAllFensterStatus("move");
|
||||||
lastKeyDirection == DIRECTION_OPEN);
|
|
||||||
if (lastKeyDirection == DIRECTION_CLOSE)
|
if (lastKeyDirection == DIRECTION_CLOSE)
|
||||||
{
|
{
|
||||||
tBeepingStartWithoutWindowClose = 0u;
|
tBeepingStartWithoutWindowClose = 0u;
|
||||||
@@ -488,10 +488,7 @@ static void handleKeyReceived(void)
|
|||||||
tBeepingStartWithoutWindowClose = Seconds::Get();
|
tBeepingStartWithoutWindowClose = Seconds::Get();
|
||||||
piepPattern->Start(DOUT_PIEP_PWM);
|
piepPattern->Start(DOUT_PIEP_PWM);
|
||||||
bUpdateDisp = true;
|
bUpdateDisp = true;
|
||||||
|
publishAllFensterStatus("beep");
|
||||||
char payload[64];
|
|
||||||
snprintf(payload, sizeof(payload), "{\"event\":\"start_beep\", \"variant\": \"" PROJECT_VARIANT "\" }");
|
|
||||||
myMqttClient.publishStatus(payload);
|
|
||||||
}
|
}
|
||||||
shallPiepPrevious = shallPiepNew;
|
shallPiepPrevious = shallPiepNew;
|
||||||
numberWindowsOpen = numberWindowsOpenNew;
|
numberWindowsOpen = numberWindowsOpenNew;
|
||||||
@@ -520,6 +517,34 @@ static void testWaitTime()
|
|||||||
}
|
}
|
||||||
#endif
|
#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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user