DOIF neue Features (Sleep-Alternative)

Begonnen von Damian, 12 Juli 2015, 21:17:52

Vorheriges Thema - Nächstes Thema

Skusi

Hallo Brockmann,

ZitatWann immer das Device AussenLux ein Event generiert, wird jedes DOIF getriggert, wo [AussenLux...] als Bedingung aufgeführt wird.

Ich habe beim Twilight einige readings im event-on-change-reading eingetragen, weil es mir sonst zu geschwätzig ist. Die Zeiten fur ss_civil werden dann aber doch trotzdem bei jedem der zugelassenen readings Events aktualisiert an das DOIF übergeben - oder ? Muß das ss_civil reading auch mit in event-on-change-reading sethen ?
Die Timer im DOIF sind allerdings immer richtig gesetzt.

ZitatWenn eines der DOIF darauf nicht reagiert, obwohl eine Bedingungen erfüllt sein müsste, liegt es nahe, dass es sich bereits in diesem Zustand befand und deshalb nicht reagiert

Das DOIF befindet sich definitiv immer im Zustand cmd_1 also Rolladen morgens hoch, wenn es nicht zu ss_civil (cmd_3) runtergefahren ist.

@Damian

ZitatZwei Intervalle, die mit AND verknüpft sind, machen eigentlich wenig Sinn. Die Bedingung ist nur dann wahr, wenn sie sich überschneiden. Normalerweise werden Intervalle mit OR verknüpft, um unterschiedliche Zeitintervalle, die sich normalerweise nicht überschneiden, anzugeben.

Das ist ja auch so gewünscht. Erst wenn interval 2 in den Interval 1 fällt, sollen die Roladen hoch fahren. Ich weiß das ist eine ziehmlich hässliche Lösung, aber ich hatte keine Idee verhindern kann das im Sommer die Dinger schon um 4:00 hochfahren wenn ich noch schlafe.

---Skusi

RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

Brockmann

Zitat von: Skusi am 19 November 2015, 19:02:01
Ich habe beim Twilight einige readings im event-on-change-reading eingetragen, weil es mir sonst zu geschwätzig ist. Die Zeiten fur ss_civil werden dann aber doch trotzdem bei jedem der zugelassenen readings Events aktualisiert an das DOIF übergeben - oder ? Muß das ss_civil reading auch mit in event-on-change-reading sethen ?
Die Timer im DOIF sind allerdings immer richtig gesetzt.
Im Grunde genommen ist es in Deinem Fall egal, weil Twilight ja gar nicht als Trigger verwendet wird. Es wird nur zum Bestimmen eines Zeitpunkts verwendet, der dann als Trigger dient. Da spielt es keine Rolle, welche Events Twilight generiert. Die Timer werden unabhängig davon berechnet, wann immer das DOIF getriggert (oder ausgeführt?) wird. Und soweit klappt es ja auch, wie Du schreibst.

Ansonsten wie schon gesagt: Mach ein list <Name des DOIFs>, nachdem es nicht wie gedacht funktioniert hat. Am Besten gleich noch ein list des anderen DOIFs, das wie gewünscht arbeitet. Dann hast Du den direkten Vergleich und erkennst vermutlich, warum das eine tut und das andere nicht. Oder Du postest die beiden lists hier, dann brauchen wir keinen Kaffeesatz mehr zu lesen.  ;)

spikeh1

#332
Zitat von: Toto1973 am 25 September 2015, 11:11:54
....
Im DOIF selbst bei den Uhrzeiten steht das hier: timer_1_c1 26.09.2015 11:05:00|[tag]
Sollte da nicht die Zahl aus dem Dummy angezeigt werden?
....

Hallo.
Ich habe heute meine Timer umgebaut und genau obiges zitiertes tritt bei mir auch auf. Konnte bisher keine Lösung finden.
Einziger Unterschied ist, das es bei mir nur einen Dummy gibt, in dem alle relevanten Daten (Schaltzeiten, Gerät, Wochentag) als reading vorliegen.

Folgend ist mein DOIF definiert:

( [zsu_01:state] eq "aktiviert" and [[zsu_01:on_time]|[zsu_01:on_day_nr]] )
(set ([zsu_01:device_name]) on)
DOELSEIF
( [zsu_01:state] eq "aktiviert" and [[zsu_01:off_time]|[zsu_01:off_day_nr]] )
(set ([zsu_01:device_name]) off)


und das sagt der timer:


timer_1_c1     22.02.2016 18:40:00|[zsu_01:on_day_nr]
timer_2_c2     22.02.2016 18:50:00|[zsu_01:off_day_nr]


Funktionieren tut es wunderbar nur sieht es unschön aus wenn man sich das timer-reading als Status anzeigen lassen möchte.

Wo liegt mein Fehler?

MfG

P.S. Sorry, sehe gerade das es hier um "sleep" geht aber bin durch die Suche genau hier gelandet.

Damian

Zitat von: spikeh1 am 22 Februar 2016, 18:52:45
Hallo.
Ich habe heute meine Timer umgebaut und genau obiges zitiertes tritt bei mir auch auf. Konnte bisher keine Lösung finden.
Einziger Unterschied ist, das es bei mir nur einen Dummy gibt, in dem alle relevanten Daten (Schaltzeiten, Gerät, Wochentag) als reading vorliegen.

Folgend ist mein DOIF definiert:

( [zsu_01:state] eq "aktiviert" and [[zsu_01:on_time]|[zsu_01:on_day_nr]] )
(set ([zsu_01:device_name]) on)
DOELSEIF
( [zsu_01:state] eq "aktiviert" and [[zsu_01:off_time]|[zsu_01:off_day_nr]] )
(set ([zsu_01:device_name]) off)


und das sagt der timer:


timer_1_c1     22.02.2016 18:40:00|[zsu_01:on_day_nr]
timer_2_c2     22.02.2016 18:50:00|[zsu_01:off_day_nr]


Funktionieren tut es wunderbar nur sieht es unschön aus wenn man sich das timer-reading als Status anzeigen lassen möchte.

Wo liegt mein Fehler?

MfG

P.S. Sorry, sehe gerade das es hier um "sleep" geht aber bin durch die Suche genau hier gelandet.

ja, es war programmtechnisch am einfachsten umzusetzen, denn getriggert wird jeden Tag und erst zum Triggerzeitpunkt wird das Reading ausgewertet. Andernfalls müsste ich auf Änderungen des Readings im Modul reagieren und jeweils die Anzeige anpassen und das wäre aufwändiger zu programmieren gewesen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

spikeh1

Ok, also ist das so gewollt. War beim Umstellen schon am Verzweifeln, das dort nie der Wochentag angezeigt wurde, sondern immer nur der Name des Readings.
Das es funktionierte merkte ich nur durch Zufall.  :)

Danke Dir für die schnelle Antwort.

MfG

heikoh81

Hallo Damian,

sorry dass ich diesen alten Thread hervorkrame aber er enthält ein Feature-Request, das ich auch gut fände.
Ich konnte weder in der Commandref noch in einem anderen Thread etwas aktuelles zur Datumssteuerung finden.

Zitat von: Damian am 15 Juli 2015, 08:46:39
3) Datumsangaben (aufwändig)

Datumsangaben mit Uhrzeit (mit Triggerung bzw. ohne Triggerung mit Fragezeichen wie bisher) [YYYY-MM-TT HH:MM[:SS]]  oder [MM-TT HH:MM[:SS]] oder [TT HH:MM[:SS]]

Beispiel

[2015-10-30 10:00] oder [10-30 10:00]  oder [30 10:00] oder Zeitintervalle [2015-10-30 10:00 - 2016-10-30 10:00] oder vom 1. September 10 Uhr bis zum ersten April 20:00 Uhr [09-01 10:00 - 04-01 20:00] oder vom ersten 10:00 Uhr bis 15. 20:00 Uhr [-01 10:00 - -15 20:00]

Datumsangaben ohne Zeitangabe: [YYYY-MM-TT] oder [MM-TT] oder [MM-] oder [-TT].

Bespiel: An meinem Geburtstag [02-26], nur im Februar [02-], immer am 15. des Monats [-15]

Beispiel mit Intervallen: Heizung soll laufen von September bis April [09- - 04-] oder vom 15.09 bis zum 30.04 [09-15 - 04-30]

(das "bis-Zeichen" muss dann mit Leerzeichen angegeben werden)

Gibt es schon pläne, ob solch eine Datumsfunktion kommt.
Die einfache Abfrage von Zeiträumen in DOIF ist es, was dieses Modul u.a. so genial macht - das war für mich immer viel Arbeit davor, zu prüfen, ob eine Aktion in einem gewünschten Zeitfenster liegt...
Mit Datum wäre das "Schweizer Taschenmesser DOIF" noch mächtiger - will z.B. immer in der Nacht auf den ersten Mai bestimmte Leuchten nicht schon um 01 Uhr nachts ausschalten, sondern erst um 05 Uhr.
Gelöst habe ich es basierend auf einem anderen Foreneintrag jetzt so - geht auch, aber mit Datumsfenster wäre das noch genialer.


([01:00|7] and ($month <> 5 and $mday <> 1))
(IF ([Bad1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall3Bad:FILTER=STATE=on off))
(IF ([Kind1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall2Kind:FILTER=STATE=on off))
({Log 3, "doif nicht am 01.05. um 01 Uhr ausgefuhert"})
DOELSEIF ([05:00|7] and ($month == 5 and $mday == 1))
(IF ([Bad1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall3Bad:FILTER=STATE=on off))
(IF ([Kind1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall2Kind:FILTER=STATE=on off))
({Log 3, "doif am 01.05. um 05 Uhr ausgefuhert"})


Viele Grüße,
Heiko

Damian

Zitat von: heikoh81 am 01 Mai 2016, 09:42:00
Hallo Damian,

sorry dass ich diesen alten Thread hervorkrame aber er enthält ein Feature-Request, das ich auch gut fände.
Ich konnte weder in der Commandref noch in einem anderen Thread etwas aktuelles zur Datumssteuerung finden.

Gibt es schon pläne, ob solch eine Datumsfunktion kommt.
Die einfache Abfrage von Zeiträumen in DOIF ist es, was dieses Modul u.a. so genial macht - das war für mich immer viel Arbeit davor, zu prüfen, ob eine Aktion in einem gewünschten Zeitfenster liegt...
Mit Datum wäre das "Schweizer Taschenmesser DOIF" noch mächtiger - will z.B. immer in der Nacht auf den ersten Mai bestimmte Leuchten nicht schon um 01 Uhr nachts ausschalten, sondern erst um 05 Uhr.
Gelöst habe ich es basierend auf einem anderen Foreneintrag jetzt so - geht auch, aber mit Datumsfenster wäre das noch genialer.


([01:00|7] and ($month <> 5 and $mday <> 1))
(IF ([Bad1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall3Bad:FILTER=STATE=on off))
(IF ([Kind1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall2Kind:FILTER=STATE=on off))
({Log 3, "doif nicht am 01.05. um 01 Uhr ausgefuhert"})
DOELSEIF ([05:00|7] and ($month == 5 and $mday == 1))
(IF ([Bad1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall3Bad:FILTER=STATE=on off))
(IF ([Kind1DaemmerungsgesteuertChkBox] eq "on") (set NAME=PollinZufall2Kind:FILTER=STATE=on off))
({Log 3, "doif am 01.05. um 05 Uhr ausgefuhert"})


Viele Grüße,
Heiko

Diese Features habe ich erst mal zurückgestellt, da der Aufwand für die Entwicklung eines dazugehörigen Parsers, wegen der zunehmender Komplexität in der Syntax, nicht unerheblich ist - alles Bisherige soll ja weiterhin fehlerfrei funktionieren. Da muss man sich erst mal mit $month und $mday behelfen, obwohl die Lesbarkeit der Definition durchaus vertretbar ist.


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heikoh81


Robert1963

Hallo,
habe ein kleinen Problem mit wait
Wenn ich z.B. " attr Test_BEW wait 0,6 " in die Befehlsteile eingebe ist alles OK.

Test_Bew kriegt das Attribute wait 0,6

Will ich das Test_Bew wait durch einen Event ("Butt") in einem DOIF ändern

DEF:
            ([Butt])
                  (attr Test_BEW wait 0,6)

kommt nur

            Test_Bew wait 0
raus.

(war am 9.März schon mal eine Thema, sollte aber mit dem neuen Update weg sein, "Komma als Trennzeichen")
Bin Update Aktuell(Heute Morgen)

Was mache ich falsch?

Viele Grüße und danke für das SUPER DOIF,
Rob


Nuc 7i7, Ubuntu 20.04.2 LTS, FS20, Homematic, EnOcean, Hue, Conbee, Fritzbox 6490kd,

Damian

Zitat von: Robert1963 am 11 Mai 2016, 08:31:37
Hallo,
habe ein kleinen Problem mit wait
Wenn ich z.B. " attr Test_BEW wait 0,6 " in die Befehlsteile eingebe ist alles OK.

Test_Bew kriegt das Attribute wait 0,6

Will ich das Test_Bew wait durch einen Event ("Butt") in einem DOIF ändern

DEF:
            ([Butt])
                  (attr Test_BEW wait 0,6)

kommt nur

            Test_Bew wait 0
raus.

(war am 9.März schon mal eine Thema, sollte aber mit dem neuen Update weg sein, "Komma als Trennzeichen")
Bin Update Aktuell(Heute Morgen)

Was mache ich falsch?

Viele Grüße und danke für das SUPER DOIF,
Rob

([Butt])
                 ((attr Test_BEW wait 0,6))

Ein Komma ist nur dann geschützt, wenn es innerhalb von irgendwelchen Klammern vorkommt.

Du kannst ebenfalls die wait-Angabe in ein Reading oder Dummy ablegen und dieses in eckigen Klammern bei wait angeben.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Robert1963

Perfekt!!!  :)

Vielen Dank für die schnelle Hilfe
Nuc 7i7, Ubuntu 20.04.2 LTS, FS20, Homematic, EnOcean, Hue, Conbee, Fritzbox 6490kd,

Abercrombie1892

ich hoffe hier ist nix eingeschlafen. ich bräuchte mal eure hilfe. ich möchte gerne das der 2. befehl zeitverzögert schaltet und ich bekomme es einfach nicht hin. ist bestimmt ne klammerngeschichte.

([RF:"1"]) ({GetHttpFile ("192.168.178.21:8080","/raumserver/controller/leaveStandby?id=Wohnzimmer&scope=room")},({GetHttpFile ("192.168.178.21:8080","/raumserver/controller/loadPlaylist?id=Wohnzimmer&value=Line%20in")}))

danke für die hilfe

Frank_Huber

Die Ausführngsteile in eigene Klammern () und dann das Wait Attribut.

(Bedingung) (Ausführung 1) (Ausführung 2)

Attribut wait 0,5
Ausführung 1 sofort, Ausführung 2 nach 5 sek

Abercrombie1892

#343
Zitat von: Frank_Huber am 12 März 2018, 16:54:08
Die Ausführngsteile in eigene Klammern () und dann das Wait Attribut.

(Bedingung) (Ausführung 1) (Ausführung 2)

Attribut wait 0,5
Ausführung 1 sofort, Ausführung 2 nach 5 sek

hab jetzt überall nochmal ne klammer gesetzt, aber der zündet nur den ersten  :-\


([RF:"1"]) (({GetHttpFile ("192.168.178.21:8080","/raumserver/controller/leaveStandby?id=Wohnzimmer&scope=room")}),(({GetHttpFile ("192.168.178.21:8080","/raumserver/controller/loadPlaylist?id=Wohnzimmer&value=Line%20in")})))

edit:ich habs hinbekommen, das komma zwischen den befehlen kommt raus.

danke  8)