NotAus Funktion für Bewässerungsprogramm

Begonnen von foxmulder, 17 Juni 2022, 10:26:32

Vorheriges Thema - Nächstes Thema

Jamo

ZitatScheint untergegangen zu sein...
Nein, das war mir auch nicht untergegangen. Aus der commandref: A sleep with an <id> will replace a sleep with the same <id> and can be canceled by cancel.
Weil der Kandidat hier mit 5 parallelen zweigen arbeitet, benötigt man für jeden zweig eigene named sleep.
Innerhalb der einzelnen Zweige, bei den aufeinanderfolgenden sleep, hast Du evtl recht, falls die sleep erst dann angelegt werden wenn das vorherige sleep abgelaufen ist.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Damian

Du kannst ja nach dem Löschen der sleeps einfach alle Ventile zumachen "set Wasser.* off" und gut ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Beta-User

Zitat von: Jamo am 19 Juni 2022, 10:13:12
Weil der Kandidat hier mit 5 parallelen zweigen arbeitet, benötigt man für jeden zweig eigene named sleep.
Die Ausgangsfassung war
Zitat von: foxmulder am 17 Juni 2022, 10:26:32
Aktuell habe ich es so...halt ohne Notaus...da läuft das Programm einfach durch und macht keine Probleme.


Gartenwasser_Autoprogramm:auto {fhem("
set HauptschalterWassser on ; sleep 20 ; set WasserRasenSeite on ; sleep 1200 ; set WasserRasenSeite off ; sleep 10 ; set HauptschalterWassser off ; sleep 10 ;
set HauptschalterWassser on ; sleep 20 ; set WasserCarportRasen on ; sleep 750 ; set WasserCarportRasen off ; sleep 10 ; set HauptschalterWassser off ; sleep 10 ;
set HauptschalterWassser on ; sleep 20 ; set WasserCarportEcke on ; sleep 90 ; set WasserCarportEcke off ; sleep 10 ; set HauptschalterWassser off ; sleep 10 ;
set HauptschalterWassser on ; sleep 20 ; set WasserRasenStall on ; sleep 1080 ; set WasserRasenStall off ; sleep 10 ; set HauptschalterWassser off ; sleep 10 ;
set HauptschalterWassser on ; sleep 20 ; set WasserWallRasenUnten on ; sleep 900 ; set WasserWallRasenUnten off ; sleep 10 ; set HauptschalterWassser off ; sleep 10 ;
set HauptschalterWassser on ; sleep 20 ; set WasserWallBlumen on ; sleep 900 ; set WasserWallBlumen off ; sleep 3 ; set HauptschalterWassser off ; sleep 10 ;
set HauptschalterWassser on ; sleep 20 ; set WasserWallWaldseite on ; sleep 720 ; set WasserWallWaldseite off ; sleep 10 ; set HauptschalterWassser off ; sleep 10 ;
set HauptschalterWassser on ; sleep 20 ; set WasserTropfschlauch on ; sleep 1800 ; set WasserTropfschlauch off ; sleep 10 ; set HauptschalterWassser off ; set Gartenwasser_Autoprogramm aus")}

Ist nach meinem Verständnig "ein Strang", nur dass man eigentlich den Wechsel auf die Perl-Ebene gar nicht braucht...

Kann man anpassen mit einem named sleep und dann halt den "Aus"-Befehl beim "notaus-Notify" ergänzen, Fisch geputzt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

foxmulder

Hallo zusammen,

habt vielen lieben Dank für die rege Beteiligung! Total super!

Das mit dem "foreach" und Sleep Benamung hat leider nicht direkt geklappt. Der hat beim speichern gemeckert das er "foreach" als Befehl nicht kennt. Kann mich aber auch zu dämlich angestellt haben.

Wie dem auch sei...von der Cheffin kam noch eine weitere Anforderung...nämlich das jeder Strang auch einzeln manuell geschaltet werden soll der nach gewünschter Zeit automatisch wieder ausgeht...also quasi ein "on-for-timer".

Dies soll als Ergänzung zu dem automatischen Programm gehen. Das Auto-Programm läuft jeden Strang nach einander durch und wird über ein AT Timer morgens getriggert...man kann das auch manuell starten....und genau dafür soll dann der NotAus sein...heißt wenn man das Auto-Programm manuell startet...man aber nach 30 Min oder so feststellt das man das Programm unterbrechen will, weil man manuell Wasserdruck braucht oder oder oder...dann soll der NotAus das Programm unterbrechen und die nächsten Stränge sollen dann nicht weiter laufen. Den aktuell laufenden Strang kann man ja einfach manuell via Schalter ausschalten.

Ich hab es also nun doch erstmal mit einzelnen Dummy Schaltern für jeden Strang gelöst. Für den Dummy Schalter gibt es jeweils ein Notify der den Strang schaltet und vorher auf den NotAusSchalter Status prüft. Sollte der aktiv sein..wird keine Schaltung des Wasserstrangs vorgenommen.
Für das Autoprogramm steuere ich dann die Dummy Schalter einzeln an und setzte entsprechende Sleeps dazwischen.

Im Code sieht das dann so aus...

Dummy notify Beispiel für einen Strang:

Gartenwasser_Dummy_WasserRasenSeite:an {
if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv")
       { fhem("set HauptschalterWassser on ; sleep 20 ; set WasserRasenSeite on ; sleep 1500 ; set WasserRasenSeite off ; sleep 3 ; set WasserRasenSeite off ; sleep 3 ; set HauptschalterWassser off") }}



Autoprogramm notify:

Gartenwasser_Autoprogramm:auto {fhem("set Gartenwasser_Dummy_WasserRasenSeite an ; sleep 1250 ; set Gartenwasser_Dummy_WasserCarportRasen an ; sleep 780 ; set Gartenwasser_Dummy_WasserCarportEcke an ; sleep 120 ; set Gartenwasser_Dummy_WasserRasenStall an ; sleep 1100 ; set Gartenwasser_Dummy_WasserWallRasenUnten an ; sleep 950 ; set Gartenwasser_Dummy_WasserWallBlumen an ; sleep 950 ; set Gartenwasser_Dummy_WasserWallWaldseite an ; sleep 760 ; set Gartenwasser_Dummy_WasserWallGarten an ; sleep 350 ; set Gartenwasser_Dummy_WasserTropfschlauch an ; sleep 1850 ; set Gartenwasser_Autoprogramm aus")}



Ist sicher nicht so geil und sauber...aber funktionial und maximal flexibel...muss ja auch einfach für die Dame sein ;-)

Was meint ihr? Schrecklich oder? :-D

Beta-User

Zitat von: foxmulder am 19 Juni 2022, 13:10:18
Was meint ihr? Schrecklich oder? :-D
Meine 2ct:
- Hinweise auf benannte sleep sind komplett ignoriert...
- "Eigentlich" ist das "ein Ding" und nicht viele => diese dummy-Origie ist mir zutiefst zuwider!

Ich würde das vermutlich mit einem einzigen (!) dummy "irrigation" lösen, der dann "state:active,inactive" und "mode:auto,RasenSeite,...." als Readings kennt.
Dann kannst du einen (!) Eventhandler darauf ansetzen, der dann die eine (!) richtige/passende Aktion in Gang setzt (oder eben alles beendet). Und es gibt nicht irgendwelche sich möglicherweise überkreuzenden Aktionen.

Aber da meine Hinweise anscheinend eh' nicht auf fruchtbaren Boden fallen, bin ich für's erste hier raus...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

foxmulder

Das mit den benannten Sleeps hatte ich wie gesagt versucht...mich aber wohl zu doof angestellt. Keine Ahnung...tut mir leid!

Auf jeden Fall ist dein Tipp mit dem EINEN Dummy mit Readings und entsprechendem Notify darauf GENIAL! :-)
Das hab ich jetzt mal so umgesetzt und das sieht so echt gut aus...

Der Dummy "NotAus" Schalter mit den Readings für die einzelnen Wasser Stränge

define GartenwasserAutomatik_Notaus dummy
attr GartenwasserAutomatik_Notaus readingList WasserCarportEcke WasserCarportRasen WasserRasenSeite WasserRasenStall WasserTropfschlauch WasserWallBlumen WasserWallGarten WasserWallRasenUnten WasserWallWaldseite
attr GartenwasserAutomatik_Notaus room Bewässerung
attr GartenwasserAutomatik_Notaus setList aktiv inaktiv
attr GartenwasserAutomatik_Notaus webCmd aktiv:inaktiv



Und hier der Notify für das Automatische Programm welches die Stränge der Reihenfolge nach schaltet und die Readings entsprechend beim Dummy setzt.

Gartenwasser_Autoprogramm:auto {
if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserRasenSeite", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserRasenSeite on ; sleep 1250 ; set WasserRasenSeite off ; sleep 3 ; set WasserRasenSeite off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserRasenSeite inaktiv ; setreading GartenwasserAutomatik_Notaus WasserCarportRasen aktiv ; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserCarportRasen", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserCarportRasen on; sleep 780 ; set WasserCarportRasen off ; sleep 3 ; set WasserCarportRasen off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserCarportRasen inaktiv ; setreading GartenwasserAutomatik_Notaus WasserCarportEcke aktiv ; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserCarportEcke ", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserCarportEcke on; sleep 120 ; set WasserCarportEcke off ; sleep 3 ; set WasserCarportEcke off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserCarportEcke inaktiv ; setreading GartenwasserAutomatik_Notaus WasserRasenStall aktiv ; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserRasenStall", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserRasenStall on; sleep 1100 ; set WasserRasenStall off ; sleep 3 ; set WasserRasenStall off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserRasenStall inaktiv ; setreading GartenwasserAutomatik_Notaus WasserWallRasenUnten aktiv ; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserWallRasenUnten", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserWallRasenUnten on; sleep 950 ; set WasserWallRasenUnten off ; sleep 3 ; set WasserWallRasenUnten off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserWallRasenUnten inaktiv ; setreading GartenwasserAutomatik_Notaus WasserWallBlumen aktiv ; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserWallBlumen", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserWallBlumen on; sleep 950 ; set WasserWallBlumen off ; sleep 3 ; set WasserWallBlumen off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserWallBlumen inaktiv ; setreading GartenwasserAutomatik_Notaus WasserWallWaldseite aktiv; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserWallWaldseite", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserWallWaldseite on; sleep 760 ; set WasserWallWaldseite off ; sleep 3 ; set WasserWallWaldseite off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserWallWaldseite inaktiv ; setreading GartenwasserAutomatik_Notaus WasserWallGarten aktiv; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserWallGarten", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserWallGarten on; sleep 350 ; set WasserWallGarten off ; sleep 3 ; set WasserWallGarten off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserWallGarten inaktiv ; setreading GartenwasserAutomatik_Notaus WasserTropfschlauch aktiv; set Gartenwasser_Autoprogramm auto") } ;

if ( Value("GartenwasserAutomatik_Notaus") eq "inaktiv" && ReadingsVal("GartenwasserAutomatik_Notaus", "WasserTropfschlauch", "inaktiv") eq "aktiv" )
{ fhem("set HauptschalterWassser on ; sleep 20 ; set WasserTropfschlauch on; sleep 1850 ; set WasserTropfschlauch off ; sleep 3 ; set WasserTropfschlauch off ; sleep 3 ; set HauptschalterWassser off ; setreading GartenwasserAutomatik_Notaus WasserTropfschlauch inaktiv ; setreading GartenwasserAutomatik_Notaus WasserRasenSeite aktiv; set Gartenwasser_Autoprogramm aus") }

}



Durch das jeweilige Umstellen der Readings (Stränge) auf aktiv/inaktiv und dem "Neustart" des Programms am Ende jeden Strangdurchlaufs erhält man so eine Reihenfolge die nacheinander abgearbeitet wird. Dazu wird immer der Stand des "NotAus" geprüft...wenn man nun zwischendrin unterbrechen will wird der Notaus aktiviert und somit sind die Bedingungen für den Start der weiteren Stränge nicht mehr erfüllt...das Programm somit zuende :-)

SUPER!

Und das nun ohne die vielen Dummys...sondern alles schon komprimiert. :-)

TOP!

VIELEN DANK für eure Hilfe!

Beta-User

 :) Das sieht doch schon mal besser aus...

Mit einem notify war noch gemeint gewesen: nicht nur auf "auto" hören, sondern auch auf "inactive" bzw. die einzelnen Kanäle - die sollte man ja auch separat schalten können, oder?

Du wirst dazu noch ein paar mehr Abfragen brauchen (u.a. auf $EVTPART0), und ggf. noch das eine oder andere Hilfsreading an dem dummy setzen (auf welcher Stufe sind wir grade, wenn per "auto" alles durchlaufen werden soll? Welche Aktoren sollte man ausschalten?).

Vielleicht schaust du mal in https://forum.fhem.de/index.php/topic,128069.0/topicseen.html rein, da ging's um was ähnliches, und da sollte ein einziges "cancel" ausreichen, um den Ablauf _gleich_ zu unterbrechen, und nicht erst, wenn der jeweilige Strang durchgelaufen ist...

Ansonsten: Value() ist "bäh", und einfache Quotes sind schneller (wenn man nicht wirklich "extrapolieren" muss).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

foxmulder

Hatte Frauchen falsch verstanden...die Stränge sollten einzeln schaltbar sein...aber dann doch auch manuell wieder aus gemacht werden können.

Letztlich stelle ich der Dame dann über Tablet UI eine View zur Verfügung wo sie die Bewässerung steuern kann. Das Automatik Programm mit der Abbruch Möglichkeit ist ein Teil davon.

So wie es jetzt ist ... ist es denk ich perfekt und Frauchen freut sich. :-)

Schau mal auf den Screenshot...so sieht der Teil der Bewässerung aus.

Über "Autoprogramm starten" gibt es ein DropDown mit den Optionen "5min, 10min, 20min, auto" => diese schalten die Stränge entweder jeweils für die angegeben Minuten oder halt das "auto" mit dem neuen Programm wo die Zeiten je Strang definiert sind.
Dazu gibt es nun den Schalter für den NotAus ... und der Schalter für die "Automatik" ist zum aktivieren der Zeitsteuerung...heißt das das Autoprogramm dann zu der oben genannten Startzeit via AT getriggert wird.

Mit den jeweiligen Schaltern kann sie nun auch die einzelnen Wasserstränge direkt manuell schalten...hier wird erst der WasserHauptschalter aktiviert und dann der jeweilige Strang. Das jedoch über TabletUI Logik..ohne extra Dummy Kram :-)

Ich bin happy so...das passt prima.

VIELEN DANK!

Beta-User

 :) Dann lassen wir es halt gut sein, wenn alle zufrieden sind...

Ich wäre es nicht - zum einen sollte eine Bewässerung gar nicht erst angeschaltet werden müssen (sondern selbst ermitteln, was notwendig ist), und zum anderen sind die Abbruchmöglichkeiten zwischendurch (wenn man denn abbrechen muss!) m.E. nicht so, wie sie sein sollten. Über beide Probleme hilft eine hübsche Oberfläche auch nicht wirklich weg. Aber Rom wurde ja auch nicht an einem Tag erbaut ;D .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

foxmulder

 ;D ;D ;D

Naja...bei zuuu viel Automation meckern die Frauen rum... :-D


Beta-User

Zitat von: foxmulder am 21 Juni 2022, 10:08:03
Naja...bei zuuu viel Automation meckern die Frauen rum... :-D
:) Schon. Und gerade im Garten ist "Eigenkontrolle" nach meiner Überzeugung auch nicht fehl am Platze.

Das betrifft aber eigentlich nur den ersten Punkt, nicht die Frage, was bei einem manuellen Abbruch zwischendurch passieren soll :P . Da glaube ich eher nicht, dass "Frauchen" mit deiner Lösung zufrieden ist ;D ;D ;D .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

foxmulder

:-D

hmm..na mal sehen...den aktuell laufenden Strang dann im Falle des Falles von einem "NotAus" noch mit auszumachen...kann eigentlicht nicht so schwer sein den Knopf noch mit zu drücken.. :-D
Falls doch...dann könnte ein Notify der vom NotAus getriggert wird und damit den Hauptschalter vom Wasser bzw ein Aus an alles schickt reichen....

Aber schauen wir erstmal wie es sich jetzt so macht. :-)


Als nächstes kommt ein Lichtsensor der die Rolladen automatisch am Tag bei viel Sonne mit steuert... ^^

Beta-User

Zitat von: foxmulder am 21 Juni 2022, 10:42:33
hmm..na mal sehen...den aktuell laufenden Strang dann im Falle des Falles von einem "NotAus" noch mit auszumachen...kann eigentlicht nicht so schwer sein den Knopf noch mit zu drücken.. :-D
Ist es ziemlich sicher nicht :) .
ZitatFalls doch...dann könnte ein Notify der vom NotAus getriggert wird und damit den Hauptschalter vom Wasser bzw ein Aus an alles schickt reichen....
Hihi, wieder derselbe (m.E.) Fehlansatz, alles, was zusammengehört, über (unnötig) viele Devices zu verteilen...
Die Benennung von deinem dummy finde ich übrigens überdenkenswert, der macht ja jetzt nicht nur "NotAus"...
Und mit den deutschen Benennungen wirst du vermutlich irgendwann nochmal wehmütig darüber nachdenken, dass du vielleicht früher mal besser in der Schule aufgepaßt hättest. "inactive" ist nämlich uU. besonders ;) . Setze mal einen dummy auf "inactive" und checke, was IsDisabled('<dein dummy>') zurückgibt ;) ...

Zitat
Aber schauen wir erstmal wie es sich jetzt so macht. :-)
Wir sehen uns :P ...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

frober

[OT]
Rolladen und Lichtsensor gibt der nächste Spaß...
Tipp: mache es über Temperaturdifferenz
[/OT]

... ansonsten hat Beta-User alles schon geschrieben...
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...