Vor einiger Zeit bin ich im Internet auf ein (für mich zumindest) sehr interessantes Projekt von Chris gestoßen (http://blog.bubux.de/update-fuellst…v1026/#comments) . Er hat einen Füllstandssensor mit einen ESP8266 (z.B. D1mini oder 12E etc.) sowie einen Temperatursensor DHT22 und einen Display aufgebaut. Dafür hat er eine eigene Firmware geschrieben. Ich fand das Projekt so gut, das ich Chris angeschrieben und Ihm gebeten habe ob er das Projekt eventuell etwas erweitern könnte um es eben auch mit Homematic zu verwenden. Da er keine CCU hat, habe ich für Ihn dann etwas getestet. Anfangs konnte man im JSON Feed "Nur" den Füllstand in % übertragen. Mittlerweile aber lassen sich jetzt aber auch Füllstand in %, Füllmenge in Liter, Temperatur in °C und die Luftfeuchte in % übertragen. Diese Daten kann man dann in Homematic mit einen Script auslesen lassen und in Systemvariablen schreiben. Dort kann man sie dann weiter verwenden wie man gern möchte. So lassen sie sich z.B. auch mit einer Handy App abfragen, an einen MQTT Broker senden etc. und noch viel mehr.
Da die Original Homatic Füllstands Sensoren doch recht Teuer und auch anfällig sind, ist das hier eine Preiswerte Alternative und auch für ungeübte Bastler relativ leicht aufzubauen.
Was benötigt man dazu ?
Nun als erstes natürlich einen ESP8266, wo bei man da verschiedene Typen wählen kann. z.B. D1 mini oder Node MCU12E etc. das ist jeden selbst überlassen. Dann natürlich noch einen Sensor um Entfernungen zu messen. Hier hat man nun auch wieder verschiedene Möglichkeiten. Z.B. die recht Preiswerten SR04 Ultraschallsensoren. Diese gibt es auch wieder in verschiedenen Ausführungen und Preiskategorien. Der "Öffnungswinkel beträgt meist 15 Grad. Damit lassen sich meist bis. ca. 4-5 Meter messen. Es gibt sie auch als Wassergeschützte Ausführung, dann aber mit Öffnungswinkel von ca. 75 Grad. Seit neuesten kann man aber auch sogenannte Time of Flight Sensoren wie z.B den VL53LOX verwenden. Diese haben einen sehr geringen Öffnungswinkel von unter 2 Grad, sind extrem klein und messen sehr Präzise. Nachteil ist aber, das die günstigen max. 2 Meter messen. Je nach Verwendungszweck reicht das aber in sehr vielen Fällen vollkommen aus. So kann man z.B. seine Regenwasserzisternen oder die sehr beliebten IBC Tanks oder Öltanks damit den Füllstand sehr gut überwachen. Optional kann man noch einen DHT22 Sensor mit anschließen und erhält somit noch Temperatur und Luftfeuchte Werte. Ebenfalls Optional läßt sich auch ein Display (LCD 20x4 oder LCD 16x2 oder auch ein kleines OLED Display 1306) anschließen
Um nun das ganze auch mit Homematic verwenden zu können, brauchen wir noch ein kleines Script das wir selbst in der CCU anlegen müssen. Je nach dem was man sich alles anzeigen lassen möchte, muss man nun noch Systemvariablen auf der CCU selbst anlegen. Wie das geht erspare ich mir hier zu erläutern und kann überall nachgelesen werden. Ebenso muss man sich noch ein Programm erstellen, wo dann das Script aufgerufen wird. Dies würde ich z.B. mit einen Timer verbinden und ca. alle 5 Minuten abrufen/aktualisieren lassen. Man kann aber auch viel größere Abstände wählen.
Der ESP8266 muss zuvor natürlich mit einer speziellen Firmware (diese stammt von Chris) geflasht werden. Ich nutze dazu meist ein kleines Programm und zwar den ESPEasy Flasher. Es gibt natürlich noch sehr viel mehr Programme, einfach mal etwas Googeln nach ESP flashen.Ich hänge den ESP Easyflasher unten mal mit an. Es ist sehr einfach zu bedienen und man muss nur den Seriellen Port (an dem der ESP8266 angeschlossen ist) und die Firmware (zisternen.ino.bin. Diese sollte sich im selben Verzeichniss befinden wo auch die ESPEasyflasher.exe ist) angeben. Nach ca. 2 - 5 min. ist der ESP dann geflasht. Jetzt noch die Komponenten die man möchte anschließen und schon kann man Testen. Dazu in einen Webbrowser die IP des ESP8266 eingeben und es sollte sich ein Seite öffnen wo man dann die Einstellungen etc. tätigen kann. Das meiste ist eigentlich selbsterklärend dort. Unter Sonstiges findet man die Konfiguration. Hier gibt man den verwendeteten Sensortyp an, ob man ein Display angeschlossen hat oder nicht. Ebenso ob ein DHT22 angeschlossen wurde und noch andere Einstellungen. Den Typ des zu überwachenden Gefäßes (Maße) ob man MQTT nutzen möchte oder API etc. Denke aber das ist selbsterklärend.
Kommen wir nun zu den Script, das in Homatic angelegt werden muss (wenn man Homatic verwenden möchte)
Dies sollte so aussehen und noch auf seine Bedürfnisse angepasst werden sollte.
Die IP (string url) muss man und und den prefix kann man anpassen.
Also mehrere Systemvariablen bei Homematic erstellen und als Namen dann SV_Abstand und SV_Fuellstand; SV_Temperatur sowie SV_Luftfeuchtigkeit eingeben. Nun werden die Variablen automatisch gefüllt. SV kann man anpassen nach seinen Wünschen, muss das dann aber beim anlegen der Systemvariablen beachten. Also wenn man es auf z.B. RT_ändert, muss die Variable dann eben RT_Abstand heißen. Abstand, Fuellstand, Temperatur und Luftfeuchtigkeit sollte man aber so belassen und nur bei Bedarf ändern was vor den _ steht.
Links: http://blog.bubux.de/update-fuellst…zisterne-v1024/
http://blog.bubux.de/update-fuellst…v1026/#comments
http://blog.bubux.de/neue-version-d…zeige-zisterne/
[ANLEITUNG] - Firmware flashen mit ESPeasy Flasher (Alle Firmware .bin Dateien / Windows)
Firmware flashen mit ESPeasy Flash-Tool
(Alle Firmware .bin Dateien)
Was wird benötigt:
- USB TTL Adapter oder gebrückter Arduino (GND+RST) - Dieser muss zwingend unter 3.3V betrieben werden. Adapter mit 5V können den Shelly beschädigen.
- Eine Firmware .bin Datei (Tasmota, ESPeasy, oder, oder)
- ESPeasy Flasher (zu finden in jeder ESPeasy Release HIER)
Info 1: Ich gehe davon aus, dass ihr den TTL Adapter oder den Arduino bereits in eurem Windows installiert habt.
1. COM…
https://www.amazon.de/gp/product/B08…0?ie=UTF8&psc=1
https://de.aliexpress.com/item/329151006…wE&gclsrc=aw.ds
https://www.amazon.de/Ultraschall-Me…7270192&sr=8-14
https://www.amazon.de/AZDelivery-D1-…17270278&sr=8-3
https://www.amazon.de/AZDelivery-Nod…17270335&sr=8-3
https://www.amazon.de/AZDelivery-Tem…2dDbGljaz10cnVl
https://www.amazon.de/WayinTop-Displ…17270404&sr=8-5
https://www.amazon.de/YXPCARS-12864-…17270469&sr=8-4
ESP Flashtool
https://github.com/letscontrolit/…g/mega-20210223
Anbei noch paar Bilder und wie es z.B. in einer App (in meinen Beispiel die Smartha APP PC Version, die es auch für IOS und Android gibt, aussehen könnte. Wobei die Anzeige Brunnen von einen HB UNI Sensor ist und die anderen 3 von den ESP8266. Luftfeuchte habe ich bei mir nicht angezeigt, könnte man aber auch machen. 😉
Ein großes Danke geht natürlich an 66er, Chris (ohne dessen Firmware es so nicht ohne weiteres möglich wäre) und auch an MichaelN für die Bereitstellung des Script
PS: auf den vorletzten Bild sieht man den Provisorischen Aufbau auf den Schreibtisch. Steckbrett war gerade keins vorhanden, deshalb mit Vagoklemmen. Aber zum Testen langt es zu. Das ganze kann man dann in ein Wasser Geschütztes Gehäuse, wie z.B. einer Verteilerdose aus der Elektrik recht klein aufbauen. Siehe dazu letztes Bild. In dem "Größeren Gehäuse, rechts im Bild, ist zusätlich noch ein Shelly und ein Mininetzteil 220 Volt zu 3,3 Volt mit eingebaut).Bei Verwendung eines VL53LOX braucht man dazu nur ein etwa 10mm Loch Bohren. Die ganzen Webansichten etc. kann man alle bei Chris auf seinen Blog anschauen. Links dazu siehe oben.
Sollte man einen VL53LOX verwenden, so wird dieser über I2C angeschlossen.
D1>SCL
D2->SDA
VCC > VCC
GND>GND
!V1.0 MichaelN https://homematic-forum.de/forum/viewtopic.php?f=26&t=65051&p=639981#p639981
string url = "http://192.168.0.102/json";
string prefix = "SV_";
string rueck;
string error;
object SV;
system.Exec("wget --no-check-certificate --timeout=2 -O - '"#url#"'" , &rueck, &error);
if (!rueck== "")
{
WriteLine("HTTP-Request OK");
rueck = rueck.Replace('{','');
rueck = rueck.Replace('}','');
rueck = rueck.Replace('"','');
string Part;
foreach (Part, rueck.Split(",") ){
if (Part.Contains(":"))
{
Part = Part.Replace(":",";");
WriteLine (prefix # web.webGetValueFromList(Part,0) #" = "# web.webGetValueFromList(Part,1));
SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get((prefix # web.webGetValueFromList(Part,0)));
if (SV) {
SV.State(web.webGetValueFromList(Part,1));
WriteLine("=== SV "#prefix # web.webGetValueFromList(Part,0)#" written ===");
}
}
}
} else {
WriteLine("Error at HTTP Request");
}
Alles anzeigen