[GELÖST]Fenster offen -> Heizung schalten

Begonnen von Tabularasa, 06 Januar 2018, 12:11:52

Vorheriges Thema - Nächstes Thema

Tabularasa

Zitat von: Damian am 07 Januar 2018, 11:56:56
So langsam wird es ;)
Hättest du meinen Vorschlag komplett übernommen (Unterstrich hinter Fenster) hätte es auch funktioniert:
Meine Frau guckt auch schon immer komisch wenn ich ihr sage, dass ich z.b. nur einen .(Punkt) noch setzen musste damit etwas funktioniert was vorher nicht ging :D
Also danke nochmal

Tabularasa

Hallo. Ich nochmal. Das DOIF sieht fertig jetzt so aus
(["^Fenster_:open"]) (sleep 70 $DEVICE quiet;set {("$DEVICE"=~/^Fenster_(.*)/;"HZG_$1_Clima")} desired-temp 5) DOELSEIF (["^Fenster_:closed"]) (cancel $DEVICE quiet) (set li_HZG scene [li_HZG])

Das funktioniert auch gut.

Jetzt habe ich mein anderes DOIF was zur Erinnerung an die offenen Fenster auf die Sonos was ausgibt auch in dem Stil angepasst.
(["^Fenster:open"]) ((sleep 90 $DEVICE quiet;set TYPE=SONOSPLAYER:FILTER=presence=appeared Speak 50 de {(AttrVal("$DEVICE","alias", "$DEVICE"))} wurde vor 20 Minuten geöffnet. Bitte demnächst schließen weils sonst zu kalt wird)) DOELSEIF
([#"^Fenster:closed":state:"open"] == 0) (cancel $DEVICE quiet) (set TYPE=SONOSPLAYER:FILTER=presence=appeared Speak 50 de alle Fenster geschlossen)

jedes einzeln für sich funktioniert auch. Nur wenn ich beide aktiviert habe dann werde ich nicht erinnert. Kann es sein dass das mit dem sleep zusammenhängt, weil ja 2 Doifs aufs selbe Device triggern und jeder ein sleep ausführt?
Am liebsten wäre mir nur ein DOIF aus beiden kombiniert, weil sie ja eh immer zur gleichen Zeit auslösen, aber ich glaube da komme ich mit den Klammern und Semikolons nicht klar.
Also @Damian :) wäre nett wenn du dir das nochmal ansehen könntest.

Könnte es in etwa so aussehen?

(["^Fenster:open"]) ((sleep 70 $DEVICE quiet;set {("$DEVICE"=~/^Fenster_(.*)/;"HZG_$1_Clima")} desired-temp 5;sleep 90 $DEVICE quiet;set TYPE=SONOSPLAYER:FILTER=presence=appeared Speak 50 de {(AttrVal("$DEVICE","alias", "$DEVICE"))} wurde vor 20 Minuten geöffnet. Bitte demnächst schließen weils sonst zu kalt wird)) DOELSEIF
([#"^Fenster:closed":state:"open"] == 0) (cancel $DEVICE quiet) (set TYPE=SONOSPLAYER:FILTER=presence=appeared Speak 50 de alle Fenster geschlossen)(set li_HZG scene [li_HZG])


Achja und eins habe ich noch was auf Temperatur bei im gleichen Raum geöffnetem Fenster reagieren sollte, bekomme aber einen Fehler
Internals:
   CFGFN     
   DEF        (["^HZG_:measured-temp"]<21 and {("$DEVICE"=~/^HZG_(.*)/;"Fenster_$1")}eq "open") (set Sonos_Wohnzimmer Speak 30 de Das Fenster im {(AttrVal("$DEVICE","alias", "$DEVICE"))} ist auf und es sind unter 21°C. Bitte schließen)
   NAME       di_test2
   NR         10658
   NTFY_ORDER 50-di_test2
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2018-01-08 12:35:20   Device          HZG_EG_WZ
     2018-01-08 12:31:49   cmd             0
     2018-01-08 12:35:20   error           condition c01: syntax error at (eval 815662) line 1, at EOF
syntax error at (eval 815662) line 1, near ""Fenster_$1")"

     2018-01-08 12:31:49   mode            enabled
     2018-01-08 12:31:49   state           initialized
   Regex:
     cond:
       :
         0:
           "^HZG_:measured-temp" ^HZG_:measured-temp
   condition:
     0          EventDoIf('^HZG_',$hash,'measured-temp',0)<21 and {("$DEVICE"=~/^HZG_(.*)/;"Fenster_$1")}eq "open"
   devices:
   do:
     0:
       0          set Sonos_Wohnzimmer Speak 30 de Das Fenster im {(AttrVal("$DEVICE","alias", "$DEVICE"))} ist auf und es sind unter 21°C. Bitte schließen
     1:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      measured-temp: 20.0
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev HZG_EG_WZ
     triggerEvents:
       measured-temp: 20.0
     triggerEventsState:
       measured-temp: 20.0
   internals:
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   disable    0
   do         always
   room       DOIF

Wenn ich was neues gelernt, aber wie ich sehe ja noch nicht so ganz verstanden habe, fällt einem immer mehr ein was man machen könnte ::)

Damian

Du kannst ruhig zwei DOIF lassen, allerdings muss der sleep unterschiedliche Namen bekommen z. B.

sleep 90 $DEVICE_1 quiet

sleep 70 $DEVICE_2 quiet

beim cancel genauso.

Das macht so wenig Sinn:

([#"^Fenster:closed":state:"open"] == 0) (cancel $DEVICE quiet)

Da du pro Fenster ein Sleep hast, musst du auch pro Fenster die den sleep cancel. Die Aggregationsfunktion musst du davon trennen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Tabularasa

#18
Zitat von: Damian am 08 Januar 2018, 16:17:15
Das macht so wenig Sinn:

([#"^Fenster:closed":state:"open"] == 0) (cancel $DEVICE quiet)

Da du pro Fenster ein Sleep hast, musst du auch pro Fenster die den sleep cancel. Die Aggregationsfunktion musst du davon trennen.
Das hört sich für dich bestimmt leichter an, als es für mich ist ::)

Muss ich einen neuen Zweig machen?
(["^Fenster:closed"]) (cancel $DEVICE_1 quiet) DOELSEIF
([#"^Fenster:closed":state:"open"] == 0) (set TYPE=SONOSPLAYER:FILTER=presence=appeared Speak 50 de alle Fenster geschlossen)

Geht mir nur darum, dass, wenn alle Fenster zu sind, die Sonos das sagen.

edit: kannst du auch nochmal nach dem DOIF gucken vom letzten Post wo der Fehler war? Hab ich ganz allein erstellt(paste) :D

Damian

Zitat von: Tabularasa am 08 Januar 2018, 21:55:38
Das hört sich für dich bestimmt leichter an, als es für mich ist ::)

Muss ich einen neuen Zweig machen?
(["^Fenster:closed"]) (cancel $DEVICE_1 quiet) DOELSEIF
([#"^Fenster:closed":state:"open"] == 0) (set TYPE=SONOSPLAYER:FILTER=presence=appeared Speak 50 de alle Fenster geschlossen)

Geht mir nur darum, dass, wenn alle Fenster zu sind, die Sonos das sagen.

([#"^Fenster:closed":state:"open"] == 0) (set TYPE=SONOSPLAYER:FILTER=presence=appeared Speak 50 de alle Fenster geschlossen)

würde ich in ein separates DOIF packen, da die obigen beiden Bedingungen den gleichen Trigger haben, da gewinnt immer die erste.

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

Tabularasa

Hallo Damian. Kannst du dir das letzte DOIF vom Beitrag #16 nochmal ansehen ob ich das überhaupt so machen kann und was der Fehler bedeutet? Danke

Damian

Zitat von: Tabularasa am 12 Januar 2018, 14:39:39
Hallo Damian. Kannst du dir das letzte DOIF vom Beitrag #16 nochmal ansehen ob ich das überhaupt so machen kann und was der Fehler bedeutet? Danke

Nein, in der Bedingung geht das nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF