Grundwasserspiegel mit HC-SR04

  • Hallo

    Bin dabei mit einem HC-SR04 den Grundwasserspiegel zumessen.

    Der Aufbau mit einem 90 cm KG Rohr funktioniert soweit.

    Die Messhöhe beträgt 90 cm und wird in Tasmota auch angezeigt.

    Nun möchte ich aber bei Grundwasserspiegel niedrig dass 0 cm angezeigt wird.

    Jetzt sind es ja 90 cm. Wie könnte ich dieses umkehren.

  • Dazu gibt es viele Möglichkeiten. Du wirst nicht ausschließlich den HC-SR04 verwenden. ;)

    * In Tasmota Rules kannst du bspw. den gemessenen Wert von einem anderen Wert subtrahieren. Angenommen, der Wert landet in Var1: (nicht getestet, kleine Fehler möglich, aber prinzipiell funktionstüchtig)

    Code
    on Var1#state do backlog Mult1 -1; event add90to1 endon on event#add90to1 do backlog Add1 90; event pub endon on event#pub do publish mein/Grundwasserspiegel/Wert %Var1% endon

    Dieses Beispiel veröffentlicht eine MQTT Nachricht per publish. Stattdessen kannst du selbstverständlich auch etwas anderes tun lassen. Tasmota bietet viele Möglichkeiten.
    Äh, arbeitet dein HC-SR04 überhaupt an Tasmota?

    * Mit einem ESP32 geht noch viel mehr, ich messe damit den Wasservorrat meiner Zisterne und mehr ...

    * Smart home Verwaltungszentralen von FHEM bis openHAB können so etwas auch. Ich verwende gerne Node Red.

    Tja, suche dir einfach etwas aus!

    Grüße

  • Danke für die Rückantwort.

    Der HC-SR04 läuft auf einem Wemos D1 mit Tasmota. Werte werden mit SR04 Distance in Tasmota und IOBroker ausgegeben.

    Nun möchte ich dass wenn der Grundwasserspiegel ganz niedrig ist nicht die 90 cm sondern 0 cm anzeigt wird.

    Nicht bei Ansteigen des GW Spiegel mit 90 bis 0 cm sondern 0 bis 90 cm.

    Habe mal so was ähnliches per Rule im Net gesehen aber finde es nicht wieder.

  • Im allg. ist es besser, Rohwerte möglichst dicht an deren Quelle zu Nutzwerten zu verarbeiten. Was der Wemos D1 tun kann, sollte nicht ioBroker überlassen werden.

    Hast du dir mal genauer obiges Ruleset von mir angeschaut? Vermutlich brauchst du nur den dort vorhandenen Ereignistrigger event#pub bzw. dessen Anweisung für deine Zwecke anzupassen. Jedenfalls sollte am Ende der gewünschte Nutzwert in Var1 stehen. Wenn du das Ruleset so verwendest, wie es dort steht und du einen MQTT Broker hast, kannst du die Nuzwerte per MQTTfx oder noch besser per Tasmota Device Manager (TDM) beobachten. Der TDM ist dafür besonders geeignet, weil du damit das Ruleset komfortabel ändern kannst. Auch ein gewisses Debugging in den Rules ist damit möglich.

    Falls du so gar keine Ahnung von den Tasmota Rules haben solltest und diese auch nicht wünschst, kann ich dir nur von solchen Projekten abraten.

    Gruß

  • Hallo,


    ich mach etwas ganz ähnliches um den Inhalt meiner Öltanks zu messen.

    Für die Berechnung nutze ich Tasmota Script und bilde einen Mittelwert mit Temperaturkompensation.

    Ich muss zugeben, mit ist Scripting sympatischer als die Rules.


    Vielleicht kannst ja einen Teil davon verwenden.


    Gruß Christian

  • Da dies eine reine Darstellungsangelegenheit ist, kann das sehr gut dicht am Anwender geschehen. Der will es ja lesen. So etwas sollte man per ioBroker können. Ich kenne von ioBroker nur den Namen. Per Node Red ist das ein Kinderspiel, JavaScript halt. Auch in der App MQTT Dash geht das wunderbar.

    Wenn du zu JavaScript diesbezüglich Unterstützung haben möchtest, kann ich diese gerne geben. Afaik ist ioBroker eine JavaScript Anwendung, oder nicht? Ich habe hier auch mal etwas von Datenpunkten in ioBroker gelesen ...

    Einen Dank an Christian. Ich ergänze meine obigen Rules um das Abspeichern des Abstandswertes in Var1:

    Code
    on SR04#Distance do Var1 %value% endon on Var1#state do backlog Mult1 -1; event add90to1 endon on event#add90to1 do backlog Add1 90; event pub endon on event#pub do publish mein/Grundwasserspiegel/Wert %Var1% endon

    Wichtig zur Nutzung der Rules ist zu wissen, dass in einer Rule (on ... endon) der Wert einer Variablen nicht fortlaufend geändert werden kann, also nur einmal eine Wertzuweisung funktioniert bzw. den gewünschten Effekt hat. Deshalb hat mein Vorschlag mehrere gestaffelte Rules. So etwas geht per Programmiersprache selbstverständlich viel einfacher.

    An premo:

    Darf ich fragen, warum du mit einer Rule nicht weiterkommst? Hast du in Fragen von Programmierung keinerlei Ambitionen oder sind dir die Rule "Verhaltensweisen" zu fremd? Ich musste mich erst durch diese Rule Eigenschaften "durchärgern", bis ich sie begriff. ;)

    Das bisher beste, was mir bzgl. µC begegnet ist, sind ESP32 Boards mit Tasmota32. Da geht etwas so richtig ab. Das ist allerdings nur dann interessant, wenn man auch gerne mal programmiert.

  • Interessant

    Das nehme ich mal zum Anlass, eine kleine Kritik an Theo Arends Werk zu üben. Huch ... bitte nicht erschrecken.

    Wir alle wissen, oder zumindest viele von uns, dass Theo eine großartige Firmware erstellt hat, weiter entwickelt hat und dies noch immer tut.

    Und er erstellt noch eine umfangreiche Dokumentation dazu. Was will man mehr?

    Seine Doku ist eine Zusammenstellung von Auflistungen und Erklärungen, sehr oft angereichert an Beispielen ... bis hin zu fertigen Anwendungen.

    Wenn jemand genau eine solche Anwendung sucht, mag er/sie dies so übernehmen, zusammenschrauben, abtippen und sich hoffentlich freuen.

    Mein Dilemma ist typischerweise, dass ich etwas realisieren/implementieren will, das ich nicht einfach übernehmen kann, und ich fühle mich auch gut dabei.;)

    Um meine Projekte zu realisieren, bin ich vor etwa 2 Jahren auf Tasmota umgestiegen, zunächst testhalber. Ich war erfreut, dass damit vieles per Konfiguration gelang, was ich vorher alles selbst in C/C++ programmierte, mit shell Skripten verarbeitete und schließlich auf Webseiten veranschaulichte. Ich konnte mich also mit Tasmota mehr um das Wesentliche kümmern. Das tue ich nach wie vor und fühle mich mit Tasmota sehr wohl.

    Nun zur kleinen Kritik bzgl. Theos Dokumentation

    Um etwas selbst kreieren zu können, muss ich die Grundlagen, auf denen meine Kreation basiert, zumindest im wesentlichen verstehen. Dazu reichen Beispiele nicht aus. Dazu braucht es sorgfältig zusammengestellte Erläuterungen, möglichst vom Einfachen beginnend. Ich finde aber allzu oft stattdessen Beispiele in kleinen Anwendungen, die ich nicht als Experimentierfeld nutzen kann, weil mir dazu schlicht die Ausstattung (Hardware) fehlt. Ich habe keine Rollladensteuerung, Lampen, die man in Helligkeit und Leuchtfarbe einstellen mag, Garagentorsteuerung, ...
    Zumeist gäbe es Beispiele in einfachem Rahmen ohne solche Ausstattung, die das Grundverständnis vermitteln können. Diese hat Theo auch eingesetzt, aber nur sehr selten.

    Ich las vor ein paar Wochen einen von Theos Beispieltexten immer und immer wieder, geschätzt 50 mal, und parallel mit meinen Experimenten, in der Hoffnung, irgendwann die verborgene Schlüsselinformation zu finden. Ich beiße mich mitunter fest ... und finde zumeist eine Lösung. Das ist aber oft sehr, sehr aufwändig.

    Die Nachfrage

    Vermutlich sind viele mit einer solchen Dokumentation zufrieden, weil sie etwas entdecken, das sie ziemlich genauso realisieren wollen. Auch hier im Forum dominieren Fragen zur Lösung eines konkret aufgetauchten Problems eindeutig. Fragen zwecks Verstehen von etwas ... hmm, gibt es solche hier? Vielleicht sind nur wenige an solchen grundlegenden Verständnisfragen interessiert. Ich kritisiere das hier nicht, es könnte aber eine Erklärung für die relativ vielen konkreten Anwendungsbeispiele in Theos Doku sein.

    Fazit

    Vielleicht ist das, was ich ein wenig kritisiere, auch ein Grund für die oft anzutreffende Abneigung, sich genauer mit den Rules zu beschäftigen. Eigentlich sind sie sehr gut.

    Und am besten sind sie im Zusammenwirken mit Berry Funktionen in Tasmota32. 8o

    In aller Freundschaft

    Gerhard

  • Moin.


    Im Prinzip sind die Rules nichts anderes wie eine abgespeckte Programmiersprache. Und es ist wie bei jeder anderen Programmiersprache auch, man muss sich einarbeiten. Beschäftigt man sich eine zeitlang damit versteht man die Art wie das Ganze funktioniert.


    Der Knackpunkt an der Sache ist, das die Lösungsfindung oft eine Kombination aus Konfiguration UND Rules sind. Das erfordert Verständniss sowohl für den Syntax der Rule und wie sie anzuwenden sind, als auch für das Finetuning von Tasmota, wie die ganzen SetOption Parameter und wie ich meine Ein und Ausgänge in den Einstellungen festlege und diese miteinander interagieren.


    Zum einen bieten diese ganzen Konfigurationsmöglichkeiten demjenigen der sich nicht so tief einarbeiten möchte die Möglichkeit schon sehr viel individuell einzustellen, die Rules zum anderen dem Versierteren die Möglichkeit bei Bedarf noch tiefere Anpassungen und Funktionen vorzunehmen.


    Ob einem der Syntax liegt oder nicht ...naja. Ich musste mich auch erst damit anfreunden. Als Alternative gibt es ja dank dem gemu2015 auch noch Script das vielen einfacher erscheint und sogar noch mehr Möglichkeiten bietet als die Rules.


    Das ist, denke ich auch der Grund was es vielen so schwer macht. Die meisten hier sind auf der Suche nach einer Lösung für ein Konkretes Problem und weniger weil es sie interessiert warum das dann funktioniert. Und wer sich nicht generell ein wenig mit Skripten und Coden beschäftigt wird sich mit dem Verständniss dann wohl auch eher schwer tun.


    Was Arends Doku der Rule betrifft. Eigentlich sind die Erklärungen recht gut, finde ich, und auch die Beispiele. Mir geht's da nicht anderes wie bei jeder anderen Programmiervariante, ob das Blockly, Arduino, Java etc ist, wenn man sich programmiertechnisch auf Neuland bewegt. Es erfordert einfach Zeit, Spaß und Interesse an der Sache selbst, möchte man tiefer einsteigen. Es ist wie bei jeder andern Programmiersprache einfach nicht möglich jede Variante darzustellen sondern man kann nur die Prinzipien zeigen. Beim Übertragen auf die eigenen Probleme ist dann eben das erlernte Verständnis gefragt.


    Es ist eben immer eine Gradwanderung sowohl dem reinen Anwender, Einsteiger und dem der alles rauskitzeln will gerecht zu werden.

    Und ich finde in der Hinsicht bietet Tasmota tatsächlich schon ganz schön viel. :):thumbup:


    Und sonst bräuchten wir das Forum ja auch nicht ^^

    benzino77 Tasmocompiler

    Gitpod Master Release


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

  • HoerMirAuf

    Danke für deine Reaktion. Prinzipiell stimme ich dir in allem zu. Allerdings ist diese Rule Sprache nicht das entscheidende "Problem". Ich sehe die Anfangsschwierigkeit in der puren Ereignissteuerung fast ohne jeglichen erkennbaren Ablauf. Offensichtlich gibt es einen solchen Ablauf bzw. interpretierende Abarbeitung, nach meinen bisherigen Eindrücken - in jedem Ruleset (das wäre der treffendere Name) von vorne nach hinten. Und breaks lassen sich nur sehr wenige einsetzen, max. 3. Ich bin kein Fan von diesen breaks. Sie sollen offenbar die eingeschränkten Möglichkeiten der Rules ein wenig erweitern.

    Wichtig ist auch, zu erkennen, dass die Rules nichts bieten, was von prozeduralen Sprachen bekannt sein könnte. Letztlich kann man zwar relativ viele Verarbeitungen damit implementieren, die Länge der Keywords dieser Rule Sprache lässt schlicht wenig Raum.

    So sind bspw. meine Bewässerungs-Shellys vollgepfropft mit Tasmota Rules. Ich konnte damit vieles implementieren, insbesondere was Zeitsteuerungen angeht - sogar eine modulo Berechnung gelang. Dann aber ging mir der Platz aus ... Alleine das Wort "backlog" ist sehr lang- Ok, längere Identifier sind erst einmal verständlicher.


    premo

    Mich interessiert, wie du mit deinen Messungen vorankommst. Lasse bitte gelegentlich dazu etwas von dir lesen. Wenn dieses Projekt für dich wichtig ist, könnte ich dir vielleicht eine umfangreiche und sehr flexible Lösung zur Verfügung stellen - auf Basis eines ESP32. Dafür möchte ich dann allerdings meine Quellcodes noch überarbeiten.


    Chris_ROL

    Ich habe mich mit den Skripts bisher nicht beschäftigt. Soweit ich dein Skript einschätzen kann, bildest du darin einen arithmetischen Mittelwert (Durchschnitt) von 5 einzelnen Rohwerten. Wenn dies zutrifft, möchte ich dir mitteilen, dass Ausreißer, die immer wieder mal auftreten, stark in diese Mittelwertbildung hineinwirken. Ich empfehle, wenn man mit solchen Skripts auch sortieren kann, eine mediane Mittelwertbildung. Damit haben die Ausreißer praktisch keinen Einfluss auf den Mittelwert. Hierfür sind diese 5 Rohwerte irgendwie zu sortieren, die Einfügesortierung (insertion sort) ist besonders einfach zu implementieren und für nur 5 Werte bestens geeignet. Aus den 5 Sortierten Werten verwendest du den Wert in der Mitte (Median), hier also den 3. Wert. Es ginge noch etwas besser, das verrate ich aber nur, wenn dafür Interesse besteht. ;)


    Ansonsten an alle: Noch viel Freude an euren Projekten!

  • Mich interessiert, wie du mit deinen Messungen vorankommst.

    Die Messungen mit einen JSN-HC04T ist bei Feuchtigkeit besser, da der HC-SR04 ständig Fehlwerte angezeigt hat.

    Da unser Wohngebiet vor 60 Jahren auf Kleiboden (ehemaliger Jadebusen) angelegt wurde, haben viele in der

    Nachbarschaft (Siedlung) Probleme mit dem Grundwasser im Kellerbereich.

    Da bei mir das GW im Kellerschacht ansteigt und bei Starkregen das GW so hoch steigt dass es am Kellerfenster

    rein läuft. Nun habe ich im Kellerschacht aus 40er KG Rohr mit einer Länge von 90 cm eingesetzt.

    Im Rohr befindet sich nun eine Tauchpumpe mit Schwimmschalter. Da es bis jetzt noch nicht wieder Starkregen

    vorkam steht im Rohr nur so ca. 5 cm GW.

    Mein ganzes Vorhaben mit der Kontrolle des GW Spielgel ist wie schnell und hoch steigt dieser.

    Mit einem Wemos D1 und den Sensor reicht es mir vollkommen. Diese Werte vom JSN gehen an IOBroker

    und mit Flot wird dann dort diese Werte in cm als Diagramm angezeigt. Über IObroker mit Blockly werden mir dann auch mit einem Whatsapp

    Adapter das steigen des GW Spiegels angezeigt.

  • Prima. Dem entnehme ich, dass du mit diesem Teil bereits fertig bist. Weiterhin viel Erfolg bei der Beschränkung deines lokalen GW-Spiegels!

    Nach meiner Erfahrung liefert Tasmota immer mal wieder in unregelmäßigen Abständen fehlerhafte Messwerte. Dies laste ich Tasmota nicht an, weil ich solches vor meiner Tasmota-Zeit auch schon erlebte. Falls du solche Ausreißer noch wegbekommen möchtest, lies dir mal mein obiges Posting für Chris_ROL durch. Vielleicht kannst du das gebrauchen und umsetzen.

  • Prima. Dem entnehme ich, dass du mit diesem Teil bereits fertig bist.

    Danke für deine bisherigen Antworten.

    Komme soweit erst mal weiter. Gibt es denn eine Möglichkeit über der Konsole die Nachkommastelle zu ändern.

    Jetzt ist es ja bei 90.000 cm besser wäre 90.0 cm oder sogar 90 cm.

    Laut Wiki im Forum unter Commands - Sensor werden zb. für Strommessungen mit dem Befehl AmpRES die Dezimalstellen

    verändert.

    Strommessung - aktuelle Auflösung

    [tt]0..3 = stellt die maximale Anzahl von Dezimalstellen ein z.B.: AmpRes 2[/tt]

    Müsste dann doch auch für die Entfernung vom JSN umsetzbar sein.

  • Nun zur kleinen Kritik bzgl. Theos Dokumentation

    Theo Arends mag bei Tasmota das letzte Wort haben,

    aber für Dokumentation / Beispielsammlungen usw. steht ein ganzes Team an seiner Seite,

    wo zudem jeder mitmachen kann und darf.


    Thema ESP32 ist noch relativ jung bei Tasmota,

    wenn man dazu etwas beitragen / verbessern kann und möchte, ist man sicher immer herzlich willkommen.

  • premo

    Ich habe Blockly nicht im Einsatz, hatte es mal kurz getestet und für mich verworfen. Mir liegen gut strukturierte Qullcodes mehr. Du solltest aber vermutlich in Blockly vor der Darstellung eines von Tasmota gelieferten Wertes diesen in eine Ganzzahl runden können. Ich denke, dass hier JavaScript die Grundlage ist. Wenn es zum runden keinen Block gibt, gibt es hoffentlich einen Funktions- oder Anweisungsblock, in den man JavaScrpt-Code eintragen kann. Falls es mit Math.round() nicht gelingen sollte kann man notfalls mit Math.floor(Wert+0.5) für positive Werte bzw. Math.ceil(Wert-0.5) für negative Werte arbeiten.

    Ich empfehle jedenfalls, das Runden dicht am Anwender zu platzieren. Das befreit dich von zusätzlichen Anpassungsarbeiten, falls du später an der Gewinnung der Werte auf Tasmota-Seite noch Änderungen vornehmen möchtest. Es handelt sich ja um eine reine Darstellungsangelegenheit und Darstellungen sind Anwenderwünschen zuzuordnen.

    Falls du aber unbedingt von Tasmota ganzzahlige Werte geliefert haben möchtest, kannst du bei Nutzung von Rules CalcRes (calculation resolution) nutzen - s.a. https://tasmota.github.io/docs/Commands/ , dort nach "resolution" suchen. Dies wirkt sich in den Rules bei deren simplen Berechnungen aus. Ich bin aber derzeit nicht sicher, ob nicht doch dann "xx.000" das Ergebnis ist.

  • DejaWuest

    Danke für den Hinweis. Ich vermutete dies auch.

    Ja, das Thema Tasmota32 ist noch relativ jung, aber so richtig erstklassig.

    Wenn mein Schreibe-Englisch flüssig genug wäre, täte ich mich evtl. an der Doku beteiligen. Lesen gelingt zumeist brauchbar, aber das Schreiben ist bei meinen Englisch Kenntnissen viel zu arbeitsaufwändig, und mit Hilfe von Übersetzern wäre ich nicht sicher genug, dass der Text verständlich genug wäre. Das ist ein Grund, weshalb ich hier und nicht in einem englischsprachigen Forum bin. Btw, ich habe in diesem Forum an anderer Stelle bei vorhandenem Interesse meine Mitarbeit am Thema Tasmota32, Berry, ... angeboten. Es gab kein dazu anregendes Echo.

    Mal sehen ...

  • Hallo,


    eich


    durch die Definition der Variablen mit m: und nicht M: werden diese schon als Median Filter verwendet:

    Im Grunde sind 5 Median Filter kaskadiert.

    Ist eigentlich für die reine Messung viel zu übertrieben, aber so bekomme ich ca. alle 52 Minuten

    einen sauberen Messwert in IO Broker, der auch in SQL abgelegt wird.


    Für mehr Infos

    Scripting-Language


    Gruß

    Christian