Hysterese bei Lichtsensor erhöhen.

Begonnen von grossmaggul, 14 Dezember 2024, 16:54:26

Vorheriges Thema - Nächstes Thema

grossmaggul

Hallo,

ich habe hier seit ein paar Tagen einen Zigbee Lichtsensor installiert, über den mir bei Dämmerung bzw. unterhalb eines bestimmten Luxwertes, Licht eingeschaltet werden soll.
Dazu habe ich folgendes DOIF gebastelt:
Internals:
   .FhemMetaInternals 1
   .lastTimee_zigbee_lichtsensor_illuminance_lux 1734190285.1094
   DEF        ([14:00-01:00] and [zigbee_lichtsensor:illuminance_lux] < 45 and [home_status] eq "da") ( set wz.alle on) 
DOELSE
(set wz.alle off)
   FUUID      5c45c648-f33f-f310-8f13-7ea40590ff25e67e
   FVERSION   98_DOIF.pm:0.285460/2024-02-23
   MODEL      FHEM
   NAME       daemmerung
   NOTIFYDEV  global,home_status,zigbee_lichtsensor
   NR         131
   NTFY_ORDER 50-daemmerung
   STATE      cmd_1
   TYPE       DOIF
   VERSION    28546 2024-02-23 20:11:05
   eventCount 114
   .attraggr:
   .attrminint:
   READINGS:
     2024-12-14 16:46:30   Device          zigbee_lichtsensor
     2024-12-14 16:35:36   cmd             1
     2024-12-14 16:35:36   cmd_event       zigbee_lichtsensor
     2024-12-14 16:35:36   cmd_nr          1
     2024-12-14 16:46:30   e_zigbee_lichtsensor_illuminance_lux 0
     2024-12-14 16:35:36   mode            enabled
     2024-12-14 16:35:36   state           cmd_1
     2024-12-14 16:35:36   timer_01_c01    15.12.2024 14:00:00
     2024-12-14 16:35:36   timer_02_c01    15.12.2024 01:00:00
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       home_status:
         0:
           &STATE     ^home_status$
       zigbee_lichtsensor:
         0:
           illuminance_lux ^zigbee_lichtsensor$:^illuminance_lux:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'zigbee_lichtsensor','illuminance_lux') < 45 and ::InternalDoIf($hash,'home_status','STATE') eq "da"
   days:
   do:
     0:
       0           set wz.alle on
     1:
       0          set wz.alle off
   helper:
     NOTIFYDEV  global,home_status,zigbee_lichtsensor
     event      illuminance_lux: 0
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   zigbee_lichtsensor
     timerevent illuminance_lux: 0
     triggerDev zigbee_lichtsensor
     timerevents:
       illuminance_lux: 0
     timereventsState:
       illuminance_lux: 0
     triggerEvents:
       illuminance_lux: 0
     triggerEventsState:
       illuminance_lux: 0
   internals:
     all         home_status:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1734267600
     1          1734220800
   readings:
     all         zigbee_lichtsensor:illuminance_lux
   realtime:
     0          14:00:00
     1          01:00:00
   time:
     0          14:00:00
     1          01:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
   triggertime:
     1734220800:
       localtime  1734220800
       hash:
     1734267600:
       localtime  1734267600
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   alias      daemmerung
   devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1
   group      Licht
   icon       weather_sunset
   room       Module->Licht,System->Logik,Zimmer->Wohnzimmer
   verbose    0

Nun habe ich aber das Problem, daß wenn der eingestellte Luxwert erreicht ist, das Licht eine kurze Zeit immer wieder ein und ausschaltet. Beobachte ich den Luxwert, kann ich sehen, daß der Luxwert schwankt, sprich er springt eine Zeit hin und her.
Vorher hatte ich einen Selbstbau Homematic Lichtsensor verbaut, der war aber wohl so träge, daß die Schwelle da nicht ins Gewicht fällt.
Ich habe schon versucht das event-min-intervall von "daemmerung" auf 120 Sekunden zu setzen, brachte aber nichts

Wo könnte ich denn da ansetzen um die Hysterese zu beeinflussen?


gm

FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

Damian

Trägheit kannst du mit dem Attribut wait realisieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

grossmaggul

Ah, danke, manchmal hat man Tomaten auf den Augen.:-}
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

Wernieman

Ich weiß nicht, wie es mit DOIF geht, aber zum einschalten einen höheren Wert als fürs ausschalten definieren.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

grossmaggul

Es wird ja nur bei einem bestimmten Lux Wert eingeschaltet, abgeschaltet wird zu einer bestimmten Uhrzeit.
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

tobi01001

Zitat von: grossmaggul am 15 Dezember 2024, 16:37:04Es wird ja nur bei einem bestimmten Lux Wert eingeschaltet, abgeschaltet wird zu einer bestimmten Uhrzeit.

Das steht aber so nicht im DOIF:

([14:00-01:00] and [zigbee_lichtsensor:illuminance_lux] < 45 and [home_status] eq "da") ( set wz.alle on)
DOELSE
(set wz.alle off)

Wenn hier zwischen 14 und 01 jemand zu hause ist und die Helligkeit entsprechend sinkt, geht das Licht an. Allerdings hast du zum Ausschalten einen generischen ELSE Zweig der immer dann aufgerufen wird, wenn der erste schonmal ausgefürht wurde und dann entweder:
- außerhalb Zeitfenster
- Helligkeit > 44
- niemand zu hause

Du könntest den Lichtsensor als dem ELSE nehmen indem du ein DOELSIF setzt (geht bestimmt auch einfacher...):
DOELSIF
 ([01:00-14:00] or [home_status] ne "da") ( set wz.alle off)
DOELSE


FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Damian

Zitat von: tobi01001 am 16 Dezember 2024, 08:25:07
Zitat von: grossmaggul am 15 Dezember 2024, 16:37:04Es wird ja nur bei einem bestimmten Lux Wert eingeschaltet, abgeschaltet wird zu einer bestimmten Uhrzeit.

Das steht aber so nicht im DOIF:

([14:00-01:00] and [zigbee_lichtsensor:illuminance_lux] < 45 and [home_status] eq "da") ( set wz.alle on)
DOELSE
(set wz.alle off)

Wenn hier zwischen 14 und 01 jemand zu hause ist und die Helligkeit entsprechend sinkt, geht das Licht an. Allerdings hast du zum Ausschalten einen generischen ELSE Zweig der immer dann aufgerufen wird, wenn der erste schonmal ausgefürht wurde und dann entweder:
- außerhalb Zeitfenster
- Helligkeit > 44
- niemand zu hause

Du könntest den Lichtsensor als dem ELSE nehmen indem du ein DOELSIF setzt (geht bestimmt auch einfacher...):
DOELSIF
 ([01:00-14:00] or [home_status] ne "da") ( set wz.alle off)
DOELSE



oder einfach ohne DOELSE als DOELSEIF die Negation des ersten DOIF-Zweigs mit Hysterese (hier z. B von einem Grad):

DOELSIF
 ([01:00-14:00] or [home_status] ne "da" or [zigbee_lichtsensor:illuminance_lux] >= 46) ( set wz.alle off)

Allerdings je nach Schwankung der Temperatur kann durchaus auch die Trägkeit mit wait gut funktionieren.

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

grossmaggul

ZitatDas steht aber so nicht im DOIF:
Ich habe das etwas verkürzt dargestellt, als Antwort auf Wernieman. Die anderen Bedingungen haben ja auf die Hysterese keine Auswirkung.

ZitatDu könntest den Lichtsensor als dem ELSE nehmen indem du ein DOELSIF setzt (geht bestimmt auch einfacher...):
Was wäre da jetzt der Vorteil zu meiner generischen Lösung? Dadurch habe ich doch immer noch nur einen Wert auf den ich reagiere.

Zitatoder einfach ohne DOELSE als DOELSEIF die Negation des ersten DOIF-Zweigs mit Hysterese (hier z. B von einem Grad):
Ja, so könnte man das natürlich auch machen, wobei es hier nicht um Temperatur geht.;)

Ich werde das jetzt mal mit wait testen und schauen ob das wie gewünscht funktioniert, wäre für mich die einfachste Lösung. Mein Motto, in der Kürze liegt die Würze.;)
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

Damian

Da habe ich wohl den Kontext der Aufgabe aus den Augen verloren :)

Ich mache so etwas mit der Auswertung der aktuellen Leistung der PV-Anlage für die Beschattung. Gerade bei Wolken gibt es starke Schwankungen und da hat sich bei mir ein wait sehr nützlich gemacht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tobi01001

Zitat von: grossmaggul am 16 Dezember 2024, 12:52:58
ZitatDas steht aber so nicht im DOIF:
Ich habe das etwas verkürzt dargestellt, als Antwort auf Wernieman. Die anderen Bedingungen haben ja auf die Hysterese keine Auswirkung.

Ich habe das nicht auf die Antwort bezogen, sondern auf das List des DOIF.
Das DOIF triggert im DOIF Zweig auf
  • Zeit - erste Angabe
  • Helligkeit < 45 - zweite Angabe
  • jemand "da" - dritte Angabe
Jedes Event der 3 Bedingungen wird:
  • einschalten wenn alle 3 gleichzeitig wahr sind
  • ausschalten wenn eines davaon nicht wahr ist, weil hier nur DOELSE steht. Also mit jedem mal wo z.B. die Helligkeit nochmal über 44 geht - daher wahrscheinlich auch dein anfängliches flackern.
Wenn gesichert ist, dass dann bis 01:00 Uhr die Helligkeit kleiner 45 bleibt, wird das auch mit wait funktionieren. Wenn man das Ausschalten zeitlich begrenzt oder einfach um 01:00 direkt ausschaltet, ist man zumindest sicher dass es zwischenzeitlich nicht durch "Helligkeitsschwankung" ausgeschaltet wird.

LG
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

grossmaggul

O.K., da hast Du sicher recht.
Bisher hat das allerdings immer geklappt, erst seit ich den Zigbee-Lichtsensor habe, flackert es.

ZitatWenn gesichert ist, dass dann bis 01:00 Uhr die Helligkeit kleiner 45 bleibt, wird das auch mit wait funktionieren.
Das ist schon ziemlich gesichert, denn es handelt sich ja um die Außenhelligkeit und da wüsste ich nicht, daß die in unseren Breiten nachts über 45 Lux geht.;-)
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

Nobbynews

Zitat von: grossmaggul am 16 Dezember 2024, 17:21:59in unseren Breiten nachts über 45 Lux geht.;-)
Außer bei Gewitter. Ein Blitz kann da schon so hell sein.
Kommt auf die Empfindlichkeit des Sensors an.

tobi01001

Zitat von: grossmaggul am 16 Dezember 2024, 17:21:59O.K., da hast Du sicher recht.
Bisher hat das allerdings immer geklappt, erst seit ich den Zigbee-Lichtsensor habe, flackert es.

ZitatWenn gesichert ist, dass dann bis 01:00 Uhr die Helligkeit kleiner 45 bleibt, wird das auch mit wait funktionieren.
Das ist schon ziemlich gesichert, denn es handelt sich ja um die Außenhelligkeit und da wüsste ich nicht, daß die in unseren Breiten nachts über 45 Lux geht.;-)
Ja, eine natürliche Lichtquelle hätte ich hier auch nicht gesehen (außer Nobby's Blitz vll). Kenne ja auch deine Installation nicht. Ich dachte eher an Taschenlampe, Straßenlampe, Auto, Fahrrad, Handy oder wz.alle selbst.

Aber die sind dann wohl auch so kurz, dass der wait timer das abfängt.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

romakrau

Vielleicht hilft es dir wenn ich beschreibe wie ich das Problem gelöst habe. Zerlege dein DOIF in die einzelnen Bedingungen z.B. Helligkeit:
(([15:00-23:00] and [Lichtsensor:lux] < 4) or ([{ReadingsVal("Mond","CivilTwilightEvening","23:00")}])) (set Nacht on) DOELSEIF ([{ReadingsVal("Mond","CivilTwilightMorning","10:00")}-10:00] and [Lichtsensor:lux] >2 ) (set Nacht off)
Dann kann kannst Du flexibeler reagieren z.B. mit if Nacht und .....

Gruss Roman

grossmaggul

Danke, ich habe jetzt einen passenden wait Wert ermittelt bzw. eingetragen und es läuft wieder so wie es soll, bzw. wie ich es mir vorstelle.:)
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED