Hauptmenü

Watchdog???

Begonnen von SNX100, 15 Oktober 2021, 12:07:07

Vorheriges Thema - Nächstes Thema

Wernieman

Und vorallem sind die IO von Arduino/ESP einfach "sauberer" als vom RasPi ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

SNX100

Ok, also ich denke mal mit folgender Lösung dürfte man Fhem nicht blockieren....

define  Wassertestschleife_notify_1 Wassertestschleife:Next:.*:.*:.* {if (ReadingsVal("Wasserstandssensor","Pinlevel","") eq "low") {fhem("set Wasserstandssensor off")} else <<semiscript: if Pinlevel länger als 2 Sekunden high>> {fhem("set Heizung off")} else {fhem("set Wasserstandssensor off")}}

Die Wassertestschleife wird alle 3 sekunden durchgeführt und läuft ohne Unterbrechung gesteuert durch Bedingungen.
Beim ersten mal checkt das notify den Level. Wenn der lvl low ist ist alles gut und der Wasserstandssensor wird abgeschaltet.
Ein Schleifendurchgang beendet.

Wenn er high ist wird der Wasserstandssensor nicht abgeschaltet. Checkt aber dafür wie lange der lvl bereits high ist.
Bei weniger als 2 sekunden hat er es grade gemerkt und lässt einfach den Wasserstandssensor aktiv... bei länger als 2 Sekunden hat das die vorhergehende Schleife bereits bemerkt und die aktuelle Schleife bestätigt es lediglich.
In dieser Zeit würde schwappendes Wasser für einen Wechsel des Pinlevel zwischen den Abfragen sorgen welcher die High-Zeit definiert und müsste auf jeden fall unter 2 Sekunden liegen. bei zu niedrigem Wasserstand ändert sich der Pinlevel nicht, somit kommt automatisch ein wert knapp unter 3Sekunden raus weil in der vorhergegangenen Schleife bereits erfasst. Und jetzt kommt die "Not-Aus" Funktion (hier "set Heizung off... etc" ).

Müsste nur noch den Semiscript teil übersetzt bekommen...

SNX100

Falls es noch jemand interessiert... Gelöst habe ich das mittlerweile über einen py Script

#!/usr/bin/python
import time
import RPi.GPIO as GPIO
# Fehler ausschalten
GPIO.setwarnings(False)

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)

# Pin 32 (GPIO 12) auf Output setzen UEBERGABEPIN
GPIO.setup(32, GPIO.OUT)

# Pin 22 (GPIO 25) auf Output setzen SENSOR
GPIO.setup(22, GPIO.OUT)

# Dauersschleife
while 1:

  # Zaehler restetten
  deb = 0

  # Sensor an
  GPIO.setup(22, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
  #print("sensor an")

  # Warte 100 ms
  time.sleep(0.1)

  while GPIO.input(22) == GPIO.LOW:

    # Warte 100 ms
    time.sleep(0.1)


    # Zaehler debounce
    deb = deb + 1
    #print(deb)
    #print(GPIO.input(22))
    # wenn Zaehler >= 3 sek
    if deb >= 30:
      GPIO.setup(32, GPIO.IN)
      #print("Uebergabe an")
      # Warte 100 ms
      time.sleep(0.1)

  #Uebergabepin ausschalten wenn Wasser wieder voll
  GPIO.setup(32, GPIO.OUT)

  #print("Uebergabe aus")

  # Sensor aus
  GPIO.setup(22, GPIO.OUT)

  #print(GPIO.input(22))


Dann muss nurnoch der Übergabe Pin in Fhem abgefragt werden.
Kann man sicher auch anders übergeben, aber das war jetzt quick&dirty.