Ich bin endlich mal dazu gekommen und habe die ganzen Sourcen für die Zisternmessung mit dem ESP8266 mit einer ordentlichen readme auf github gestellt. Die Version 1030 ist dort auch als Release bereits für den NodeMCU und Wemos D1 vorkompiliert verfügbar.

Hier findet ihr das Github-Repository: https://github.com/diefenbecker/zisternenmessung
Aber auch bei den Funktionen gibt es Neuigkeiten. Die Version 1030 unterstützt jetzt einen schaltbaren Ausgang an D4 mit dem z.B. eine Pumpe über eine Relais-Platine angesteuert werden kann. Gesteuert wird das über zwei prozentuale Werte die in der Konfigurationsseite zu finden sind.

Hier die bin-Datei zum direkten Download:
http://www.bubux.de/heimautomatisierung/ota/zisterne_aktuell.bin
Viel Spaß damit! Das kommende Wochende verspricht wettertechnisch ja den Einsatz der Zisterne…
Gruß
Chris
Hallo,
so hab jetz mal wieder meinen Sensor aktiviert 🙂
War tot durch die Feuchte.
wie geht das mit dem OTA Update? hast ja schon mal gemacht bei mir 🙂
Mac ist
oderm muss ich komplett flaschen
Aktuelle Version ist V1022
gruß Markus
Hallo Markus,
grundsätzlich funktioniert das OTA auch vom 1022 auf die aktuelle Version. Allerdings kann es sein, dass vorhandenen Konfigwerte überschrieben werden. In eine der alten Versionen hatte ich mal einen Fehler reingeknödelt, weiß aber nicht mehr in welche…
Schick mir bitte nochmal Deine MAC-Adresse des Sensors per PN dann kann ich das OTA antriggern.
Gruß
Chris
Ich bin aktuell bei 1027. Kannst du auch bei mit das OTA Update anschieben? VG Maik
Servus Chris,
das schaut fein aus! Werd ich mir sobald ich wieder Zeit hab gleich mal flashen!
Ist es viel Aufwand einen weiteren Ausgang schalten zu lassen?
Denke da gerade an zwei Anwendungsfälle wie bspw. Abschalten der Pumpe bei zu geringem Wasserstand oder Schalten eines Relais für eine Filterreinigung.
Filterreinigung könnte man Schalten wenn bspw. der Füllstand um 3% gestiegen ist, oder nach Zeit, bspw. 1 x alle x Wochen für Zeitspanne von 20 Sekunden.
Auf jeden Fall -wie schon mal erwähnt – ein Hammerprojekt, danke für deinen Grips der da reinfliest! 🙂
Lg,
Martin
Hallo zusammen
Hat einer von Euch einen script für Homematic CCU3 um die Werte in Systemvariablen einzulesen?
Ich habe jetzt schon soviel Foren durch gelesen, aber eigentlich nichts funktionierendes gefunden.
Grüße Lois
Bei Daten an eigen API senden trägst du bei Server die IP der ccu ein. Port ist 80 und Intervall nach belieben.
In der ccu legst du eine Systemvariable an.
Dann rufst du folgende Adresse auf ( ip gegen die deiner ccu tauschen) http://192.168.178.99/config/xmlapi/sysvarlist.cgi
Wenn da nichts erscheint musst du auf der ccu erst xmlapi installieren
Such deine erzeugte Systemvariable und schaue welche ise_id ihr zugeordnet wurde.
In der Füllstandsanzeige gibt du nun bei Pfad folgende ein (ise_id tauscht du gegen die deiner Systemvariable)
/config/xmlapi/statechange.cgi?ise_id=42595&new_value=_fuellstand
Hallo Chris,
zunächst herzlichen Dank für die Bereitstellung und das Upgrade der Software. Habe jetzt über ein halbes Jahr noch die Vers. 1024 genutzt und bin jetzt auf erst auf V 1030 umgestiegen – never chance a running system. Ich nutze die wasserdichte bzw. gekapselte Version des SR – Sensors. Hat den Vorteil, dass durch die ausreichende Zuleitung die gesamte Elektronik im Keller verbleiben kann.
Probleme beim Umstieg auf die neue Version gab es dennoch: Gefühlt macht mir jetzt aber die Reichweite fürs Wlan Probleme. Habe einen original NodeMCU (V3) geflasht, da musste ich gegenüber früher die Positionierung des Kleinrechners verändern. Keine Besserung der Erreichbarkeit gab es durch die Verwendung eines Wemos D1.
Wurde von Dir eine andere Bibliothek für das Wlan verwendet?
Und was mir auch einiges Kopfzerbrechen anfangs bereitet hat:
Nach dem Upload der *.bin-Datei sind die freien Felder in der Konfigurationsoberfläche (Wlan SSD, PW, MQTT etc.) mit Hieroglyphen gefüllt – erst mit dem Anklicken kann man diese Löschen. Das war beim NodeMCU wie auch dem Wemos D1 der Fall.
Verwendet wird für das Flashen der bewährte NodeMCU Py-Flasher. Ich weiß, das ist “Jammern auf hohem Niveau” – was jedoch Deiner hervorragenden Arbeit keinen Abbruch tun soll.
Toll finde ich die Funktion zum Schalten eines externen Relais, das eröffnet dem Füllstandssensor noch weitere Verwendungsmöglichkeiten. Ich bin dran, das Schalten externer Verbraucher wie Pumpe etc. mittels MQTT zu realisiern, ich habe den Füllstandssensor in meine ioBroker-Umgebung implementiert.
Nochmals danke für die große Mühe und gelungene Umsetzung.
mfg
Michael
Hallo Michael,
an der WLAN-Komponente habe ich nichts geändert. Evtl. ist das den zwei kleinen Grafiken geschuldet die ich mit der 1030 eingebaut habe. Da ist die Weboberfläche etwas zickig geworden. Ich weiß aber noch nicht warum genau, bin aber dran.
Mit der Konfig das ist bekannt. Da hatte ich irgendwann mal eine Änderung in den Speicheradressen gemacht (wartum auch immer), so das alte Werte überschrieben wurden.
Evtl. war das von Version 1024 auf größer. Ist aber danach nicht mehr passiert da ich aufpassen 😉
Gruß
Chris
Hallo Chris,
tolle Arbeit die du dir da gemacht hast, der Ultraschall-Sensor funktioniert auch wunderbar alles gut.
AAAber der TOF VL53L0X in dreifacher Ausführung sowie der VL53L1X funktionieren bei mir überhaupt nicht 🙁 .Ich habe mehrere Node MCU´s , und D1 ausprobiert immer das gleiche.
Es werden utopische Werte angezeigt aber nichts gemessen.
Hast du vielleicht noch eine Idee was die Ursache sein könnte??
Ich möchte sehr ungern das Project in die Tonne werfen.
Vielen Dank für die mühe die du dir dafür gegeben hast.
mfg Michael G.
Hallo Michael,
bei mir funktionieren beide Sensoren problemlos. Hast Du mal in einem seriellen Monitor geschaut was der ESP so an Debug-Infos ausgibt?
Welche VL53 hast Du genau, also Hersteller der Platine mit dem eigentlichen Sensor? Evtl. gibt es ja da Unterschiede.
Ansonsten ist eine Ferndiagnose leider schwer…
Gruß
Chris
Moin!
Sehr schönes Projekt! Ich überlege das ganze bei mir und meinen beiden IBC-Containern einzusetzen. Bestünde die Möglichkeit auch zwei Sensoren (multiplexing?) an einem ESP zu betreiben?
Grüße,
Dennis
Hallo Dennis,
ich schreib es mal auf die Liste. Aber aktuell habe ich keine Zeit.
Vielleicht forkt ja jemand das Github-Projekt und baut das ein.
Gruß
Chris
Hallo Chris,
vielen dank für deine Arbeit, dies war genau das was ich gesucht habe.
Jetzt habe ich jedoch noch eine kleine Herausforderung mit dem MQTT im IOBroker.
Aktuell baut der ESP jede Sekunde eine neue Verbindung mit dem MQTT Adapter, dies ist im Log zu erkennen. ” Client [esp8266-40:91:51:4F:97:C7] reconnected. Old secret 1661158830460_7820. New secret 1661158830460_7820″ . Ich kann den Intervall zwar hochsetzten dann habe ich aber keine konstante verbindung. Hast du mir ein Tipp oder Idee wie ich das umgehen kann?
Viele Grüße
Andy
Hallo Andreas,
ich muss gestehen, dass ich nicht verstehe was genau Deine Frage ist.
Gruß
Chris
Hallo Chris,
die MQTT wird immer geschlossen und neu aufgebaut, je nachdem wie der Intervall eingestellt ist. Kann man die Verbindung auch permanent aktivieren?
mqtt.0
2022-09-18 12:24:07.189 info Client [esp8266-40:91:51:4F:97:C7] connected with secret 1663496647188_2129
mqtt.0
2022-09-18 12:23:38.510 info Client [esp8266-40:91:51:4F:97:C7] connection closed: timeout
mqtt.0
2022-09-18 12:23:15.994 info Client [esp8266-40:91:51:4F:97:C7] connected with secret 1663496595993_9571
mqtt.0
2022-09-18 12:22:38.500 info Client [esp8266-40:91:51:4F:97:C7] connection closed: timeout
mqtt.0
2022-09-18 12:22:15.982 info Client [esp8266-40:91:51:4F:97:C7] connected with secret 1663496535982_2909
mqtt.0
2022-09-18 12:21:38.487 info Client [esp8266-40:91:51:4F:97:C7] connection closed: timeout
mqtt.0
2022-09-18 12:21:15.971 info Client [esp8266-40:91:51:4F:97:C7] connected with secret 1663496475970_8700
mqtt.0
2022-09-18 12:20:38.475 info Client [esp8266-40:91:51:4F:97:C7] connection closed: timeout
mqtt.0
2022-09-18 12:20:15.961 info Client [esp8266-40:91:51:4F:97:C7] connected with secret 1663496415960_829
mqtt.0
2022-09-18 12:19:38.473 info Client [esp8266-40:91:51:4F:97:C7] connection closed: timeout
mqtt.0
2022-09-18 12:19:15.953 info Client [esp8266-40:91:51:4F:97:C7] connected with secret 1663496355953_4147
mqtt.0
2022-09-18 12:18:38.458 info Client [esp8266-40:91:51:4F:97:C7] connection closed: timeout
mqtt.0
2022-09-18 12:18:15.940 info Client [esp8266-40:91:51:4F:97:C7] connected with secret 1663496295939_7908
Hallo Andreas,
ich grätsche hier mal rein: Nach meinem Verständnis ist das normal, dass sich ein MQTT-Client beim Broker (Server) permanent ab- und anmeldet. Clients senden dem Server nach Verbindungsaufbau Nachrichten mit einem Topic, welches die Nachricht hierarchisch einstuft. Nach dem Empfang beendet der Brocker die Verbindung, bis der Client wieder mit der nächsten Meldung kommt.
Ich habe die hervorragende Umsetzung der Zisternenmessung von Chris bei mir im ioBroker integriert und sehe hier im Protokoll ebenso das ständige An- und Abmelden – ebenso wie andere MQTT-Temperatur- und Ereignissensoren.
Als Spielerei wird der aktuelle Zisternen-Füllstand noch über eine externe Laufschrift (LED-Matrix) angezeigt.
VG Michael
Hallo,
erstmal möchte ich sagen das mir das Projekt sehr gut gefällt!
Habe allerdings ein riesen Problem mit Kondenswasser an meinem Sensor.
Habe schon den HC-SR04 , VL53L0X und den JSN-SR04T probiert.
Verbaut in einem IBC Container (Im Deckel)
Funktioniert jeweils nur ein paar Stunden.
Jetzt war mein Gedanke einen Drucksensor über den Anlogen Eingang zu verwenden.
Gibt es da eine Möglichkeit das in die Software einzubringen?
Gruß
Sebastian
Hallo Sebastian,
das hört sich tatsächlich nach einem großen Problem mit Kondenswasser an wenn Dir alle Sensoren kaputt gehen. Mein Ultraschall-Sensor werkelt seit Jahren ohne Probleme in der Zisterne.
Aber egal, hilft Dir nicht. Einen Drucksensor zu integrieren geht bestimmt. Kennst Du einen Typ? Ich hab keinen hier und habe mich damit auch noch nicht befasst.
Gruß
Chris
Hallo Chris,
Habe ihn schon eingebaut und läuft schon mit Tasmota.
Ist ein 5V Drucksensor der mir bei 1 Bar an Analog0 den Wert 230 und bei 0 Bar 70 ausgibt.
Wäre super wenn du das in deine Software einbinden könntest. Also eine Auswertung des Analogeingangs mit Wert max und Wer min würde ja reichen anstelle des Abstands Zum Wasser. Oder?
Gruß
Sebastian
Hi,
erst mal wieder super das Update! Danke an Euch.
Habe eine liegende runde Zisterne und habe gerade Deine Rechnung dafür ausgewählt. Für D = 220 cm, L=115 cm. Ergebnis: 2147483647 l !!?? Habe dann auf github in Deine Formel geschaut:
volumen=radius*radius*laenge*(acos((radius-wasserhoehe)/radius)-(radius-wasserhoehe)*(sqrt(2*radius*wasserhoehe-(wasserhoehe*wasserhoehe))/(radius*radius)))/1000
Kann es sein das die Formel wie folgt aussehen muss:
V=(l∗(r*r∗acos((r−h)/r)−(r−h)sqrt(2rh−h*h))/1000
Gruss Markus
Hallo Markus,
das ist bei mir lange her mit dem Matheunterricht 😉
Ich schaue es mir an. Kann gut sein das da ein Fehler drin ist.
Gruß
Chris
Hallo Markus,
ich habe die Formel geprüft und Deine getestet. Meine Version rechnet auch richtig und die Werte sind gleich
Was hast Du für Abstände des Sensors angegeben?
Gruß
Chris
Hallo Chris,
zuerst vielen Dank für das tolle Projekt. Ich bin absoluter Neuanfänger und wollte dein Projekt mit der neuesten Version der Arduino IDE Umgebung übersetzen. Leider habe ich Probleme die richtigen Bibliotheken zu finden und bekomme das Projekt nicht übersetzt. Gibt es eine Liste mit den verwendeten Bibliotheken?
Gruß
Werner
Hallo Werner,
guter Punkt! Ich werde das im GIT ergänzen und mich kurz bei Dir melden zum Testen.
Wird aber erst am Wochenende weas werden.
Gruß
Chris
Hallo Chris,
ich komme bis zur Registerkarte „ota.ino“. Das bekomme ich aber nicht übersetzt. Anbei die Fehlermeldung. Scheinbar stimmt mit der Bibliothek etwas nicht. Anbei die Fehlermeldung vom Arduino IDE 2.0.0.
Gruß
Werner
/Users/Werner/Documents/Arduino/opencistern-main/zisterne/ota.ino: In function ‘void checkForUpdates()’:
/Users/Werner/Documents/Arduino/opencistern-main/zisterne/ota.ino:40:68: error: no matching function for call to ‘ESP8266HTTPUpdate::update(String&)’
40 | t_httpUpdate_return ret = ESPhttpUpdate.update( fwImageURL );
| ^
In file included from /Users/Werner/Documents/Arduino/opencistern-main/zisterne/zisterne.ino:8:
/Users/Werner/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h:114:25: note: candidate: ‘t_httpUpdate_return ESP8266HTTPUpdate::update(WiFiClient&, const String&, const String&)’
114 | t_httpUpdate_return update(WiFiClient& client, const String& url, const String& currentVersion = “”);
| ^~~~~~
/Users/Werner/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h:114:25: note: candidate expects 3 arguments, 1 provided
/Users/Werner/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h:115:25: note: candidate: ‘t_httpUpdate_return ESP8266HTTPUpdate::update(WiFiClient&, const String&, uint16_t, const String&, const String&)’
115 | t_httpUpdate_return update(WiFiClient& client, const String& host, uint16_t port, const String& uri = “/”,
| ^~~~~~
/Users/Werner/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.2/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h:115:25: note: candidate expects 5 arguments, 1 provided
exit status 1
Compilation error: no matching function for call to ‘ESP8266HTTPUpdate::update(String&)’
Hallo Chris,
wichtig wäre genau die Bibliotheken zu benennen, welche man im Arduino IDE hinzufügen muss, um dein Projekt zu übersetzen.
Gruß
Werner
Daran scheitere ich gerade auch. Finde weder für LiquidCrystal_I2C.h noch für Pushover.h die richtige Library.
Hallo Thomas,
ich habe die readme auf github aktualisiert. Schau mal bitte ob es hilft.
Gruß Chris
Hallo Chris,
konntest du schon Zeit für eine Zusammenstellung der Bibliotheken finden? Wichtig wäre die genaue Bezeichnung, da manche den selben Includefile verwenden. Eine Auflistung der Includefiles hilft nicht.
Gruß
Werner
Hallo Werner,
ich habe die readme auf github aktualisiert. Hoffe das gilft.
Sag bescheid falls noch was fehlt.
Gruß
Chris
Hallo Chris,
zuerst vielen Dank. Leider gelingt es mit immer noch nicht, Dein Projekt zu übersetzen. Kann das an der Version der Bibliothek liegen? Es wäre super, wenn Du im ReadMe-File die jeweilige Version der Bibliothek mit angeben könntest. Ich habe mir die aktuellen vom GitHub geholt.
Gruß
Werner
In file included from /Users/Werner/Documents/Arduino/libraries/DHT-sensor-library-master/DHT_U.cpp:15:
/Users/Werner/Documents/Arduino/libraries/DHT-sensor-library-master/DHT_U.h:36:10: fatal error: Adafruit_Sensor.h: No such file or directory
36 | #include
| ^~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Compilation error: exit status 1
Hallo Werner,
ich mache regelmäßig Updates der installierten Bibliotheken. Beim Adafruit DHT nutzte ich die Version 1.4.4.
Die hat allerding snoch eine abhängikeit => Adafruit Unified Sensor. Vielleicht fehlt die ja noch.
Die Adafriuit für den DHT Bibliothek findet man übrigens auch direkt in der Arduino IDE.
Gruß
Chris
Hallo Chris,
dein Tip bezüglich der Adafruit Unified Sensor Bibliothek war richtig, die hat gefehlt. Ich kann aber trotzdem das Projekt nicht übersetzen. Ich laufe genau in den selben Fehler, wie am Anfang. Die Übersetzung bleibt im File ota.io in der Zeile 40 hängen. Scheinbar kennt mein System die Funktion nicht.
function for call to ‘ESP8266HTTPUpdate::update(String&)’
40 | t_httpUpdate_return ret = ESPhttpUpdate.update( fwImageURL );
Ich habe folgende Boardverwaltungs-URL hinzu gefügt.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
https://dl.espressif.com/dl/package_esp32_index.json
Fehlt da noch ein Eintrag?
Gruß
Werner
Hallo, ich habe die OverTheAir Update Funktion aktiviert.
kannst du mir sagen wann das jeweils bereit gestellt wird ?
Vielen Dank.
MfG
Hallo Chis,
bin etwas weiter gekommen. Wenn ich den Inhalt der Funktion checkForUpdates() im File ota.ino auskommentiere, kann ich das Projekt übersetzen. Ist vielleicht im Github noch eine alte Version vom ota.ino eingecheckt oder fehlt noch eine Bibliothek?
Gruß
Werner
Hallo Chris,
einfach genial, auch dass ein liegender Zylinder ausgewählt werden kann 🙂 ! Ich habe nun endlich Zeit gefunden, dieses Projekt hier fertigzustellen.
Falls es mal ein Update geben sollte (ich hoffe bald), kannst du da die Option einbauen: Anzahl verbundene Zisternen !? Ich z.B. hab zwei Stk. á 6800l mit einem Bodenrohr parallel geschaltet. D.h., ich hab alles doppelt. Kann ich im Kopf bzw. nachgelagert (z.B. mit Fhem oder per Script) berechnen, aber direktes Ablesen wär schon geil! 🙂
Gruß
Tobias
Hallo Chris,
vielen Dank für das tolle Projekt ! Ist es möglich, noch zu integrieren, dass nach der Programmierung über den Browser die Wlan Verbindung “weggejumpert” werden kann ?
An der Stelle des Geschehens sucht der ESP vergebens nach Wlan.
Gruß
Jörg
Hallo Jörg,
kannst Du das bitte nochmal genauer erklären?
Ich weiß nicht genau was Du meinst…
Gruß
Chris
Hallo Chris,
also das Einrichten erfolgt ja über das Netzwerk, das funktioniert problemlos. Nur wenn jetzt kein Netzwerk mehr vorhanden ist, dann steht im Display “(IP unset)” und da bleibt es eben stehen. An dem Einsatzort ist kein Netzwerk vorhanden, mit dem sich der ESP verbinden kann. Daher die Frage, ob es möglich ist, einen autarken Betrieb zu machen.
Gruß
Jörg
Hallo Jörg,
jetzt hab ich´s auch verstanden 😉
Funktion kommt auf die Liste.
Gruß
Chris
Pingback: Gasverbrauch mit ESP8266 messen – bubuxblog
Hallo Chris,
bin gerade zufällig auf das tolle Projekt gestoßen- eigentlich genau was ich brauche, um den Stand meines Heizöltanks zu visualisieren und überwachen.
Ich habe ein bisschen im Code gestöbert, inwieweit beim Ultraschall die Temperatur und Luftfeuchtigkeit einfließt und ob ich evtl. noch halb-cm Schritte herauskitzle, weil der Tank eine sehr große Grundfläche hat. Dabei bin ich bei der Code Section zum auslesen des Ultraschallsensors (abstand = (dauer / 2) / 29.1; ) etwas stutzig geworden. Worauf basiert der Faktor 29.1 ? Hast Du da irgendwelche Temperatur/Luftdruch und Feuchte Kompensation reingerechnet? Ich nehme an Du rechnest auch intern alles in cm/s ?
Gleitender Mittelwert (so 5. Ordnung) wäre auch noch interessant, um Fehlmessungen zu glätten.
Gruss
Jochen.
Hallo Jochen
ich lasse die Temperatur nicht mit in die Messung einfliessen. Mit einer Näherungsformel könnte man das aber tun: Ausbreitungsgeschwindigkeit (in Luft) ~ 331,5 + (0,6 * T)
Ich schreib es in die Issues vom GIT.
Die 29,1 kommen daher, dass durch die angenommene Schallgeschwindigkewit der Puls 29,1µs für 1cm benötigt und das ganze hin und zurück daher nochmal der Faktor 2.
Die Bibliothek für den Ultraschallsensor würde das gleiche rechnen.
Gruß
Chris