MQTT Homie Beispiel

28. Mai 2017 at 09:45
Print Friendly, PDF & Email

Ein kleines Beispiel, um den Start mit homie zu erleichtern,.
Erklärungen gitb es bei Jan-Piet: http://jpmens.net/2016/03/22/mqtt-on-an-esp8266-thing/


D
as Beispiel unten ist nicht besonders gut, da mit nicht bewusst war, dass das ‘Base topic’ auch ein ‘/’ am Ende erhalten muss: Also statt Tortuga sollte dort Tortuga/ stehen.

Der Code ESP_homie.c (s.u.) wird auf den ESP hochgeladen.

Auf dem MQTT-Server kann man nun Befehle absetzen:

[codesyntax lang=”bash”]

mosquitto_pub -t 'Tortuga133edbe0/relay/on/set' -m 'true'  -h 192.168.178.72

[/codesyntax]

Erläuterung:

MQTT-Nachricht -t 'Tortuga133edbe0/relay/on/set'
MQTT-Message   -m 'true'

MQTT-Server    -h 192.168.172.72

 

Oder mit einem MQTT-Tool wie z.B. MQTT.fx

Zuerst den Thema abonnieren

Den Befehl senden wie bei mosquitto_pub

Anschließend kann man dies bei MQTT.fx sehen

Im debug -Fenster der arduino IDE bzw. eclipse, sieht man, das der input handler aufgerufen wurde.
Nicht jedoch welche Nachrichten gesendet werden.

ESP_Homie.c

[codesyntax lang=”c”]

#include <Homie.h>

#define RELAY_PIN 16

// mosquitto_pub -t 'Tortuga133edbe0/relay/on/set' -m 'true'  -h 192.168.178.72

// define Node: 'relay'
HomieNode relayNode("relay", "relay");

// define property : on
bool relayHandler(String message)
{
    if (message == "true") {
        digitalWrite(RELAY_PIN, HIGH);
        Homie.setNodeProperty(relayNode, "on", "true");
    } else if (message == "false") {
        digitalWrite(RELAY_PIN, LOW);
        Homie.setNodeProperty(relayNode, "on", "false");
    } else {
        return false;
    }

    return true;
}

void setup()
{
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, LOW);

    Homie.setFirmware("h-sensor", "1.0.1");
    relayNode.subscribe("on", relayHandler);
    Homie.registerNode(relayNode);
    Homie.setup();
}

void loop()
{
    Homie.loop();
}

[/codesyntax]