Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Wasserstands-/Füllstandssensor,Wasserpegelschalter

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Wasserstands-/Füllstandssensor,Wasserpegelschalter

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Schlagschatten last edited by

      Danke für dein Projekt, wie Stabil läuft es über den Wemos und MQTT?

      1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active last edited by

        Verbindung läuft mittlerweile stabil.
        Der Sensor empfängt manchmal "Störsignale". Habe ihn z.B. auch im Heizöltank.
        Aktuell ca. 60cm von oben.
        Manchmal misst er aber auch 80cm; kurz darauf wieder 60cm.
        Habe versucht dies mit dem Script abzufangen (Werte Abweichung > 20% ignorieren).

        Anbei mal das aktuelle Script.

        // ************************************************************
        // Wemos-Sketch: Basis
        // inkl. Ultraschall, BME280, Wifi, MQTT, Webserver, Time
        // 5/2019 bahnuhr, Dieter Mueller
        // ************************************************************
            #include <ESP8266WiFi.h>
            #include <WiFiClient.h>
            #include <ESP8266WebServer.h>
            #include <ESP8266mDNS.h>
            //#include <MQTTClient.h>
            #include <MQTT.h>
            #include <Wire.h>
            #include <NTPtimeESP.h>
            #include "cactus_io_BME280_I2C.h"
        // ************************************************************
        // Eingaben machen:
        // ************************************************************
        // BME 280
            int alti = 314; // aktuelle Hoehe über Meeresspiegel = Altitude -> zur Korrektur von pressure
        // Network Wifi
            String ssid = "xxx";
            const char* password = "xxx";
            IPAddress ip = ipaddr_addr("192.168.xxx.xxx"); // feste IP-Adresse fuer den WeMos
        // MQTT
            const char* mqtt_user = "xxx"; // Benutzername der MQTT-Instanz auf dem IoBroker
            const char* mqtt_passwd = "xxx"; // Passwort der MQTT-Instanz auf dem IoBroker
            const char* mqtt_ip = "192.168.xxx.xxx"; // IP Adresse des IoBroker
            int mqtt_port = 1884; // Port des IoBroker
            const char* mqtt_name = "Wemos-Heizoel"; // Name des Wemos der in IoBroker im Adapter MQTT unter info angezeigt wird.// Wemos-System
            String Wemos_Device = "Heizoel";   // z.B. Heizoel
            int ignor = 20;   // Variable für Distance Abweichungen ignorieren
            int loop_mqtt = 300000;  // in ms - Delay MQTT
           
        // ************************************************************
        // ab hier keine Veränderung mehr !
        // ************************************************************
        // HC-SR04 Ultraschall        // VCC = 5V ; GND an GND ; echo an D7 ; trig an D6
            #define echoPin D7   // Echo Pin
            #define trigPin D6   // Trigger Pin
            int maximumRange = 200;  int minimumRange = 0; // Maximum und Minimum range needed
            float duration, distance, distance_alt; // Duration used to calculate distance
        // BME280                     // VCC = 3,3V ; GND an GND ; SCL an D1 ; SDA an D2
            BME280_I2C bme(0x76);  // I2C using address 0x76
            float hPa_alt, Grad_alt, feuchte_alt;  // alte Werte
            int hPa_korrektur; 
        // Network Wifi
            IPAddress gateway = ipaddr_addr("192.168.243.1"); // IP-Adresse des WLAN-Gateways
            IPAddress subnet = ipaddr_addr("255.255.255.000"); // Subnetzmaske
            IPAddress dns1 = ipaddr_addr("8.8.8.8");//dns 1
            IPAddress dns2 = ipaddr_addr("8.8.4.4");//dns 2
            long rssi_alt; // Signalstärke alt
        // MQTT
            String mqtt_send = "nein";
            WiFiClient net;
            MQTTClient client;
        // Wemos-System
           int serial = 9600; // Übertragungsgeschwindigkeit Serial
           int loop_delay = 3000;  // in ms - Delay in Loop
           unsigned long letzteMillis_mqtt = 0;   // speichern last time
           int loop_verbindung = 300000;  // in ms - Delay Verbindung -> alle 5 Min. Wifi und mqtt prüfen
           unsigned long letzteMillis_verbindung = 0;   // speichern last time
        // Time
           NTPtime NTPch("2.de.pool.ntp.org");   // Choose server pool as required
           strDateTime dateTime;
           int time_offset = 1;  // offset 1 Std.
           int time_summertime = 1;  // 1=Sommerzeit
           String dayStr = ""; String monatStr = ""; String jahrStr = ""; String stdStr = ""; String minStr = ""; String sekStr = ""; 
        //Server
           ESP8266WebServer server(80);
        
        
        // *************************************************
        // Unterprogramm: void setup
        // *************************************************
        void setup()  {
          Serial.begin(serial);
          // Ultraschall
            pinMode(trigPin, OUTPUT);
            pinMode(echoPin, INPUT);
          // BME 280
            if (!bme.begin()) {
              Serial.println("Es konnte kein BME280 Sensor gefunden werden!");
              Serial.println("Bitte überprüfen Sie die Verkabelung!");
              while (1);
            }
              bme.setTempCal(-1);
          // WiFi, MQTT, Webserver
          setup_wifi();
          setup_mqtt();
          setup_webserver();
        }
        
        
        // *************************************************
        // Unterprogramm: void loop
        // *************************************************
        void loop()  {
          unsigned long aktuellMillis = millis();
            if (aktuellMillis - letzteMillis_mqtt >= loop_mqtt) { mqtt_send = "ja"; } else { mqtt_send = "nein"; }
          // WiFi und MQTT prüfen
            if (aktuellMillis - letzteMillis_verbindung >= loop_verbindung) {
              if (WiFi.status() != WL_CONNECTED) {
                setup_wifi();
              }
              Serial.println("WiFi geprüft und ok");
              client.publish("Wemos_" + Wemos_Device + "/Meldung", "WiFi geprüft und ok.");
            // MQTT prüfen
               if (!client.connect(mqtt_name, mqtt_user, mqtt_passwd)) { // Verbindung zum MQTT wird hergestellt
                 setup_mqtt();
               }
               Serial.println("MQTT geprüft und ok");
               client.publish("Wemos_" + Wemos_Device + "/Meldung", "MQTT geprüft und ok.");
            letzteMillis_verbindung = aktuellMillis;
            }
          // Webserver
            server.handleClient(); // auf HTTP-Anfragen warten
          // Time
            Zeit_holen();
          // Ultraschall HC-SR04 Daten abrufen
              digitalWrite(trigPin, LOW);
              delayMicroseconds(2);
              digitalWrite(trigPin, HIGH);
              delayMicroseconds(10);
              digitalWrite(trigPin, LOW);
              duration = pulseIn(echoPin, HIGH);
            // Calculate the distance (in cm) based on the speed of sound.
              distance = duration/58.2;
              if (distance >= maximumRange || distance <= minimumRange){
                Serial.println("---");
              }
              Serial.print(distance); Serial.print(" cm\t");
          // BME 280
            hPa_korrektur = (alti / 8) - 1; 
            bme.readSensor(); 
            Serial.print(bme.getPressure_MB() + hPa_korrektur); Serial.print(" hPa\t");    // Pressure in millibars
            Serial.print(bme.getHumidity()); Serial.print(" %\t\t");
            Serial.print(bme.getTemperature_C()); Serial.print(" °C\t");
          // Wifi-RSSI uebertragen
              int rssi = WiFi.RSSI();
              Serial.print(rssi); Serial.println(" WiFi-RSSI");
          // Daten an MQTT übertragen
            if (mqtt_send == "ja") {
              // Ultraschall
            	  int abweichung = 100 / distance_alt * distance - 100;
                if ((distance - distance_alt > 1 || distance - distance_alt < -1) && ((abweichung > 0 && abweichung < ignor)  || (abweichung < 0 && abweichung > -ignor) || distance_alt == 0 || ignor == 0)) {
                  client.publish("Wemos_" + Wemos_Device + "/Distance", String(distance)); 
                  client.publish("Wemos_" + Wemos_Device + "/Meldung", "Distance geändert (akt.;alt): " + String(distance) + " ; " + String(distance_alt)); 
                  distance_alt = distance;
                }
              // BME 280
                if ((bme.getPressure_MB() + hPa_korrektur - hPa_alt) > 1 ||(bme.getPressure_MB() + hPa_korrektur - hPa_alt) < -1) {
                  client.publish("Wemos_" + Wemos_Device + "/BME280-Luftdruck", String(bme.getPressure_MB() + hPa_korrektur)); 
                  client.publish("Wemos_" + Wemos_Device + "/Meldung", "Luftdruck geändert (akt.;alt): " + String(bme.getPressure_MB()+ hPa_korrektur) + " ; " + String(hPa_alt)); 
                  hPa_alt = (bme.getPressure_MB() + hPa_korrektur);
                }
                if (bme.getHumidity()- feuchte_alt > 1 || bme.getHumidity()- feuchte_alt < -1) {
                  client.publish("Wemos_" + Wemos_Device + "/BME280-Luftfeuchtigkeit", String(bme.getHumidity())); 
                  client.publish("Wemos_" + Wemos_Device + "/Meldung", "Luftfeuchtigkeit geändert (akt.;alt): " + String(bme.getHumidity()) + " ; " + String(feuchte_alt)); 
                  feuchte_alt = bme.getHumidity();
                }
                if (bme.getTemperature_C()- Grad_alt > 1 || bme.getTemperature_C()- Grad_alt < -1) {
                  client.publish("Wemos_" + Wemos_Device + "/BME280-Temperatur", String(bme.getTemperature_C())); 
                  client.publish("Wemos_" + Wemos_Device + "/Meldung", "Temperatur geändert (akt.;alt): " + String(bme.getTemperature_C()) + " ; " + String(Grad_alt)); 
                  Grad_alt = bme.getTemperature_C();
                }
              // Wifi-RSSI
                if (rssi-rssi_alt > 2 || rssi-rssi_alt < -2) {
                  client.publish("Wemos_" + Wemos_Device + "/WiFi-RSSI", String(rssi)); 
                  client.publish("Wemos_" + Wemos_Device + "/Meldung", "WiFi-RSSI geändert (akt.;alt): " + String(rssi) + " ; " + String(rssi_alt)); 
                  rssi_alt = rssi;
                }
            letzteMillis_mqtt = aktuellMillis;
            }
        //Delay x before next reading
          delay(loop_delay);
        }
        
        
        // -------------------------------------------------
        // Unterprogramm: setup_wifi
        // -------------------------------------------------
        void setup_wifi() {
          delay(10);
        // Connect WiFi
          Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid);
          WiFi.hostname("Wemos_" + Wemos_Device);
          WiFi.config(ip, gateway, subnet, dns1, dns2); 
          WiFi.mode(WIFI_STA); 
          WiFi.begin(ssid, password);
         
          while (WiFi.status() != WL_CONNECTED) {
            delay(500); Serial.print(".");
          }
          Serial.println(""); Serial.println(""); Serial.println("WiFi verbunden!");
        // Print the IP address
          Serial.print("IP-Addresse: "); Serial.print(WiFi.localIP()); Serial.println("");
        }
        // -------------------------------------------------
        // Unterprogramm: setup_mqtt
        // -------------------------------------------------
        void setup_mqtt() {
          client.begin(mqtt_ip, mqtt_port, net); // Verbindungsaufbau zu MQTT
          Serial.println(); Serial.print("MQTT verbinden!");
          while (!client.connect(mqtt_name, mqtt_user, mqtt_passwd)) { // Verbindung zum MQTT wird hergestellt
            Serial.print(".");
          }
          Serial.println(); Serial.println("MQTT verbunden!"); Serial.println("");
          client.publish("Wemos_" + Wemos_Device + "/IP-Adresse", myIp() );
          client.publish("Wemos_" + Wemos_Device + "/Meldung", "WiFi und MQTT geprüft und ok.");
        }
        // -------------------------------------------------
        // Unterprogramm: setup_webserver
        // -------------------------------------------------
        void setup_webserver() {
          if (MDNS.begin("esp8266")) {
            Serial.println("MDNS responder started");
          }
          server.begin();
          Serial.println("Webserver gestartet!");
          Serial.print("Benutze diese URL: "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); Serial.println("");
            // HTTP-Anfragen bearbeiten
              server.on("/" , handleRoot);
              server.onNotFound(handleNoRoot);
        }
        // -------------------------------------------------
        // Unterprogramm: IP Adresse ermitteln
        // -------------------------------------------------
        String myIp() {
            char myIpString[24];
            IPAddress myIp = WiFi.localIP();
            sprintf(myIpString, "%d.%d.%d.%d", myIp[0], myIp[1], myIp[2], myIp[3]);
            return myIpString;
        }
        // -------------------------------------------------
        // Unterprogramm: Time
        // -------------------------------------------------
        void Zeit_holen() {
            dateTime = NTPch.getNTPtime(time_offset, time_summertime);
            if(dateTime.valid){
              byte actualHour = dateTime.hour; byte actualMinute = dateTime.minute; byte actualsecond = dateTime.second;
              int actualyear = dateTime.year; byte actualMonth = dateTime.month; byte actualday =dateTime.day;
              byte actualdayofWeek = dateTime.dayofWeek;
              jahrStr = dateTime.year;
              monatStr = dateTime.month < 10 ? "0" + String(dateTime.month) : String(dateTime.month);
              dayStr = dateTime.day < 10 ? "0" + String(dateTime.day) : String(dateTime.day);
              stdStr = dateTime.hour < 10 ? "0" + String(dateTime.hour) : String(dateTime.hour);
              minStr = dateTime.minute < 10 ? "0" + String(dateTime.minute) : String(dateTime.minute);
              sekStr = dateTime.second < 10 ? "0" + String(dateTime.second) : String(dateTime.second);        
              Serial.print("Stand: "); Serial.print(dayStr); Serial.print("."); Serial.print(monatStr); Serial.print("."); Serial.print(dateTime.year);
              Serial.print(" um "); Serial.print(stdStr); Serial.print(":"); Serial.print(minStr); Serial.print(":"); Serial.print(sekStr); Serial.println(" Uhr");
            }  
        }
        // -------------------------------------------------
        // Unterprogramm: Webserver
        // -------------------------------------------------
        void handleRoot() { // bei Aufruf des Root-Verzeichnisses
            String antwort = "";
            int rssi = WiFi.RSSI();
            antwort = "WeMos: \t\t" + Wemos_Device + "\n";
            antwort = antwort + "==============================================\n\n";
            antwort = antwort + "Stand: \t\t" + dayStr + "." + monatStr + "." + jahrStr + " um " + stdStr + ":" + minStr + ":" + sekStr + " Uhr\n";
          // Ultraschall
            antwort = antwort + "\n";
            antwort = antwort + "Ultraschall:";
            antwort = antwort + "\tDistance: \t\t" + distance + " cm\n";
            antwort = antwort + "\t\tAbweichung ignorieren: \t" + ignor + " % (0 = alle Werte werden uebertragen)\n";
          // BME 280  
            bme.readSensor(); 
            antwort = antwort + "\n";
            antwort = antwort + "BME 280:";
            antwort = antwort + "\tAltitude: \t\t" + alti + " Meter\n";
            antwort = antwort + "\t\tLuftdruck: \t\t" + (bme.getPressure_MB() + hPa_korrektur) + " hPa\n";
            antwort = antwort + "\t\tLuftfeuchtigkeit: \t" + bme.getHumidity() + " %\n";
            antwort = antwort + "\t\tTemperatur: \t\t" + bme.getTemperature_C() + " Grad Celsius\n";
          // System
            antwort = antwort + "\n";
            antwort = antwort + "System:";
            antwort = antwort + "\t\tVerbunden mit: \t\t" + ssid + "\n";
            antwort = antwort + "\t\tSignalstaerke: \t\t" + String(rssi) + " dBm\n";
            antwort = antwort + "\t\tIP-Adresse: \t\t" + myIp() + "\n";
            antwort = antwort + "\n";
          // MQTT
            antwort = antwort + "ioB-MQTT:";
            antwort = antwort + "\tName: \t\t\t" + mqtt_name + "\n";
            antwort = antwort + "\t\tIP-Adresse: \t\t" + mqtt_ip + "\n";
            antwort = antwort + "\t\tMQTT-Port: \t\t" + String(mqtt_port) + "\n";
            antwort = antwort + "\t\tSende-Intervall: \t" + String(loop_mqtt/1000) + " Sekunden\n";
            antwort = antwort + "\n\n";
         
            antwort = antwort + "Folgende Werte einstellen mit: \t" + myIp() + "/wert?...\n";
            antwort = antwort + "---------------------------------------------------------------------------------------\n";
            antwort = antwort + "Sende-Intervall MQTT an iobroker\t" + "delay=x\t\t" + "(x = Sekunden)\n";
            antwort = antwort + "Altitude des aktuellen Standorts\t" + "alti=x\t\t" + "(x = Meter ueber Meeresspiegel)\n";
            antwort = antwort + "SSID fuer Wlan\t\t\t\t" + "ssid=x\t\t" + "(ssid zum einloggen)\n";
            antwort = antwort + "Distance: Veraenderungen ignorieren\t" + "ignor=x\t\t" + "(x = % vom Wert; 0 wenn Nein)\n\n\n";
        
            antwort = antwort + "@ 08/2019 bahnuhr, Dieter Mueller";
            server.send(200, "text/plain", antwort);
            delay(150);
        }
        void handleNoRoot() {
            String antwort = "";
            if (server.args() > 0) {
              for (uint8_t i = 0; i < server.args(); i++) {
                if (server.argName(i) == "delay") {
                  loop_mqtt = ((server.arg(i)).toInt())*1000;
                  Serial.print("Delay eingestellt auf: "); Serial.print(loop_mqtt/1000); Serial.println(" Sekunden"); 
                  handleRoot();
                } else if (server.argName(i) == "alti") {
                  alti = (server.arg(i)).toInt();
                  Serial.print("Altitude eingestellt auf: "); Serial.print(alti); Serial.println(" Meter ueber Meeresspiegel"); 
                  handleRoot();
                } else if (server.argName(i) == "ignor") {
                  ignor = (server.arg(i)).toInt();
                  Serial.print("Distance-Abweichung ignorieren eingestellt auf: "); Serial.print(ignor); Serial.println(" %"); 
                  handleRoot();
                } else if (server.argName(i) == "ssid") {
                  ssid = server.arg(i);
                  Serial.print("SSID eingestellt auf: "); Serial.println(ssid);  
                  setup_wifi();
                  setup_mqtt();
                  setup_webserver();
                  handleRoot();
                } else {
                  server.send(404, "text/plain", "Eingabe ist falsch und konnte nicht bearbeitet werden!");
                }
              }
            } else {
              server.send(404, "text/plain", "Eingabe ist falsch und konnte nicht bearbeitet werden!");
            }
        }
        
        

        Wenn es gefällt, dann Daumen hoch.

        mfg
        Dieter

        1 Reply Last reply Reply Quote 1
        • S
          Schlagschatten last edited by

          Habe gelesen, das es Probleme mit der Oberflächenspiegelung der Flüssigkeit und der Ultraschallmessung gibt, vielleicht hat es damit zutun.

          bahnuhr 1 Reply Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active @Schlagschatten last edited by

            @Schlagschatten sagte in Wasserstands-/Füllstandssensor,Wasserpegelschalter:

            Habe gelesen, das es Probleme mit der Oberflächenspiegelung der Flüssigkeit und der Ultraschallmessung gibt, vielleicht hat es damit zutun.

            Alles möglich.
            Hab mich daran gewöhnt.

            Ne bessere Lösung hab ich noch nicht gefunden.

            1 Reply Last reply Reply Quote 0
            • S
              Schlagschatten last edited by

              Mit dem Ultraschallsensor und der Füllstandsanzeigen ist schon eine abgefahrene Lösung. Mir würde für den Anfang erstmal eine einfachere und ggf. stabilere Variante mit Werten (true/false) reichen. Würde mich über weitere hilfreiche Vorschläge freuen.

              1 Reply Last reply Reply Quote 0
              • G
                George_Best last edited by

                Hi,

                ich messe den Füllstand meiner Zisterne mit einem Wemos D1 mini und einem HC SR04 Ultraschallsensor. Funktioniert seit 2 Jahren bei Wind und Wetter ohne Probleme. Wemos D1 mini ist via ESPEasy und MQTT in ioBroker eingebunden.

                bahnuhr 1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active last edited by

                  wemos und ultraschall -> billig und funktioniert.

                  Eine wirkliche genaue, zuverlässige Lösung hab ich noch nicht gefunden.

                  true/false wäre mir zu wenig.
                  Ich möchte schon die cm haben.

                  mfg

                  1 Reply Last reply Reply Quote 0
                  • bahnuhr
                    bahnuhr Forum Testing Most Active @George_Best last edited by

                    @George_Best sagte in Wasserstands-/Füllstandssensor,Wasserpegelschalter:

                    Hi,

                    ich messe den Füllstand meiner Zisterne mit einem Wemos D1 mini und einem HC SR04 Ultraschallsensor. Funktioniert seit 2 Jahren bei Wind und Wetter ohne Probleme. Wemos D1 mini ist via ESPEasy und MQTT in ioBroker eingebunden.

                    Hast du auch Störsignale?

                    G 1 Reply Last reply Reply Quote 0
                    • S
                      Schlagschatten last edited by

                      Habt ihr den Ultraschallsensor in ein wassergeschütztes Gehäuse gebaut oder wie geht ihr da vor?

                      bahnuhr 1 Reply Last reply Reply Quote 0
                      • bahnuhr
                        bahnuhr Forum Testing Most Active @Schlagschatten last edited by

                        @Schlagschatten sagte in Wasserstands-/Füllstandssensor,Wasserpegelschalter:

                        Habt ihr den Ultraschallsensor in ein wassergeschütztes Gehäuse gebaut oder wie geht ihr da vor?

                        Ne, das hab ich nicht.

                        1 Reply Last reply Reply Quote 0
                        • G
                          George_Best @bahnuhr last edited by

                          @bahnuhr sagte in Wasserstands-/Füllstandssensor,Wasserpegelschalter:

                          @George_Best sagte in Wasserstands-/Füllstandssensor,Wasserpegelschalter:

                          Hi,

                          ich messe den Füllstand meiner Zisterne mit einem Wemos D1 mini und einem HC SR04 Ultraschallsensor. Funktioniert seit 2 Jahren bei Wind und Wetter ohne Probleme. Wemos D1 mini ist via ESPEasy und MQTT in ioBroker eingebunden.

                          Hast du auch Störsignale?

                          Inwiefern? Das Signal wird ohne Störsignale übertragen - es wird ja auch kein Analog-Signal übertragen sondern bereits der gemessene Wert.
                          Ich sende das Signal alle 300 Sekunden, daher gibt es auch kein "Flackern" des gemessenen Wertes.

                          1 Reply Last reply Reply Quote 0
                          • S
                            Superdad last edited by Superdad

                            Würde jemand so freundlich sein mir die Vorgehensweise mit dem Wemos und dem HC SR04 zu erklären?
                            Die Teile gibt es ja in China oder bei Amazon zu kaufen.
                            Habe mir auch schon einige Videos auf YouTube angeschauen.
                            Werde daraus aber einfach nicht schlau.

                            Was muss denn für ein Programm auf den Wemos und wie spielt man das auf?
                            Vielleicht geht es ja auch mit dem NodeMcu, wenn das leichter ist?
                            Wie bekomme ich dann eine Verbindung zur Homematic um mir den Wasserstand in VIS anzeigen zu lassen?

                            Ich habe mir jetzt schon den dritten Wasserstandsmesser von ELV gekauft und die Dinger gehen regelmässig nach eineinhalb bis zwei Jahren kaputt.
                            Ich habe einfach keine Lust mehr denen das Geld in den Rachen zu werfen für ihren Schrott!

                            Könnte mir jemand helfen?

                            bahnuhr 1 Reply Last reply Reply Quote 0
                            • E
                              ecki945 last edited by ecki945

                              @Superdad said in Wasserstands-/Füllstandssensor,Wasserpegelschalter:

                              HC SR04

                              Ich habe zwar ne nodemcu, Dein Wemos sollte ähnlich sein. Bei mir habe ich Tasmota ausgespielt und verwende folgende Konfiguration:
                              f402c8b9-9335-4797-8ec1-7490d4171bdb-grafik.png

                              GPIO4 und GPIO5 musst du nicht konfigurieren. Bei mir ist da ein Display angeschlossen.

                              Weiterhin verwende ich dieses Modell:

                              4e0c93a8-e786-4b92-9669-d5ce4f513f52-grafik.png

                              1 Reply Last reply Reply Quote 0
                              • bahnuhr
                                bahnuhr Forum Testing Most Active @Superdad last edited by

                                @Superdad sagte in Wasserstands-/Füllstandssensor,Wasserpegelschalter:

                                Würde jemand so freundlich sein mir die Vorgehensweise mit dem Wemos und dem HC SR04 zu erklären?

                                Such mal nach meinen Beiträge.
                                Da habe ich es erklärt. Und auch ein funktionierendes Sketch eingestellt.

                                1 Reply Last reply Reply Quote 0
                                • S
                                  Superdad last edited by

                                  Vielen Dank euch Beiden!

                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    Superdad last edited by

                                    @ecki945

                                    Habe mir jetzt mal alles besorgt und angeschlossen.
                                    Hoffe, dass ich es richtig angeschlossen habe.
                                    DC6 = Trigger
                                    DC7 = Echo
                                    GND = GND
                                    Vin = 5V
                                    NodeMCU mit Tasmota geflasht.
                                    Bekomme im iOBroker im Sonoff-Adapter unter SR04_Distance auch einen Wert angezeigt.
                                    Dieser kann aber nicht stimmen.
                                    Mit welcher Formel muss der umgerechnet werden?
                                    Oder hast du eventuell ein Blockly dazu?
                                    Auch habe ich noch nicht mitbekommen in welchem Intervall der gemessene Abstand aktualisiert wird.
                                    Weißt du das zufällig?

                                    Gruss Andreas

                                    1 Reply Last reply Reply Quote 0
                                    • E
                                      ecki945 last edited by ecki945

                                      Guten Morgen Andreas,

                                      bei mir ist das so angeschlossen: (Habe an D1 und D2 noch ein Sh1106 Display angeschlossen)

                                      248a72b2-8a14-4b8a-b28c-9b2b7af91ed6-grafik.png

                                      Den Wert musst du eigentlich nicht umrechnen. Dieser wird in der Einheit cm übertragen. In der Tasmota Software ist ja noch ein Mittelwertfilter hinterlegt. Schätze mal dass die Software alle par Sekunden misst. Wie oft übertragen wird kannst du mit dem Parameter teleperiod einstellen. Entweder fest in die Software eintragen wenn du selbst compilieren willst, oder in der Konsole mit teleperiod und einer Zahl. Zulässig sind 0 für ausschalten oder 10 - 3600 sekunden.

                                      Mein Werte im obigen Bild stimmt zwar messtechnisch auch überhaupt nicht, liegt bei mir aber am Einbau des Sensors, den ich übers Wochenende ändern werde.

                                      Die weitere Verarbeitung des Signals kannst du dann z.B. in Javascript machen.

                                      Ich will bei mir die Ölmenge im zylindrischen Erdtank bestimmen. Das Script dazu habe ich schon geschrieben und sieht so aus:

                                      
                                      // Maximale Füllmenge im Erdtank
                                      const maxVolume = 7000; // Liter
                                      
                                      //maximale Füllhöhe
                                      const MaxOelLevel = 160; // cm
                                      
                                      // Gemessener Abstand von Sensor zu Öloberfläche
                                      var AirLevel = 0; // cm
                                      
                                      // Korrekturwert wegen Sensormontage im Erdtank ( Domschacht)
                                      var AirLevelOffset = 16; // cm
                                      
                                      // Errechneter Ölstand im Tank
                                      var OelLevel = 0; // cm
                                      
                                      // Menge Öl in Erdtank
                                      var Oelvolume = 0;
                                      
                                      // Peiltabelle von Thyssen Krupp
                                      // Wert links Pegelstand von Grund ab gemessen in cm,
                                      // Wert Rechts Fuellstand in Liter
                                      
                                      const Peiltabelle = new Map([
                                        [   0,   0 ],
                                        [   1,   5 ],
                                        [   2,  15 ],
                                        [   3,  28 ],
                                        [   4,  43 ],
                                        [   5,  61 ],
                                        [   6,  80 ],
                                        [   7, 101 ],
                                        [   8, 124 ],
                                        [   9, 149 ],
                                        [  10, 174 ],
                                        [  11, 201 ],
                                        [  12, 230 ],
                                        [  13, 259 ],
                                        [  14, 289 ],
                                        [  15, 320 ],
                                        [  16, 352 ],
                                        [  17, 385 ],
                                        [  18, 419 ],
                                        [  19, 455 ],
                                        [  20, 491 ],
                                        [  21, 528 ],
                                        [  22, 565 ],
                                        [  23, 603 ],
                                        [  24, 642 ],
                                        [  25, 682 ],
                                        [  26, 723 ],
                                        [  27, 764 ],
                                        [  28, 806 ],
                                        [  29, 848 ],
                                        [  30, 891 ],
                                        [  31, 935 ],
                                        [  32, 979 ],
                                        [  33, 1024 ],
                                        [  34, 1069 ],
                                        [  35, 1114 ],
                                        [  36, 1160 ],
                                        [  37, 1206 ],
                                        [  38, 1254 ],
                                        [  39, 1303 ],
                                        [  40, 1352 ],
                                        [  41, 1401 ],
                                        [  42, 1450 ],
                                        [  43, 1500 ],
                                        [  44, 1550 ],
                                        [  45, 1601 ],
                                        [  46, 1652 ],
                                        [  47, 1703 ],
                                        [  48, 1755 ],
                                        [  49, 1808 ],
                                        [  50, 1861 ],
                                        [  51, 1914 ],
                                        [  52, 1967 ],
                                        [  53, 2020 ],
                                        [  54, 2074 ],
                                        [  55, 2128 ],
                                        [  56, 2183 ],
                                        [  57, 2238 ],
                                        [  58, 2293 ],
                                        [  59, 2348 ],
                                        [  60, 2403 ],
                                        [  61, 2458 ],
                                        [  62, 2513 ],
                                        [  63, 2569 ],
                                        [  64, 2625 ],
                                        [  65, 2681 ],
                                        [  66, 2737 ],
                                        [  67, 2793 ],
                                        [  68, 2849 ],
                                        [  69, 2905 ],
                                        [  70, 2961 ],
                                        [  71, 3017 ],
                                        [  72, 3073 ],
                                        [  73, 3130 ],
                                        [  74, 3187 ],
                                        [  75, 3244 ],
                                        [  76, 3301 ],
                                        [  77, 3358 ],
                                        [  78, 3415 ],
                                        [  79, 3472 ],
                                        [  80, 3529 ],
                                        [  81, 3586 ],
                                        [  82, 3643 ],
                                        [  83, 3700 ],
                                        [  84, 3757 ],
                                        [  85, 3814 ],
                                        [  86, 3871 ],
                                        [  87, 3928 ],
                                        [  88, 3984 ],
                                        [  89, 4040 ],
                                        [  90, 4096 ],
                                        [  91, 4152 ],
                                        [  92, 4208 ],
                                        [  93, 4264 ],
                                        [  94, 4320 ],
                                        [  95, 4376 ],
                                        [  96, 4432 ],
                                        [  97, 4488 ],
                                        [  98, 4543 ],
                                        [  99, 4598 ],
                                        [ 100, 4653 ],
                                        [ 101, 4708 ],
                                        [ 102, 4763 ],
                                        [ 103, 4818 ],
                                        [ 104, 4873 ],
                                        [ 105, 4927 ],
                                        [ 106, 4981 ],
                                        [ 107, 5034 ],
                                        [ 108, 5087 ],
                                        [ 109, 5140 ],
                                        [ 110, 5193 ],
                                        [ 111, 5246 ],
                                        [ 112, 5298 ],
                                        [ 113, 5349 ],
                                        [ 114, 5400 ],
                                        [ 115, 5451 ],
                                        [ 116, 5501 ],
                                        [ 117, 5551 ],
                                        [ 118, 5600 ],
                                        [ 119, 5649 ],
                                        [ 120, 5698 ],
                                        [ 121, 5747 ],
                                        [ 122, 5795 ],
                                        [ 123, 5841 ],
                                        [ 124, 5887 ],
                                        [ 125, 5932 ],
                                        [ 126, 5977 ],
                                        [ 127, 6022 ],
                                        [ 128, 6066 ],
                                        [ 129, 6110 ],
                                        [ 130, 6153 ],
                                        [ 131, 6195 ],
                                        [ 132, 6237 ],
                                        [ 133, 6278 ],
                                        [ 134, 6319 ],
                                        [ 135, 6359 ],
                                        [ 136, 6398 ],
                                        [ 137, 6436 ],
                                        [ 138, 6473 ],
                                        [ 139, 6510 ],
                                        [ 140, 6546 ],
                                        [ 141, 6582 ],
                                        [ 142, 6616 ],
                                        [ 143, 6649 ],
                                        [ 144, 6681 ],
                                        [ 145, 6712 ],
                                        [ 146, 6742 ],
                                        [ 147, 6771 ],
                                        [ 148, 6800 ],
                                        [ 149, 6827 ],
                                        [ 150, 6852 ],
                                        [ 151, 6877 ],
                                        [ 152, 6900 ],
                                        [ 153, 6921 ],
                                        [ 154, 6940 ],
                                        [ 155, 6958 ],
                                        [ 156, 6973 ],
                                        [ 157, 6986 ],
                                        [ 158, 6996 ],
                                        [ 159, 7001 ],
                                        [ 160, 9999 ] // error
                                      ]) ;
                                      
                                      // Name des Tasmota Gerätes
                                      const Geraetename = 'DVES_568D91';
                                      
                                      //Staus Verbindung zu Tasmota
                                      var StatusVerbindung = 0;
                                      
                                      // String der verbundenen Tasmota Geräte
                                      var sonoffname;
                                      
                                      StatusVerbindung = getState("sonoff.0.info.connection").val; // Prüfe Verbindung zu Tasmota prüfen
                                      //console.log(StatusVerbindung);
                                      sonoffname = StatusVerbindung.search(Geraetename); // Suchen ob Tasmota Gerätename vorhanden
                                      
                                      //console.log(sonoffname);
                                      if( sonoffname != -1)
                                      {
                                          var Messwert  = getState("sonoff.0.DVES_568D91.SR04_Distance").val; // Hole Daten von Ultraschallsensor
                                          console.log( 'Luftmessweg' + Messwert + 'cm') ;
                                          AirLevel = Messwert - AirLevelOffset; // Montagehöhe von Sensor abziehen
                                          OelLevel = MaxOelLevel - AirLevel; // Errechne die Füllhöhe im Erdtank
                                          console.log( 'Ölmessweg   ' + OelLevel + '  cm') ;
                                      
                                              if ((OelLevel  >= 0) && (OelLevel < MaxOelLevel))
                                               {
                                                   Oelvolume = Peiltabelle.get(Math.round(OelLevel));
                                                  console.log( 'Ölmenge  ' + Oelvolume + '  Liter') ;
                                      //            sendTo("telegram.0", "send", {
                                      //            text: 'Heizpatrone Stufe 1 Ein'
                                      //            });            
                                                  }
                                                  else
                                                  {console.log('Fehler in Messung');
                                                  Oelvolume = 9999;
                                                  console.log( 'Ölmenge  ' + Oelvolume + '  Liter') ;           
                                                  } 
                                          }
                                      else{
                                          console.log('Keine Verbindung zu Tasmota Gerät');
                                          Oelvolume = 9999;
                                      }
                                       code_text
                                      

                                      Gruß Stephan

                                      Basti97 1 Reply Last reply Reply Quote 0
                                      • S
                                        Superdad last edited by

                                        Hallo Stephan,

                                        jetzt ist alles im grünen Bereich.
                                        Muss nur noch das Script anpassen.
                                        Hatte ganz vergessen, dass der Sensor unter 20cm nur Mist misst!

                                        Hatte gestern einen halben Tag gebraucht um auf das Nodemcu Sonoff zu flashen.
                                        Zuerst habe ich es mit ESPeasy Flashtool probiert. Hat aber nicht funktioniert.
                                        Dann mit Arduino versucht zu flashen. Bis ich dann die richtige Einstellung hatte, war der halbe Tag rum.
                                        Aber jetzt funktioniert es ja.

                                        Vielen Dank für die Hilfe!

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          Superdad last edited by

                                          Soweit hat bei mir alles funktioniert.
                                          War mein erster Date mit NodeMCU und Co.

                                          Seit drei Tagen habe ich aber folgendes Phänomen, dass mein HC SR04 jeden Abend anfängt die Messungen umzudrehen.
                                          D.h. was tagsüber 20% Füllmenge sind, sind Abends plötzlich 80%.

                                          Kann es sein, dass der HC SR04 defekt ist?

                                          Ich benutze folgendes Script:

                                          Füllstand.jpg

                                          Aber daran kann es nicht liegen, da die Datenpunkte ja schon umgedreht sind.

                                          Hat das schon mal jemand gehabt?

                                          1 Reply Last reply Reply Quote 0
                                          • H
                                            heinzie last edited by

                                            Hier mal meine Ausführung. Kosten ~25€ (2 * Fensterkontakt von Aqara + Füllstandssonde von Ali)
                                            Aber nur 2 Pegel!

                                            24c84c74-ed82-424e-971d-bc83157ffc73-grafik.png

                                            X 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            842
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            füllstandssensor wasserpegelschalter wassersenor wasserstandssensor
                                            10
                                            37
                                            6296
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo