diff --git a/include/MQTTHelper.h b/include/MQTTHelper.h index 29350d5..15eac6c 100644 --- a/include/MQTTHelper.h +++ b/include/MQTTHelper.h @@ -13,6 +13,8 @@ class MQTTHelper { WiFiClient _espClient; PubSubClient _mqttClient; String _will_topic; + String _command_topic; + String _announce_topic; void reconnect(int delayMillis = 5000); bool connect(); @@ -24,6 +26,8 @@ class MQTTHelper { deviceMac.replace(":",""); _identifier = "etxean-"+deviceMac.substring(6); _will_topic = getTopic("online"); + _command_topic = _group + "/command"; + _announce_topic = _group+"/announce"; _mqttClient.setCallback([this] (char* topic, byte* payload, unsigned int length) { this->callback(topic, payload, length); }); } @@ -34,7 +38,7 @@ class MQTTHelper { } void Configure(IPAddress server, uint16 port) { - Serial.println("Configuring MQTT connection to: "+server.toString()+":"+String(port)); + Serial.println("MQTT: configuring connection to "+server.toString()+":"+String(port)); _mqttClient.setServer(server, port); if (_mqttClient.connected()) { connect(); @@ -42,40 +46,48 @@ class MQTTHelper { } void loop() { - static unsigned long lastWill; + static unsigned long lastWillTopicSent; if (!_mqttClient.connected()) { reconnect(); } _mqttClient.loop(); auto now = millis(); - if ((now - lastWill) > 1000) + if ((now - lastWillTopicSent) > 1000) { - lastWill = now; + lastWillTopicSent = now; _mqttClient.publish(_will_topic.c_str(), "true"); } } template - void publish(String sensor, T payload, bool retained = false) { - _mqttClient.publish(getTopic(sensor).c_str(), String(payload).c_str(), retained); + void publish(String node, T payload, bool retained = false, bool debug = true) { + auto topic = getTopic(node); + auto payload_s = String(payload); + if (debug) + Serial.println("MQTT: publish: "+topic+" = "+payload_s); + _mqttClient.publish(topic.c_str(), payload_s.c_str(), retained); } }; -void MQTTHelper::callback(char* topic, byte* payload, unsigned int length) { - Serial.print("Message arrived:"); - Serial.print(topic); - Serial.print(" = "); - for (unsigned int i=0; i())) {