Heizöl Sensor, Werte auf LCD2004 anzeigen

  • Hallo,

    Ich bastel grad an einem Füllstandssensor für mein Heizöl.

    Wemos D1 mini mit Tasmota 6.6.0.12, HC-SR04 zum Messen angebunden an iobroker über Mqtt.

    Ich möchte im Tankraum ein LCD 2004 montieren das mir die Füllmenge anzeigt.

    Der Sensor ist an D6 und D5 und das LCD an D1 und D2 angeklemmt. Das Display lässt sich ansprechen.

    Meine Frage ist hier iwe kriege ich die Distace auf das Display?

    Ich hänge grad an den Rules und weis hier nicht was ich da schreiben muss um an den "Distance" Wert vom SR04 zu kommen.

    Code
    15:06:56 MQT: tele/Heizoel/SENSOR = {"Time":"2019-11-07T15:06:56","SR04":{"Distance":66.667}}
    15:11:56 MQT: tele/Heizoel/STATE = {"Time":"2019-11-07T15:11:56","Uptime":"0T00:20:14","UptimeSec":1214,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER":"On","Wifi":{"AP":1,"SSId":"xxxxxxxxx","BSSId":"xxxxxxxxx","Channel":13,"RSSI":86,"LinkCount":1,"Downtime":"0T00:00:04"}}
    15:16:56 MQT: tele/Heizoel/STATE = {"Time":"2019-11-07T15:16:56","Uptime":"0T00:25:14","UptimeSec":1514,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER":"On","Wifi":{"AP":1,"SSId":"xxxxxxxxxx","BSSId":"xxxxxxxxxxx","Channel":13,"RSSI":100,"LinkCount":1,"Downtime":"0T00:00:04"}}
    15:18:19 CMD: Rule1 1
    15:18:19 MQT: stat/Heizoel/RESULT = {"Rule1":"On","Once":"Off","StopOnError":"Off","Free":458,"Rules":"on tele-SR04'Distance do DisplayText %value% Cm endon"}

    Was muss ich in die Rules eintragen damit ich den Wert angezeigt krieg und kann ich mit diesem wert auch in den Rules rechnen um die Liter auszurechnen (int, float?)?


    MfG Fritz

  • Ich hab jetzt die Werte auf dem Display. Es muss

    Rule1 on Tele-SR04#Distance do DisplayText %value% endon

    Das zeigt mir den Wert des Sensors.

    Es geht auch ohne Tele aber dann wird der Wert ständig aktualisiert was nicht unbedingt nötig ist.

    Gibt es eine Möglichkeit die Liter im Wemos auszurechnen?

    Die Rechnung müsste (150-%value%)*41.65 lauten und evtl noch die Nachkommastellen entfernen.

    In der Wiki hab ich unter Rules nichts über berechnungen gefunden.

    Eine andere Option wäre es den Liter Wert aus einem DP auf dem iobroker auszulesen, aber wie das geht hab ich noch keine Ahnung.

    MfG Fritz

  • Hab das Berechnen nach einigen Suchen hinbekommen! Muss zwar noch an der Formatierung etwas arbeiten aber sonst bin ich echt heil Froh das es soweit funktioniert. Hier mal die Rule Zeile:

    Rule1 on SR04#Distance do Backlog var1 150; SUB1 %value% ; MULT1 41.65; DisplayText [x5y1]%var1% endon

    Das gibt schhon mal den Wert auf dem Display aus.

    Rule1 ist die Regel 1;SR04#Distance ergibt die Gemessene distanz in cm

    Backlog ermöglicht mehrere Befehle hinter einander durch Semikolon getrennt in eine Rule zu schreiben.

    Var1 wird hier mit 150 gefüllt weil das meine Tankhöhe ist (Kellergeschweißter Tank).

    SUB1 zieht den gemessenen Wert von der Tankhöhe ab und speichert ihn wieder in var1

    MULT1 multipliziert den 41.65 (Liter pro cm Füllhöhe) und schreibt es wieder in var1

    DisplayText gibt den Wert (%var1%) an [x pos y pos] aus.

  • Wie wär's hiermit:

    Code
    Rule1 on Tele-SR04#Distance do backlog var1 %value%; sub1 150; mult1 -45.65; endon on Tele-SR04#Distance do DisplayText %var1% endon

    Müsste funktionieren. Erklärung:

    Der Messwert von #Distance wird der var1 zugewiesen.

    Dann wird mit sub1 und mult1 die var1 neu berechnet.

    Dann wird bei einem Ereignis auf #Distance der Inhalt von var1 auf dem Display ausgegeben.

    Mehr dazu hier unter Punkt 8. Arithmetische Befehle Rules oder im Rules Cookbook https://github.com/arendst/Tasmota/wiki/Rule-Cookbook unter Arithmetic commands

    Mag sein, dass es arithmetisch einen kürzeren Weg gibt. Ich bin da nicht so schlau, sondern mach lieber Stück für Stück (eigentlich: Wert minus 150 mal minus 1 mal 41.65 ;)

  • Abend,

    Hast du dir das mal von mir angeguckt, mit Easy ESP, geht das alles on board und super einfach, hatte es auch erst mit Tasmota probiert, aber nachdem ich Easy ESP genommen habe, war es die bessere Lösung, und meine das LCD Display von dir wird damit auch unterstützt!

    Füllstand Öl Tank messen


    MFG

    Sascha

  • Hallo, ---es geht weiter---

    das nächste Problem: Der Füllstand brauch bei einem Tanksensor nicht dauernd gesendet werden (allein wegen dem Stromverbrauch) ich würde gern die messunfg auf 1 mal pro ,Stunde reduzieren und den ESP solange in tiefschlaf setzen.

    Ich habe den SR04P an D6-Echo und D5-Trig , das (mittlerweile OLED) an D2-SDA und D1-scl.

    Ich habe jetzt beim compilieren DeepSleep aktiviert, hat jedoch erst mal nichts gebracht weil es irgendwie nicht richtig funktioniert oder ich mach was falsch. Muss ich hier irgendwas am Sensor ändern damit er nicht so häufig misst oder wird er von Tasmota abgefragt?

    Wichtig wäre für mich noch das ich einen Taster verwenden kann der auf Betätigung den DeepSleep unterbricht und so der aktuelle Füllstand auch im Tankraum auf dem Display angezeigt wird.

    Wodrauf muss ich dabei achten?

    Hat jemand da schon Erfahrungen???

    MfG Fritz

  • Ich habe jetzt beim compilieren DeepSleep aktiviert, hat jedoch erst mal nichts gebracht weil es irgendwie nicht richtig funktioniert oder ich mach was falsch.

    Hast du D0 auch mit RST verbunden und in der Geräte-Config (D0 --> Deepsleep) eingestellt?

    Deinen Taster zum aufwecken kannst du mit einem 10k Widerstand zwischen GND und irgendeinen GPIO hängen (hab ich selber aber noch nie getestet).

    Sollte laut Anleitung aber funktionieren: https://github.com/arendst/Tasmota/wiki/DeepSleep

  • kann mir mal jemand sagen was ich da machen muss um in einem GENERIC 0 Modul per Taster diesen Toggle einzuschalten und auszuschalten?

    Ich steh da grad auf dem Schlauch, ich hab keine Ahnung womit oder wie ich auf diesen toggle zugreifen kann. Das mit dem deepsleep versteh ich noch nicht so richtig. Ich kann ja über eine weitere Regel versuchen wenn das Display über einen Taster (bei mir an D4) eingeschaltet wird in der Regel den Messinterval wieder auf 2 Sekunden zu stellen und beim ausschalten des displays den Messinterval wieder auf 1 Minute (oder ein mal die Stunde) zu setzen.

    Hat dazu jemand eine Idee?

    Ich hatte übrigens das Problem das beim Anschließen des OLED und einem Neustart immer wieder DisplayMode 1 drin war. Nach der änderung auf DisplayMode 0 und einem erneuten Start (einmal kurz Stromlos) war wieder DisplayMode 1 drin! Ich hab mir da beholfen indem ich vor dem erneuten compilieren die anderen Modes deaktiviert hab weil ich sie ja eh nicht brauch.