(gelöst) Wetteransage am Morgen und anschließender Musikwiedergabe über den Tag

Begonnen von Ronn, 20 Mai 2019, 18:31:40

Vorheriges Thema - Nächstes Thema

Ronn

Hallo zusammen,

ich habe folgendes DOIF in meinem Bad für die Sonos Boxen:



defmod di_ba_sonos DOIF ([05:30-22:00] and [ba_bwm] eq "motion") (set Sonos_Bad Speak 8 de "Text für Wetteransage") (set Sonos_Bad StartRadio Kiss%20FM, set Sonos_Bad Volume 4) \
DOELSE\
(set Sonos_Bad Stop)

attr di_ba_sonos alias Steuerlogik.BadSonos
attr di_ba_sonos cmdState on,on|off
attr di_ba_sonos cmdpause 31
attr di_ba_sonos devStateIcon off|initialize|initialized:general_aus@red on:general_an_fuer_zeit@green
attr di_ba_sonos do resetwait
attr di_ba_sonos icon helper_doif
attr di_ba_sonos repeatsame 1:0:0
attr di_ba_sonos room Badezimmer,DOIF
attr di_ba_sonos wait 0,32:300



Das funktioniert auch soweit. Als erstes wird das Wetter angesagt und dann weiter durch bis zum Radiostart. Eingestellt habe ich, dass das Wetter nur einmal aktiviert wird. Wenn aber das Radio durch "Nichtbewegung" wieder ausgeht, wird die Wetteransage erneut angesagt. Kann man das verhindern, dass dieser Part tatsächlich nur ein Mal anspringt (vornehmlich morgens).
Oder müsste ich mehrere DOIF-zweige bauen mit unterschiedlichen Zeiträumen und die Wetteransage dann nachmittags/abends einfach rausnehmen? Oder gibt's da ne andere Lösungsvariante? Für Kritik und Anregungen bin ich gerne offen :)

Viele Grüße

Ellert

2 Zweige sind eine Möglichkeit.
Eine andere ist, ein Reading im DOIF zu setzen wenn das Wetter angesagt wird und dieses Reading abzufragen (IF), ob das Wetter an diesem Tag angesagt wurde, dann wird das Wetter nur einmal angesagt. Das Reading setzt Du dann nachts zurück, damit das Wetter am nächsten Tag wieder angesagt wird.

Ronn

Hi,

Danke für deine Hilfestellung. Ich hab das jetzt mal an einem Test-DOIFversucht. Es klappt fast. Soweit ich es probieren konnte. Problem ist aber nun, dass die Wetteransage abgebrochen wird. Ca nach ,,guten Morgen". Ich hab's schon mit weit timer vor dem dem Doppelpunkt versucht, hat sich nicht funktioniert (oder falsch gesetzt). Hier das dazugehörige List:



Internals:
   DEF        ([05:30-23:00] and [ku_bwm] eq "motion") (
IF ([Willi4:testreading] eq "0") (set Sonos_Kueche Speak 12 de GUTEN MORGEN. Derzeit [Temp.Strasse:temperature:d] Grad) (set Sonos_Kueche Volume 6) (set Sonos_Kueche StartRadio Gay%20FM)) (
IF ([Willi4:testreading] eq "1") (set Sonos_Kueche StartRadio Gay%20FM) (set Sonos_Kueche Volume 4))
DOELSE
(set Sonos_Kueche Stop)
   FUUID      5cbee4ff-f33f-0fee-22a3-3ce39ba49b8ef729
   MODEL      FHEM
   NAME       Willi4
   NR         525
   NTFY_ORDER 50-Willi4
   STATE      cmd_1
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-05-20 22:38:09   Device          ku_bwm
     2019-05-20 22:38:09   cmd             1.2
     2019-05-20 22:38:09   cmd_event       ku_bwm
     2019-05-20 22:38:09   cmd_nr          1
     2019-05-20 22:38:09   cmd_seqnr       2
     2019-05-20 22:38:09   e_ku_bwm_STATE  motion
     2019-05-20 22:37:53   mode            enabled
     2019-05-20 22:38:09   state           cmd_1
     2019-05-20 22:29:58   testreading     0
     2019-05-20 22:35:08   timer_01_c01    21.05.2019 05:30:00
     2019-05-20 22:35:08   timer_02_c01    20.05.2019 23:00:00
     2019-05-20 22:38:09   wait_timer      no timer
   Regex:
     accu:
   attr:
     cmdState:
     wait:
       0:
       1:
         50
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and ::InternalDoIf($hash,'ku_bwm','STATE') eq "motion"
   days:
   devices:
     0           ku_bwm
     all         ku_bwm
   do:
     0:
       0           IF ([Willi4:testreading] eq "0") (set Sonos_Kueche Speak 12 de GUTEN MORGEN. Derzeit [Temp.Strasse:temperature:d] Grad) (set Sonos_Kueche Volume 6) (set Sonos_Kueche StartRadio Gay%20FM)
       1           IF ([Willi4:testreading] eq "1") (set Sonos_Kueche StartRadio Gay%20FM) (set Sonos_Kueche Volume 4)
     1:
       0          set Sonos_Kueche Stop
   helper:
     event      motion,battery: 100,reachable: 1
     globalinit 1
     last_timer 2
     sleepdevice ku_bwm
     sleepsubtimer 0
     sleeptimer -1
     timerdev   ku_bwm
     timerevent motion,battery: 100,reachable: 1
     triggerDev ku_bwm
     DOIF_eventas:
       cmd_nr: 1
       cmd_seqnr: 2
       cmd_event: ku_bwm
       state: cmd_1
     timerevents:
       motion
       battery: 100
       reachable: 1
     timereventsState:
       state: motion
       battery: 100
       reachable: 1
     triggerEvents:
       motion
       battery: 100
       reachable: 1
     triggerEventsState:
       state: motion
       battery: 100
       reachable: 1
   internals:
     0           ku_bwm:STATE
     all         ku_bwm:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   itimer:
   localtime:
     0          1558409400
     1          1558386000
   perlblock:
   readings:
   realtime:
     0          05:30:00
     1          23:00:00
   time:
     0          05:30:00
     1          23:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
   triggertime:
     1558386000:
       localtime  1558386000
       hash:
     1558409400:
       localtime  1558409400
       hash:
   uiState:
   uiTable:
Attributes:
   do         resetwait
   group      DOIF
   room       Testplattform
   wait       :50



Hat jemand nen Tipp?

Ellert

IF ist ein Befehl, daher
(Bedingung) (IF (reading == 0) (set Wetter, setreading 1) (set radio))
DOELSEIF ([Nachts]) (setreading 0)
DOELSE ...

Ronn

Guten Morgen,

ich habs leider gerstern nicht mehr geschafft es auszuprobieren. Ich würde es heute Abend mal folgend probiern:


([05:30-22:00] and [ku_bwm] eq "motion") (
IF ([Willi4:testreading] == 0) (set Sonos_Kueche Speak 12 de GUTEN MORGEN. Derzeit [Temp.Strasse:temperature:d] Grad, setreading Willi4 testreading 1) (set Sonos_Kueche Volume 6) (set Sonos_Kueche StartRadio Gay%20FM)
Else
(set Sonos_Kueche StartRadio Gay%20FM) (set Sonos_Kueche Volume 4))
DOELSEIF
([05:00]) (setreading Willi4 testreading 0)
DOELSE (set Sonos_Kueche Stop)


Sofern jemand jetzt schon optimierungsbedarf erkennet, ich bin über jeden tipp glücklich (Klammersetzung etc.) :)

Per

Oder machst nen extra Fall:


defmod di_ba_sonos DOIF ([05:30-22:00] and [ba_bwm] eq "motion" and [?$SELF:wetter] eq "on") \
(set Sonos_Bad Speak 8 de "Text für Wetteransage") (setreading $SELF wetter off,set $SELF cmd_2) \
DOELSEIF ([05:30-22:00] and [ba_bwm] eq "motion") \
(set Sonos_Bad StartRadio Kiss%20FM, set Sonos_Bad Volume 4) \
DOELSEIF ([05:00]) \
(setreading $SELF wetter on) \
DOELSE\
(set Sonos_Bad Stop)

attr di_ba_sonos cmdState on,on|on|wetter|off
attr di_ba_sonos do resetwait
attr di_ba_sonos wait 0,32:0:300

Ronn

Hallo Per,

danke für deinen Input. Eine Frage habe ich noch (bin da noch nicht so fit drin). Warum hast du hinter (setreading $SELF wetter off) den Befehl (set $SELF cmd_2) eingesetzt? ist das eine Weiterleitung/Verweis auf cmd_2? weil er in der ersten Schleife "on" erkennt und dann den cmd_2 ausüben soll? oder totaler Blödsinn von mir?

Deine Variante probiere ich heute Abend ebenfalls!

Viele Grüße

Per

Zitat von: Ronniedinho am 21 Mai 2019, 14:49:52ist das eine Weiterleitung
Ja. Spart das Doppeln von Befehlen.
Man könnte auch die identischen Teile der Abfrage in ein DOIF_Reading auslagern, lohnt aber bei den beiden Termen noch nicht wirklich. Außer du bist auf Fehlersuche, dann ist das ganz nützlich.

Ronn

Vielen Dank für deine Antwort :)

Deine Variante funktioniert fast. Mit on und off klappt. Jetzt ist aber das Problem, dass er nach ,,nomotion" ja auf Motion wieder zurückspringt. Und jetzt startet der Radiosender immer wieder von vorne. Obwohl do resetwait aktiviert ist. Weißt du woran das liegt? Hier mal das List (hatte es noch ein bisschen mit den Bezeichnungen angepasst):


Internals:
   DEF        ([05:30-22:00] and [ku_bwm] eq "motion" and [?$SELF:wetter] eq "on")
(set Sonos_Kueche Speak 8 de Hallo du da) (setreading $SELF wetter off,set $SELF cmd_2)
DOELSEIF
([05:30-22:00] and [ku_bwm] eq "motion")
(set Sonos_Kueche StartRadio Gay%20FM, set Sonos_Kueche Volume 4)
DOELSEIF
([05:00]) (setreading $SELF wetter on)
DOELSE
(set Sonos_Kueche Stop)
   FUUID      5cbee4ff-f33f-0fee-22a3-3ce39ba49b8ef729
   MODEL      FHEM
   NAME       Willi4
   NR         525
   NTFY_ORDER 50-Willi4
   STATE      on
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-05-21 19:48:08   Device          ku_bwm
     2019-05-21 19:47:54   cmd             2
     2019-05-21 19:47:54   cmd_event       ku_bwm
     2019-05-21 19:47:54   cmd_nr          2
     2019-05-21 19:48:08   e_ku_bwm_STATE  nomotion
     2019-05-21 19:41:30   mode            enabled
     2019-05-21 19:47:54   state           on
     2019-05-20 22:29:58   testreading     0
     2019-05-21 19:41:30   timer_01_c01    22.05.2019 05:30:00
     2019-05-21 19:41:30   timer_02_c01    21.05.2019 22:00:00
     2019-05-21 19:41:30   timer_03_c02    22.05.2019 05:30:00
     2019-05-21 19:41:30   timer_04_c02    21.05.2019 22:00:00
     2019-05-21 19:41:30   timer_05_c03    22.05.2019 05:00:00
     2019-05-21 19:48:08   wait_timer      21.05.2019 19:53:08 cmd_4 ku_bwm
     2019-05-21 19:47:33   wetter          off
   Regex:
     accu:
   attr:
     cmdState:
       0:
         on
         on
       1:
         on
       2:
         wetter
       3:
         off
     wait:
       0:
         0
         5
       1:
         0
       2:
         0
       3:
         300
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and ::InternalDoIf($hash,'ku_bwm','STATE') eq "motion" and ::ReadingValDoIf($hash,'Willi4','wetter') eq "on"
     1          ::DOIF_time($hash,2,3,$wday,$hms) and ::InternalDoIf($hash,'ku_bwm','STATE') eq "motion"
     2          ::DOIF_time_once($hash,4,$wday)
   days:
   devices:
     0           ku_bwm
     1           ku_bwm
     all         ku_bwm
   do:
     0:
       0          set Sonos_Kueche Speak 8 de Hallo du da
       1          setreading Willi4 wetter off,set Willi4 cmd_2
     1:
       0          set Sonos_Kueche StartRadio Gay%20FM, set Sonos_Kueche Volume 4
     2:
       0          setreading Willi4 wetter on
     3:
       0          set Sonos_Kueche Stop
   helper:
     event      battery: 100,nomotion,reachable: 1
     globalinit 1
     last_timer 5
     sleepdevice ku_bwm
     sleepsubtimer 0
     sleeptimer 3
     timerdev   ku_bwm
     timerevent battery: 100,nomotion,reachable: 1
     triggerDev ku_bwm
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: ku_bwm
       state: on
     timerevents:
       battery: 100
       nomotion
       reachable: 1
     timereventsState:
       battery: 100
       state: nomotion
       reachable: 1
     triggerEvents:
       battery: 100
       nomotion
       reachable: 1
     triggerEventsState:
       battery: 100
       state: nomotion
       reachable: 1
   internals:
     0           ku_bwm:STATE
     1           ku_bwm:STATE
     all         ku_bwm:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   itimer:
   localtime:
     0          1558495800
     1          1558468800
     2          1558495800
     3          1558468800
     4          1558494000
   readings:
   realtime:
     0          05:30:00
     1          22:00:00
     2          05:30:00
     3          22:00:00
     4          05:00:00
   time:
     0          05:30:00
     1          22:00:00
     2          05:30:00
     3          22:00:00
     4          05:00:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
     4          2
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   timers:
     0           0  1
     1           2  3
     2           4
   trigger:
   triggertime:
     1558468800:
       localtime  1558468800
       hash:
     1558494000:
       localtime  1558494000
       hash:
     1558495800:
       localtime  1558495800
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   on,on|on|wetter|off
   do         resetwait
   group      DOIF
   room       Testplattform
   wait       0,5:0:0:300

amenomade

#9
Wenn er auf "nomotion" springt, dann ist Bedingung 1 oder Bedingung 2 nicht mehr wahr, dann hast Du ein Zustandwechsel: er würde nach 300s cmd_4 ausführen.
Wenn er dann wieder auf "motion" springt fängt alles wieder von vorne an. Nur inzwischen ist wetter nicht mehr "on", dann springt er direkt auf cmd_2 => set Sonos_Kueche StartRadio usw.

Wenn Du mehrmals nacheinander nur "set Sonos_Kueche StartRadio" machst, startet jedes Mal der Radiosender von vorne, oder?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Ronn

Hey,

Danke für deine Rückmeldung. Ja der Sender startet immer neu. Mmmh. Mir fällt auch grad kein Ansatz ein wie ich das umgehen könnte. Evtl. die if Variante mal weiterverfolgen

amenomade

Die IF Variante wird nichts bringen, solange Du einen Zustandwechsel bei "nomotion" hast. Du musst das Ausschalten des Radios irgendwie in den gleichen Zweig wie das Einschalten und mit einem wait packen, und keinen Ausweichezustand haben. Somit wird resetwait bei Wiederholung von "motion" funktionieren.

Da Du aber auch keinen Zustandwechsel zwischen "mit wetter" und "ohne wetter" willst (sonst würde der Radiosender auch wieder von vorne starten), musst Du wiederum beide im gleichen Zweig packen, dann doch mit IF arbeiten.

Ein erster Wurf wäre:

([05:30-22:00] and [ku_bwm] eq "motion" )
(
IF ([?$SELF:wetter] eq "on")(sag wetter, setreading $SELF wetter "off", sleep 32; start radio) ELSE (start radio)
)
(stop radio)
DOELSEIF ([05:00])(setreading $SELF wetter on)

wait 0,300:0
do resetwait

Das Problem jetzt ist, dass do resetwait eine Wiederholung wie do always impliziert: er würde beim nächsten "motion" wiederum das Radio starten.
Man muss dann mit repeatsame 1 begrenzen

Also... alles nur Theorie, aber ich würde so probieren:

([05:30-22:00] and [ku_bwm] eq "motion" )
(
IF ([?$SELF:wetter] eq "on")(sag wetter, setreading $SELF wetter "off", sleep 32; start radio) ELSE (start radio)
)
(stop radio)
DOELSEIF ([05:00])(setreading $SELF wetter on)

wait 0,300:0
do resetwait
repeatsame 1



Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Per


amenomade

Zitat von: Per am 22 Mai 2019, 12:42:29
Nimm das mal raus.
Wird (allein) nicht reichen: bei "nomotion" wird er den Status wechseln, bei wieder "motion" wieder den Status wechseln => Radiosender wird wieder von vorne anfangen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Ronn

Zitat von: amenomade am 22 Mai 2019, 18:17:22
Wird (allein) nicht reichen: bei "nomotion" wird er den Status wechseln, bei wieder "motion" wieder den Status wechseln => Radiosender wird wieder von vorne anfangen.

Danke für deine Unterstützung. Mir ist noch was anderes eingefallen. Sende ich, wenn ich zu Hause bin. Sende ich dann


Gesendet von iPhone mit Tapatalk