Füllstandsmessung der Zisterne mittels ESP8266 (NodeMCU) und Ultraschallsensor

Heute nochmal ein Update bzw. eine vollständige Zusammenfassung zur Messung des Füllstands der Zisterne mittels Ultraschall. Ich habe den Sketch für den ESP8266 (den ich immer noch in Form eines NodeMCU betreibe) mal etwas aufgebohrt.

Zu den alten Artikeln geht es hier und hier.

Im folgenden werden alle notwendigen Schritte beschrieben um die Firmware auf den ESP8266 zu flashen und den Sensor in Betrieb zu nehmen.

Benötigte Hardware

Die benötigte Hardware besteht aus einem NodeMCU mit ESP8266 und einem HC-SR04 Ultraschallsensor. Die Beschaltung folgt weiter unten.

NodeMCU
HC-SR04 Ultraschallsensor

Dann noch ein mindestens vieradriges Kabel und ein Gehäuse zur Unterbringung des Ultraschallsensors in der Zisterne z.B. eine kleine Aufputzdose aus dem Baumarkt.

Firmware installieren

Zur Installation der Firmware auf dem ESP8266 muss zuerst die Arduino Software auf einem PC installiert werden. Diese ist für Linux, Windows und MAC unter https://www.arduino.cc/en/main/software verfügbar.


Um in der Arduino IDE den ESP8266 nutzen zu können, muss in den Einstellungen (Datei -> Voreinstellungen) in das Feld „Zusätzliche Boardverwalter URLs“ folgende URL eingetragen werden: http://arduino.esp8266.com/stable/package_esp8266com_index.json


Dann unter „Werkzeuge -> Board … -> Boardverwalter…“ nach „esp8266“ suchen und „esp8266 by ESP8266 Community“ installieren. Hiermit werden u.a. die Tools zum flashen der Firmware auf den ESP8266 installiert.


Herunterladen der aktuellsten Firmware für die Füllstandmessung der Zisterne www.bubux.de/heimautomatisierung/ota/zisterne_aktuell.bin.


Den NodeMCU mit dem Rechner verbinden. In der Arduino IDE unter „Werkzeuge -> Port” den COM-Port des NodeMCU ermitteln. Das Flashen der Firmware funktioniert leider nicht direkt aus der Arduino IDE heraus. Hierfür muss die Kommandozeile bemüht werden:

Flashen des ESP8266 unter Windows

Unter Windows dazu die Kommandozeile öffnen (cmd.exe) und dort den folgenden Befehl eingeben:

%USERPROFILE%\AppData\Local\Arduino15\packages\esp8266\tools\esptool\0.4.8\esptool.exe -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp COMXY -cf Pfad_zur_Firmwaredatei

Wichtig: Die Versionsnummer des esptool kann ggf. abweichen, das Device hinter -cp (COMxy) muss entsprechend angepasst werden sowie der Pfad zur Firmwaredatei muss entsprechend angepasst werden.

Flashen des ESP8266 unter Linux

Auf der Kommandozeile folgenden Befehl ausführen:

~/.arduino15/packages/esp8266/tools/esptool/0.4.9/esptool -vv -cd nodemcu -cb 57600 -ca 0x00000 -cp /dev/ttyxxxx -cf Pfad_zur_Firmwaredatei

Wichtig: Die Versionsnummer des esptool kann ggf. abweichen, das Device hinter -cp muss entsprechend angepasst werden sowie der Pfad zur Firmwaredatei muss entsprechend angepasst werden.

Anschluss des Sensors

Von HC-SR04 an NodeMCU:

Vcc an VU
Gnd an GND
Trig an D2
Echo an D1

Inbetriebnahme

Ist die Firmware auf den NodeMCU geflasht und der SR04-Ultraschallsensor angeschlossen, kann die Inbetriebnahme erfolgen. Dazu den Sensor mit Strom versorgen.


Der Sensor versucht sich mit einem konfigurierten WLAN zu verbinden. Funktioniert dies nicht (was bei der ersten Inbetriebnahme der Fall ist), erstellt der Sensor einen WLAN Accesspoint mit dem Namen „WLAN-Zisterne” der z.B. im Smartphone gefunden werden sollte. Mit diesem WLAN verbinden.


Nun im Browser des verbundenen Gerätes die Adresse http://192.168.4.1 aufrufen. Diese Adresse wird in der Regel auch in den Verbindungseinstellungen des verbundenen WLAN angezeigt und verlinkt. Es öffnet sich nun die Konfigurationsseite des Sensors.


Dort die SSID und das Passwort des Heim-WLAN eingeben und auf “Konfiguration speichern” klicken. Die weiteren Einstellungen können später erfolgen.


Der Sensor startet daraufhin neu und versucht sich mit dem Heim-WLAN zu verbinden. War dies erfolgreich ist der Accesspoint nicht mehr erreichbar und des Sensor sollte eine IP-Adresse im Netzwerk zugewiesen bekommen haben. Diese kann im Router nachgeschaut werden )in der Friztbox z.B. unter “Heimnetz -> Netzwerk“).


Ist der Accespoint „WLAN-Zisterne” weiterhin sichbar, war die Verbindung mit den Heim-WLAN nicht erfolgreich. Dann die obigen Schritte erneut ausführen.

Betrieb

Die Oberfläche des Sensor ist nun im Browser nach Eingabe der IP-Adresse verfügbar. Für den weiteren Betrieb müssen zuerst weitere Einstellungen vorgenommen werden. Dazu den Bereich “Sonstiges” aufklappen und auf “Konfiguration” klicken.

Einstellungen des Sensors

Unter “Abstand Sensor/Boden” muss der Abstand in Zentimeter zwischen Sensor und Boden der Zisterne angegeben werden. Unter “Abstand Sensor/Max. Höhe” muss der Abstand zwischen Sensor und Wasseroberfläche bei maximalen Wasserstand angebenen werden. Ist die Zisterne nicht voll, kann der Wert auch jederzeit korrigiert werden


Daten an eigene API übergeben

Die Daten des Sensors können an eine eigene Schnittstelle übergeben werden. Hierzu kann ein Server, Port und der Pfad angegeben werden. Die Sensordaten werden als Argumente in der URL angehangen. So kann z.B. ein PHP-Script auf dem Server aufgerufen werden welches die angehangenen Argumente empfängt und weiter verarbeitet (z.B. an FHEM übergibt oder in eine Datenbank schreibt.

Update 20.07.2019

Die URL für die eigene API kann mit zwei Variablen frei definiert werden. Dazu die Variablen “_abstand” und “_fuellstand” in einer beliebigen URL nutzen. Im NodeMCU werden die beiden Platzhalter durch die echten Werte ersetzt.

Zum Beispiel wird aus der konfigurierten URL:
/umwelt/zisterne_neu.php?abstand=_abstand&fuellstand=_fuellstand
beim Aufruf der eigenen API dann:
/umwelt/zisterne_neu.php?abstand=29&fuellstand=100.00&vcc=2.75

Hier ein Beispielscript welches das Schreiben der Werte in eine Textdatei und in eine MySQL-Datenbank vornimmt sowie die Übergabe der Werte an eine FHEM-Installation:


Daten an bubux.de übergeben

Steht kein eigener Server zur Historisierung der Daten zur Verfügung, können die gemessenen Werte an bubux.de gesendet werden. Dort ist (aktuell) eine Auswertung des letzten 30 Tage verfügbar und wird graphisch dargestellt. Nach der Aktivierung mittels der Checkbox ist ein entsprechender Link auf der Startseite des Sensors verfügbar.

Es werden der prozentuale Füllstand, die MAC-Adresse zur Zuordnung der Daten, die lokale IP des Sensors zur Verlinkung von der Webseite auf bubux.de zur Webseite des Sensors und die Version der Firmware übergeben.


Startseite des Sensors

Sind alle Einstellungen vorgenommen kann der Sensor genutzt werden. Auf der Startseite werden der prozentuale Füllstand und der aktuelle Abstand zwischen Sensor und Wasseroberfläche angezeigt.

Einbau

Da der Einbau je nach Zisterne individuell ist, will ich nicht viel Worte darüber verlieren. Nur soviel, das ich den Sensor in ein Baumarkt-Aufputzdose gepackt habe und mit Heißkleber “vergossen” haben. Harz wäre wahrscheinlich besser gewesen, aber der Sensor funktioniert bisher einwandfrei. Der Sensor hängt nach unten an einem Brett in der Zisterne. Der NodeMCU ist an ein etwa 6m langes Kabel angeschlossen und ist in einem Lagerräumchen untergebracht.

Ich würde mich über Rückmeldungen (Fehler, Verbesserungswünsche, …) bzgl. der neuen Firmwareversion freuen. Todo wäre noch die Daten per JSON abrufbar zu machen und z.B. ein Plugin für FHEM zu bauen.

Viel Spaß beim basteln!

Chris


27 Gedanken zu „Füllstandsmessung der Zisterne mittels ESP8266 (NodeMCU) und Ultraschallsensor

  • Avatar
    27. Februar 2019 um 12:53
    Permalink

    Hallo,
    sehr schönes Projekt.
    Ich bin auch gerade auf der suche nach so einer Füllstansanzeige. evtl noch mit einem Display.
    Das muss ich aber erst noch schauen.
    Zu deinem Scetch:
    Hättest du mir evtl den Orginal scetch (ino), da ich nicht die Ports verwenden kann die du angegeben hast.
    Außerdem möchte ich evtl ja noch ein Display dazwischen machen.
    Der erste Test lief gut bis das ich keine Werte vom Sensor erhalte , da ich die Pinns an der Feather HUZZAH Esp8266 nicht so habe.

    Danke Markus

    Antwort
    • Avatar
      15. April 2019 um 13:08
      Permalink

      Hallo auch von mir, wäre über eine Möglichkeit, die PUSH-Adresse zu ändern auch dankbar, da ich die Werte in PRTG einspielen möchte und der verlangt einen anderen Aufbau.

      beste Grüße

      Antwort
  • Pingback: Homematik – Zisterne – bubuxblog

  • Avatar
    15. März 2019 um 17:29
    Permalink

    Hi,
    Deine Beschreibungen hier kommen gerade recht, da ich ebenfalls gerade vom HM-SEN-WA-OD umsteige.
    Ich habe das auch soweit schon alles nachgebaut und es funktioniert auch.
    Ich würde aber gerne den selben ESP nehmen, um noch einen Regensensor zu betreiben.
    Dazu müsste ich natürlich den Code anpassen.
    In der vorherigen Seite hattest Du ja Teile davon gepostet. Nun ist noch die ganze Web-basierte Konfiguration dazugekommen. Damit kenne ich mich gar nicht aus.
    Könntest Du vielleicht (wie oben auch schon mal gewünscht) das ino-File posten und ggf. noch angeben wie man so ein Image erstellt.
    Das wäre super, danke!

    Ciao Stephan…

    Antwort
  • Avatar
    23. April 2019 um 20:02
    Permalink

    Hallo, sehr schönes Projekt! Ich bin ebenfalls gerade am basteln nach deiner Anleitung. Ich habe folgende Komponenten – Nodemcu Amica und den HC SR04 Ultraschallsensor. Strom für den Sensor nehme ich von Vin und GRD, dieser liegt auch mit knapp 5 V an Leider habe ich auch das Problem, dass ich keine Daten empfange, wenn ich wie in der Anleitung auf D1-Echo und D2- Trigger gehe. Kann man vielleicht das Script noch anpassen oder ändern? Über Hilfe oder einen Tip diesbezüglich würde ich mich sehr freuen. Vielen Dank schon mal

    Gruß

    Patrick

    Antwort
  • Avatar
    25. April 2019 um 15:32
    Permalink

    Moin Chris,
    vielen Dank für deine ganze Mühe, dieses Projekt so detailliert zu bebildern und beschreiben.
    Mein NodeMCU hat eine leicht andere Pin-Belegung (statt 5V ist ein reserved-Pin vorhanden), ich nehme mir daher auch die 5V vom V_in Pin.
    Meine Vermutung ist, dass Echo und Trigger evtl auch an einen anderen Pin müssen, hast du da Tips?
    Meiner ist so verdrahtet:
    https://cdn-reichelt.de/bilder/web/xxl_ws/A300/SBC-NODEMCU_PINOUT.png

    Antwort
  • Avatar
    8. Juni 2019 um 22:12
    Permalink

    Hallo,

    danke für Anleitung und Veröffentlichung der Lösung.
    Leider ist der Link zum Download der Firmware defekt.

    Wo oder wie könnte ich mit dir die Firmware herunterladen oder erstellen?

    Viele Grüße
    Kai

    Antwort
  • Avatar
    13. Juli 2019 um 20:22
    Permalink

    Hallo,
    ich finde den Ansatz, den Füllstand mittels Ultraschall zu messen super.
    2 Fragen hätte ich noch:

    -Sammelt sich nicht durch die hohe Luftfeuchtigkeit Wasser an dem Gitter des Ultraschallsensors?
    -Kann ich den Sensor auch direkt an meine Raspberry Pi3 – Homematic Zentrale einbinden?

    Danke und Lg,
    Alex

    Antwort
    • diefenbecker
      20. Juli 2019 um 10:04
      Permalink

      Hallo Alex,

      bis jetzt hab ich (und die anderen Bekannten die den gleichen Sensor nutzen) keine Probleme gehabt. Die Messungen sind meistens in Ordnung. Ab und an, wenn die Zisterne relativ leer ist, kommt mal eine Fehlmessung. Kann aber auch an meinem schiefen Einbau liegen. Das der Sensor irgenwann aufgrund der klimatischen Verhältnisse in der Zisterne das Zeitliche segnet ist für mich kein Problem da der Sensor nicht teuer ist. Bisher läuft alles seit 2 Jahren problemlos.

      Bestimmt kann der Sensor auch direkt an einen Raspi gehangen werden. Dafür habe ich aber keine Software. Nach Suche bei Google gibt es da aber verschiedene Ansätze z.B. in Python. Mein Raspi ist zu weit weg von der Zisterne, daher der Ansatz mit dem NodeMCU und WLAN.

      Gruß
      Chris

      Antwort
    • Avatar
      16. September 2019 um 11:27
      Permalink

      Hi,

      Ich weiß nicht ob das schon gewünscht wurde, aber super genial wäre eine MQTT-Anbindung, sodass der Sensor minütlich, stündlich, etc. einfach den Füllstand als eigenes Topic published und man die Werte dann auch in ein Dashboard integrieren kann. (Oder auch irgendwo anders im NodeRed vernudelt…)

      Super Arbeit!
      VG, Franz

      Antwort
      • diefenbecker
        16. September 2019 um 16:43
        Permalink

        Hallo Franz,

        MQTT ist in Arbeit und kommt demnächst 🙂

        Gruß
        Chris

        Antwort
  • Avatar
    11. August 2019 um 18:21
    Permalink

    Hallo Chris,

    erstmal vielen Dank für Deine Mühe und die detaillierte Anleitung zum Nachbasteln. Auch mir als bisher Unbedarften in Sachen Arduino ist es damit nach kurzer Zeit gelungen, ein Testsystem zum laufen zu bekommen – genial!
    Was ich mir wünschen würde, wäre auch eine Anzeige in Litern – entweder über genaue Zisternendaten oder einfach über Eingabe Maximalbefüllung und dann Berechnung über den Prozentwert realisierbar.
    Eventuell wäre auch eine Ansteuerung eines TFT-Displays implementierbar, damit der Frauen-Akzeptanz-Faktor – kurz faf bzw. waf in Englisch – noch gesteigert werden kann…

    Antwort
    • diefenbecker
      19. August 2019 um 18:51
      Permalink

      Hallo Patrick,

      freut mich wenn Dir das Projekt gefällt!
      Ich schaue mal wie man das noch erweitern kann. Habe auch noch ein paar Ideen…

      Gruß
      Chris

      Antwort
  • Avatar
    18. August 2019 um 18:59
    Permalink

    Hallo Alex,

    ich muss erstmal sagen, dass du das richtig richtig gut gemacht hast. Chapeau!

    Gibt es vielleicht die Möglichkeit die INO-Datei zu bekommen? Ich würde das Script gern auf meine Belange ändern wollen. Tausend Dank im Voraus

    Axel

    Antwort
  • Avatar
    29. August 2019 um 17:51
    Permalink

    Er einmal großes Lob für das Projekt. Das ist genau das was ich gesucht habe. Ich habe noch eine Frage zur API. Kann ich auch die Werte requesten in so IP-des NodeMCU/?abs=_abstand&hoehe=_fuellstand oder habe ich da einen Denkfehler. Ich würde gerne aus EDOMI heraus die Werte zyklisch abfragen.

    Antwort
    • diefenbecker
      2. September 2019 um 20:49
      Permalink

      Hallo Christian,

      der NodeMCU kann über den Aufruf der URL nur Daten zu einem Server posten. Wenn ich Dich richtig verstehe willst Du den NodeMCU aktiv abfragen.
      Da wäre JSON das Mittel der Wahl, oder? Ich könnte das einbauen wenn Du das testen möchtest.

      Gruß
      Chris

      Antwort
      • Avatar
        4. September 2019 um 19:02
        Permalink

        Hallo Chris,
        das habe ich mir schon gedacht dass es so nicht funktioniert, mittlerweile habe ich einen workaround gefunden, damit bekomme ich aber nur einen Wert übertragen. Ich denke auch JSON wäre das richtige, da könnte ich auch gerne testen wenn es fertig ist.

        Antwort
  • Avatar
    6. September 2019 um 19:33
    Permalink

    Hallo.
    Erstmal großes Lob für deine Mühe. Ich habe die Füllstandsmessung nachgebaut. Grundsätzlich funktioniert sie einwandfrei. Allerdings habe ich das Problem, das wenn ich die Seite aktualisiere, jedes mal andere Messwerte angezeigt bekomme. Momentan ist meine Zisterne Leer ( habe nachgeschaut ), trotzdem bekomme ich 68% angezeigt. Beim nächsten mal 75%, dann wieder 52%, beim nachsten mal 29% usw. Irgendwann ist dann auch mal 0% dabei.
    Mein Kabel vom HC-SR04 zum Node MCU ist 8m lang. könnte das an dem langen Kabel liegen ?

    Viele Grüße
    Oliver

    Antwort
    • diefenbecker
      7. September 2019 um 09:33
      Permalink

      Hallo Oliver,

      das “Springen” hat mir der ein oder andere schon berichtet. Ich denke nicht das es an der Länge des Kabels liegt da meins auch recht lang ist.
      Wichtig ist das der Sensor rechtwinkling zur Wasseroberfläche steht und auch wegen dem Öffnungswinkel etwas Platz hat und kein Rohr oder Kabel in der Nähe ist.
      Ich kann das “Springen” bei mir auch beobachten wenn der Wasserstand recht tief ist. Wie ist denn der Abstand bei Dir (wenn die Zisterne voll ist)?

      Gruß
      Chris

      Antwort
      • Avatar
        7. September 2019 um 16:48
        Permalink

        Hallo Chris
        Das Springen habe ich bei jedem Pegel. Mein Maximaler Abstand beträgt 140cm. Der Mindestabstand bei voller Zisterne sind 20cm. Rohre oder Kabel sind keine in der Nähe, bzw. diese liegen alle noch höher. Ob der Sensor genau Rechtwinklig zur Wasseroberfläche ist, kann ich nochmal Nachprüfen, jedoch Augenscheinlich schon.
        Meine Vermutung war die Kabellänge oder ob man evtl. abgeschirmtes Kabel nimmt.
        Danke für die Info

        Viele Grüße
        Oliver

        Antwort
  • Avatar
    9. September 2019 um 13:34
    Permalink

    Hallo,
    JSON wäre genial, dann könnte man den Sensor per openhab abfragen!

    Antwort
    • diefenbecker
      9. September 2019 um 16:56
      Permalink

      Hallo Sören,

      ist schon fertig, muss aber noch getestet werden.
      Schreib mir eine Mail und ich schick Dir den Link.

      Gruß
      Chris

      Antwort
  • Avatar
    22. Oktober 2019 um 21:43
    Permalink

    Moin Chris,

    ich habe ein Problem das wenn sich meine Fritzbox schlafen legt und am morgen wieder aufwacht der ESP keine neue Verbindung mehr aufbaut und somit über MQTT auch keine daten mehr rein kommen. Hast du vielleicht eine Idee für mich?
    Grüße

    Crispin

    Antwort
    • diefenbecker
      29. Oktober 2019 um 19:08
      Permalink

      Hi Crispin,

      das ist tatsächlich noch ein Punkt den ich nicht bedacht hatte und auch bei mir passiert wenn das WLAN mal nicht verfügbar ist.
      Ich werde ein reconnect einbauen. Versuche mich zu beeilen 😉

      Gruß
      Chris

      Antwort
    • diefenbecker
      1. November 2019 um 16:35
      Permalink

      Danke! Schaue ich mir an.
      Das Wetter dieses Wochende lädt zum programmieren ein.
      Melde mich wenn es eine neue Version gibt.

      Gruß
      Chris

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.