Bitte um Hilfe bei Automatisation in kombination mit Schalter

Begonnen von Pnemenz, 06 September 2023, 20:28:16

Vorheriges Thema - Nächstes Thema

Pnemenz

Ich habe folgendes Problem, an dem ich schon eine Weile herumkaue:
Ich möchte ein Licht sowohl manuell als auch automatisch schalten. Die Automatik soll zwisch 6:00 und 23:00 wenn der Helligkeitswert eines Helligkeitssensors unter 660 fällt das Licht einschalten.
(soweit so einfach, funktionert)
Das DOIF soll auch mitels defSatteIcon einen schalter bekommen, mit dem ich das Licht manuell bedienen kann. Was auch immer ich versuche, die Automatik schaltet, wenns finster ist, das Licht immer ein.
Wie löse ich das richtig?

define Switch.Licht.Abendstimmung DOIF ( ([06:00-23:00] ) and [lcn:HelligkeitsMax:d] < 660 or [$SELF:button] eq "ON") (\
{lcnRuleSwitch("lcn:module:8b7e5de0dd:S000M084","D","7","HIT"),\
Log 1, "Stimmung Abendlicht ON%"})\
DOELSEIF( [23:00-06:00]   and [lcn:HelligkeitsMax:d] < 660 or  [$SELF:button] eq "OFF"  ) \
(\
{lcnRuleSwitch("lcn:module:8b7e5de0dd:S000M084","D","8","HIT"),\
Log 1, "Stimmung Abendlicht aus"} \
 )\
\

attr Switch.Licht.Abendstimmung DbLogInclude state.*
attr Switch.Licht.Abendstimmung alias Abendstimmung
attr Switch.Licht.Abendstimmung checkall event
attr Switch.Licht.Abendstimmung cmdState ON|OFF
attr Switch.Licht.Abendstimmung devStateIcon ON:hue2019_archetypesSingleSpot@yellow:OFF  initialized|OFF:hue2019_archetypesSingleSpot@gray:ON
attr Switch.Licht.Abendstimmung eventMap /button ON:button_ein/button OFF:button_aus/
attr Switch.Licht.Abendstimmung group Lichtschalter
attr Switch.Licht.Abendstimmung readingList button
attr Switch.Licht.Abendstimmung room Home
attr Switch.Licht.Abendstimmung selftrigger wait
attr Switch.Licht.Abendstimmung setList button:ON,OFF
attr Switch.Licht.Abendstimmung sortby 002
attr Switch.Licht.Abendstimmung verbose 5
attr Switch.Licht.Abendstimmung wait 0:0.5
#   .eventMapCmd button_ein:noArg button_aus:noArg
#   DEF        ( ([06:00-23:00] ) and [lcn:HelligkeitsMax:d] < 660 or [$SELF:button] eq "ON") (
# {lcnRuleSwitch("lcn:module:8b7e5de0dd:S000M084","D","7","HIT"),
# Log 1, "Stimmung Abendlicht ON%"})
#DOELSEIF( [23:00-06:00]   and [lcn:HelligkeitsMax:d] < 660 or  [$SELF:button] eq "OFF"  )
#(
# {lcnRuleSwitch("lcn:module:8b7e5de0dd:S000M084","D","8","HIT"),
# Log 1, "Stimmung Abendlicht aus"}
# )
#
#
#   FUUID      64f84193-f33f-4818-d9b2-f5fce67d13826e13
#   MODEL      FHEM
#   NAME       Switch.Licht.Abendstimmung
#   NOTIFYDEV  Switch.Licht.Abendstimmung,lcn,global
#   NR         375
#   NTFY_ORDER 50-Switch.Licht.Abendstimmung
#   STATE      ON
#   TYPE       DOIF
#   VERSION    27740 2023-07-10 09:31:11
#   eventCount 169
#   .attraggr:
#   .attrminint:
#   Helper:
#     DBLOG:
#       state:
#         fhemDB:
#           TIME       1694024346.53792
#           VALUE      ON
#   READINGS:
#     2023-09-06 20:26:20   Device          lcn
#     2023-09-06 20:19:06   cmd             1
#     2023-09-06 20:19:06   cmd_event       lcn
#     2023-09-06 20:19:06   cmd_nr          1
#     2023-09-06 20:26:20   e_lcn_HelligkeitsMax 0
#     2023-09-06 20:16:03   mode            enabled
#     2023-09-06 20:19:06   state           ON
#     2023-09-06 20:16:03   timer_01_c01    07.09.2023 06:00:00
#     2023-09-06 20:16:03   timer_02_c01    06.09.2023 23:00:00
#     2023-09-06 20:16:03   timer_03_c02    06.09.2023 23:00:00
#     2023-09-06 20:16:03   timer_04_c02    07.09.2023 06:00:00
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       Switch.Licht.Abendstimmung:
#         0:
#           button     ^Switch.Licht.Abendstimmung$:^button:
#         1:
#           button     ^Switch.Licht.Abendstimmung$:^button:
#       lcn:
#         0:
#           HelligkeitsMax ^lcn$:^HelligkeitsMax:
#         1:
#           HelligkeitsMax ^lcn$:^HelligkeitsMax:
#   attr:
#     cmdState:
#       0:
#         ON
#       1:
#         OFF
#     wait:
#       0:
#         0
#       1:
#         0.5
#     waitdel:
#   condition:
#     0           (::DOIF_time($hash,0,1,$wday,$hms) ) and ::ReadingValDoIf($hash,'lcn','HelligkeitsMax','','d') < 660 or ::ReadingValDoIf($hash,'Switch.Licht.Abendstimmung','button') eq "ON"
#     1           ::DOIF_time($hash,2,3,$wday,$hms)   and ::ReadingValDoIf($hash,'lcn','HelligkeitsMax','','d') < 660 or  ::ReadingValDoIf($hash,'Switch.Licht.Abendstimmung','button') eq "OFF" 
#   days:
#   do:
#     0:
#       0            {lcnRuleSwitch("lcn:module:8b7e5de0dd:S000M084","D","7","HIT"), Log 1, "Stimmung Abendlicht ON%"}
#     1:
#       0            {lcnRuleSwitch("lcn:module:8b7e5de0dd:S000M084","D","8","HIT"), Log 1, "Stimmung Abendlicht aus"}   
#     2:
#   helper:
#     NOTIFYDEV  Switch.Licht.Abendstimmung,lcn,global
#     event      Module80SHSVerteiler_Variable12: -10.3,MittlereHelligkeit: 0,HelligkeitLux: 1,StrahlungKorrigiert: -4.2,Strahlung-LCN: -4.9,Strahlung-Bressler: -3.5,HelligkeitsMax: 0
#     globalinit 1
#     last_timer 4
#     sleeptimer -1
#     timerdev   lcn
#     timerevent Module80SHSVerteiler_Variable12: -10.3,MittlereHelligkeit: 0,HelligkeitLux: 1,StrahlungKorrigiert: -4.2,Strahlung-LCN: -4.9,Strahlung-Bressler: -3.5,HelligkeitsMax: 0
#     triggerDev lcn
#     timerevents:
#       Module80SHSVerteiler_Variable12: -10.3
#       MittlereHelligkeit: 0
#       HelligkeitLux: 1
#       StrahlungKorrigiert: -4.2
#       Strahlung-LCN: -4.9
#       Strahlung-Bressler: -3.5
#       HelligkeitsMax: 0
#     timereventsState:
#       Module80SHSVerteiler_Variable12: -10.3
#       MittlereHelligkeit: 0
#       HelligkeitLux: 1
#       StrahlungKorrigiert: -4.2
#       Strahlung-LCN: -4.9
#       Strahlung-Bressler: -3.5
#       HelligkeitsMax: 0
#     triggerEvents:
#       Module80SHSVerteiler_Variable12: -10.3
#       MittlereHelligkeit: 0
#       HelligkeitLux: 1
#       StrahlungKorrigiert: -4.2
#       Strahlung-LCN: -4.9
#       Strahlung-Bressler: -3.5
#       HelligkeitsMax: 0
#     triggerEventsState:
#       Module80SHSVerteiler_Variable12: -10.3
#       MittlereHelligkeit: 0
#       HelligkeitLux: 1
#       StrahlungKorrigiert: -4.2
#       Strahlung-LCN: -4.9
#       Strahlung-Bressler: -3.5
#       HelligkeitsMax: 0
#   internals:
#   interval:
#     0          -1
#     1          0
#     2          -1
#     3          2
#   intervalfunc:
#   localtime:
#     0          1694059200
#     1          1694034000
#     2          1694034000
#     3          1694059200
#   readings:
#     all         lcn:HelligkeitsMax Switch.Licht.Abendstimmung:button
#   realtime:
#     0          06:00:00
#     1          23:00:00
#     2          23:00:00
#     3          06:00:00
#   time:
#     0          06:00:00
#     1          23:00:00
#     2          23:00:00
#     3          06:00:00
#   timeCond:
#     0          0
#     1          0
#     2          1
#     3          1
#   timer:
#     0          0
#     1          0
#     2          0
#     3          0
#   timers:
#     0           0  1
#     1           2  3
#   trigger:
#   triggertime:
#     1694034000:
#       localtime  1694034000
#       hash:
#     1694059200:
#       localtime  1694059200
#       hash:
#   uiState:
#   uiTable:
#
setstate Switch.Licht.Abendstimmung ON
setstate Switch.Licht.Abendstimmung 2023-09-06 20:26:20 Device lcn
setstate Switch.Licht.Abendstimmung 2023-09-06 20:19:06 cmd 1
setstate Switch.Licht.Abendstimmung 2023-09-06 20:19:06 cmd_event lcn
setstate Switch.Licht.Abendstimmung 2023-09-06 20:19:06 cmd_nr 1
setstate Switch.Licht.Abendstimmung 2023-09-06 20:26:20 e_lcn_HelligkeitsMax 0
setstate Switch.Licht.Abendstimmung 2023-09-06 20:16:03 mode enabled
setstate Switch.Licht.Abendstimmung 2023-09-06 20:19:06 state ON
setstate Switch.Licht.Abendstimmung 2023-09-06 20:16:03 timer_01_c01 07.09.2023 06:00:00
setstate Switch.Licht.Abendstimmung 2023-09-06 20:16:03 timer_02_c01 06.09.2023 23:00:00
setstate Switch.Licht.Abendstimmung 2023-09-06 20:16:03 timer_03_c02 06.09.2023 23:00:00
setstate Switch.Licht.Abendstimmung 2023-09-06 20:16:03 timer_04_c02 07.09.2023 06:00:00


Per

Zuerst musst du dir klar werden, was die führende Größe ist: das manuelle Schalten, die Automatik oder beides gleichberechtigt nach letztem Event.
Aber dann bitte auch berücksichtigen, dass wenn ich manuell das Licht ein-/ausgeschaltet habe, im nächsten Moment die Automatik das wieder übersteuern kann.
Also zuerst in der Theorie klären, was man wann will.

Pnemenz

Grundsätzlich soll die Automatik schalten. Allerdings kommt es vor, dass ich das Licht auserhalb der Zeiten z.B. in der Nacht ausschalten oder untertags einschalten möchte. Also soll das manuelle Schalten die Automatik übersteuern. Solange, bis zum nächsten mal die Automatik schalten würde.
Beispiel:
Ich schalte das Licht händisch um 22:00 aus -> dann soll ab 06:00 in der Früh das Licht wieder eingeschalten werden solange der Hellikeitssensor unter dem Schwellwert ist.

Per

#3
Dann reicht es, wenn du die Helligkeitswerte nicht triggerst, sondern nur abfragst
[?lcn:HelligkeitsMax:d] < 660Eventuell musst du die manuellen Abfragen in separate Fälle vor die automatischen schreiben, aber das ist ja schnell ausprobiert.

is2late

Wie wäre es, wenn der Schalter (auch) einen Dummy aktivieren würde, der im DOIF abgefragt wird? Ist er on, DOIF für x Stunden inaktiv. Danach setzt es den Dummy auf off und wartet auf die nächste Dämmerung.
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

rabehd

( ([06:00-23:00] ) and [lcn:HelligkeitsMax:d] < 660 or [$SELF:button] eq "ON") Ich weiß nicht, wie die Regeln für AND und OR sind. Da müßte ich mich erst wieder einlesen.
Schon allein um es später wieder zu verstehen würdeich Klammern setzen.
( (([06:00-23:00] ) and [lcn:HelligkeitsMax:d] < 660) or [$SELF:button] eq "ON")
Auch funktionierende Lösungen kann man hinterfragen.

RalfRog

#6
Du schreibst
ZitatWas auch immer ich versuche, die Automatik schaltet, wenns finster ist, das Licht immer ein.

Was heisst das genau? Um 23 Uhr oder auch danach?

Setze doch mal die Bedingung im Zweig2 auf [23:01....]

Wenn das klappt kann ja weiter optimiert werden siehe z. B. @rabehd.
Vielleicht geht es wie von Damian in einem anderen Thread vorgeschlagen im Perl-Modus strukturierter.

FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder