Hallo Zusammen,
wir hatten das Thema ja bereits in D0-Bereich.
da es aber nicht dazu passt eher ein neues Thema.
Ich denke die Niederschlags- bzw. Regenmenge zu messen und irgendwie in die Hausautomation zu bekommen möchte irgendwie jeder.
Ursprünglich wollte ich einen Regenmengenmesser Drucken, war auch schon angefangen, als ich zufällig bei A......
ein komplettes Set (Display, Außensensor und Regenmengensensor) sehr günstig entdeckte.
Also erst mal bestellt und angeschaut.
Und probiert einen esp01 anzuschließen, hierbei gäbe es zwei Möglichkeiten komplett Umbau oder weiterhin parallel sprich wir nutzen den Reedkontakt
sowohl für die bestehende Sendeeinheit und den ESP, das mache ich zur Zeit.
Da der Reed eh nur auf GND zieht, ist es sehr einfach, GND verbinden, 3V verbinden und den Reedkontakt verbinden mit GPIO2
Allerdings haken anscheinend beim ESP01 einige Tasmotatreiber (welchen weiß ich nicht) am GPIO2 dazwischen, die muss
man also über #undef aussschalten.
Momentan läuft es soweit recht gut im Testaufbau und dem script.
Bilder und den momentanen script poste ich dann noch.
Gruß Jens
Regenmengenmesser mit Tasmota
-
AingTii -
28. August 2020 um 06:45 -
Erledigt
-
-
-
-
Code
Alles anzeigen>D v1=0.00 v2=0.00 min=0 hr=0 md=0 yr=0 fact=0.34 p:rm=0 rd=0 p:rma=0 rmn=0 p:rya=0 ryn=0 farbe1="#008000" s1="Tag: {m}<b><span style=" >T v1=REGEN#Total_In v2=v1*fact >B ->sensor53 r tper=5 ;rma=0 ;rya=0 ;rm=0 ;svars >S ;Tagesverbrauch hr=hours if chg[hr]>0 and hr==19 and v2>0 then rm=v2 svars endif if upsecs%tper==0{ rd=v2-rm } ;Monatsverbrauch md=day if chg[md]>0 and md==27 and v2>0 then rma=v2 svars endif if upsecs%tper==0{ rmn=v2-rma } ;Jahresverbrauch yr=year if chg[yr]>0 and v2>0 then rya=v2 svars endif if upsecs%tper==0{ ryn=v2-rya } if upd[rd]>0 then =>Publish tele/%topic%/SENSOR {"Regen_Tag":%rd%} =>Publish tele/%topic%/SENSOR {"Regen_Monat":%rmn%} =>Publish tele/%topic%/SENSOR {"Regen_Jahr":%ryn%} endif >W ============== Regen: {m} %2v2% mm -------------- Regen %s1%"color:%farbe1%">%2rd% mm</span></b> Monat: {m} %2rmn% mm Jahr: {m} %2ryn% mm ============== >M +1,2,c,1,-20,REGEN 1,=h============== 1,1-0:1.8.0*255(@1,Anzahl gekippt, x,Total_In,0 #
-
Ach wie witzig. Ich glaube ich nutze den gleichen Regenmesser.
Habe die orig. Platine ausgebaut und durch eine eigene ersetzt.
Mein Sensor steht auf dem Dach und das kabel geht über das komplette Flachdach dann durch den Kamin in den Keller bis zum ESP32 der für meine Auslesung der Wasser,Gas,Strom Daten zuständig ist.
Mein Problem war der lange weg. Das lange Telefonkabel welches ich hierfür nutze ist gut 50m lang. Hierdurch kam es immer wieder zu fehlzählungen. Z.b. wenn irgendwo im Keller das Licht eingeschaltet wurde. Gleichzeitig berichtete auch ein anderer Nutzer im D0 Thread, dass der Impuls oft zu kurz ist um von Tasmota gezählt zu werden. Ob das bei der aktuellen Tasmotaversion immer noch der Fall ist, kann ich nicht sagen.
Im Endeffekt habe ich also eine komplett neue Schaltung aufgebaut. Meine neue Platine im Ventus Regenmesser hat einen NE555 TimerIC der den Puls des Reedkontaktes als Trigger nimmt und 3,3V auf die Rückleitung legt. Allerdings für eine vorher eingestellte Zeit. Diese Zeit ist absichtlich recht hoch gewählt (ca 500ms). An der ESP32 Platine von mir, habe ich das passende Gegenstück entworfen. Also ein debouncing welches auf den positiven Impuls reagiert, jedoch nur wenn dieser auch lang genug ist. Dadurch habe ich die ganzen Fehlzählungen die durch irgendwelche Störeinflüsse auf der Leitung sind komplett ausgegrenzt.
Bei Interesse kann ich die Schaltbilder dazu hochladen.
-
Ja schon witzig, aber eigentlich nicht verwunderlich, da ja Bastler da meist auf etwas günstiges zurückgreifen....
Bezüglich der langen Kabel ist es bei 3,3v oder 5V natürlich sehr kritisch noch vernünftige Signale zu bekommen,
vor Allem hast DU bei 50m ja auch eine riesen Antenne die alles möglich auffängt.
Gibt ja auch von CC2TV so ein Video wo er ein langes Kabel spannt und damit Strom abbreift
Sprich er nimmt Erde und die "Antenne" geht über einen StepUp und betriebt eine LED damit...
Ähnlich werden auch bei Dir Störungen aufgefangen.
Evtl. könnte man es über eine Netzwerkkabel mit Schirmung auf GND abfangen?!?!?
Ich habe jetzt überlegt, ich erweitere das ganz noch gleich mit einer Füllstandsanzeige für die Tanks.Überlegung ist dabei einen D1mini mit beiden Sensoren, Regenmengenmesser und einen HC-SR04
für den Füllstand.
Hier eine interessante Erkenntnis erlangt, misst der SR04 in einem Rohr, misst er max auch nur bis Ende des Rohres,
gleiches gilt für zusammengesteckte Rohre, da ist nach dem ersten Rohr schluss.
Somit muss ich testen wie es mit einem 2m DN50 HT Rohr aussieht. Dann könnte ich das einfach in das 70er vom Tank stecken,
da es ja keine Unterbrechung haben darf. -
Hallo AingTii
hast du eine Bestellnummer von deinem Regenmesser oder sowas, sowas fehlt mir auch noch
-
Ich hab den https://de.elv.com/ventus-ersatz-…und-w137-124131
Der von AingTii siwht mir ähnlich oder sogar gleich aus.
-
Hallo sunburstc
werde ich bei der nächsten Bestellung mal berücksichtigen. Danke
-
-
Hallo AingTii
mal direkt bestellt
-
Starker Preis!
Ja, dass es eine riesige Antenne ist, ist mir klar =). Leider war kein anderes Kabel im Haus als dieser Telefondraht von dem ich gefühlt noch Kilometer habe.
Allerdings habe ich mir überlegt, vielleicht wäre es eine Option, dort einfach ein esp8266 und einen LiPo Akku einzubauen. Evtl. auch mit einer Solarzelle diesen Akku zu laden. Den ESP mit einem Regenimpuls aus dem Deepsleep wecken via MQTT dann einen Impuls verschicken und im Raspberrypi zählen lassen.
Allerdings bringt dies das Problem mit, dass der ESP nicht weiß, ob er aus dem Deepsleep geweckt wurde, weil 3h Schlaf um sind oder weil der Regensensor ein Impuls gegeben hat.
Alternativ mit einem ESP32s2 vielleicht. Mal sehen.
-
Starker Preis!
Ja, dass es eine riesige Antenne ist, ist mir klar =). Leider war kein anderes Kabel im Haus als dieser Telefondraht von dem ich gefühlt noch Kilometer habe.
Allerdings habe ich mir überlegt, vielleicht wäre es eine Option, dort einfach ein esp8266 und einen LiPo Akku einzubauen. Evtl. auch mit einer Solarzelle diesen Akku zu laden. Den ESP mit einem Regenimpuls aus dem Deepsleep wecken via MQTT dann einen Impuls verschicken und im Raspberrypi zählen lassen.
Allerdings bringt dies das Problem mit, dass der ESP nicht weiß, ob er aus dem Deepsleep geweckt wurde, weil 3h Schlaf um sind oder weil der Regensensor ein Impuls gegeben hat.
Alternativ mit einem ESP32s2 vielleicht. Mal sehen.
Nutzt Du ioBroker?
dann wäre der Code ja noch einfacher, im Grund wie mein ESP-Taster, durch Tastendruck wird lediglich der RST auf GND gezogen
das könnte ja auch der Reed machen, dann startet er meldet sich ins wlan, sendet den Befehl und geht wieder in den DeepSleep dauermodus -
AingTii Ja nutze ioBroker mit Sonoff iobrokerAdapter.
Ja... Allerdings, hat der esp2866 ja nur eine begrenzte Zeit die er Schlafen kann eh er wieder aufgeweckt werden muss. Zumindest eine begrenzte Zeit was ein alleiniges aufwachen möglich macht. ca. 3h.
Man muss ja GPIO16 mit RST verbinden... Ich bin mir nicht sicher, ob der ESP den WakeupReason unterscheidet zwischen: Aufgewacht durch vorzeitigen Reset, oder Aufgewacht durch Zeitabgelaufen. Müsste ich testen.
Aber ansonsten hast du recht, ich könnte ihn in einen dauerhaften Deepsleep schicken und würde die nächsten Regenlosentage nichts von ihm hören ehe es wieder das erste mal regnet :-P.
Ich fände es schon schön wenn er sich wenigstens alle 3h mal kurz meldet und sagt wie voll seine Batterie ist und man weiß, dass er noch lebt.
Ein weiteres Problem was ich mir vorstellen kann ist, dass das schwarze Gehäuse doch sehr sehr warm wird oben auf dem Flachdach in der prallen Sonne. Ob so ein LiPo Akku das erträgt?
-
nicht ganz, Du kannst Ihn auch in den dauer Sleep versetzen, hier mal meine Code für den Taster...
C
Alles anzeigen// Copyright (c) 2018 Jens Vorwerk All rights reserved. /* Einstellungen in der IDE 1.8.5 Board: "Generic ESP8266" Flash Mode: "DIO" Flash Size: "1M (64K SPIFFS)" (beim schwarzen ESP-01, sonst 512K) Debug port: "Disabled" Debug LEvel: "keine" IwIP Variant: "v2 lower Memory" Reset Method: "ck" Cristal Frequenzy: "26Mhz" VTables: "Flash" Flash Frequenzy: "40Mhz" CPU Frequenzy: "80Mhz" BuitIn Led: "2" Upload Speed: "115200" Earase Flsh: "Only Sketch" Port: Auswählen auf welchen Port der Ftdi Adaper liegt Programmer: "AVRISP mKII" */ //################################################################################################### // Library #include <ESP8266WiFi.h> // WiFi settings const char* ssid = "ssid"; // WLAN SSID eingeben const char* password = "passwort"; // Wlanpasswort mit \ maskieren falls Sonderzeichen wie zb / const char* Wifi_hostname = "MiniButtonJens"; // Geräte-Netzwerkname // Network IPAddress ip(192, 168, 5,xxx); // IP Address IPAddress gateway(192, 168, 5, 1); // gateway fürs Netzwerk IPAddress dns(192, 168, 5, 1); // dns fürs Netzwerk IPAddress subnet(255, 255, 255, 0); // subnet mask fürs Netzwerk // Host const char* host = "192.168.5.x"; // IP Adresse des Host const int httpPort = 8087; // Port des Host String befehl = "PUT /toggle/0_userdata.0.P.3_OG.1_EZ.Lampe_3_Decke"; // Befehl an Host //############################################################################################## void setup() { // Serial Serial.begin(115200); Serial.println("ESP8266 in normal mode"); // Connect to WiFi WiFi.hostname(Wifi_hostname); WiFi.begin(ssid, password); WiFi.config(ip, dns, gateway, subnet); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Print the IP address Serial.println(WiFi.localIP()); // Logging data to cloud Serial.print("Connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } // This will send the request to the server client.print(befehl + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(10); // Read all the lines of the reply from server and print them to Serial while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); // Sleep Serial.println("ESP8266 in sleep mode"); ESP.deepSleep(0); // 0 bei unbegrenzt } void loop() { delay(1000); Serial.println("aufgewacht"); ESP.deepSleep(0); // bei unbegrenzt }
also rein theoretisch sollte es auch gehen, bei jedem kippen einmal das toggle zu senden und im iobroker zu zählen.
evtl. kann man es ja auch erweitern, und zählt im esp speichert es und sendet bei jedem 10mal den wert ?!?!?
Du musst ja nicht toggle verwenden könntest ja auch Werte schreiben etc...
Gruß Jens -
Ja, wie bereits erwähnt, muss ich immer noch herausfinden, ob der ESP8266 einen unterschied bei den Restartreasons macht.
Weil... wenn er dauerhaft schläft, weiß ich garnicht, ob er wirklich noch lebt, wenn es eine lange Zeit lang nicht regnet.
Falls du übrigens Stromsparen willst, es gibt fantastische Möglichkeiten die Zeit fürs Verbinden mit dem WiFi zu verkürzen.
Z.B. indem man nicht nur die SSID+PW sondern auch den Channel und auch die BSSID des Routers/Accesspoints mitgibt. Dann dauert die Verbindung nur wenige ms.
Habe das bei mir auch implementiert. Wenn interesse besteht, kann ich dir das mal schicken.
-
Im Deepsleep läuft an sich nur die RTC (~20uA) die eben über den GPIO16 den Chip resetet und somit aufweckt.
Alle andren Modi (Light-Sleep etc.) brauchen mehr Saft:
https://randomnerdtutorials.com/esp8266-deep-s…th-arduino-ide/
EDIT:
Nachdem der Chip von der RTC schlicht und einfach resetet wird gibts da keine Unterschied ob das manuell oder durch die RTC geschieht.
Ist auch kein echtes aufwecken sondern nur ein reboot.
-
HoerMirAuf Ja, dass dachte ich mir. Der ESP32 unterscheidet den Wakeupreason. Bzw. man kann sogar abfragen, durch welchen GPIO er aufgeweckt wurde. Braucht aber auch mehr Strom der gute.