[gelöst] wie ein Event aus Perl generieren um Eintrag ins Log zu erhalten?

Begonnen von Betonklotz, 26 November 2023, 15:05:00

Vorheriges Thema - Nächstes Thema

Betonklotz

Hallo Forum,

nachdem statistics nicht das gemacht hat was ich wollte, bastel ich mir gerade eine Funktion zur Auswertung von Temperatur- und Verbrauchsverläufen. Die Berechnungen an sich funktionieren auch und sind in (mehreren) readings am jeweiligen Gerät zu finden. Dank des Codeschnippsels für die (zeitlich gewichtete)Mittlewertberechnung war das auch kein großes Problem.
Mein Ziel ist es, die ständigen Berechnungen ohne Event auszuführen, zu jeder Stunde (sowie Tag und Monat) aber immer das Reading mit Event zu setzen und somit ins Log aufzunehmen. Leider wird aber kein Event generiert, egal ob ich die Reading am Device per Bulk, readingsSingleUpdate, oder setreading aktualisiere.
Der Aufruf der kleinen Perl Funktion erfolgt über ein at (und darin alignTime mit 59:59:50) kurz vor jeder vollen Stunde und die wird auch gestartet und die Readings aktualisiert. Ein Event bleibt aber aus...

Der Code der Funktion an sich:
sub updateWerte_hour($)
{
    # Loglevel für diese Funktion festlegen ab der Ausgaben ins (FHEM) Log erfolgen sollen
    my $log_level = 1;

    # Device bestimmen von dem der Funktionsaufruf ausgelöst wurde (=1. Übergabeparameter)
    my ($aufrufendes_device) = @_;
    # zugehörigen Hash des Devices bestimmen um auf dessen readings zugreifen zu können
    my ($aufrufendes_device_hash) = $defs{$aufrufendes_device};
    # Statusmeldung ins FHEM Log
    Log3 ($aufrufendes_device, $log_level, "Update der ausgewerteten Temperaturwerte an Gerät $aufrufendes_device durchführen");

    # bisher gespeicherte Temperaturwerte auslesen, bei Fehler wird ein default Wert angenommen
    my ($min_temp_hour) = ReadingsNum($aufrufendes_device, "min_temp_hour", "100.0");
    my ($max_temp_hour) = ReadingsNum($aufrufendes_device, "max_temp_hour", "-100.0");
    my ($avg_temp_hour) = ReadingsNum($aufrufendes_device, "avg_temp_hour", "0.0");
    my ($measured_temp) = ReadingsNum($aufrufendes_device, "measured-temp", "20.0");

    readingsBeginUpdate($aufrufendes_device_hash);
    my ($rv) = readingsBulkUpdate ($aufrufendes_device_hash, "min_temp_hour", $min_temp_hour, 1);
    $rv = readingsBulkUpdate ($aufrufendes_device_hash, "max_temp_hour", $max_temp_hour, 1);
    $rv = readingsBulkUpdate ($aufrufendes_device_hash, "avg_temp_hour", $avg_temp_hour, 1);
    readingsEndUpdate($aufrufendes_device_hash, 1);
    Log3 ($aufrufendes_device, $log_level, "Werte über Bulk war eben");

    $rv = readingsSingleUpdate ($aufrufendes_device_hash, "min_temp_hour", $min_temp_hour, 1);
    $rv = readingsSingleUpdate ($aufrufendes_device_hash, "max_temp_hour", $max_temp_hour, 1);
    $rv = readingsSingleUpdate ($aufrufendes_device_hash, "avg_temp_hour", $avg_temp_hour, 1);
    Log3 ($aufrufendes_device, $log_level, "Werte über Single war eben");

    {fhem "setreading $aufrufendes_device min_temp_hour $min_temp_hour"};
    {fhem "setreading $aufrufendes_device max_temp_hour $max_temp_hour"};
    {fhem "setreading $aufrufendes_device avg_temp_hour $avg_temp_hour"};
    Log3 ($aufrufendes_device, $log_level, "Werte über FHEM war eben");

    # Statusmeldung ins FHEM Log
    Log3 ($aufrufendes_device, $log_level, "Werte von $aufrufendes_device für Stundenwerte belegt, min=$min_temp_hour; max=$max_temp_hour; avg=$avg_temp_hour");
    #zurücksetzen
    readingsBeginUpdate($aufrufendes_device_hash);
    $rv = readingsBulkUpdate ($aufrufendes_device_hash, "min_temp_hour", $measured_temp, 0);
    $rv = readingsBulkUpdate ($aufrufendes_device_hash, "max_temp_hour", $measured_temp, 0);
    readingsEndUpdate($aufrufendes_device_hash, 0);
    # Statusmeldung ins FHEM Log
    Log3 ($aufrufendes_device, $log_level, "Werte von $aufrufendes_device wurden auf aktuellen Wert $measured_temp zurückgesetzt für neuen Durchlauf");
}

Die Readings der min,- max und avg Stundenwerte werden brav (hier um 13:59:50) gesetzt, das zugehörige Device:
define OG_Arbeitszimmer_Heizung_ CUL_HM 3367AD
attr OG_Arbeitszimmer_Heizung_ .mId 0095
attr OG_Arbeitszimmer_Heizung_ IOgrp VCCU:Virtual_HmUART_DG
attr OG_Arbeitszimmer_Heizung_ actCycle 000:15
attr OG_Arbeitszimmer_Heizung_ actStatus alive
attr OG_Arbeitszimmer_Heizung_ autoReadReg 4_reqStatus
attr OG_Arbeitszimmer_Heizung_ commStInCh off
attr OG_Arbeitszimmer_Heizung_ event-on-change-reading battery,batteryLevel,desired-temp,measured-temp,motorErr,state,min_.*,max_.*,avg_.*
attr OG_Arbeitszimmer_Heizung_ expert defReg,allReg,rawReg
attr OG_Arbeitszimmer_Heizung_ firmware 1.5
attr OG_Arbeitszimmer_Heizung_ group Heizung,OG
attr OG_Arbeitszimmer_Heizung_ icon sani_heating
attr OG_Arbeitszimmer_Heizung_ model HM-CC-RT-DN
attr OG_Arbeitszimmer_Heizung_ room Arbeitszimmer
attr OG_Arbeitszimmer_Heizung_ serialNr LEQ1333139
attr OG_Arbeitszimmer_Heizung_ subType thermostat
attr OG_Arbeitszimmer_Heizung_ webCmd getConfig:clear msgEvents:burstXmit
#   DEF        3367AD
#   FUUID      64bbea45-f33f-a38a-5d22-8bc46c117266420f
#   IODev      Virtual_HmUART_DG
#   LASTInputDev Virtual_HmUART_rack
#   MSGCNT     8781
#   NAME       OG_Arbeitszimmer_Heizung_
#   NR         198
#   NTFY_ORDER 48-OG_Arbeitszimmer_Heizung_
#   STATE      CMDs_done
#   TYPE       CUL_HM
#   Virtual_HmUART_DG_MSGCNT 4375
#   Virtual_HmUART_DG_RAWMSG 05000038B686103367AD0000000AA0DE0E0040
#   Virtual_HmUART_DG_RSSI -56
#   Virtual_HmUART_DG_TIME 2023-11-26 14:03:59
#   Virtual_HmUART_rack_MSGCNT 4406
#   Virtual_HmUART_rack_RAWMSG 05000034B686103367AD0000000AA0DE0E0040
#   Virtual_HmUART_rack_RSSI -52
#   Virtual_HmUART_rack_TIME 2023-11-26 14:03:59
#   channel_01 OG_Arbeitszimmer_Heizung__Weather
#   channel_02 OG_Arbeitszimmer_Heizung__Climate
#   channel_03 OG_Arbeitszimmer_Heizung__WindowRec
#   channel_04 OG_Arbeitszimmer_Heizung__Clima
#   channel_05 OG_Arbeitszimmer_Heizung__ClimaTeam
#   channel_06 OG_Arbeitszimmer_Heizung__remote
#   disableNotifyFn 1
#   eventCount 1033
#   lastMsg    No:B6 - t:10 s:3367AD d:000000 0AA0DE0E0040
#   protCondBurst forced_off
#   protLastRcv 2023-11-26 14:03:59
#   protRcv    4408 last_at:2023-11-26 14:03:59
#   protSnd    20 last_at:2023-11-25 15:23:03
#   protSndB   4 last_at:2023-11-19 17:46:20
#   protState  CMDs_done
#   rssi_Virtual_HmUART_DG cnt:8 min:-60 max:-56 avg:-58.37 lst:-60
#   rssi_at_Virtual_HmUART_DG cnt:4375 min:-69 max:-43 avg:-49.59 lst:-56
#   rssi_at_Virtual_HmUART_rack cnt:4406 min:-58 max:-50 avg:-53.37 lst:-52
#   OLDREADINGS:
#   READINGS:
#     2023-11-18 19:40:44   Activity        alive
#     2023-11-19 17:46:21   CommandAccepted yes
#     2023-07-22 16:51:06   D-firmware      1.5
#     2023-07-22 16:51:06   D-serialNr      LEQ1333139
#     2023-11-25 15:23:03   IODev           Virtual_HmUART_DG
#     2023-07-26 09:01:19   PairedTo        0xFDABCD
#     2023-07-22 16:53:44   R-backOnTime    10 s
#     2023-07-22 16:53:44   R-btnLock       off
#     2023-07-22 16:53:44   R-burstRx       on
#     2023-07-22 16:53:44   R-cyclicInfoMsg on
#     2023-07-22 16:53:44   R-cyclicInfoMsgDis 0
#     2023-07-22 16:53:44   R-globalBtnLock off
#     2023-07-22 16:53:44   R-localResDis   off
#     2023-07-22 16:53:44   R-lowBatLimitRT 2.1 V
#     2023-07-22 16:53:44   R-modusBtnLock  off
#     2023-07-22 16:53:44   R-pairCentral   0xFDABCD
#     2023-07-26 09:01:19   RegL_00.        00:00 01:01 02:01 09:01 0A:FD 0B:AB 0C:CD 0E:0A 0F:00 11:00 12:15 16:00 18:00 19:00 1A:00
#     2023-07-26 10:42:36   RegL_07.       
#     2023-11-26 14:03:59   actuator        0
#     2023-11-26 13:59:50   avg_temp_hour   21.7
#     2023-11-26 14:03:59   battery         ok
#     2023-11-26 14:03:59   batteryLevel    2.9
#     2023-08-19 11:39:33   cfgState        ok
#     2023-11-25 15:23:03   commState       CMDs_done
#     2023-11-26 14:03:59   desired-temp    20.0
#     2023-11-26 06:01:59   max_temp_day    22.2
#     2023-11-26 13:59:50   max_temp_hour   22.2
#     2023-11-26 06:01:59   max_temp_month  22.2
#     2023-11-26 14:03:59   measured-temp   22.2
#     2023-11-26 04:49:08   min_temp_day    19.1
#     2023-11-26 13:59:50   min_temp_hour   22.2
#     2023-11-26 04:49:08   min_temp_month  19.1
#     2023-11-26 14:03:59   motorErr        ok
#     2023-07-26 08:56:16   powerOn         2023-07-26 08:56:16
#     2023-07-26 08:56:16   recentStateType info
#     2023-11-25 15:23:03   state           CMDs_done
#     2023-11-25 15:23:03   time-request    -
#   helper:
#     HM_CMDNR   182
#     _98_statistics myStatDevice
#     cSnd       11FDABCD3367AD860428,11FDABCD3367AD860428
#     lastMsgTm  1701003839.2865
#     mId        0095
#     peerFriend -
#     peerOpt    -:thermostat
#     regLst     0
#     rxType     140
#     supp_Pair_Rep 0
#     cmds:
#       TmplKey    :no:1700332244.90095
#       TmplTs     1700332244.90095
#       cmdKey     0:1:0::OG_Arbeitszimmer_Heizung_:0095:01:
#       cmdLst:
#         assignHmKey noArg
#         burstXmit  noArg
#         clear      [({msgErrors}|msgEvents|rssi|attack|trigger|register|oldRegs|readings|all)]
#         deviceRename -newName-
#         fwUpdate   -filename- [-bootTime-]
#         getConfig  noArg
#         getDevInfo noArg
#         getRegRaw  (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
#         inhibit    [(on|{off})]
#         raw        -data- [...]
#         regBulk    -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
#         regSet     [(prep|{exec})] -regName- -value- [-peerChn-]
#         reset      noArg
#         sysTime    noArg
#         tplDel     -tplDel-
#         tplSet_0   -tplChan-
#         unpair     noArg
#       lst:
#         condition  slider,0,1,255
#         peer      
#         peerOpt   
#         tplChan   
#         tplDel    
#         tplPeer   
#       rtrvLst:
#         cmdList    [({short}|long)]
#         deviceInfo [({short}|long)]
#         list       [({normal}|full)]
#         param      -param-
#         reg        -addr- -list- [-peerChn-]
#         regList    noArg
#         regTable   noArg
#         regVal     -addr- -list- [-peerChn-]
#         saveConfig [-filename-]
#         tplInfo    noArg
#     expert:
#       def        1
#       det        1
#       raw        1
#       tpl        0
#     io:
#       flgs       0
#       newChn     +3367AD,00,01,00
#       nextSend   1701003839.38201
#       rxt        2
#       vccu       VCCU
#       p:
#         3367AD
#         00
#         01
#         00
#       prefIO:
#         Virtual_HmUART_DG
#     mRssi:
#       mNo        B6
#       io:
#         Virtual_HmUART_DG:
#           -50
#           -50
#         Virtual_HmUART_rack:
#           -52
#           -52
#     peerIDsH:
#     prt:
#       awake      0
#       bErr       0
#       brstWu     1
#       sProc      0
#       rspWait:
#     q:
#       qReqConf  
#       qReqStat  
#     role:
#       dev        1
#       prs        1
#     rssi:
#       Virtual_HmUART_DG:
#         avg        -58.375
#         cnt        8
#         lst        -60
#         max        -56
#         min        -60
#       at_Virtual_HmUART_DG:
#         avg        -49.5945142857142
#         cnt        4375
#         lst        -56
#         max        -43
#         min        -69
#       at_Virtual_HmUART_rack:
#         avg        -53.3722197004084
#         cnt        4406
#         lst        -52
#         max        -50
#         min        -58
#     shRegW:
#       07         04
#     shadowReg:
#     tmpl:
#
setstate OG_Arbeitszimmer_Heizung_ CMDs_done
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:51:06 .D-devInfo 00FFFF
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:51:06 .D-stc 59
setstate OG_Arbeitszimmer_Heizung_ 2023-11-18 19:30:44 .associatedWith OG_Arbeitszimmer_Heizung_,OG_Arbeitszimmer_Heizung__Clima,OG_Arbeitszimmer_Heizung__ClimaTeam,OG_Arbeitszimmer_Heizung__Climate,OG_Arbeitszimmer_Heizung__Weather,OG_Arbeitszimmer_Heizung__WindowRec,OG_Arbeitszimmer_Heizung__remote,OG_Arbeitszimmer_Heizung_
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 .protLastRcv 20231126140359
setstate OG_Arbeitszimmer_Heizung_ 2023-11-18 19:40:44 Activity alive
setstate OG_Arbeitszimmer_Heizung_ 2023-11-19 17:46:21 CommandAccepted yes
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:51:06 D-firmware 1.5
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:51:06 D-serialNr LEQ1333139
setstate OG_Arbeitszimmer_Heizung_ 2023-11-25 15:23:03 IODev Virtual_HmUART_DG
setstate OG_Arbeitszimmer_Heizung_ 2023-07-26 09:01:19 PairedTo 0xFDABCD
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-backOnTime 10 s
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-btnLock off
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-burstRx on
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-cyclicInfoMsg on
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-cyclicInfoMsgDis 0
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-globalBtnLock off
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-localResDis off
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-lowBatLimitRT 2.1 V
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-modusBtnLock off
setstate OG_Arbeitszimmer_Heizung_ 2023-07-22 16:53:44 R-pairCentral 0xFDABCD
setstate OG_Arbeitszimmer_Heizung_ 2023-07-26 09:01:19 RegL_00. 00:00 01:01 02:01 09:01 0A:FD 0B:AB 0C:CD 0E:0A 0F:00 11:00 12:15 16:00 18:00 19:00 1A:00
setstate OG_Arbeitszimmer_Heizung_ 2023-07-26 10:42:36 RegL_07.
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 actuator 0
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 13:59:50 avg_temp_hour 21.7
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 battery ok
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 batteryLevel 2.9
setstate OG_Arbeitszimmer_Heizung_ 2023-08-19 11:39:33 cfgState ok
setstate OG_Arbeitszimmer_Heizung_ 2023-11-25 15:23:03 commState CMDs_done
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 desired-temp 20.0
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 06:01:59 max_temp_day 22.2
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 13:59:50 max_temp_hour 22.2
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 06:01:59 max_temp_month 22.2
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 measured-temp 22.2
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 04:49:08 min_temp_day 19.1
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 13:59:50 min_temp_hour 22.2
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 04:49:08 min_temp_month 19.1
setstate OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 motorErr ok
setstate OG_Arbeitszimmer_Heizung_ 2023-07-26 08:56:16 powerOn 2023-07-26 08:56:16
setstate OG_Arbeitszimmer_Heizung_ 2023-07-26 08:56:16 recentStateType info
setstate OG_Arbeitszimmer_Heizung_ 2023-11-25 15:23:03 state CMDs_done
setstate OG_Arbeitszimmer_Heizung_ 2023-11-25 15:23:03 time-request -

Aber weder im Event Monitor
Events (Filter: .*Arbeitszimmer.*)   FHEM log  

2023-11-26 13:05:47 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 21.5
2023-11-26 13:05:47 CUL_HM OG_Arbeitszimmer_Heizung_ min_temp_hour: 21.5
2023-11-26 13:07:48 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 7
2023-11-26 13:10:39 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 8
2023-11-26 13:15:37 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 21.4
2023-11-26 13:15:37 CUL_HM OG_Arbeitszimmer_Heizung_ min_temp_hour: 21.4
2023-11-26 13:15:37 CUL_HM OG_Arbeitszimmer_Heizung_ avg_temp_hour: 21.6
2023-11-26 13:17:45 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 9
2023-11-26 13:20:42 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 11
2023-11-26 13:28:07 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 21.5
2023-11-26 13:31:11 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 21.6
2023-11-26 13:34:00 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 10
2023-11-26 13:36:34 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 21.7
2023-11-26 13:36:34 CUL_HM OG_Arbeitszimmer_Heizung_ max_temp_hour: 21.7
2023-11-26 13:36:34 CUL_HM OG_Arbeitszimmer_Heizung_ avg_temp_hour: 21.5
2023-11-26 13:36:34 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 9
2023-11-26 13:38:54 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 21.8
2023-11-26 13:38:54 CUL_HM OG_Arbeitszimmer_Heizung_ max_temp_hour: 21.8
2023-11-26 13:38:54 CUL_HM OG_Arbeitszimmer_Heizung_ avg_temp_hour: 21.6
2023-11-26 13:43:55 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 21.9
2023-11-26 13:43:55 CUL_HM OG_Arbeitszimmer_Heizung_ max_temp_hour: 21.9
2023-11-26 13:43:55 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 7
2023-11-26 13:46:36 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 22.0
2023-11-26 13:46:36 CUL_HM OG_Arbeitszimmer_Heizung_ max_temp_hour: 22.0
2023-11-26 13:46:36 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 4
2023-11-26 13:49:03 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 22.1
2023-11-26 13:49:03 CUL_HM OG_Arbeitszimmer_Heizung_ max_temp_hour: 22.1
2023-11-26 13:49:03 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 3
2023-11-26 13:51:15 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 1
2023-11-26 13:59:37 CUL_HM OG_Arbeitszimmer_Heizung_ measured-temp: 22.2
2023-11-26 13:59:37 CUL_HM OG_Arbeitszimmer_Heizung_ max_temp_hour: 22.2
2023-11-26 13:59:37 CUL_HM OG_Arbeitszimmer_Heizung_ avg_temp_hour: 21.7
2023-11-26 14:03:59 CUL_HM OG_Arbeitszimmer_Heizung__Clima ValvePosition: 0

noch im FHEM log
2023.11.26 13:05:47 3: Heizung_auswerten return value: 1
2023.11.26 13:15:37 3: Heizung_auswerten return value: 1
2023.11.26 13:28:07 3: Heizung_auswerten return value: 1
2023.11.26 13:30:44 3: HMinfo hm get:update :
2023.11.26 13:30:44 3: CUL_HM set ActionDetector update noArg
2023.11.26 13:30:44 3: CUL_HM set VCCU update noArg
2023.11.26 13:31:11 3: Heizung_auswerten return value: 1
2023.11.26 13:36:34 3: Heizung_auswerten return value: 1
2023.11.26 13:38:54 3: Heizung_auswerten return value: 1
2023.11.26 13:43:55 3: Heizung_auswerten return value: 1
2023.11.26 13:46:36 3: Heizung_auswerten return value: 1
2023.11.26 13:49:03 3: Heizung_auswerten return value: 1
2023.11.26 13:59:37 3: Heizung_auswerten return value: 1
2023.11.26 13:59:50 1: Update der ausgewerteten Temperaturwerte an Gerät OG_Arbeitszimmer_Heizung_ durchführen
2023.11.26 13:59:50 1: Werte über Bulk war eben
2023.11.26 13:59:50 1: Werte über Single war eben
2023.11.26 13:59:50 1: Werte über FHEM war eben
2023.11.26 13:59:50 1: Werte von OG_Arbeitszimmer_Heizung_ für Stundenwerte belegt, min=21.4; max=22.2; avg=21.7
2023.11.26 13:59:50 1: Werte von OG_Arbeitszimmer_Heizung_ wurden auf aktuellen Wert 22.2 zurückgesetzt für neuen Durchlauf

Und auch im Filelog nicht
define FileLog_OG_Arbeitszimmer_Heizung_ FileLog ./log/OG_Arbeitszimmer_Heizung_-%Y-%m.log OG_Arbeitszimmer_Heizung_:.*|OG_Arbeitszimmer_Heizung__Clima:.*
attr FileLog_OG_Arbeitszimmer_Heizung_ logtype text
attr FileLog_OG_Arbeitszimmer_Heizung_ nrarchive 3
attr FileLog_OG_Arbeitszimmer_Heizung_ room Arbeitszimmer
#   DEF        ./log/OG_Arbeitszimmer_Heizung_-%Y-%m.log OG_Arbeitszimmer_Heizung_:.*|OG_Arbeitszimmer_Heizung__Clima:.*
#   FD         8
#   FUUID      64bbea45-f33f-a38a-496b-e53bd9af32ba76d7
#   NAME       FileLog_OG_Arbeitszimmer_Heizung_
#   NOTIFYDEV  OG_Arbeitszimmer_Heizung__Clima,OG_Arbeitszimmer_Heizung_
#   NR         199
#   NTFY_ORDER 50-FileLog_OG_Arbeitszimmer_Heizung_
#   REGEXP     OG_Arbeitszimmer_Heizung_:.*|OG_Arbeitszimmer_Heizung__Clima:.*
#   STATE      active
#   TYPE       FileLog
#   currentlogfile ./log/OG_Arbeitszimmer_Heizung_-2023-11.log
#   logfile    ./log/OG_Arbeitszimmer_Heizung_-%Y-%m.log
#   READINGS:
#     2023-11-26 14:03:59   linesInTheFile  10616
#
setstate FileLog_OG_Arbeitszimmer_Heizung_ active
setstate FileLog_OG_Arbeitszimmer_Heizung_ 2023-11-26 14:03:59 linesInTheFile 10616

Das event on change lässt min, max und avg durch, das Filog hört auf alles (.*) was an Events ansteht. Bin ratlos warum kein Event generiert wird... Werde in 1 Stunde mal das event on change am Device löschen und bis 16Uhr warten um das noch als Fehlerquelle ausschließen zu können.
Freue mich aber über jeden Tipp, wie ich ein event ausgelöst bekomme, bzw. warum es unterdrückt wird.

betateilchen

Wenn das setreading wirklich ausgeführt wird, sollte auch ein event erzeugt werden.

Falls das nicht passiert, liegt das an dem device, in dem das reading gesetzt werden soll.
Also musst Du dort suchen.

In Deinem Code sind übrigens viel zu viele geschweifte Klammern, die da nicht hingehören:

    {fhem "setreading $aufrufendes_device min_temp_hour $min_temp_hour"};
    {fhem "setreading $aufrufendes_device max_temp_hour $max_temp_hour"};
    {fhem "setreading $aufrufendes_device avg_temp_hour $avg_temp_hour"};

Die geschweiften Klammern in diesem Teil sind komplett überflüssig (um nicht zu sagen: falsch).
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Betonklotz

Zitat von: betateilchen am 26 November 2023, 15:18:53Die geschweiften Klammern in diesem Teil sind komplett überflüssig (um nicht zu sagen: falsch).

Da hast du völlig Recht und habe ich entfernt. Es bringt nichts Perl zu sagen, dass eigentlich FHEM was an Perl übergeben möchte...
Wie auch immer: auch die Perl Befehle davor müssten ein Event erzeugen (wenn ich die Doku und "1" am Ende richtig verstehe).

Zitat von: betateilchen am 26 November 2023, 15:18:53Falls das nicht passiert, liegt das an dem device, in dem das reading gesetzt werden soll.
Also musst Du dort suchen.
Nur wie? Das ist ein einfaches Heizkörperthermostat. Und außer der Einschränkugn auf bestimtem Events ist das nichts spezielles (die jetzt raus sind, 16Uhr mal abwarten)..

betateilchen

Grundsätzlich kann man die Funktionen um readingsUpdate() zwar als user einsetzen, sie sind aber eher für Modulentwickler gedacht. In der 99_myUtils.pm oder an anderen code-Stellen würde ich immer mit setreading arbeiten.

Du kannst doch Deine Funktion mit einem beliebigen device testen.
Lege doch einfach mal einen dummy an "define d1 dummy" und rufe dann die Funktion mit d1 auf.


Noch ein Tipp, der nix mit Deinem Problem zu tun hat: anstatt Deiner variablen "$log_level" und dem Aufruf von Log3(...) könntest Du auch einfach mit Debug(auszugebender Text) arbeiten, das loggt automatisch im Loglevel 1 und ist für solche Testszwecke einfacher zu verwenden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Betonklotz

Anbei ein Mitschnitt aus dem Event Monitor inkl. FHEM Log.

Events (Filter: .*Arbeitszimmer.*)   FHEM log

2023-11-26 15:59:38 CUL_HM OG_Arbeitszimmer_Heizung actuator: 1
2023-11-26 15:59:38 CUL_HM OG_Arbeitszimmer_Heizung battery: ok
2023-11-26 15:59:38 CUL_HM OG_Arbeitszimmer_Heizung batteryLevel: 2.9
2023-11-26 15:59:38 CUL_HM OG_Arbeitszimmer_Heizung desired-temp: 20.0
2023-11-26 15:59:38 CUL_HM OG_Arbeitszimmer_Heizung measured-temp: 21.9
2023-11-26 15:59:38 CUL_HM OG_Arbeitszimmer_Heizung motorErr: ok
2023-11-26 15:59:38 CUL_HM OG_Arbeitszimmer_Heizung avg_temp_hour: 21.7
2023.11.26 15:59:50 1: Update der ausgewerteten Temperaturwerte an Gerät OG_Arbeitszimmer_Heizung durchführen
2023.11.26 15:59:50 1: Werte über Bulk war eben
2023.11.26 15:59:50 1: Werte über Single war eben
2023.11.26 15:59:50 1: Werte über FHEM war eben
2023.11.26 15:59:50 1: Werte von OG_Arbeitszimmer_Heizung für Stundenwerte belegt, min=21.4; max=22.0; avg=21.7
2023.11.26 15:59:50 1: Werte von OG_Arbeitszimmer_Heizung wurden auf aktuellen Wert 21.9 zurückgesetzt für neuen Durchlauf
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung min_temp_hour: 21.4
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung max_temp_hour: 22.0
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung avg_temp_hour: 21.7
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung min_temp_hour: 21.4
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung max_temp_hour: 22.0
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung avg_temp_hour: 21.7
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung min_temp_hour: 21.4
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung max_temp_hour: 22.0
2023-11-26 15:59:50 CUL_HM OG_Arbeitszimmer_Heizung avg_temp_hour: 21.7
Warum kommt kein Event am Device an? Ich verstehe es nicht und weiß nicht mehr wo ich suchen soll.
Heute Abend mit dem dummy, brauche erst einmal frische Luft und Gassi Runde im Halb-Hellen :-)

frank

füge mal direkt vor jedem  "setreading" cmd ein kurzes fhem-sleep ein.

fhem("sleep 0.1; setreading ...")
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Betonklotz

Zitat von: frank am 26 November 2023, 16:25:13füge mal direkt vor jedem  "setreading" cmd ein kurzes fhem-sleep ein.

fhem("sleep 0.1; setreading ...")

leider keine Besserung
2023-11-26 16:52:52 CUL_HM OG_Arbeitszimmer_Heizung measured-temp: 21.3
2023-11-26 16:52:52 CUL_HM OG_Arbeitszimmer_Heizung min_temp_hour: 21.3
2023-11-26 16:52:52 CUL_HM OG_Arbeitszimmer_Heizung avg_temp_hour: 21.7
2023-11-26 16:55:40 CUL_HM OG_Arbeitszimmer_Heizung ValvePosition: 10
2023-11-26 16:58:12 CUL_HM OG_Arbeitszimmer_Heizung ValvePosition: 11
2023.11.26 16:59:50 1: Update der ausgewerteten Temperaturwerte an Gerät OG_Arbeitszimmer_Heizung durchführen
2023.11.26 16:59:50 1: Werte über Bulk war eben
2023.11.26 16:59:50 1: Werte über Single war eben
2023.11.26 16:59:50 1: Werte über FHEM war eben
2023.11.26 16:59:50 1: Werte von OG_Arbeitszimmer_Heizung mit Notify für Stundenwerte belegt, min=21.3; max=21.9; avg=21.7
2023.11.26 16:59:50 1: Werte von OG_Arbeitszimmer_Heizung wurden auf aktuellen Wert 21.3 zurückgesetzt für neuen Durchlauf
2023-11-26 16:59:50 CUL_HM OG_Arbeitszimmer_Heizung max_temp_hour: 21.9

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Icinger

Naja, du führts ja
    readingsEndUpdate($aufrufendes_device_hash, 0);
aus. Sagst dem readingsEndUpdate also, dass es keine Event generieren soll. Da brauchst du dich nicht wundern!

$do_trigger
mandatory

Flag, ob entsprechende Events der einzelnen Readings getriggert werden sollen (Wert: 1). Wenn dieses Flag den Wert 0 oder undef besitzt, werden keine Events für alle Readings die seit dem Aufruf von readingsBeginUpdate() mittels readingsBulkUpdate() gesetzt wurden, erzeugt.

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Betonklotz

Keien Ahnung (und davon viel) was da los ist. Hatte das event-on-change-reading im Verdacht, aber da gab es um 17Uhr keine Verbesserung (hatte das komplett gelöscht). Setze ich es nun auf
(min_.*),(max_.*),(avg_.*),battery,batteryLevel,desired-temp,measured-temp,motorErr,state
und gebe auf der Kommandozeile ein setreading ein
setreading OG_Arbeitszimmer_Heizung min_temp_hour 21.1
so kommen die für min, max und avg auch durch und erzeugen wie gewünscht jeweils einen Logeintrag.

Führe ich das at über ein execNow testweise aus, so erhalten die Readings jeweils den aktuellen Zeitstempel im Device.
Habe dann testweise mal hartcoded 80 Grad in die Funktion reingeschrieben (anstatt $max_temp_hour) und siehe da: es gibt ein Event.


Nun fällt es mir auch wie Schuppen von den Augen: event-on-change-reading verhindert das. In der Perl Funktion gehe ich ja hin und lese den aktuellen Wert aus und schreibe ihn unmittelbar danach zurück. Aus FHEM Sicht ist der Wert unverändert, daher unterdrückt event-on-change-reading das zugehörige Event. Wer die Doku zu readingsSingleUpdate liest, sieht es auch: die "1" heißt nicht das ein Event kommt, sondern nur, dass keins unterdrückt wird. Ein nachgelagertes event-on-change-reading unterdrückt ein Event weiterhin, egal was im Perl Code steht.

Also Lösung für mein Problem: readings für die Werte (z.B- Temp_ohne_Log_...) und zusätzlich noch mal die gleichen Readings mit anderem Namen (z.b. Temp_mit_Log...). Die ohne Log werden für die Berechnugn genutzt und nicht in event-on-change-reading aufgenommen und fallen somit durchs Raster und erzeugen keine Events. zu jeder voleln Stunde werden die dann "umkopiert" von Temp_ohne_Log_... auf Temp_mit_Log..., wobei Temp_mit_Log... ins event-on-change-reading kommt. Kompliziert und nervig, aber ist dann so...
Also Thema gelöst, Anwenderfehler :-)
Wenn

Betonklotz

Zitat von: Icinger am 26 November 2023, 17:22:20Naja, du führts ja
    readingsEndUpdate($aufrufendes_device_hash, 0);
aus.
Ja, an einer Stelle wo ich halt kein Event haben  möchte. Davor aber mit 1, also Event seitens Funktion freigegeben :-)

betateilchen

Zitat von: Betonklotz am 26 November 2023, 17:42:14Also Lösung für mein Problem:

Alle diese dämlichen event-on-* Attribute rausschmeissen.
Die sind so unnötig wie Fußpilz und schaffen mehr neue Probleme als sie (vermeintlich) lösen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Betonklotz

Zitat von: betateilchen am 26 November 2023, 18:25:31Alle diese dämlichen event-on-* Attribute rausschmeissen.
Die sind so unnötig wie Fußpilz und schaffen mehr neue Probleme als sie (vermeintlich) lösen.
Taj, würde ich gerne. Problem: einige Devices sind extrem geschwätzig und erzeugen alle x Sekunden Events, obwohl das völliger Schwachsinn ist. Da muss man dann eher das Device austauschen. Oder eben mit den event-on- Dingen arbeiten (und leben und fluchen und auch mal fluchend einen Sonntag verbringen...)