Hallo Zusammen,
über die Zeit haben sich hier mehrere Helligkeitssensoren angesammelt. Jeder hat unterschiedliche Kernkompetenzen (gerade im Dämmerungsbereich).
Jetzt würde ich diese gerne in einem Dummy mit entprechenden Userreadings zusammenfassen. Soweit kein Problem.
Dh. ich erstelle ein Dummy für die Morgenstunden, eins für die Abendstunden. Im "state" soll dann der jeweils höchste oder niedrigste Wert stehen. Wie bewerkstelligt man so etwas ?
dummy + userReadings gehen gar nicht gut zusammen...
Würde eher was nehmen, das regelmäßig triggert (wie z.B. Twilight oder Astro) und da dann _ein_ userReadings anlegen, das sich den für den jeweiligen Zeitpunkt richtigen Wert zusammenstellt (und ausfiltert, was zu alt ist, usw. ...).
Hi,
ok, im Astro oder Twilight-Modul könnte ich das auch machen, klar, ein Dummy weniger.
Brauche aber dennoch ein Schubs wie man das mit dem ausfiltern des Userreadings macht......
Zitat von: Bartimaus am 14 Januar 2022, 12:09:43
ok, im Astro oder Twilight-Modul könnte ich das auch machen, klar, ein Dummy weniger.
Hier geht es (ausnahmsweise) nicht um weniger, weil ein dummy schlicht mangels interner Events/Reading-Aktualisierungen dafür einfach nicht gut geeignet ist...
Zitat
Brauche aber dennoch ein Schubs wie man das mit dem ausfiltern des Userreadings macht......
Was ist "ausfiltern"?
Falls es der trigger für userReadings sein soll: Man nehme ein beliebiges Reading, das regelmäßig aktualisiert wird. Bei Twilight wäre das z.B. "azimuth", schreibe das hinter den gewünschten Reading-Namen, Doppelpunkt dazwischen und ein .* hinterher, fertig die Laube.
Falls es um den Perl-Code geht: Ohne input kein output...
Ok,
Userreadings in myT gespeichert:
Internals:
DEF 50 6
FUUID 5c724473-f33f-dcb4-3948-0357685cc9be7996
FVERSION 59_Twilight.pm:0.250670/2021-10-13
INDOOR_HORIZON 3
NAME myT
NR 49
NTFY_ORDER 50-myT
STATE 100
SUNPOS_OFFSET 300
TYPE Twilight
WEATHER_CORRECTION 0
WEATHER_HORIZON 3
READINGS:
2022-01-14 12:50:08 1wire_Lux 852.88
2022-01-14 12:50:08 1wire_Multisensor 220.933
2022-01-14 12:50:08 HM_Lux 197
2022-01-14 12:50:08 WeatherScreenPro 5595.1
2022-01-14 09:05:09 aktEvent sr_weather
2022-01-14 12:50:08 azimuth 181.35
2022-01-14 12:50:08 compasspoint south
2020-09-25 06:32:55 condition 0
2022-01-14 12:50:08 elevation 17.92
2022-01-14 09:05:09 horizon 3
2022-01-14 09:05:09 light 6
2022-01-14 09:05:09 nextEvent ss_weather
2022-01-14 09:05:09 nextEventTime 16:23:31
2022-01-14 00:00:07 sr 08:40:50
2022-01-14 00:00:07 sr_astro 06:34:24
2022-01-14 00:00:07 sr_civil 07:55:57
2022-01-14 00:00:07 sr_indoor 09:05:09
2022-01-14 00:00:07 sr_naut 07:14:13
2022-01-14 00:00:07 sr_weather 09:05:09
2022-01-14 00:00:07 ss 16:47:51
2022-01-14 00:00:07 ss_astro 18:54:21
2022-01-14 00:00:07 ss_civil 17:32:45
2022-01-14 00:00:07 ss_indoor 16:23:31
2022-01-14 00:00:07 ss_naut 18:14:29
2022-01-14 00:00:07 ss_weather 16:23:31
2022-01-14 09:05:09 state 6
2022-01-14 12:50:08 twilight 100
2022-01-14 12:50:08 twilight_weather 100
TIMER:
myT_Midnight:
HASH myT
MODIFIER Midnight
NAME myT_Midnight
myT_ss:
HASH myT
MODIFIER ss
NAME myT_ss
myT_ss_astro:
HASH myT
MODIFIER ss_astro
NAME myT_ss_astro
myT_ss_civil:
HASH myT
MODIFIER ss_civil
NAME myT_ss_civil
myT_ss_indoor:
HASH myT
MODIFIER ss_indoor
NAME myT_ss_indoor
myT_ss_naut:
HASH myT
MODIFIER ss_naut
NAME myT_ss_naut
myT_ss_weather:
HASH myT
MODIFIER ss_weather
NAME myT_ss_weather
myT_sunpos:
HASH myT
MODIFIER sunpos
NAME myT_sunpos
TW:
sr:
DEG 0
LIGHT 4
NAME sr
NAMENEXT sr_indoor
STATE 4
SWIP 0
TIME 1642146050.03
sr_astro:
DEG -18
LIGHT 1
NAME sr_astro
NAMENEXT sr_naut
STATE 1
SWIP 0
TIME 1642138464
sr_civil:
DEG -6
LIGHT 3
NAME sr_civil
NAMENEXT sr
STATE 3
SWIP 0
TIME 1642143357.02
sr_indoor:
DEG 3
LIGHT 5
NAME sr_indoor
NAMENEXT sr_weather
STATE 5
SWIP 0
TIME 1642147509.04
sr_naut:
DEG -12
LIGHT 2
NAME sr_naut
NAMENEXT sr_civil
STATE 2
SWIP 0
TIME 1642140853.01
sr_weather:
DEG 3
LIGHT 6
NAME sr_weather
NAMENEXT ss_weather
STATE 6
SWIP 0
TIME 1642147509.05
ss:
DEG 0
LIGHT 3
NAME ss
NAMENEXT ss_civil
STATE 9
SWIP 0
TIME 1642175271.97
ss_astro:
DEG -18
LIGHT 0
NAME ss_astro
NAMENEXT sr_astro
STATE 12
SWIP 0
TIME 1642182861
ss_civil:
DEG -6
LIGHT 2
NAME ss_civil
NAMENEXT ss_naut
STATE 10
SWIP 0
TIME 1642177965.98
ss_indoor:
DEG 3
LIGHT 4
NAME ss_indoor
NAMENEXT ss
STATE 8
SWIP 0
TIME 1642173811.96
ss_naut:
DEG -12
LIGHT 1
NAME ss_naut
NAMENEXT ss_astro
STATE 11
SWIP 0
TIME 1642180469.99
ss_weather:
DEG 3
LIGHT 5
NAME ss_weather
NAMENEXT ss_indoor
STATE 7
SWIP 0
TIME 1642173811.95
helper:
extWeather:
Attributes:
room Allgemein
stateFormat twilight
userReadings 1wire_Lux {ReadingsNum("1wire_Lux","Lux",0)},
1wire_Multisensor {ReadingsNum("1wire_Multisensor","Helligkeit",0)},
HM_Lux {ReadingsNum("Bewegungsmelder","brightness",0)},
WeatherScreenPro {ReadingsNum("WeatherScreenPro","luminosity",0)}
Wie man sieht, wird mir im "STATE" des Moduls derzeit immer der Wert des Readings "twilight" angezeigt.. momentan halt "100".
Dort soll jetzt aber der größte Wert der 4 verschiedenen Userreadings angezeigt werden.
Neee...
Eher so:
userReadings myLux:azimuth.* {maxNum(ReadingsNum('1wire_Lux','Lux',0)},ReadingsNum('1wire_Multisensor','Helligkeit',0),ReadingsNum('Bewegungsmelder','brightness",0),ReadingsNum('WeatherScreenPro','luminosity',0))}
Was in STATE erscheint, kann man mit stateFormat beeinflussen, und deine Reading-Namen würde ich überdenken, wo sie selbst gewählt sind...
Erstmal danke für den Tip.
Die Funktion "maxNum" war scheinbar das von mir gewünschte.
Erzeuge mir jetzt ein Userreading "MaxLux", welches den maximalen Wert aus den 4 Devices liefert. Sehr schön.
Zitat von: Bartimaus am 14 Januar 2022, 13:58:26
Erzeuge mir jetzt ein Userreading "MaxLux", welches den maximalen Wert aus den 4 Devices liefert. Sehr schön.
...hoffentlich mit trigger...?
Äh, ja, aktualisiert sich automatisch.... oder was meinst Du ?
Bzw. aktualisiert sich im Intervall (300s) von Twilight. Dabei werden die aktuellen Werte der Devices abgerufen.
Zitat von: Bartimaus am 14 Januar 2022, 14:50:38
Äh, ja, aktualisiert sich automatisch.... oder was meinst Du ?
Sowas:
userReadings myLux:azimuth.* {...}
Zitat
Bzw. aktualisiert sich im Intervall (300s) von Twilight. Dabei werden die aktuellen Werte der Devices abgerufen.
...mir ist schon klar, dass sich das _mindestens_ im Intervall von Twilight aktualisiert. Falls aber ein externer "Wetterdienst" dran hängt, kann das auch öfter der Fall sein. "trigger" begrenzt die Aktualisierung des userReadings, es wird dann _nur noch zusammen mit dem "trigger" ausgewertet, wenn der (mit Event) aktualisiert wird_.
Daher ist "trigger" mAn. heutzutage nicht mehr "optional", sondern _zwingend_ mit anzugeben.
Ach, das war damit gemeint.
Habe nur lokale Sensoren dran. 3/4 triggern alle 5min, Nr. 4 triggert öfter, ist aber die "Schlafmütze" unter den Helligkeitssensoren, heisst, wacht meist erst mit Sonnenaufgang auf. Mir geht es aber um die Dämmerungswerte VOR Sonnenaufgang.
Aber das teste ich mal so wie Du das codiert hast...
OK, immer noch eine Verständnislücke:
userReadings interessieren sich nicht für das, was "draußen in der großen weiten Welt" passiert. Es muss ein Event an dem Device stattfinden, an dem sie sind, und (ggf.) der trigger muss passen.
Daher
- geht sowas auch nicht (ohne Verrenkungen) mit einem dummy;
- ist es völlig wurst, wie oft deine Sensoren triggern, (solange sie nicht indirekt einen update an Twilight anschubsen, was _in Ausnahmefällen_ der Fall sein kann).
Ja, in der Tat. Gebe ich zu. ::)
Also, das Event in dem Device <myT> was triggert, ist lt. Eventmonitor "azimuth". Das passiert aber im Intervall (300) von myT. Weitere Readings die ich aus dem Web oder woher auch immer in myT speichere, habe ich nicht.
Allerdings aktualisieren sich meine Sensoren trotz 300s Interval auch nicht alle exakt zeitgleich. Somit kann ja der Abfragewert im Userreading unterschiedlich alt sein...Kann man das denn auch abfangen ?
Zitat von: Bartimaus am 14 Januar 2022, 16:03:41
Somit kann ja der Abfragewert im Userreading unterschiedlich alt sein...Kann man das denn auch abfangen ?
Zitat von: Beta-User am 14 Januar 2022, 11:28:26
[...] und da dann _ein_ userReadings anlegen, das sich den für den jeweiligen Zeitpunkt richtigen Wert zusammenstellt (und ausfiltert, was zu alt ist, usw. ...).
Geht. In vielerlei Varianten, auch mit gleitenden Mittelwerten, ... => Perl lernen, anfangen bei https://wiki.fhem.de/wiki/99_myUtils_anlegen ;) .