FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: visionsurfer am 13 November 2016, 18:26:36

Titel: Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: visionsurfer am 13 November 2016, 18:26:36
Hallo,

ich bin dabei mir ein DOIF "Start in den Tag" zu bauen. Leider hab ich dabei noch ein paar Probleme. Ich bin mir auch nicht sicher, ob ein DOIF überhaupt das richtige für mein Vorhaben ist.

Erreichen möchte ich folgendes:
Zu einer Weckzeit die ausgelesen wird, möchte ich kurze Zeit später meine Tür Entriegeln lassen, das Licht soll anfangen hochzudimmen (Sonnenaufgang), es soll eine Ansage kommen mit Temperatur und ob es regnet oder nicht. Danach soll das Radio starten.

Code sieht aktuell wie folgt aus:


define morgen_routine DOIF
   ([([Fixtime]+[00:01])])
      (set keymatic_wohnung unlock)
      (set schlafzimmer_dimmen value ({([schlafzimmer_dimmen:getG3:d]+5)}) g1)
DOELSEIF
      ([schlafzimmer_dimmen:getG3:d] >= 65)
DOELSEIF
   ([wetterstation_regen] eq "nein")
      (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)
      (set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera)  
DOELSEIF
   ([wetterstation_regen] eq "ja")
      (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.)
      (set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera)    


Ich hab es mit einem dummy Fixzeit getestet. Es öffnet dann auch das Türschloss und das Licht fängt an mit 5% zu dimmen. Danach bleibt es stehen.

Da stimmt bestimmt was mit dem Dimmer nicht.

Mein Dimmer einzeln sieht so aus:


([07:04]) (set schlafzimmer_dimmen value ({([schlafzimmer_dimmen:getG3:d]+5)}) g1) DOELSEIF ([schlafzimmer_dimmen:getG3:d] >= 65)


So läuft der auch einzeln, wunderbar. Er dimmt um 07:04 schön Schrittweise auf 65% hoch.

Allerdings sind in dem DOIF auch folgende attr. mit drin:

do always
repeatcmd 15
repeatsame 100

Muss ich die in mein DOIF "morgen_routine" dann auch mit übernehmen ?

Das 2. Problem ist meine Sprachansage mit dem Regen. So wie es jetzt ist, würde immer dann wenn die Wetterstation "ja" oder "nein" meldet, das ganze wieder starten. Das möchte ich natürlich nicht. Ich möchte nur das morgens mit einer Zeitverzögerung nach der Weckzeit gesagt wird, ob es regnet oder nicht. Zusätzlich zu dem anderen Text.

Kriegt man das alles in einem DOIF hin oder nimmt man für solche Aufgaben eher getrennte Befehle ? Ich könnte das ja wahrscheinlich auch alles durch at und notifys bauen ?

Grüße,
Visionsurfer
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: Brockmann am 15 November 2016, 11:07:54
Zitat von: visionsurfer am 13 November 2016, 18:26:36
Kriegt man das alles in einem DOIF hin oder nimmt man für solche Aufgaben eher getrennte Befehle ? Ich könnte das ja wahrscheinlich auch alles durch at und notifys bauen ?
In ein einziges DOIF bekommst Du das nicht rein. Das Dimmen ist eine spezielle Konstruktion, die sich mit dem Rest nicht verträgt. Deshalb sollte das in einem eigenen DOIF bleiben und der Rest in ein anderes. Die können ja aber beide einen identischen Trigger haben. Ob FHEM zur Weckzeit ein oder zwei DOIFs ausführt, spielt ja keine Rolle.
Für die Regenansage würde ich keine verschiedenen DOELSEIF-Fälle machen, sondern statt dessen innerhalb des DOIF mit IF(Regen)(blah)ELSE(blahblah) arbeiten. Dann wird es jeweils nur einmal morgens ausgeführt.
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: CQuadrat am 15 November 2016, 11:21:19
Schau Dir doch mal http://www.fhemwiki.de/wiki/Weckautomation (http://www.fhemwiki.de/wiki/Weckautomation) an.

Damit kannst Du ein "Weck-Macro" definieren, das mehrere Aktionen in einer vorgebbaren Reihenfolge abarbeitet.
Man muss sich zwar etwas einlesen aber es funktioniert dann zuverlässig.
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: visionsurfer am 15 November 2016, 12:43:52
Hi,

ja mit dem Dimmer dachte ich mir schon fast. Ich hab den schon rausgenommen und lasse ihn einfach zur gleichen Zeit starten.
Trotzdem springt er nicht in den zweiten Bereich. Es startet damit das meine Tür entriegelt aber danach geht es dann nicht weiter.

@Brockmann
Das verstehe ich nicht ganz. Ersetze ich dann einfach die DOELSEIF durch ein DOELSE ?
Wie würde das in meinem Fall aussehen ?

Weil in der tat frage ich mich die ganze Zeit, wie ich es hinbekomme das es nur einmal am morgen abspielt und nicht immer, wenn Status Wechsel ist.

@CQuadrat
Ja das hab ich schon gelesen. Das muss ich erst mal genau installiert bekommen. Ich fand den WIKI Eintrag jetzt auch noch nicht so übersichtlich.
Ich hab es nur teilweise verstanden. Wahrscheinlich muss ich es mal installieren, um es dann live zu sehen und damit zu spielen. Einzelne Personen zu definieren, ist interessant, aber zusätzlich brauch ich Gruppen. Meine Frau und ich, stehen immer zur gleichen Zeit auf :)

Grüße,
Visionsurfer
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: pc1246 am 15 November 2016, 14:30:23
Hallo visionsurfer
Du solltest Dir wirklich mal genauer durchlesen was das mit dem DOIF auf sich hat.
Ich wuerde das fuer Dich jetzt mal frei uebersetzen:
DOIF bedeutet: Mache etwas wenn... (z.B.: 7:00 Uhr morgens am Wochentag)
DOELSEIF bedeutet: Mache ansonsten etwas wenn... (z.B.: 8:00 Uhr morgens am Samstag)
DOELSE bedeutet: ansonsten mache... (dies wird immer ausgefuehrt, wenn das DOIF getriggert wird, und die anderen Bedingungen nicht erfuellt sind!)

Ich hoffe ich konnte etwas Licht ins Dunkel bringen!?
Gruss Christoph
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: Brockmann am 16 November 2016, 09:23:57

define morgen_routine DOIF ([([Fixtime]+[00:01])])
      (
      set keymatic_wohnung unlock,
      IF([wetterstation_regen] eq "nein")
        (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)
      ELSE
        (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.),
      set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera
      )


Ungetestet und ohne Gewähr.
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: visionsurfer am 17 November 2016, 22:36:17
Hi,

also scheinbar geht das mit einem IF nicht. Es kommt dann die Fehlermeldung: Unknown command if....

Scheinbar bekommt man es wirklich nicht in ein DOIF ?

Das Türschloss öffnet zumindest immer :)

Grüße,
Visionsurfer
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: Brockmann am 18 November 2016, 09:11:53
Zitat von: visionsurfer am 17 November 2016, 22:36:17
also scheinbar geht das mit einem IF nicht. Es kommt dann die Fehlermeldung: Unknown command if....
Scheinbar bekommt man es wirklich nicht in ein DOIF ?
Selbstverständlich kann man ein IF in einem DOIF verwenden. Was genau bei Dir falsch läuft, kann ich Dir anhand dieser rudimentären Fehlermeldung nicht sagen.
Besser wäre es, Du listet nochmal das ganze DOIF auf, wie es aktuell aussieht.
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: visionsurfer am 18 November 2016, 09:33:33
Hi,

das sieht ziemlich so aus, wie oben beschrieben:


define morgen_routine DOIF ([([Fixtime]+[00:01])])
      (
      set keymatic_wohnung unlock,
      IF([wetterstation_regen] eq "nein")
        (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet nicht. Hier kommt dein Lieblingsradiosender.)
      ELSE
        (set TabletNexus ttsMsg Guten Morgen. Die aktuelle Aussentemperatur ist [wetterstation_temp:state:d] Grad und es regnet. Hier kommt dein Lieblingsradiosender.),
      set TabletNexus sendIntent org.smblott.intentradio.PLAY url http://mp3ad.radioprimavera.c.nmdn.net/fs_radioprimavera/livestream.mp3 name RadioPrimavera
      )


Ich bin etwas verwirrt mit den "(". Fehlen da nicht welche ? Weil mal wir der SET in klammern gemacht und mal nicht. Auf der einen Seite sieht es für mich total richtig aus, auf der anderen Seite führt er es so nicht aus.

Wie gesagt das Türschloss öffnet noch. Danach bleibt es stehen.

Grüße,
Visionsurfer
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: Ellert am 18 November 2016, 09:40:05
Es fehlt ein Leerzeichen zwischen IF und der Klammer.
Titel: Antw:Start in den Tag mit mehreren Anweisungen in ein DOIF ?
Beitrag von: visionsurfer am 18 November 2016, 10:05:11
Oh man. Danke. Jetzt wo du es sagst, sehe ich es auch.
Mist. Ich hab gestern den halben Abend drauf geschaut und es nicht gefunden.

Ich werde es heute Abend gleich probieren und berichten.

Danke.