Home » Beitrag verschlagwortet mit 'MQTT'

Schlagwort-Archive: MQTT

Dachfenster-Sensor mit Alarm auf dem Handy

Zu tun, Stand 14.März 2021:

  • Installation ESP auf Breadboard. Stabilisieren.
  • Handy-App für die Anzeige des Dachfensterstatus (oder zuerst mal eine PC-App, weil das einfacher ist?)
  • Feuchtigkeitssensor integrieren/Status übermitteln –> Alarm in Handy-App ermöglichen
  • Motor integrieren, der Dachfenster zu zieht, sobald Feuchte festgestellt wird
  • Akku-Betrieb ermöglichen
  • Schlafmodus ermöglichen

 

Hauptgrundlage:

Beschrieben in CT-Artikel 1/2ct.de/yg7t (Libraries), Beispiel-Code

MQTT:

Leit-Artikel: https://www.heise.de/developer/artikel/Kommunikation-ueber-MQTT-3238975.html

MQTT Client

Anstatt die vom CT Heft speziell angefertigte Bootcamp library ist es besser die besser dokumentierte EspMQTTClient zu benutzen.
(Mit bootcamp ist es mir nicht gelungen auf den MQTT-Broker zu verbinden und auch nicht, irgendwelche Logs anzuzeigen.)

EspMQTTClient lässt sich in der Arduino IDE einfach mit 1,2 klicks über Tools > „Manage libraries …“ installieren. Danach kann der Sketch (Programm) SimpleMqttClient benutzt werden um die Interaktion des ESP mit dem MQTT broker auszutesten. Das Programm kann über „File“ > „Examples“ > „Examples from custiom libraries“ geholt werden.

MQTT Broker

Mosquitto-MQTT-Broker auf lokalem Rechner. Benötigte nur Download von Mosquitto-Download-Site. Nach Ausführen der Windows-Installation-Prozedur wird der Server gestartet mit Kommando:

mosquitto -c C:\tmp\mosquitto.conf -v

Damit der broker auch von aussen sichtbar ist, muss das mitgegebene mosquitto.conf file die Zeile

listener 1883 0.0.0.0

enthalten.

 

Zugreifbarkeit des MQTT Brokers prüfen:

Um die vom ESP32 an den MQTT-Broker gesendeten Messges anzusehen habe ich mit MQTT.fx einen lokalen standalone MQTT-Client installiert.

Einfacher ist es (wie im README.md) der Mosqitto-Installation vorgeschlagen

Den server laufen zu lassen:

mosquitto -c C:\tmp\mosquitto.conf -v

Dann auf ein (anwartschaftliches) Topic zu registrieren:

mosquitto_sub -t 'test/topic' -v

Diese Konsole geöffnet lassen.

Dann da auch was rein zu schreiben:

mosquitto_pub -t 'test/topic' -m 'hello world'

Die geschriebene Message sollte nun in der Konsole wo man das Abonnent definiert hat ausgelistet werden.

Remote-Zugreifbarkeit testen

Mit von aussen sichtbarer IP:

mosquitto_sub -h 192.168.178.50 -t 'test/topic' -v

Respektive:

mosquitto_pub -h 192.168.178.50 -t 'test/topic' -m 'hello world'

Eventuell muss die Windows Firewall für 1883 geöffnet werden. Zuvor testen!

Probleme mit der MQTT Interaktion – Broker ist nicht (für den ESP) erreichbar

Per Default werden durch den Mosquitto start zwei Netzwerk-Zugriffs-Definitionen erzeugt, welche duch netstat -an dann so angezeigt werden.

C:\Program Files\mosquitto>netstat -an | find /I "1883"
 TCP 127.0.0.1:1883 0.0.0.0:0 ABHÖREN
 TCP [::1]:1883 [::]:0 ABHÖREN

Remotemässig kann aber nur zugegriffen werden, wenn netstat -an diese anzeigt:

C:\Program Files\mosquitto>netstat -an | find /I "1883"
 TCP 0.0.0.0:1883 0.0.0.0:0 ABHÖREN
 TCP 192.168.178.46:1883 192.168.178.35:59784 WARTEND

–> Erklärung des outputs von netstat -an.

Wenn der MQTT-Broker über diese „öffentliche“ addresse angesprochen wird, so wird von Mosquitto automatisch auch Zugriff mit Passwort verlangt.

Wie man ein Passwortfile anlegt um dann zeight dieser Artikel: http://www.steves-internet-guide.com/mqtt-username-password-example/

Das Passwortfile wird im mosquitto.conf file als

password_file C:\tmp\mosquitto.pw

referenziert. Selbstredend muss mosqitto dann mit der Option -c <pfad_zum_conf_file> gestartet werden.

 

1. Sketch

Ein erster sehr simpler Sketch, der die Schalterwerte aus 3V und Pin33 ausliest und an den MQTT-Broker sendet.

#include "EspMQTTClient.h"
static const int SensorPin = 33;
int sensorValue = 0;
uint16_t statusPacketIdSub = 0;

EspMQTTClient client(
  "FRITZ!Box 7490",
  "Schlaraffenland46",
  "192.168.178.50",  // MQTT Broker server ip
  "esp",   // Can be omitted if not needed
  "geheim",   // Can be omitted if not needed
  "ESP32HPS",     // Client name that uniquely identify your device
  1883              // The MQTT port, default to 1883. this line can be omitted
);


void setup() {
  Serial.begin(115200);
  pinMode(SensorPin, INPUT);
  sensorValue = digitalRead(SensorPin);

  // Optionnal functionnalities of EspMQTTClient :
  client.enableDebuggingMessages(); // Enable debugging messages sent to serial output
  //  client.enableHTTPWebUpdater(); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword.
  // These can be overrited with enableHTTPWebUpdater("user", "password").
  client.enableLastWillMessage("TestClient/lastwill", "I am going offline");  // You can activate the retain flag by setting the third parameter to true

}

// This function is called once everything is connected (Wifi and MQTT)
// WARNING : YOU MUST IMPLEMENT IT IF YOU USE EspMQTTClient
void onConnectionEstablished() {
  do {
    delay(1000);
    int sensorValue = digitalRead(SensorPin);
    if (sensorValue == 0) {
      Serial.println("Sending: Dachfenster is offen!");
      client.publish("dachfenster", "offen"); // You can activate the retain flag by setting the third parameter to true
    } else {
      Serial.println("Sending: Dachfenster ist zu");
      client.publish("dachfenster", "closed"); // You can activate the retain flag by setting the third parameter to true
    }
  } while (true);

}

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

Ist das Programm mal auf den ESP geladen kann dessen USB-Kabel vom PC ausgesteckt werden und z.B. an einen USB-Ladestecker angeschlossen werden.
Das Programm sollte dabei neu gestartet werden und neu beginnen Meldungen an den MQTT-Server zu senden.

Diese Version verbraucht noch ziemlich viel Strom, das das das Schlafengehen (nicht wie im CT Heft beispielcode) implementiert ist.

2. MQTT Client starten

 

c:\Programme\mosquitto>mosquitto -c c:\tmp\mosquitto.conf -v
1616246619: mosquitto version 2.0.9 starting
1616246619: Config loaded from c:\tmp\mosquitto.conf.
1616246619: Opening ipv4 listen socket on port 1883.
1616246619: mosquitto version 2.0.9 running
1616246631: New connection from 192.168.178.35:54203 on port 1883.
1616246631: New client connected from 192.168.178.35:54203 as ESP32HPS (p2, c1, k15, u'esp').
1616246631: Will message specified (18 bytes) (r0, q0).
1616246631:     TestClient/lastwill
1616246631: Sending CONNACK to ESP32HPS (0, 0)
1616246632: Received PUBLISH from ESP32HPS (d0, q0, r0, m0, 'dachfenster', ... (5 bytes))
1616246633: Received PUBLISH from ESP32HPS (d0, q0, r0, m0, 'dachfenster', ... (5 bytes))
1616246634: Received PUBLISH from ESP32HPS (d0, q0, r0, m0, 'dachfenster', ... (5 bytes))

Für Erklärungen siehe oben!

3. Den Abonnenten auf die ‚Dachfenster‘-Meldugen starten:

c:\Programme\mosquitto>mosquitto_sub -h 192.168.178.50 -t dachfenster -u esp -P geheim -v
dachfenster offen
dachfenster offen
dachfenster offen
dachfenster offen
dachfenster offen