Flanklendauer auswerten

  • Moin Zusammen,

    ich habe einen ESP32 an einen Rückspülfilter angeschlossen.
    Mittels potentialfreiem Kontackt gibt der Antrieb Störungen aus.
    Die Dauer der Flanke gibt Aussage über die Störung.

    Mögliche Signale:

    • Flanke 1 Sekunde
    • Flanke 3 Sekunde
    • Flanke 4 Sekunde
    • Flanke 5 Sekunde
    • Flanke 6 Sekunde
    • Flanke dauerhaft

    Den ERROR-Ausgang des Filters habe ich an den GPIO13 des ESP gelegt.

    MEINE FRAGE:
    Kann man eine Rule oder ein Script schreiben welches z.B. einen Analogwert generiert welchen ich über MQTT in openHAB weiterverarbeiten kann?

    Kann leider nichts vergleichbares im Forum finden :|

    Danke und Gruß
    Florian

  • Code
    MEINE FRAGE:
    Kann man eine Rule oder ein Script schreiben welches z.B. einen Analogwert generiert welchen ich über MQTT in openHAB weiterverarbeiten kann?

    analog Wert generiert? Output?

    Digital an openHAB ?

    Wenn 1 Sekunde high dann 12 V

    Wenn 2 Sekunde high dann 10V

    Wenn 3 Sekunde high dann 9 V

    so ?

  • Ja, z.B. oder einfach eine Variable "ERROR" generieren die im tele/state-Datenpaket für MQTT ferfügbar ist.

    So sieht das Paket aktuell aus.

    Code
    10:45:30.371 MQT: tele/Tasmota076/STATE = {"Time":"2024-06-10T10:45:30","Uptime":"0T17:30:08","UptimeSec":63008,"Heap":148,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":44,"Berry":{"HeapUsed":4,"Objects":42},"POWER1":"OFF","POWER2":"OFF","POWER3":"OFF","POWER4":"OFF","POWER5":"OFF","POWER6":"OFF","POWER7":"OFF","Wifi":{"AP":1,"SSId":"XXXXXXX","BSSId":"XXXXXXX","Channel":1,"Mode":"11n","RSSI":64,"Signal":-68,"LinkCount":6,"Downtime":"0T00:01:27"}}

    Ich dachte an so etwas wie "Error":"3" wenn GPIO13 für 3 Sek. High war.

    Ich weißm nur nicht ob so etwas überhaupt möglich ist.

  • Habe noch mal drüber nachgedacht...

    Die einfachste Lösung ist bestimmt Analog0 zu aktivieren und dann über ein Script/Rules den Wert zu schreiben.

    10 bei 1 Sek.
    30 bei 3 Sek.
    40 bei 4 Sek.

    Hat jemandf einen Ansatz für eine Rules? Ist Neuland für mich...

    Danke und Gruß

  • die erste Idee auf die Schnelle

    1)den GPIO13 Power1 Relais zuordnen

    2 die Ein-und Ausschaltzeiten per Timpetamp festhalten und das Delta behandeln und senden

    - aber: gerade getestet ohne Erfolg, da der Timestamp in dieser Sprache nur Anzeigewert und nicht UNIX-Wert

    Backlog Rule1 1; Rule1 5; Rule2 1; Rule2 5; Rule3 1; Rule3 5

    Rule1
    on Power1#State=1 do backlog VAR1 %timestamp%; Var3 1 endon
    on Power1#State=0 do Backlog VAR2 %timestamp%; Var3 2 endon

    Rule2
    on Var3#State=2 do Backlog sub2 %var1%; var3 3 endon

    Rule3
    on Var3#state=3 do backlog var3 1; senden %VAR2% endon


    PS: time 3 - hätte noch eine ausreichend guten Wert in der Reflektion, aber wie auffangen ?

    Da müssen wir auf eine Idee von HoerMirAuf warten !

    3 Mal editiert, zuletzt von karoCB (11. Juni 2024 um 14:30)

  • heute hatte ich Zeit - aber leider keine Idee und keine Varinate die funzt !

    Auch mit dem Release 14.1 auf ESP32 werden die großen Timerzahlen vom Start und Ende nicht subtrahiert :(

    Da hilf nur warten auf eine gute andere Idee die noch gehen könnte oder der Wechsel auf Tasmota-Skript mit dem selben timestamp-Ansatz:

    der Rule- ohne Erfolg:

    Backlog Rule1 1; Rule1 5; Rule2 1; Rule3 1

    Rule1
    on Power1#State=1 do backlog state; ___Start__ endon
    on Power1#State=0 do backlog state; ...Ende... endon

    Rule2
    on Time do Backlog VAR1 %value%; VAR3 1 endon

    Rule3
    on VAR3#State>0 do Backlog SUB2 %VAR1%; Mult2 -1; VAR3 0; Ausgabe %VAR2% endon

    2 Mal editiert, zuletzt von karoCB (13. Juni 2024 um 07:49)

  • dieses script misst die Zeit in der ein Pin auf low ist auf 0.1 Sekunde genau, sollte für diese Anwendung reichen


  • Moin Zusammen und vielen Dank für die guiten Ideen und Ansätze.

    ich werde mit dem Script mal experimemntieren.
    Allerdings weiß ich noch nicht wie ich die Auswertung der Flankendauer am geschicktesten per MQTT in openHAB übertragen bekomme.

    Und noch eine etwas peinliche Frage...
    Der Pin GPIO13 wir ja mittels des potentialfreien Kontaktes des Rückspülfilters auf GND gelegt wenn ERROR vorliegt.
    Heißt doch, der GPIO13 ist immer HIGH bis der potentialfreie Kontakt es auf GND (LOW) legt ODER???

    Habe da glaube ich einen Gedankefehler...

    Danke und Gruß
    Florian