[Erledigt]Denkanstoß benötigt: Wecken per Kalender

Begonnen von Michael P., 30 Oktober 2019, 08:57:18

Vorheriges Thema - Nächstes Thema

Michael P.

Moinsen,

ich habe noch ein Problem mit unserem "Wecksystem" der Kids. Generell wird zu einem Zeitpunkt, der im Kalender festgehalten ist, der Zyklus in Gang gesetzt. Je nach Rückmeldung vom Helligkeitssensor draussen wird entweder das Rollo hochgefahren oder das Licht angemacht. Klappt jetzt auch, allerdings blieben dann teilweise die Rollos unten da mit Licht geweckt wurde.
Ich habe dann einen "last catch" eingefügt, der etwa eine Stunde nach der Weckzeit die Rollos hochfahren soll (wenn vorher ein spezielles Reading gesetzt wurde):

## Normalmodus Wochentags - wenn zu dunkel Licht in zwei Stufen einschalten, ansonsten Rollo hoch
([DUMMY_WKUP_Kind1] eq "wecken" and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] < 55 ) ( set OG_LI_Kind1_dim 25 )
DOELSEIF ([DUMMY_WKUP_Kind1] eq "wecken" and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] > 54 ) ( set ROLL_Kind1 OBEN, setreading DUMMY_WKUP_Kind1 oldState OFF )
DOELSEIF ([DUMMY_WKUP_Kind1] eq "wecken" and [+00:10] and ([?DUMMY_WKUP_Kind1:state:sec]>600) and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] > 64 ) ( set ROLL_Kind1 OBEN; set DUMMY_WKUP_Kind1 aus, setreading DUMMY_WKUP_Kind1 oldState OFF )
DOELSEIF ([DUMMY_WKUP_Kind1] eq "wecken" and [+00:10] and ([?DUMMY_WKUP_Kind1:state:sec]>600) and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] < 65 ) ( set OG_LI_Kind1_Bett on, set OG_LI_Kind1 on, set DUMMY_WKUP_Kind1 aus, setreading DUMMY_WKUP_Kind1 oldState ROLLO)
## Last Catch
DOELSEIF ([?DUMMY_Hausallein] eq "nein" and [+00:05] and [?DUMMY_WKUP_Kind1.oldState] eq "ROLLO" and [$SELF:state:sec] > 3600) ( set ROLL_Kind1 OBEN, setreading DUMMY_WKUP_Kind1 oldState OFF )


So, das DOIF verbleibt aber im cmd_4, cmd_5 wird zwar alle 5 Minuten "angetestet aber nicht angesprungen. Ich vermute [$SELF:state:sec] > 3600 macht nicht das was ich vermute - ändert alleine das [+00:05] in cmd_5 den state des DOIF ? So eine kleiner Denkschubser wäre nett :-)

Viele Grüße - Michael
3x FHEM aus Raspi, KNX, diverse ESP8266 zur Temperatur/Feuchtigkeits/Poolwasserdurchflussüberwachung, SMA Sunny Tripower 6.0 mit 9.2kW/p Nord/Ost bzw Süd/West, 13.5kW BYD HVM, SMA HM2.0, goE-11kWH Wallbox, ZigBee-Netz mit zigbee2mqtt zur Beleuchtungssteuerung und Verbrauchüberwachung

Damian

Zitat von: Michael P. am 30 Oktober 2019, 08:57:18
Moinsen,

ich habe noch ein Problem mit unserem "Wecksystem" der Kids. Generell wird zu einem Zeitpunkt, der im Kalender festgehalten ist, der Zyklus in Gang gesetzt. Je nach Rückmeldung vom Helligkeitssensor draussen wird entweder das Rollo hochgefahren oder das Licht angemacht. Klappt jetzt auch, allerdings blieben dann teilweise die Rollos unten da mit Licht geweckt wurde.
Ich habe dann einen "last catch" eingefügt, der etwa eine Stunde nach der Weckzeit die Rollos hochfahren soll (wenn vorher ein spezielles Reading gesetzt wurde):

## Normalmodus Wochentags - wenn zu dunkel Licht in zwei Stufen einschalten, ansonsten Rollo hoch
([DUMMY_WKUP_Kind1] eq "wecken" and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] < 55 ) ( set OG_LI_Kind1_dim 25 )
DOELSEIF ([DUMMY_WKUP_Kind1] eq "wecken" and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] > 54 ) ( set ROLL_Kind1 OBEN, setreading DUMMY_WKUP_Kind1 oldState OFF )
DOELSEIF ([DUMMY_WKUP_Kind1] eq "wecken" and [+00:10] and ([?DUMMY_WKUP_Kind1:state:sec]>600) and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] > 64 ) ( set ROLL_Kind1 OBEN; set DUMMY_WKUP_Kind1 aus, setreading DUMMY_WKUP_Kind1 oldState OFF )
DOELSEIF ([DUMMY_WKUP_Kind1] eq "wecken" and [+00:10] and ([?DUMMY_WKUP_Kind1:state:sec]>600) and [?DUMMY_Hausallein] eq "nein" and [sensorGarten:licht] < 65 ) ( set OG_LI_Kind1_Bett on, set OG_LI_Kind1 on, set DUMMY_WKUP_Kind1 aus, setreading DUMMY_WKUP_Kind1 oldState ROLLO)
## Last Catch
DOELSEIF ([?DUMMY_Hausallein] eq "nein" and [+00:05] and [?DUMMY_WKUP_Kind1.oldState] eq "ROLLO" and [$SELF:state:sec] > 3600) ( set ROLL_Kind1 OBEN, setreading DUMMY_WKUP_Kind1 oldState OFF )


So, das DOIF verbleibt aber im cmd_4, cmd_5 wird zwar alle 5 Minuten "angetestet aber nicht angesprungen. Ich vermute [$SELF:state:sec] > 3600 macht nicht das was ich vermute - ändert alleine das [+00:05] in cmd_5 den state des DOIF ? So eine kleiner Denkschubser wäre nett :-)

Viele Grüße - Michael

Du kannst ja den Status, bzw. das Reading state mit Datum sehen. Der Status des Moduls wird natürlich immer dann als letztes geändert, wenn ein Zweig ausgeführt wird, sonst nicht. Das kannst du immer am Datum des state-Readings erkennen, genau dieses wird mit [$SELF:state:sec] abgefragt. Wenn es also älter ist und der Zweig nicht ausgeführt wird, dann muss es an den anderen Bedingungen liegen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Michael P.


Zitat von: Damian am 30 Oktober 2019, 11:30:15
Du kannst ja den Status, bzw. das Reading state mit Datum sehen. Der Status des Moduls wird natürlich immer dann als letztes geändert, wenn ein Zweig ausgeführt wird, sonst nicht. Das kannst du immer am Datum des state-Readings erkennen, genau dieses wird mit [$SELF:state:sec] abgefragt. Wenn es also älter ist und der Zweig nicht ausgeführt wird, dann muss es an den anderen Bedingungen liegen.

Hi Damian,

so hatte ich es auch verstanden, aber trotzdem will es nicht. Die anderen Bedingungen sollten eigentlich erfüllt sein:
list DUMMY_Hausallein
Internals:
[....]
   NAME       DUMMY_Hausallein
   NR         403
   STATE      nein
   TYPE       dummy
   READINGS:
     2019-10-19 12:00:00   state           nein


list DUMMY_WKUP_Kind1
Internals:
[...]
   NAME       DUMMY_WKUP_Kind1
   STATE      aus
   TYPE       dummy
   READINGS:
     2019-10-30 06:26:00   oldState        ROLLO
     2019-10-30 07:15:00   state           aus


list DOIF Rolladen_Kind1
Internals:
[...]
   STATE      cmd_4
   TYPE       DOIF
   VERSION    20268 2019-09-28 21:00:39
   READINGS:
     2019-10-30 06:26:00   cmd             4
     2019-10-30 06:26:00   cmd_event       timer_2
     2019-10-30 06:26:00   cmd_nr          4
     2019-10-29 19:26:00   mode            enabled
     2019-10-30 06:26:00   state           cmd_4
[...]


"DUMMY_Hausallein" ist "nein", "DUMMY_WKUP_Kind1" mit reading "oldState" ist "ROLLO" und "$SELF.state" ist auf 06:26
Theoretisch sollte das DOIF greifen - meiner Meinung nach. Mache ich einen Klammerfehler ( Wald, Bäume ... ?) - ich steh auf dem Schlauch ...

Grüße - Michael
3x FHEM aus Raspi, KNX, diverse ESP8266 zur Temperatur/Feuchtigkeits/Poolwasserdurchflussüberwachung, SMA Sunny Tripower 6.0 mit 9.2kW/p Nord/Ost bzw Süd/West, 13.5kW BYD HVM, SMA HM2.0, goE-11kWH Wallbox, ZigBee-Netz mit zigbee2mqtt zur Beleuchtungssteuerung und Verbrauchüberwachung

Damian

Mit dem Ausschnitt kann man nichts anfangen, poste mal das komplette list von DOIF Rolladen_Kind1.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Michael P.

Hi Damian,

das Problem saß mal wieder vor der Tastatur. Beim List ist mir das aufgefallen:

.....and ::InternalDoIf($hash,'DUMMY_WKUP_Kind1.oldState','STATE')....


Hier wird offensichtlich das völlig falsche reading zur Grundlage genommen. Also Fehler hier:

...[?DUMMY_WKUP_Kind1.oldState] eq "ROLLO"...


ist natürlich falsch, es muss sein

...[?DUMMY_WKUP_Kind1:oldState] eq "ROLLO"...


Doppelpunkt statt Punkt vor "oldState"

Grummel. Jetzt geht's.

Danke für's zuhören :-)

Grüße - MiPo
3x FHEM aus Raspi, KNX, diverse ESP8266 zur Temperatur/Feuchtigkeits/Poolwasserdurchflussüberwachung, SMA Sunny Tripower 6.0 mit 9.2kW/p Nord/Ost bzw Süd/West, 13.5kW BYD HVM, SMA HM2.0, goE-11kWH Wallbox, ZigBee-Netz mit zigbee2mqtt zur Beleuchtungssteuerung und Verbrauchüberwachung