WARNING: Use of uninitialized value in string eq at ./FHEM/10_CUL_HM.pm line 815

Begonnen von vbs, 04 April 2019, 22:08:48

Vorheriges Thema - Nächstes Thema

vbs

Ich hab mir einen von TomMajor's DIY-Sensoren (https://github.com/TomMajor/SmartHome/tree/master/PCB/Sensor_PLHT) gebaut und er funktioniert auch soweit. Jedoch bekomme ich immer folgende Warning im Log, wenn "getConfig" verarbeitet wird:
019.04.03 23:01:43.874 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/10_CUL_HM.pm line 8150.
2019.04.03 23:01:43.874 1: stacktrace:
2019.04.03 23:01:43.874 1:     main::__ANON__                      called by ./FHEM/10_CUL_HM.pm (8150)
2019.04.03 23:01:43.874 1:     main::CUL_HM_getRegFromStore        called by ./FHEM/10_CUL_HM.pm (8363)
2019.04.03 23:01:43.875 1:     main::CUL_HM_updtRegDisp            called by ./FHEM/10_CUL_HM.pm (3437)
2019.04.03 23:01:43.875 1:     main::CUL_HM_parseCommon            called by ./FHEM/10_CUL_HM.pm (1526)
2019.04.03 23:01:43.875 1:     main::CUL_HM_Parse                  called by fhem.pl (3893)
2019.04.03 23:01:43.875 1:     main::Dispatch                      called by ./FHEM/00_HMUARTLGW.pm (1463)
2019.04.03 23:01:43.875 1:     main::HMUARTLGW_Parse               called by ./FHEM/00_HMUARTLGW.pm (1566)
2019.04.03 23:01:43.875 1:     main::HMUARTLGW_Read                called by fhem.pl (3697)
2019.04.03 23:01:43.875 1:     main::CallFn                        called by fhem.pl (744)


So sieht mein Device aus:

Historie löschen
Internals:
   DEF        A5A502
   FUUID      5ca3923e-f33f-af31-f00a-6d4e5662fbab03bf
   IODev      sys_culHm
   LASTInputDev sys_culHm
   MSGCNT     65
   NAME       HM_A5A502
   NOTIFYDEV  global
   NR         630
   NTFY_ORDER 50-HM_A5A502
   STATE      T: 18.8 P: 1088.0 H: 88 B: 88000 I: 0
   TYPE       CUL_HM
   chanNo     01
   lastMsg    No:01 - t:70 s:A5A502 d:<VCCUID> 00BC2A8058000157C0000D36
   protCmdDel 3
   protLastRcv 2019-04-03 23:02:25
   protRcv    55 last_at:2019-04-03 23:02:25
   protResnd  12 last_at:2019-04-03 23:01:46
   protResndFail 1 last_at:2019-04-03 22:29:47
   protSnd    46 last_at:2019-04-03 23:01:44
   protState  CMDs_pending
   rssi_at_sys_culHm cnt:65 min:-68 max:-56 avg:-61.13 lst:-60
   rssi_sys_culHm cnt:10 min:-79 max:-72 avg:-76.1 lst:-77
   sys_culHm_MSGCNT 65
   sys_culHm_RAWMSG 0501003C018470A5A502<VCCUID>00BC2A8058000157C0000D36
   sys_culHm_RSSI -60
   sys_culHm_TIME 2019-04-03 23:02:25
   READINGS:
     2019-04-03 22:32:32   Activity        alive
     2019-04-03 22:31:00   CommandAccepted yes
     2019-04-03 22:32:32   D-firmware      1.2
     2019-04-03 22:32:32   D-serialNr      UNISENS001
     2019-04-03 23:01:43   PairedTo        <VCCUID>
     2019-04-03 22:31:13   R-pairCentral   <VCCUID>
     2019-04-03 23:01:43   RegL_00.         00:00 05:40 0A:F1 0B:55 0C:44 12:15 14:06 20:02 21:58 22:00 23:00
     2019-04-03 23:02:25   batVoltage      3.38
     2019-04-03 23:02:25   battery         ok
     2019-04-03 23:02:25   brightness      88000
     2019-04-03 23:02:25   digitalInput    0
     2019-04-03 23:02:25   humidity        88
     2019-04-03 22:50:17   powerOn         2019-04-03 22:50:17
     2019-04-03 23:02:25   pressure        1088.0
     2019-04-03 23:01:44   recentStateType info
     2019-04-03 23:02:25   state           T: 18.8 P: 1088.0 H: 88 B: 88000 I: 0
     2019-04-03 23:02:25   temperature     18.8
   cmdStack:
   helper:
     HM_CMDNR   1
     PONtest    1
     cSnd       01<VCCUID>A5A5020103,01<VCCUID>A5A502010E
     mId        F103
     peerFriend
     peerIDsRaw ,00000000
     peerOpt    p:UniSensor1
     regLst     0
     rxType     156
     supp_Pair_Rep 0
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       newCh      1
       newChn     +A5A502,02,00,00
       nextSend   1554325345.15859
       rxt        2
       vccu       VCCU
       p:
         A5A502
         00
         00
         00
       prefIO:
         sys_culHm
     mRssi:
       mNo        01
       io:
         sys_culHm:
           -56
           -56
     prt:
       bErr       0
       sProc      2
       sleeping   0
       wuReSent   2
     q:
       qReqConf   
       qReqStat   
     regCollect:
     role:
       chn        1
       dev        1
     rssi:
       at_sys_culHm:
         avg        -61.1384615384615
         cnt        65
         lst        -60
         max        -56
         min        -68
       sys_culHm:
         avg        -76.1
         cnt        10
         lst        -77
         max        -72
         min        -79
     shadowReg:
     tmpl:
Attributes:
   IODev      sys_culHm
   IOgrp      VCCU:sys_culHm
   actCycle   000:10
   actStatus  alive
   autoReadReg 4_reqStatus
   expert     2_raw
   firmware   1.2
   model      HB-UNI-Sensor1
   peerIDs    00000000,
   room       CUL_HM
   serialNr   UNISENS001
   subType    UniSensor1


"HMConfig_UniSensor1.pm" hab ich installiert.

Asksin++ ist Version 3.1.8.

Der Sensor hat momentan keine echten Sensor-Chips drauf und sendet nur Dummy-Daten.

Bin nicht so sicher, in welcher Komponente das Problem steckt... :/ Hat jemand eine Idee?

vbs

Also nach etwas Code lesen, habe ich das Gefühl, dass der Parameter "p" in der Config fehlt?

$HMConfig::culHmRegDefine{'ledMode'}         = {a=> 5.6,s=>0.2,l=>0,min=>0   ,max=>1     ,c=>'lit',f=>'',u=>''  ,d=>0,t=>'LED mode',lit=>{off=>0,on=>1}};


Kam Parameter "p" evtl. erst kürzlich dazu und der fehlt dort noch? Er fehlt offenbar auch in der Beschreibung der Parameter, was auch dafür spricht, dass er erst kürzlich dazu kam:
##----------definitions for register settings-----------------
    # definition of Register for all devices
    # a: address, incl bits 13.4 4th bit in reg 13
    # s: size 2.0 = 2 byte, 0.5 = 5 bit. Max is 4.0!!
    # l: list number. List0 will be for channel 0
    #     List 1 will set peer to 00000000
    #     list 3 will need the input of a peer!
    # min: minimal input value
    # max: maximal input value
    # c: conversion, will point to a routine for calculation
    # f: factor to be used if c = 'factor'
    # u: unit for description
    # t: txt description
    # lit: if the command is a literal options will be entered here
    # d: if '1' the register will appear in Readings
    #


Also kürzer sollten die Bezeichner wirklich nicht mehr werden...  8) was kann "p" bedeuten? Irgendwas mit Peer vermtl.?

Tom Major

Sieht für mich so aus als ob 'p' kein register sondern ein device param ist, deswegen nicht in der zitierten Beschreibung der Reg. definitions enthalten.
Das p hatte ich aus dem original Vorbild des Wettersensors von Dirk übernommen, ev. ist das nicht korrekt. Hat sicher mit Peers zu tun.
Probier mal

lst=>'1'

statt dem 'p'
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

vbs

Der Code aus der Warning ist der hier:
  return "invalid:no peer for this register" if(($reg->{p} eq "n" && hex($peerId) != 0)
                                              ||($reg->{p} eq "y" && hex($peerId) == 0));


Und da gibt es den Zugriff auf Variable "p" des Registers.

Hier aus der HMConfig ein paar Register:
##----------definitions for register settings-----------------
    # definition of Register for all devices
    # a: address, incl bits 13.4 4th bit in reg 13
    # s: size 2.0 = 2 byte, 0.5 = 5 bit. Max is 4.0!!
...
    # d: if '1' the register will appear in Readings
...
%culHmRegDefine = (
#--- list 0, device  and protocol level-----------------
  burstRx         =>{a=>  1.0,s=>1.0,l=>0,min=>0      ,max=>255   ,c=>'lit'      ,p=>'n',f=>''      ,u=>''    ,d=>1,t=>'device reacts on Burst'               ,lit=>{off=>0,on=>1}},
  intKeyVisib     =>{a=>  2.7,s=>0.1,l=>0,min=>0      ,max=>1     ,c=>'lit'      ,p=>'n',f=>''      ,u=>''    ,d=>0,t=>'visibility of internal channel'       ,lit=>{invisib=>0,visib=>1}},
  pairCentral     =>{a=> 10.0,s=>3.0,l=>0,min=>0      ,max=>16777215,c=>'hex'    ,p=>'n',f=>''      ,u=>''    ,d=>1,t=>'pairing to central'},


Hier gibt es das "p" (noch?) nicht:
https://github.com/TomMajor/SmartHome/blob/master/HB-UNI-Sensor1/FHEM/HMConfig_UniSensor1.pm
$HMConfig::culHmRegDefine{'ledMode'}         = {a=> 5.6,s=>0.2,l=>0,min=>0   ,max=>1     ,c=>'lit',f=>'',u=>''  ,d=>0,t=>'LED mode',lit=>{off=>0,on=>1}};
$HMConfig::culHmRegDefine{'lowBatLimit'}     = {a=>18.0,s=>1.0,l=>0,min=>1.0 ,max=>5     ,c=>''   ,f=>10,u=>'V' ,d=>0,t=>'Low batterie limit, step 0.1 V.'};
$HMConfig::culHmRegDefine{'updateIntervall'} = {a=>32.0,s=>2.0,l=>0,min=>60  ,max=>43200 ,c=>''   ,f=>'',u=>'s' ,d=>0,t=>'Sensor measure and send intervall in seconds.'};
$HMConfig::culHmRegDefine{'altitude'}        = {a=>34.0,s=>2.0,l=>0,min=>0   ,max=>10000 ,c=>''   ,f=>'',u=>'m' ,d=>0,t=>'Altitude for calculate air pressure at see level in meter.'};


Soweit meine Theorie. Ich mag falsch liegen und werde auch gerne nachher das mit dem "lst" ausprobieren.

martinp876

Gut recherchiert. P ist gesetzt bei peer behafteten Registern.  Also y (yes) oder n (no)

Tom Major

Zitat von: vbs am 04 April 2019, 23:37:15
Also nach etwas Code lesen, habe ich das Gefühl, dass der Parameter "p" in der Config fehlt?

$HMConfig::culHmRegDefine{'ledMode'}         = {a=> 5.6,s=>0.2,l=>0,min=>0   ,max=>1     ,c=>'lit',f=>'',u=>''  ,d=>0,t=>'LED mode',lit=>{off=>0,on=>1}};


Kam Parameter "p" evtl. erst kürzlich dazu und der fehlt dort noch? Er fehlt offenbar auch in der Beschreibung der Parameter, was auch dafür spricht, dass er erst kürzlich dazu kam:


ok, jetzt verstehe ich worauf du hinaus willst.
Sieht für mich auch so aus als ob der kürzlich dazukam, eine lokale FHEM Version bei mir von 2/2018 hatte dort in HMConfig.pm die ganzen

p=>'n'

bei list0 noch nicht, die aktuelle Version hat sie. Werden die jetzt erwartet? Dann am besten mal damit testen.
Da dies alles Config/List0 Regs sind würde ich vermuten es braucht bei keinem eine "peer Behaftung"
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

vbs

Ok danke, hab's ergänzt und es funktioniert soweit:
p=>'n'

Sorry für's Cross-Posten. Hier geht's weiter (da kein CUL_HM-Problem):
https://forum.fhem.de/index.php/topic,20620.msg927527.html#msg927527

martinp876