Homestatus Rolladen steuern

Begonnen von dennis_n, 14 September 2015, 16:21:23

Vorheriges Thema - Nächstes Thema

dennis_n

#30
das heißt wenn ich den Wert von homestatus ändere merkt das DOIF automatisch?

Aber wie baue ich dann einen weiteren status ein?
Angenommen ich habe jetzt noch den Wert abwesend und wenn dieser gesetzt ist sollte eine andere Struktur aufgerufen werden.


Einfach ein zweites DOIF Konstrukt bauen oder in das vorhandene verschachteln?
Danke

Gruss
Dennis

Damian

Zitat von: dennis_n am 24 September 2015, 16:43:34
das heißt wenn ich den Wert von homestatus ändere merkt das DOIF automatisch?

Aber wie baue ich dann einen weiteren status ein?
Angenommen ich habe jetzt noch den Wert abwesend und wenn dieser gesetzt ist sollte eine andere Struktur aufgerufen werden.

Danke

Gruss
Dennis
Das DOIF reagiert auf die jeweiligen Änderungen, wertet die Bedingungen aus und macht das, was hinter der Bedingung steht.

Wenn du Status auf "abwesend" abfragen willst, dann kannst du dir jetzt schon denken, dass du dann [home] eq "abwesend" abfragen musst.

Um komplexere Sachen zu definieren, solltest du zuerst die umfangreiche Dokumentation des DOIF-Moduls in der deutschen Commandref studieren.

Gruß

Damian

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

dennis_n

Hallo,

wollte nur mitteilen, dass ich es jetzt damit gelöst habe und einwandfrei funktioniert:
define di_Rolladen DOIF ([homestatus] eq "home" and [07:30-19:45]) (set RL_EG_OG_alle Hoch) DOELSEIF ([homestatus] eq "nachtdienst" and [07:30-19:45]) (set RL_Nachtdienst Runter)

Gruss
Dennis

dennis_n

Hi,

muss den Thread leider nochmal hoch holen.
Seit heute funktioniert mein DOIF nicht mehr.

Ich setze ja über den Dummy den homestatus. Der dummy wird auch einwandfrei mit dem entsprechenden Status gefüttert. Aber beim ändern des Status wird mein DOIF nicht mehr ausgeführt.
Einzige Änderung, die ich gemacht habe, sind unterschiedliche Uhrzeiten am Wochenende.

Mein DOIF sieht jetzt so aus:
([homestatus] eq "home" and [07:15:00-19:15:00|8] or [09:00:00-19:15:00|7]) (set RL_EG_OG_alle Hoch) DOELSEIF ([homestatus] eq "home" and [19:15:01-07:14:59|8] or [19:15:01-09:00:00|7]) (set RL_EG_OG_alle Runter) DOELSEIF ([homestatus] eq "nachtdienst" and [07:14:59-19:15:00|8] or [08:59:59-19:15:00|7]) (set RL_Nachtdienst Runter) DOELSEIF ([homestatus] eq "party" and [19:15:00-07:29:59]) (set RL_Party Runter)

Gestern hat es noch funktioniert. Hat das vielleicht etwas mit den definierten Wochentagen zu tun?

Danke

Gruss
Dennis


Damian

Zitat von: dennis_n am 10 Oktober 2015, 18:54:29

Gestern hat es noch funktioniert. Hat das vielleicht etwas mit den definierten Wochentagen zu tun?


Vielleicht. Mit den geposteten Informationen kann man nicht mehr dazu sagen. Vielleicht hast du in deiner holiday-Datei gerade Ferien eingetragen.

Gruß

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

dennis_n

#35
Hi Damian,

welche holiday Datei?

Ich meinte mit den definierten Wochentagen die Angabe im DOIF, also [07:15:00-19:15:00|8] or [09:00:00-19:15:00|7], genauer gesagt die 7 bzw. die 8 hinter der Uhrzeit.
Ich habe keine holiday Datei definiert.
Brauche ich die denn?

Heute morgen (Samstag) ging der Rolladen ja pünktlich um 9 Uhr auf. An den Wochentagen immer um 7.15 Uhr.


Gruss
Dennis

Damian

Zitat von: dennis_n am 10 Oktober 2015, 22:57:56
Hi Damian,

welche holiday Datei?

Ich meinte mit den definierten Wochentagen die Angabe im DOIF, also [07:15:00-19:15:00|8] or [09:00:00-19:15:00|7], genauer gesagt die 7 bzw. die 8 hinter der Uhrzeit.
Ich habe keine holiday Datei definiert.
Brauche ich die denn?

Heute morgen (Samstag) ging der Rolladen ja pünktlich um 9 Uhr auf. An den Wochentagen immer um 7.15 Uhr.


Gruss
Dennis

In der Commandref zu DOIF steht:

Zitat[<time>|012345678] 0-8 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we) und 8 für Arbeitstage (entspricht !$we)
Also bedeutet 7 nicht nur Wochenende sondern auch Feiertage. Wenn du die holiday-Datei nicht kennst, dann musst du nach Holiday in der Commandref suchen.

Poste mal list von deinem DOIF-Modul bevor wir hier noch lange rätseln.

Gruß

Damian

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

dennis_n

#37
Hi,

anbei mein list:

Internals:
   DEF        ([homestatus] eq "home" and [07:15:00-19:05:00|8] or [09:00:00-19:05:00|7]) (set RL_EG_OG_alle Hoch) DOELSEIF ([homestatus] eq "home" and [19:05:01-07:14:59|8] or [19:05:01-09:00:00|7]) (set RL_EG_OG_alle Runter) DOELSEIF ([homestatus] eq "nachtdienst" and [07:14:59-19:05:00|8] or [08:59:59-19:05:00|7]) (set RL_Nachtdienst Runter)
   NAME       di_Rolladen
   NR         92
   NTFY_ORDER 50-di_Rolladen
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-10-10 20:03:45   Device          homestatus
     2015-10-11 09:00:00   cmd_event       timer_3
     2015-10-11 09:00:00   cmd_nr          1
     2015-10-10 20:03:45   e_homestatus_STATE home
     2015-10-11 09:00:00   state           cmd_1
     2015-10-10 21:09:55   timer_10_c3     11.10.2015 19:05:00|8
     2015-10-11 08:59:59   timer_11_c3     12.10.2015 08:59:59|7
     2015-10-10 21:09:55   timer_12_c3     11.10.2015 19:05:00|7
     2015-10-11 07:15:00   timer_1_c1      12.10.2015 07:15:00|8
     2015-10-10 21:09:55   timer_2_c1      11.10.2015 19:05:00|8
     2015-10-11 09:00:00   timer_3_c1      12.10.2015 09:00:00|7
     2015-10-10 21:09:55   timer_4_c1      11.10.2015 19:05:00|7
     2015-10-10 21:09:55   timer_5_c2      11.10.2015 19:05:01|8
     2015-10-11 07:14:59   timer_6_c2      12.10.2015 07:14:59|8
     2015-10-10 21:09:55   timer_7_c2      11.10.2015 19:05:01|7
     2015-10-11 09:00:00   timer_8_c2      12.10.2015 09:00:00|7
     2015-10-11 07:14:59   timer_9_c3      12.10.2015 07:14:59|8
   Condition:
     0          InternalDoIf('homestatus','STATE','') eq "home" and DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"8") or DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"7")
     1          InternalDoIf('homestatus','STATE','') eq "home" and DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"8") or DOIF_time($hash,$hash->{realtime}{6},$hash->{realtime}{7},$wday,$hms,"7")
     2          InternalDoIf('homestatus','STATE','') eq "nachtdienst" and DOIF_time($hash,$hash->{realtime}{8},$hash->{realtime}{9},$wday,$hms,"8") or DOIF_time($hash,$hash->{realtime}{10},$hash->{realtime}{11},$wday,$hms,"7")
   Days:
     0          8
     1          8
     10         7
     11         7
     2          7
     3          7
     4          8
     5          8
     6          7
     7          7
     8          8
     9          8
   Devices:
     0           homestatus
     1           homestatus
     2           homestatus
     all         homestatus
   Do:
     0:
       0          set RL_EG_OG_alle Hoch
     1:
       0          set RL_EG_OG_alle Runter
     2:
       0          set RL_Nachtdienst Runter
     3:
   Helper:
     globalinit 1
     last_timer 12
     sleeptimer -1
   Internals:
     0           homestatus:STATE
     1           homestatus:STATE
     2           homestatus:STATE
     all         homestatus:STATE
   Itimer:
   Readings:
   Realtime:
     0          07:15:00
     1          19:05:00
     10         08:59:59
     11         19:05:00
     2          09:00:00
     3          19:05:00
     4          19:05:01
     5          07:14:59
     6          19:05:01
     7          09:00:00
     8          07:14:59
     9          19:05:00
   State:
   Time:
     0          07:15:00
     1          19:05:00
     10         08:59:59
     11         19:05:00
     2          09:00:00
     3          19:05:00
     4          19:05:01
     5          07:14:59
     6          19:05:01
     7          09:00:00
     8          07:14:59
     9          19:05:00
   Timecond:
     0          0
     1          0
     10         2
     11         2
     2          0
     3          0
     4          1
     5          1
     6          1
     7          1
     8          2
     9          2
   Timer:
     0          0
     1          0
     10         0
     11         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   Timerfunc:
   Timers:
     0           0  1  2  3
     1           4  5  6  7
     2           8  9  10  11
Attributes:
   room       Timer


Ausserdem steht in meinem log nach dem fhem Neustart noch folgendes:
2015.10.11 11:47:09 1: PERL WARNING: Argument "0\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "1\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "2\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "3\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "4\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "5\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "6\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "7\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:10 1: PERL WARNING: Argument "8\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:11 1: PERL WARNING: Argument "9\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:11 1: PERL WARNING: Argument "10\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:11 1: PERL WARNING: Argument "11\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:11 1: PERL WARNING: Argument "12\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.
2015.10.11 11:47:11 1: PERL WARNING: Argument "13\\" isn't numeric in int at ./FHEM/95_holiday.pm line 217.

dennis_n

Hi,

hat niemand einen Tipp für mich wo ich suchen muss?
Heute funktioniert wieder alles normal, nur an den Wochenenden nicht.

Also das DOIF funktioniert immer wie es soll. Unter der Woche gehen die Rolläden um 7.15 Uhr hoch und am Wochenende um 9.00 Uhr.
Nur die Schaltung per Status funktioniert am Wochenende nicht.

Danke

Gruss
Dennis

Damian

Zitat von: dennis_n am 12 Oktober 2015, 19:29:59
Hi,

hat niemand einen Tipp für mich wo ich suchen muss?
Heute funktioniert wieder alles normal, nur an den Wochenenden nicht.

Also das DOIF funktioniert immer wie es soll. Unter der Woche gehen die Rolläden um 7.15 Uhr hoch und am Wochenende um 9.00 Uhr.
Nur die Schaltung per Status funktioniert am Wochenende nicht.

Danke

Gruss
Dennis

Jetzt weiß ich erst, was dein Problem ist. Warum sagst du nicht gleich ganz konkret was nicht geht, dann hättest du schon vor paar Tagen den richtigen Tipp von mir bekommen.

Die Lösung ist eigentlich ganz einfach:

UND hat höhere Priorität als ODER (entspricht der Regel: Punkt (UND) vor Strich (ODER)).

Nun zu deine Aufgabe:

Überlege jetzt mal, wie du deine Bedingung klammern musst, dass dein Homestatus für beide Zeiträume gilt. Ich bin mir sicher, dass du es auch ohne meine Hilfe schaffen wirst ;)

Gruß

Damian


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

dennis_n

#40
Hi Damian,

dann versuche ich es mal. Ich bin da leider echt ein Neuling, also hab etwas Geduld mit mir.

Passt das so?

([homestatus] eq "home" and [07:15:00-19:15:00|8] or [homestatus] eq "home" and [09:00:00-19:15:00|7]) (set RL_EG_OG_alle Hoch) DOELSEIF ([homestatus] eq "home" and [19:15:01-07:14:59|8] or [homestatus] eq "home" and [19:15:01-09:00:00|7]) (set RL_EG_OG_alle Runter) DOELSEIF ([homestatus] eq "nachtdienst" and [07:14:59-19:15:00|8] or [homestatus] eq "nachtdienst" and [08:59:59-19:15:00|7]) (set RL_Nachtdienst Runter)

Oder kann ich die Abfrage nach dem Status auch nach der Uhrzeit setzen?

also:
([07:15:00-19:15:00|8] or [09:00:00-19:15:00|7] and [homestatus] eq "home") (set set RL_EG_OG_alle Hoch) usw.

Gruss
Dennis

Damian

#41
Zitat von: dennis_n am 12 Oktober 2015, 21:40:40
Hi Damian,

dann versuche ich es mal. Ich bin da leider echt ein Neuling, also hab etwas Geduld mit mir.

Passt das so?

([homestatus] eq "home" and [07:15:00-19:15:00|8] or [homestatus] eq "home" and [09:00:00-19:15:00|7]) (set RL_EG_OG_alle Hoch) DOELSEIF ([homestatus] eq "home" and [19:15:01-07:14:59|8] or [homestatus] eq "home" and [19:15:01-09:00:00|7]) (set RL_EG_OG_alle Runter) DOELSEIF ([homestatus] eq "nachtdienst" and [07:14:59-19:15:00|8] or [homestatus] eq "nachtdienst" and [08:59:59-19:15:00|7]) (set RL_Nachtdienst Runter)

Oder kann ich die Abfrage nach dem Status auch nach der Uhrzeit setzen?

also:
([07:15:00-19:15:00|8] or [09:00:00-19:15:00|7] and [homestatus] eq "home") (set set RL_EG_OG_alle Hoch) usw.

Gruss
Dennis

Nein.

Dann anders:

Status *  Zeit1 + Zeit2

Was müsstest du tun, damit Status mit Zeit1 und mit Zeit2 multipliziert wird?

Edit: Dein erste Vorschlag geht auch, allerdings geht es einfacher mit Klammerung
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dennis_n

#42
Tut mir leid. Ich stehe völlig auf dem Schlauch und weiß nicht was Du meinst.

So vielleicht?
([homestatus] eq "home" ([07:15:00-19:15:00|8] and [09:00:00-19:15:00|7])) (set set RL_EG_OG_alle Hoch)

Gruss
Dennis

Damian

Zitat von: dennis_n am 12 Oktober 2015, 22:29:54
Tut mir leid. Ich stehe völlig auf dem Schlauch und weiß nicht was Du meinst.

So vielleicht?
([homestatus] eq "home" ([07:15:00-19:15:00|8] and [09:00:00-19:15:00|7])) (set set RL_EG_OG_alle Hoch)

Gruss
Dennis

OK. Die Lösung ist:

Status *(Zeit1 +Zeit2)

entspricht in der Informatik:

Status and (Zeit1 or Zeit2)

das bedeutet also für dich:

([homestatus] eq "home" and ([07:15:00-19:15:00|8] or [09:00:00-19:15:00|7])) ...


Allerdings sind solche Grundlagen Voraussetzung, um mit DOIF-Modul (und nicht nur da) sinnvoll umgehen zu können.

Gruß

Damian

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

dennis_n

Hallo Damian,

ich danke Dir vielmals.

Manchmal sieht man halt den Wald vor lauter Bäumen nicht. Ich beschäftige mich noch nicht so lange mit fhem.
Vor allem die Syntax bereitet mir oft Probleme.

Mit meinem ersten Vorschlag hatte ich ja die Lösung, wie Du geschrieben hast, aber dies dann weiter "einzukürzen" stellt für mich zunächst mal ein Problem dar.
Ich fand es auch gut, dass Du mir nicht gleich die Lösung gesagt hast. Habe gestern Abend 1 Stunde vor dem Texteditor verbracht und mein DOIF ständig umgestellt und daran geknobelt. Aber wie gesagt, habe halt auf dem Schlauch gestanden.

Sorry dafür.

Gruss
Dennis