FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stoniii am 03 August 2023, 13:47:28

Titel: Helligkeitssensoren Durchschnittswerte berechnen
Beitrag von: stoniii am 03 August 2023, 13:47:28
Hallo,

ich habe 3 Helligkeitssensoren aus welchen ich den Durchschnittswert berechnen möchte. Dies soll jedes mal erfolgen, wenn einer der 3 Sensoren einen neuen Wert übermittelt.
Ich habe es aktuell in einen DOIF hinbekommen die Berechnung durchzuführen, jedoch klappt dies aktuell nur wenn ich es manuell ausführe.

Kann mir jemand bei meinen Problem bitte weiterhelfen? ;)

define lichtsensor DOIF {my $d= (ReadingsNum("deCONZ_HUESensor2","lux",0)+ReadingsNum("Conbee_HUESensor7","lux",0)+ReadingsNum("Conbee_HUESensor8","lux",0))/3;;;; fhem("setreading lichtsensor, lux $d")}
attr lichtsensor addStateEvent 1
attr lichtsensor alias lichtsensor
attr lichtsensor event-on-change-reading .*
attr lichtsensor room 0.0.0_Logik,0.0.1_Test
attr lichtsensor stateFormat lux LUX
#   DEF        {my $d= (ReadingsNum("deCONZ_HUESensor2","lux",0)+ReadingsNum("Conbee_HUESensor7","lux",0)+ReadingsNum("Conbee_HUESensor8","lux",0))/3;; fhem("setreading lichtsensor, lux $d")}
#   FUUID      64b2da3f-f33f-d67e-1b0b-0856d8166bf2e558
#   MODEL      Perl
#   NAME       lichtsensor
#   NOTIFYDEV  global
#   NR         330
#   NTFY_ORDER 50-lichtsensor
#   STATE      29250.3333333333 LUX
#   TYPE       DOIF
#   VERSION    27262 2023-02-21 19:36:39
#   eventCount 9
#   READINGS:
#     2023-08-03 13:41:14   block_01        executed
#     2023-08-03 13:41:14   lux             29250.3333333333
#     2023-08-03 13:31:06   mode            enabled
#     2023-08-03 13:31:06   state           initialized
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#   condition:
#     0          my $d= (ReadingsNum("deCONZ_HUESensor2","lux",0)+ReadingsNum("Conbee_HUESensor7","lux",0)+ReadingsNum("Conbee_HUESensor8","lux",0))/3;; fhem("setreading lichtsensor, lux $d")
#   helper:
#     NOTIFYDEV  global
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#   perlblock:
#     0          block_01
#   uiState:
#   uiTable:
#
setstate lichtsensor 29250.3333333333 LUX
setstate lichtsensor 2023-08-03 13:41:14 block_01 executed
setstate lichtsensor 2023-08-03 13:41:14 lux 29250.3333333333
setstate lichtsensor 2023-08-03 13:31:06 mode enabled
setstate lichtsensor 2023-08-03 13:31:06 state initialized

Titel: Aw: Helligkeitssensoren Durchschnittswerte berechnen
Beitrag von: rischbiter123 am 03 August 2023, 14:25:46
Moin,
bin zwar momentan etwas aus der Materie raus, aber ich würde sagen, da fehlt mindestens ein DOELSE in der Definition. Und eventuell auch das attr Do always.
LG
Andreas
Titel: Aw: Helligkeitssensoren Durchschnittswerte berechnen
Beitrag von: betateilchen am 03 August 2023, 15:38:29
Erstens ist das hier das falsche Forum für Fragen zu DOIF.
Zweitens frage ich mich, warum man das mit DOIF machen möchte.
Drittens frage ich mich, was denn die Bedingung (immerhin heißt das Ding ja DOIF) ist, aufgrund derer irgendwas passieren soll. Prinzipiell sehe ich da nur einen Ausführungsteil.

Zitat von: rischbiter123 am 03 August 2023, 14:25:46aber ich würde sagen, da fehlt mindestens ein DOELSE in der Definition

Das braucht man m.E. nur, wenn es auch einen alternativen Ausführungszweig gibt.

Und das event-on-bla... in dem DOIF device würde ich grundsätzlich weglassen.
Titel: Aw: Helligkeitssensoren Durchschnittswerte berechnen
Beitrag von: Damian am 03 August 2023, 18:31:25
Deine DOIF-Definition besitzt keinen einzigen Trigger, daher kann das Modul nicht wissen, wann es etwas berechnen soll.

Triggerangaben werden beim DOIF in eckigen Klammen gesetzt.

statt ReadingsNum("deCONZ_HUESensor2","lux",0) muss du angeben [deCONZ_HUESensor2:lux:d,0] bei den anderen Reading gilt das gleiche.

Einfacher kannst du Durchschnitt mit Aggregatsfunktion berechnen: https://fhem.de/commandref_DE.html#DOIF_aggregation

z. B.

define lichtsensor DOIF
attr lichtsensor event_Readings lux:[#average:"^deCONZ_HUESensor":lux]