Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. ESP8266-MQTT-Sensoren

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

ESP8266-MQTT-Sensoren

Scheduled Pinned Locked Moved Praktische Anwendungen (Showcase)
24 Posts 7 Posters 14.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    starfish
    wrote on last edited by
    #12

    dank tatkräftiger Unterstützung von AndyUM61 konnte ich 2 Relais bzw. LED-Ausgaenge implementieren. Dazu muss der Original-Sketch leicht abgeändert werden. Die ursprüngliche Reset-Funktion habe ich entfernt, da ich sie so nicht benötige.

    ! ```
    `////////////////////////////////////////////////////////////////////////////////
    // MQTT - Tuersensor + Lichtsensor
    //
    // Sensor1 (Anschluss PIR)
    // Pin VCC -> +5V
    // Pin DAT -> SENSORPIN1
    // Pin GND -> GND
    //
    // Sensor 2 (LowAktiv)
    // Kontakt/ Schalter zwischen SENSORPIN2 und GND
    //
    // Anschluss Lichtsensor
    // +3,3V -> Fotowiederstand -> LIGHTPIN <- 470R-Resistor <- GND
    //
    // mod fuer 2 Relais oder Led-Ausgaenge 8_1_2017 by starfish
    //
    ////////////////////////////////////////////////////////////////////////////////
    ! // #define DEBUG // Debug-Modus einschalten fuer spezielle Ausgaben ueber Serial
    ! #define RESETPIN 12 // Pin fuer Relais 1 (ex SoftResetFunktion (verbunden mit RST))
    #define RELAISPIN 13 // Pin fuer Relais 2 /// <----- EINGEFÜGT ------------
    #define LEDPIN 2 // LED fest verdrahtet auf ESP8266-12E auf GPIO02 -> 2
    #define SENSORPIN1 4 // Pin entsprechend der GPIO z.B GPIO04 -> 4
    #define SENSORPIN2 5
    #define LIGHTPIN A0 // ESP8266 ADC-Pin
    ! #include <esp8266wifi.h>
    #include <pubsubclient.h>
    ! // Netzwerk-Settings <-------------------------!!ANPASSEN!!
    const char* ssid = "?????";
    const char* password = "???????????";
    const char* USE_DHCP = "off"; // "on" fuer DHCP
    IPAddress Myip(192, 168, 0, ???); //static IP address (Sensor)
    IPAddress gateway(192, 168, 0, ???); //gateway
    IPAddress subnet(255, 255, 255, 0);//subnet
    ! //// MQTT-Settings
    IPAddress mqtt_server(192,168,0,???); // IP-MQTT-Broker
    const char* mqtt_username = "user"; // MQTT-User
    const char* mqtt_key = "pass"; // MQTT-Pass
    ! #define BASE "TuerSensor01" // <---------------!!ClientID Anpassen!!
    #define mqtt_client_id BASE
    #define mqtt_topics_ip BASE "/IP"
    #define mqtt_topics_light BASE "/Light"
    #define mqtt_topics_sensor1 BASE "/Sensor1"
    #define mqtt_topics_sensor2 BASE "/Sensor2"
    #define mqtt_topics_reset BASE "/RESET"
    #define mqtt_topics_relais BASE "/Relais" /// <----- EINGEFÜGT ------------
    ! WiFiClient espClient;
    PubSubClient client(espClient);
    ! char message_sensor1[20];
    char message_sensor2[20];
    char message_light[20];
    const char* sensor1 = "-?-";
    const char* sensor2 = "-?-";
    const char* res = "0";
    const char* relais = "0"; /// <----- EINGEFÜGT ------------
    byte s1 = 1;
    byte s2 = 1;
    byte li = 1;
    ! void setup() {
    pinMode(RESETPIN, OUTPUT);
    digitalWrite(RESETPIN, HIGH);

    pinMode(SENSORPIN1, INPUT_PULLUP);
    pinMode(SENSORPIN2, INPUT_PULLUP);
    pinMode(LEDPIN, OUTPUT);
    pinMode(RELAISPIN, OUTPUT); /// <----- EINGEFÜGT ------------
    digitalWrite(RELAISPIN, LOW);

    !
    Serial.begin(115200);
    if(USE_DHCP == "off") {setup_wifi();}
    client.setServer(mqtt_server, 1883);
    client.setCallback(callback);
    client.setClient(espClient);
    }
    ! void setup_wifi() {
    Serial.println("");
    delay(10);
    Serial.print("Connecting to ");
    Serial.println(ssid);
    if(USE_DHCP == "off") {WiFi.config(Myip, gateway, subnet); }
    WiFi.begin(ssid, password);
    ! while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    ! Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    }
    ! //// Callback Funktion von MQTT. (Hier nur für Topic RESET)
    void callback(char* topic, byte* payload, unsigned int length) {
    int i = 0;
    char message_buff[100];
    Serial.print("Empfangen: " + String(topic));
    for(i=0; i <length; i++)/{/message_buff[i]="payload[i];" }/;/string/msgstring="String(message_buff);" konvertierung/der/nachricht/in/ein/serial.println("/-="">" + msgString);

    /// <----- EINGEFÜGT ------------ alter RESET-Teil entfernt
    if (String(topic) == mqtt_topics_reset){
    if (msgString == "1"){
    Serial.println("Relais1 ein");
    digitalWrite(RESETPIN, HIGH);
    }
    }
    if (String(topic) == mqtt_topics_reset){
    if (msgString == "0"){
    Serial.println("Relais1 aus");
    digitalWrite(RESETPIN, LOW);
    }
    }

    ! if (String(topic) == mqtt_topics_relais){
    if (msgString == "1"){
    Serial.println("Relais2 ein");
    digitalWrite(RELAISPIN, HIGH);
    }
    }
    if (String(topic) == mqtt_topics_relais){
    if (msgString == "0"){
    Serial.println("Relais2 aus");
    digitalWrite(RELAISPIN, LOW);
    }
    }
    /// <----- EINGEFÜGT bis hier ------------
    }
    ! void reconnect() {
    // Loop until we're reconnected
    while (!client.connected()) {
    Serial.println(BASE);
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect(mqtt_client_id,mqtt_username,mqtt_key)) {
    Serial.println("connected");
    // IP-Adresse umwandeln und publish
    IPAddress localAddr = WiFi.localIP();
    char s[16];
    sprintf(s, "%d.%d.%d.%d", localAddr[0], localAddr[1], localAddr[2], localAddr[3]);
    client.publish(mqtt_topics_ip,s);
    client.publish(mqtt_topics_reset,res);
    client.publish(mqtt_topics_relais,relais); /// <----- EINGEFÜGT ------------
    } else {
    Serial.print("failed, rc=");
    Serial.print(client.state());
    Serial.println(" try again in 5 seconds");
    // Wait 5 seconds before retrying
    delay(5000);
    }
    }
    }
    ! void mqtt_publish(){
    if (!client.connected()) {
    reconnect();
    }
    if (LEDPIN){ digitalWrite(LEDPIN,LOW);}
    ! String pub_lightString = String(analogRead(A0)); // Lichtsensor senden
    pub_lightString.toCharArray(message_light, pub_lightString.length()+1);
    client.publish(mqtt_topics_light, message_light);
    ! if (s1 == 1){ // nur Sensor1 Status senden
    String pub_sensor1String = String(sensor1); // Sensor1
    pub_sensor1String.toCharArray(message_sensor1, pub_sensor1String.length()+1);
    client.publish(mqtt_topics_sensor1, message_sensor1);
    Serial.println("Sensor1: "+pub_sensor1String+" gesendet");
    s1 = 0;
    }
    if (s2 == 1){ // nur Sensor 2 Status senden
    String pub_sensor2String = String(sensor2); // Sensor2
    pub_sensor2String.toCharArray(message_sensor2, pub_sensor2String.length()+1);
    client.publish(mqtt_topics_sensor2, message_sensor2);
    Serial.println("Sensor2: "+pub_sensor2String+" gesendet");
    s2 = 0;
    }
    !
    if (LEDPIN){ digitalWrite(LEDPIN,HIGH);}
    }
    ! byte io1 = digitalRead(SENSORPIN1);
    byte io2 = digitalRead(SENSORPIN2);
    ! void loop() {
    //client.subscribe(mqtt_topics_reset);
    if (s1 == 1){
    mqtt_publish();
    }
    if (digitalRead(SENSORPIN1) != io1){
    if (digitalRead(SENSORPIN1) == 0) {
    sensor1 = "true";
    io1 = digitalRead(SENSORPIN1);
    } else{
    sensor1 = "false";
    io1 = digitalRead(SENSORPIN1);
    }
    s1 = 1;
    mqtt_publish();
    }
    ! if (digitalRead(SENSORPIN2) != io2){
    if (digitalRead(SENSORPIN2) == 0) {
    sensor2 = "true";
    io2 = digitalRead(SENSORPIN2);
    } else{
    sensor2 = "false";
    io2 = digitalRead(SENSORPIN2);
    }
    s2 = 1;
    mqtt_publish();
    }
    client.loop();
    }</length;></pubsubclient.h></esp8266wifi.h>`[/i][/i][/i]

    1 Reply Last reply
    0
    • S Offline
      S Offline
      starfish
      wrote on last edited by
      #13

      hab eben ein Problem entdeckt: bei einem WiFi - Unterbruch wird die Verbindung nicht wieder hergestellt. offenbar ist das Problem bekannt http://tech.scargill.net/esp8266-and-lo … nection-2/

      1 Reply Last reply
      0
      • K Offline
        K Offline
        klassisch
        Most Active
        wrote on last edited by
        #14

        Ermöglicht eine ESP8266 - MQTT - Kopplung auch die burstartige Übertragung von Wertepaaren (ZEIT, Wert)?

        Ich möchte diese Wertepaare auf dem ESP errechnen und zwischenspeichern. Dann als Burst übertragen, um den Traffic zu konzentrieren.

        Mit HM/CUX geht das nicht, da jedem Wert die Eingangszeit zugeordnet wird.

        Jetzt möchte ich eben zu jedem Wert auch die Zeit abspeichern und dann an ioBroker per MQTT übertragen. Dann müßte MQTT/ioBroker die Daten entsprechend der mitgesendeten Zeiten einsortieren oder diese Datenpaare speichern und handeln.

        Geht das?

        1 Reply Last reply
        0
        • N Offline
          N Offline
          NetFritz
          wrote on last edited by
          #15

          Hallo

          Habe das zweite Sketch MQTT - Tuersensor + Lichtsensor auf meinen ESP2266E12 gespielt.

          Vorher noch die Netzwerk-Settings und MQTT-Settings geändert.

          // Netzwerk-Settings <-------------------------!!ANPASSEN!!
          const char* ssid = "xxxx";                                                          WLAN SSID
          const char* password = "xxxxxx";                                                WLAN Password
          const char* USE_DHCP = "off"; // "on" fuer DHCP
          IPAddress Myip(192,168,2,99); //static IP address (Sensor)              IP des ESP2266E12
          IPAddress gateway(192,168,2,1); //gateway                                  ? IP der Fritzbox
          IPAddress subnet(255,255,255,0);//subnet
          
          //// MQTT-Settings
          IPAddress mqtt_server(192,168,2,74); // IP-MQTT-Broker                IP des iOBroker Rechners
          const char* mqtt_username = "xxxxxx"; // MQTT-User                     Username in Konfig MQTT
          const char* mqtt_key = "xxxxxxxx"; // MQTT-Pass                          Passwort in Konfig MQTT
          
          

          Der ESP2266E12 wird mir in der FritzBox angezeigt und ein Ping auf 192.168.2.99 kann ich auch absetzen.

          Wenn ich den Taster auf den ESP drücke zeigt er mir in der Arduino IDE Konsole auch den Text das der Taster geschaltet hat an.

          Ist die Gateway IP der FritzBox so richtig ?

          Braucht kein Port eingetragen werden ?

          Hier die Konfig des MQTT in iOBroker
          1563_screenshot-2017-10-13_iobroker_admin_1_.png 1563_screenshot-2017-10-13_iobroker_admin.png
          Ist das so richtig konfiguriert ?

          Wenn ich in IOBroker Instanzen auf das Symbol ganz links vom MQTT gehe wird mir folgendes angezeigt:

          Verbunden mit Host: falsch

          Lebenszeichen: falsch

          Verbunden mit mqtt: falsch

          Wenn ich MQTT einschalte bekomme ich in der Log folgendes:

          mqtt.0	2017-10-13 13:46:21.249	error	exception by stop: server.destroy is not a function
          mqtt.0	2017-10-13 13:46:21.249	error	Error: listen EADDRINUSE 0.0.0.0:1883 at Object.exports._errnoException (util.js:907:11) at exports._exceptionWithHostPort (util.js:930:20) at Server._listen2 (net.js:1253:14) at liste
          mqtt.0	2017-10-13 13:46:21.238	error	uncaught exception: listen EADDRINUSE 0.0.0.0:1883
          mqtt.0	2017-10-13 13:46:20.226	info	starting. Version 1.3.2 in /opt/iobroker/node_modules/iobroker.mqtt, node: v4.8.4
          host.netfritz-FUTRO-S900	2017-10-13 13:46:18.051	info	instance system.adapter.mqtt.0 started with pid 17527
          host.netfritz-FUTRO-S900	2017-10-13 13:46:18.018	info	object change system.adapter.mqtt.0
          
          

          Was muss ich mache das es läuft ?

          Gruß NetFritz

          1 Reply Last reply
          0
          • N Offline
            N Offline
            NetFritz
            wrote on last edited by
            #16

            Hallo

            Habe mal gesucht nach der Bedeutung von EADDRINUSE

            EADDRINUSE = Die angegebene Adresse wird schon verwendet.

            Ist damit die IP 0.0.0.0 oder der Port 1883 gemeint ?

            Gruß NetFritz

            1 Reply Last reply
            0
            • N Offline
              N Offline
              NetFritz
              wrote on last edited by
              #17

              Hallo

              Habe mit mit lsof -i die Portbelegung angeschaut und festgestellt

              das mosquitto die Ports belegt.

              Danach den Port auf 1882 in mqtt und Sketch eingestellt und siehe da

              jetzt läuft es.

              Gruß NetFritz

              1 Reply Last reply
              0
              • K Offline
                K Offline
                klassisch
                Most Active
                wrote on last edited by
                #18

                Super, vielen Dank für die Info!

                Gesendet von meinem ZTE A2016 mit Tapatalk

                1 Reply Last reply
                0
                • N Offline
                  N Offline
                  NetFritz
                  wrote on last edited by
                  #19

                  Hallo

                  Zum Port

                  Die Internet Assigned Numbers Authority (IANA) reserviert für MQTT die Ports 1883 und 8883

                  Ist es ratsam den Port auf 1883 oder 8883 einzustellen ?

                  Gruß NetFritz

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    klassisch
                    Most Active
                    wrote on last edited by
                    #20

                    Auch mit MQTT kenne ich mich leider nicht aus. Aber der ioBroker hat einen MQTT Adapter. Und der gibt den Port 1883 an. Das wäre dann der für mich naheliegende Port.

                    Gesendet von meinem ZTE A2016 mit Tapatalk

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      NetFritz
                      wrote on last edited by
                      #21

                      Hallo

                      mosquitto ist ja auch ein mqtt-Broker der belegt auch den Port 1883.

                      Ich habe jetzt mosquitto deinstalliert.

                      mqtt iOBroher und den ESP wieder auf 1883 gestellt und es läuft.

                      Gruß NetFritz

                      1 Reply Last reply
                      0
                      • E Offline
                        E Offline
                        e-p-s
                        wrote on last edited by
                        #22

                        << Fehler gefunden >>

                        Poste mein Projekt wenn fertig.

                        1 Reply Last reply
                        0
                        • S Offline
                          S Offline
                          Surfer2010
                          wrote on last edited by
                          #23

                          Wie kannich denn per MQTT Nachrichten zurück an den ESP8266 schicken?

                          Meine Idee wäre per MQTT Befehl üver die vis Oberfläche den Messzyklus zu erhöhen/verändern.

                          Zum Beispiel von 4 Messungen pro Stunde auf 30 pro Stunde. Wie geht das?

                          1 Reply Last reply
                          0
                          • E Offline
                            E Offline
                            e-p-s
                            wrote on last edited by
                            #24

                            dummystr=client.subscribe("Sonic1/delay_timer");

                            Publish ist schreiben.

                            Subscribe ist lesen.

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            307

                            Online

                            32.4k

                            Users

                            81.4k

                            Topics

                            1.3m

                            Posts
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            ioBroker Community 2014-2025
                            logo
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Recent
                            • Tags
                            • Unread 0
                            • Categories
                            • Unreplied
                            • Popular
                            • GitHub
                            • Docu
                            • Hilfe