[gelöst]irgendwo habe ich einen Denkfehler im DOIF

Begonnen von matze1999, 28 Juni 2022, 18:54:34

Vorheriges Thema - Nächstes Thema

matze1999

Hallo,

ich habe dieses Device:

defmod Beregnung.manuell dummy
attr Beregnung.manuell group Bewässerung
attr Beregnung.manuell icon sani_irrigation
attr Beregnung.manuell readingList 1 2 3 4 5 6
attr Beregnung.manuell room Bewässerung,Garten,Schalter
attr Beregnung.manuell setList active inactive 1:selectnumbers,0,10,60,0,lin 2:selectnumbers,0,10,60,0,lin 3:selectnumbers,0,10,60,0,lin 4:selectnumbers,0,10,60,0,lin 5:selectnumbers,0,10,60,0,lin 6:selectnumbers,0,10,60,0,lin
attr Beregnung.manuell sortby 1
attr Beregnung.manuell webCmd 1:2:3:4:5:6
attr Beregnung.manuell webCmdLabel Hochbeet:Sonnenbeet:Sonnenrasen:Pavillonrasen:Spielrasen:Schattenbeet

setstate Beregnung.manuell active
setstate Beregnung.manuell 2022-06-27 17:53:33 1 0
setstate Beregnung.manuell 2022-06-24 10:57:43 2 0
setstate Beregnung.manuell 2022-06-27 10:56:53 3 0
setstate Beregnung.manuell 2022-06-27 09:52:21 4 0
setstate Beregnung.manuell 2022-06-28 18:36:42 6 10
setstate Beregnung.manuell 2022-06-21 15:48:17 state active


Und würde die Readings 1 - 6 gern in einem DOIF auswerten:

defmod Beregnung.Zustand.di DOIF ([Beregnung.manuell:1 ne 0] or [Beregnung.manuell:2 ne 0] or [Beregnung.manuell:3 ne 0] or [Beregnung.manuell:4 ne 0] or [Beregnung.manuell:5 ne 0] or [Beregnung.manuell:6 ne 0]) (set manuelle.Beregnung arbeitet)\
DOELSE (\
set manuelle.Beregnung fertig)\
\

attr Beregnung.Zustand.di alias Beregnung.Zustand.di
attr Beregnung.Zustand.di do always
attr Beregnung.Zustand.di room Bewässerung,nt+di

setstate Beregnung.Zustand.di cmd_2
setstate Beregnung.Zustand.di 2022-06-28 18:53:07 cmd 2
setstate Beregnung.Zustand.di 2022-06-28 18:53:07 cmd_event Beregnung.Zustand.di
setstate Beregnung.Zustand.di 2022-06-28 18:53:07 cmd_nr 2
setstate Beregnung.Zustand.di 2022-06-28 18:53:05 mode enabled
setstate Beregnung.Zustand.di 2022-06-28 18:53:07 state cmd_2


ich hatte auch schon

[Beregnung.manuell:1 ne "0"]

funktioniert aber nicht, kann mir jemand auf die Sprünge helfen?

matze1999

Nobbynews

#1
Zitat([Beregnung.manuell:1 ne 0] or [Beregnung.manuell:2 ne 0] ......
Die Syntax in der Defnition ist falsch.
Es muss heißen:
([Beregnung.manuell:1] != 0 or [Beregnung.manuell:2] != 0 or ........)

matze1999

manchmal hat man ein Brett vor dem Kopf, das wars, Danke!

matze1999

Beta-User

Warum verteilst du die zusammen gehörenden infos jetzt schon wieder unnötigerweise auf 3 Devices?!? Kopfschüttel....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

matze1999

ich bin für jede Hilfe dankbar, weiss aber nicht, was du meinst.

matze1999

Beta-User

Zitat von: matze1999 am 28 Juni 2022, 22:12:52
ich bin für jede Hilfe dankbar, weiss aber nicht, was du meinst.
Na ja, der "Bewässerungs-User" mit den "gefühlten 100 dummy" war ein anderer, wir hatten nur das Thema, dass man nicht ständig wegen desselben Themas einen neuen Thread starten muss...

Also:
Es gibt einen "Hauptdummy" und ein notify. Soweit so gut.

Für was ist jetzt das DOIF da? Offenbar zum Zählen.
Wohin kommt das Ergebnis: In einen weiteren dummy...

Ich behaupte: Das Ergebnis und die Zahl (!) gehören zum "Hauptdummy", Zählen könnte man auch mit dem notify. Genau das hatten wir hier schon mal diskutiert:

Zitat von: Prof. Dr. Peter Henning am 20 Juni 2022, 16:09:34
Die ideale Realisierung dieses System wäre mit einem Zustandsautomaten, der als digitaler Zwilling des Verteilers arbeitet.
Zitat von: Beta-User am 20 Juni 2022, 16:29:51
Ich würde vermutlich $SELF bemühen und ein (paar?) Reading(s) an dem notify selbst setzen, damit man zumindest abgespeichert hat, wo das Ding zuletzt stand...
Nach etwas Nachdenken würde ich dazu tendieren, das ganze mit einem "rekursiven Selbstaufruf" (z.B. per einmaligem at) einer Perl-Routine zu lösen. Klingt komplizierter, als es ist, aber es ist bei dieser Hardware einfach wichtig, dass du beim Ansteuern weißt, welches das gerade aktive Ausgangsventil ist, und dann schlicht den nächsten Schritt startest. Ist der fertig, wird erneut ausgewertet, wie es weitergehen soll. Alles andere ist m.E. Murks.

Falls Interesse besteht, lies dich in myUtils ein, und bau das notify um in einen direkten Perl-Funktionsaufruf mit
myNextCheck($NAME,$EVENT)

Wenn ich im anderen Thread einen Versuch dazu gesehen habe, helfe ich ggf. weiter...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

matze1999

na, da hab ich ja eine Hausaufgabe bekommen  ;D

Das DOIF ist nur dazu da, per farbigem Symbol zu zeigen, ob noch ein manueller Bewässerungszyklus läuft oder nicht, bevor man einen neuen startet.

Aber was du da andeutest, würde ja noch besser sein und tiefer gehen, damit könnte man die (automatische/manuelle) Bewässerung auch abbrechen, wenn es regnet, jetzt geht das nicht, weil sie durchlaufen muss.

matze1999

Beta-User

Zitat von: matze1999 am 29 Juni 2022, 14:26:41
Aber was du da andeutest, würde ja noch besser sein und tiefer gehen, damit könnte man die (automatische/manuelle) Bewässerung auch abbrechen, wenn es regnet, jetzt geht das nicht, weil sie durchlaufen muss.
:) der Gedanke dahinter scheint angekommen zu sein...

Ich würde sogar noch weiter gehen: damit könnte man die Bewässerung auch nochmal "von vorne" weitermachen lassen, wenn z.B. ein User auf die Idee kommt, dass der "vorne" platzierte Teil dann doch nochmal für ein paar weitere Minuten angesteuert werden muss... ;)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors