iobroker, esp und MQTT

Was macht man mit einem esp? Genauer gesagt einem Nodemcu 8266 , man schaut was damit geht……

Nachdem ein Raspi 3+ auch noch rumlag und ein altes tablet ebenso, habe ich erstmal iobroker auf dem Raspi aufgesetzt. Hierzu gibt es genügend Tutorials im Netz, ich weiss garnichtmehr welchem ich damals gefolgt bin. Wenn iobroker mal läuft, wird man schier erschlagen von den Adaptern die es gibt. Die neue PV Anlage war dank Plenticore Adapter gleich ausgelesen.

Aber zurück zum esp.

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

Die zwei wichtigsten Libs für die Verbindung zum iobroker, einmal die WLAN-Lib für den esp und die MQTT-lib. Als erstes mal die Verbindung zum WLAN.

const char* ssid = "WLAN Name";
const char* password = "WLAN Password"; 
WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) 
    {
      delay(500);
      Serial.print(".");
    }

Bin ich schon drin? Ja, wenn die Zugangsdaten passen war’s das schon! Die Verbindung zum iobroker ist nicht viel komplizierter.

const char* mqtt_server = "192.168.178.46"; //IP Adresse iobroker
// in setup
client.setServer(mqtt_server, 1883);  // Port wie im iobroker

void reconnect() //Funktion zum öffnen der verbindung
{
  // Loop until we're reconnected
  while (!client.connected()) 
  {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    //if you MQTT broker has clientID,username and password
    //please change following line to    if (client.connect(clientId,userName,passWord))
    if (client.connect(clientId.c_str()))
    {
      Serial.println("connected");
     //once connected to MQTT broker, subscribe command if any
      client.subscribe("OsoyooCommand");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      blink();
      delay(100);
      blink();
       delay(100);
      blink();
      // Wait 6 seconds before retrying
      delay(6000);
    }
  }

//im loop
if (!client.connected()) {
    reconnect();
  } 

  if(client.connected()){

   client.publish("Datenpunkt_name", "datenstring");
   ........
}

Mit passenden Einstellungen im MQTT Adapter des iobroker baut sich der Datenpunkt auf und wieder mit jedem loop aktualisiert.

im iobroker MQTT Adapter:

TYP:
Server/Broker
IP-Adresse:
[IPv4] IP des iobroker [ETH-0] auswählen
Port:
1883

Bei mir laufen momentan zwei ESP mit MQTT, einer liest per RS485 den SDM630 Stromzähler aus und am anderen hängen vier DS18b20 Temperaturfühler für Boiler und Solartemperatur.


Beitrag veröffentlicht

in

von

Schlagwörter: