Hauptmenü

Watchdog???

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

Vorheriges Thema - Nächstes Thema

SNX100

Hallo zusammen,

ich bin seit gestern neu in dem Thema Fhem und arbeite grade an einer Steuerung mit einem Pi4 welche diverse Pumpen steuert.
Die Relais incl den zugehörigen (Hardware-)Tastern funktionieren bereits hervorragend.
Dazu gehört auch ein Wasserstandssensor.
Dieser wird einfach quick and dirty über den GPIO25 realisiert.
... ich weiß, ich weiß... ich habe aber schon einige Varianten des Wasserstandssensors durch und was gleich folgt ist für mich wahrscheinlich die beste Lösung.
So soll das funktionieren:
GPIO ist standartmäßig low. Alle 2 Sekunden soll er kurz angezogen werden und Durchgang getestet werden. Ist Durchgang vorhanden ist alles gut und die schleife geht von vorne los. Durch diese lange Low Periode und das extrem kurze anziehen vermeide ich (wahrscheinlich) die gleichstrombedingte Korrosion an den im Wasser liegenden kontakten.

Sollte jetzt aber kein Durchgang für länger als 1 Sekunde vorhanden sein bleibt der pin so lange angezogen bis wieder Kontakt für >1Sekunde da ist. Innerhalb dieses Zeitraumes sollen sämtliche Devices abgeschaltet werden und ein Dummy mit der Meldung "wasserstand OK / zu niedrig" geswitcht werden.

Bei meiner Recherche bin ich auf den Watchdog gestossen, aber die Syntax um mein vorhaben umzusetzen überfordert mich maßlos...

Bin für jeden Ansatz dankbar.

VG

kadettilac89

Du schreibst was du gemacht hast und was du erwartest. Was ist nun deine Frage bzw. das genaue Problem? Hast du Logs, Fehlermeldugen, fehlt was in der Config? Was hast du schon getestet?

SNX100

#2
ok, sorry, war vielleicht nicht ganz eindeutig.

Ich weiss nicht wie ich die Syntax aufbauen soll.


Sowas in der Richtung stelle ich mir vor:


Loop alle 2 Sekunden

Setze GPIO25 auf High
Prüfe GPIO25 auf Durchgang

Wenn kein Durchgang für mehr als 1 Sek dann

  Führe Befehl <alles ausschalten, switch Meldung, sperre alle Automatismen> aus, wenn nach Ereignis <Gpio 25 zieht an > nicht
  innerhalb der Zeitspanne <1 Sek> das Ereignis <Gpio 25 hat Durchgang> auftritt.

  Führe Befehl < switch Meldung, entsperre alle Automatismen, Setze GPIO25 auf low > aus, wenn nach Ereignis <letzter Watchdog hat
  abgeschaltet > das Ereignis <Gpio 25 hat für mehr als 1 Sek Durchgang> auftritt.

Sonst

Setze GPIO25 auf low

Loop


KölnSolar

Willkommen im Forum.

Aber watchdog als FHEM-device ist Dir schon klar ?  :-\ Die commandref dazu studiert ? Wenn Du uns noch Deine FHEM-devices nennst, findet sich bestimmt auch jemand, der es Dir ggfs. definiert.

ZitatGPIO ist standartmäßig low. Alle 2 Sekunden soll er kurz angezogen werden und Durchgang getestet werden.
Da wär ich vorsichtig. Ich hab etwas ähnliches als Leckage-Detektor. Wenn dann ein bedeutender Strom fließt, zieht das die Stromversorgung des Pi arg in Mitleidenschaft(ich merke das dann an meinem 1W-GPIO4-Bus, der nicht mehr sauber funktioniert). Die "Durchgangsprüfung" machst Du dann über Input an einem weiteren GPIO ?

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

kadettilac89

Zitat von: SNX100 am 15 Oktober 2021, 12:30:25

Loop alle 2 Sekunden


Du willst alle 2 Sekunden anziehen damit du keine Korrosion an den Kontakten hast? Ich verstehe die Anforderung nicht. Ich sehe hier das Problem, dass du durch die hochfrequente Prüfung und Aktionen dein fhem blockiert wird.

Wenn die 2 Sekunden wirklich nötig sind, würde ich ggf. die Logik in ein Script auf dem Betriebssystem auslagern. Und das Script schreibt ein Log- oder Statusfile das du in Fhem nur auswertest.

SNX100

Hier schonmal mein Aufbau bis jetzt falls das hilft...

define Sonnenaufgang dummy
setuuid Sonnenaufgang 61683b9a-f33f-a4e8-8e5c-6c165e562af1cdfb
attr Sonnenaufgang room Start
define Sonnenuntergang dummy
setuuid Sonnenuntergang 61683b9a-f33f-a4e8-b301-2ec31f011838a389
attr Sonnenuntergang room Start
define sun_riseSet_timer at *00:05:00 { my $s = sunrise_abs();; fhem("set Sonnenaufgang $s");; $s = sunset_abs();; fhem("set Sonnenuntergang $s");; }
setuuid sun_riseSet_timer 61683c1b-f33f-a4e8-8309-61ba0f9c3f06cc46
define Datum dummy
setuuid Datum 61683e44-f33f-a4e8-8aec-0a75c6d997c6af58
attr Datum room Start
define at_fp_date at +*00:30:00 { fhem 'set fp_date '.strftime('%d. %B', localtime) }
setuuid at_fp_date 61683e44-f33f-a4e8-c435-8637a30680de9cad
define Uhrzeit dummy
setuuid Uhrzeit 61683e44-f33f-a4e8-fda6-12e7e4fbe96f41a4
attr Uhrzeit room Start
define at_fp_time at +*00:00:10 { fhem 'set fp_time '.strftime('%H:%M', localtime) }
setuuid at_fp_time 61683e44-f33f-a4e8-5322-211165822405c377
define Jet1 RPI_GPIO 13
setuuid Jet1 61684155-f33f-a4e8-7165-88e6ce0e86702321
attr Jet1 active_low yes
attr Jet1 direction output
attr Jet1 room Start
attr Jet1 webCmd toggle
define Jet2 RPI_GPIO 16
setuuid Jet2 6168415a-f33f-a4e8-bebe-3ba0cc8248409051
attr Jet2 active_low yes
attr Jet2 direction output
attr Jet2 room Start
attr Jet2 webCmd toggle
define Licht RPI_GPIO 19
setuuid Licht 6168415f-f33f-a4e8-c43a-9d1d349056fc7291
attr Licht active_low yes
attr Licht direction output
attr Licht room Start
attr Licht webCmd toggle
define Relais6 RPI_GPIO 20
setuuid Relais6 61684164-f33f-a4e8-11b4-37edfd19e3b9bed7
attr Relais6 active_low yes
attr Relais6 direction output
attr Relais6 room Start
attr Relais6 webCmd toggle
define Relais7 RPI_GPIO 21
setuuid Relais7 61684169-f33f-a4e8-5f69-a88331f3c19fc239
attr Relais7 active_low yes
attr Relais7 direction output
attr Relais7 room Start
attr Relais7 webCmd toggle
define Heizung RPI_GPIO 26
setuuid Heizung 6168418a-f33f-a4e8-095d-c67065919c95f17f
attr Heizung active_low yes
attr Heizung direction output
attr Heizung room Start
attr Heizung webCmd toggle
define Zirkulation RPI_GPIO 5
setuuid Zirkulation 6168460e-f33f-a4e8-e9dd-326201a9084e1a62
attr Zirkulation active_low yes
attr Zirkulation direction output
attr Zirkulation room Start
attr Zirkulation webCmd toggle
define Luftpumpe RPI_GPIO 6
setuuid Luftpumpe 6168460e-f33f-a4e8-c316-aa1ac9950ca46dd4
attr Luftpumpe active_low yes
attr Luftpumpe direction output
attr Luftpumpe room Start
attr Luftpumpe webCmd toggle
define Taster1 RPI_GPIO 17
setuuid Taster1 616890a3-f33f-a4e8-1841-d98fa93f1ef38194
attr Taster1 debounce_in_ms 150
attr Taster1 direction input
attr Taster1 interrupt both
attr Taster1 pud_resistor down
define Taster2 RPI_GPIO 27
setuuid Taster2 616890a3-f33f-a4e8-81d8-e6aa576c7b3b45a3
attr Taster2 debounce_in_ms 150
attr Taster2 direction input
attr Taster2 interrupt both
attr Taster2 pud_resistor down
define Taster3 RPI_GPIO 22
setuuid Taster3 616890a3-f33f-a4e8-f97a-99b5fe1387025d7a
attr Taster3 debounce_in_ms 150
attr Taster3 direction input
attr Taster3 interrupt both
attr Taster3 pud_resistor down
define Taster4 RPI_GPIO 23
setuuid Taster4 616890a3-f33f-a4e8-1978-cac4172e49db2bec
attr Taster4 debounce_in_ms 150
attr Taster4 direction input
attr Taster4 interrupt both
attr Taster4 pud_resistor down
define Taster5 RPI_GPIO 24
setuuid Taster5 616890a3-f33f-a4e8-43e5-3d85302f43ddfb30
attr Taster5 debounce_in_ms 150
attr Taster5 direction input
attr Taster5 interrupt both
attr Taster5 pud_resistor down
define Taster1_Notify notify Taster1 {if ( Value("Luftpumpe") eq "on") {fhem("set Luftpumpe off")} else {fhem("set Luftpumpe on")}}
setuuid Taster1_Notify 61689371-f33f-a4e8-0146-131661d44f9500d9
define Taster2_Notify notify Taster2 {if ( Value("Jet1") eq "on") {fhem("set Jet1 off")} else {fhem("set Jet1 on")}}
setuuid Taster2_Notify 61689371-f33f-a4e8-9c9b-e2e840f0764e0a63
define Taster3_Notify notify Taster3 {if ( Value("Jet2") eq "on") {fhem("set Jet2 off")} else {fhem("set Jet2 on")}}
setuuid Taster3_Notify 61689371-f33f-a4e8-bdab-d5d8002c28a90cbb
define Taster4_Notify notify Taster4 {if ( Value("Licht") eq "on") {fhem("set Licht off")} else {fhem("set Licht on")}}
setuuid Taster4_Notify 61689371-f33f-a4e8-661c-ea2eee4c9bbe8f40
define Taster5_Notify notify Taster5 {if ( Value("Heizung") eq "on") {fhem("set Heizung off")} else {fhem("set Heizung on")}}
setuuid Taster5_Notify 61689371-f33f-a4e8-5369-ecfdf246f87ac37e


Zitat von: KölnSolar am 15 Oktober 2021, 13:05:43
Willkommen im Forum.

Aber watchdog als FHEM-device ist Dir schon klar ?  :-\ Die commandref dazu studiert ? Wenn Du uns noch Deine FHEM-devices nennst, findet sich bestimmt auch jemand, der es Dir ggfs. definiert.
Da wär ich vorsichtig. Ich hab etwas ähnliches als Leckage-Detektor. Wenn dann ein bedeutender Strom fließt, zieht das die Stromversorgung des Pi arg in Mitleidenschaft(ich merke das dann an meinem 1W-GPIO4-Bus, der nicht mehr sauber funktioniert). Die "Durchgangsprüfung" machst Du dann über Input an einem weiteren GPIO ?

Grüße Markus

Meine Vorstellung war (korrigiere mich) 2 Devices in der Schleife oder ist das schon grundsätzlich falsch?
1W-GPIO4-Bus mit ds18b20 kommt gleich noch im Anschluss... wird vermutlich meine nächste Fragestellung.
Die Durchgangsprüfung wäre Aufbaumäßig identisch zu den o.g. Tastern. Taster sind gegen 3,3V, Durchgang wäre gegen GND

SNX100

Zitat von: kadettilac89 am 15 Oktober 2021, 13:44:21
Du willst alle 2 Sekunden anziehen damit du keine Korrosion an den Kontakten hast? Ich verstehe die Anforderung nicht. Ich sehe hier das Problem, dass du durch die hochfrequente Prüfung und Aktionen dein fhem blockiert wird.

Wenn die 2 Sekunden wirklich nötig sind, würde ich ggf. die Logik in ein Script auf dem Betriebssystem auslagern. Und das Script schreibt ein Log- oder Statusfile das du in Fhem nur auswertest.

Bei dem alten System hatte ich einen dauerhaften Durchgang welcher sehr schnell zur Korrosion ger V4A Kontakte geführt hat...
Hab halt mit Elektrik so viel nicht am Hut daher bitte nicht lachen...
Als ich dann rausgefunden habe woran das liegt habe ich einen Wandler auf Rechtecksignal dazwischen gepackt. Wurde zwar etwas besser aber noch nicht perfekt.
Daher möchte ich so selten wie möglich diesen Test durchführen um die Kontakte nicht weiter zu belasten. 2 Sekunden ist aber schon so ziemlich das max weil danach schon eine Pumpe trocken läuft.

Im alten aufbau hatte ich tatsächlich die Abfrage über das BS gelöst und in eine abzufragende Variable ausgegeben, aber diesen Umweg dachte ich könnte ich nach Möglichkeit im neuen Setup vermeiden.

KölnSolar

#7
ZitatMeine Vorstellung war (korrigiere mich) 2 Devices in der Schleife oder ist das schon grundsätzlich falsch?
Falsch ist der falsche  ::) Ausdruck. Ich wollte nur das Thema sensibilisieren, dass man sich auch recht schnell die GPIOs zerschießen kann, wenn sie zu hoch belastet werden. Ich bin da aber zu wenig Fachmann, ob ein "Kurzschluss" zwischen 2 GPIOs zu Problemen führen könnte.

ZitatHier schonmal mein Aufbau bis jetzt falls das hilft...
Ich meinte nicht den uninteressanten Rest, sondern die (beiden ?) GPIOs und den Mechanismus, der GPIO25 alle 2s auf high setzt.  ;)

Ähmm,
ZitatDie Durchgangsprüfung wäre Aufbaumäßig identisch zu den o.g. Tastern. Taster sind gegen 3,3V, Durchgang wäre gegen GND
Also nicht 2 GPIOs ? Du kannst ja nicht einerseits GPIO25 auf high setzen(output) u. irgendwie  :-\ messen(input), dass er auf low(GND) ist. Oder hab ich da gerade einen Denkfehler ?

Edit: Wenn Du 1W-GPIO4 machen willst, suchst Du Dir am besten meine aktuellste Version, die an irgendeinem Thread hängt(Suchworte: GPIO4 DHT22).
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Sany

#8
Ich kenne Deine Anforderung "Wasserstandssensor" nicht wirklich, aber darf ich mal "Ultraschallsensor" in den Raum werfen? Wäre eine berührungslose Variante.
Das gibts von ganz preiswert zum basteln oder halt etwas teurer dann im wasserdichten Gehäuse. Ich hab sowas in meiner Zisterne jetzt seit > 10 Jahren hängen und noch NIE einen Ausfall. Je nach Anbindung an den raspi würdest Du halt "distanzen" gemeldet bekommen und könntest für Wasserstände zum Pumpen direkt mit Hysterese arbeiten.
Aber wie gesagt, das kommt auf Deine Anforderungen an.

Gruß

Sany

P.S. oder ein Schwimmerschalter, ist auch nicht "elektrisch" mit dem Wasser verbunden.
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

SNX100

Zitat von: KölnSolar am 15 Oktober 2021, 14:07:48
Falsch ist der falsche  ::) Ausdruck. Ich wollte nur das Thema sensibilisieren, dass man sich auch recht schnell die GPIOs zerschießen kann, wenn sie zu hoch belastet werden. Ich bin da aber zu wenig Fachmann, ob ein "Kurzschluss" zwischen 2 GPIOs zu Problemen führen könnte.
Geht immer zwischen gpio und gnd bzw 3,3v. daher save.

Zitat von: KölnSolar am 15 Oktober 2021, 14:07:48der GPIO25 alle 2s auf high setzt.  ;)

Softwareschleife

Zitat von: KölnSolar am 15 Oktober 2021, 14:07:48high setzen(output) u. irgendwie  :-\ messen(input), dass er auf low(GND) ist. Oder hab ich da gerade einen Denkfehler ?

So wie beim Taster


SNX100

Zitat von: Sany am 15 Oktober 2021, 14:48:53
Ich kenne Deine Anforderung "Wasserstandssensor" nicht wirklich, aber darf ich mal "Ultraschallsensor" in den Raum werfen? Wäre eine berührungslose Variante.
Das gibts von ganz preiswert zum basteln oder halt etwas teurer dann im wasserdichten Gehäuse. Ich hab sowas in meiner Zisterne jetzt seit > 10 Jahren hängen und noch NIE einen Ausfall. Je nach Anbindung an den raspi würdest Du halt "distanzen" gemeldet bekommen und könntest für Wasserstände zum Pumpen direkt mit Hysterese arbeiten.
Aber wie gesagt, das kommt auf Deine Anforderungen an.

Gruß

Sany

P.S. oder ein Schwimmerschalter, ist auch nicht "elektrisch" mit dem Wasser verbunden.


Whirlpool... daher scheidet Distanzmessung aus

kadettilac89

Zitat von: SNX100 am 15 Oktober 2021, 17:11:19
Whirlpool... daher scheidet Distanzmessung aus

Die Möglichkeit deine Anforderung per Script zu lösen steht immer noch im Raum.

Wenn du was von anderen Forenteilnehmern nutzen oder einfließen lassen willst - was ist dein Anwendungsfall. Du hast einen Whirlpool und eine Pumpe die nicht trocken laufen soll. Warum musst du die Pumpe selber steuern wenn das Wasser aus ist? Gibt es dazu nichts vom Hersteller?

Vielleicht Spaßbremse, wie sieht es die Versicherung wenn du hier mit Strom hantierst, oder Wasserschäden durch selbstgebastelte Lösungen nicht verhindern konntest ...

SNX100

Zitat von: kadettilac89 am 15 Oktober 2021, 18:08:29
Die Möglichkeit deine Anforderung per Script zu lösen steht immer noch im Raum.

Wollte ich nach Möglichkeit umgehen wenns in fhem machbar ist

Zitat von: kadettilac89 am 15 Oktober 2021, 18:08:29
Wenn du was von anderen Forenteilnehmern nutzen oder einfließen lassen willst - was ist dein Anwendungsfall. Du hast einen Whirlpool und eine Pumpe die nicht trocken laufen soll. Warum musst du die Pumpe selber steuern wenn das Wasser aus ist? Gibt es dazu nichts vom Hersteller?

Kompletter Eigenbau. Hersteller bin also ich :-) Zum Verständnis: Der Whirlpool heizt automatisch. Das funktioniert mit der selben Pumpe wie die Filtration. Sollte der Wasserstand zu niedrig sein darf weder die Pumpe noch die Heizung anspringen.

Zitat von: kadettilac89 am 15 Oktober 2021, 18:08:29
Vielleicht Spaßbremse, wie sieht es die Versicherung wenn du hier mit Strom hantierst, oder Wasserschäden durch selbstgebastelte Lösungen nicht verhindern konntest ...

Alles save hinter IP67. im schlimmsten Fall fliegt ein eigener FI. Wasserschäden ausgeschlossen da im Garten.

Wernieman

Irgendwo hier haben wir einen Tread, wo es um Wasserstandmessung ging. Da wurde sogar einfach mal Schwimmschalter angesprochen ....
- 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

Kann jemand folgendes zu was brauchbarem verwandeln?



define Wasserstandssensor RPI_GPIO 25
attr Wasserstandssensor direction input
attr Wasserstandssensor interrupt rising
attr Wasserstandssensor pud_resistor down
attr Wasserstandssensor debounce_in_ms 100


define Wassertestschleife at +*00:00:02 gpio high setzten, {if(ReadingsVal(' Wasserstandssensor', kein Durchgang) {starte den Watchdog} else {gpio low setzen}}

define wd_Wasserstand watchdog
Wasserstandssensor:opened.* 00:00:03 Wasserstandssensor:closed.* abschalten der Pumpen;; trigger wd_Wasserstand