FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: odie13690 am 21 März 2021, 08:31:43

Titel: Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: odie13690 am 21 März 2021, 08:31:43
Hallo Zusammen,

ich habe seit einiger Zeit die folgende Fehlermeldung im Log-File, grundsätzlich funktioniert aber alles.

2021.03.21 07:40:52 1: PERL WARNING: Argument "onoff:" isn't numeric in numeric gt (>) at (eval 327969) line 1, <GEN22264> line 38.
2021.03.21 07:40:52 1: PERL WARNING: Argument "onoff:" isn't numeric in numeric gt (>) at (eval 327973) line 1, <GEN22264> line 42.
2021.03.21 07:40:52 1: PERL WARNING: Argument "onoff:" isn't numeric in numeric gt (>) at (eval 327977) line 1, <GEN22264> line 46.
2021.03.21 07:40:52 1: PERL WARNING: Argument "onoff:" isn't numeric in numeric gt (>) at (eval 327981) line 1, <GEN22264> line 50.
...


Ich überwache über die Leistung den Zustand einer Wärmepumpe und werte dies wie im FhemWiki unter HourCounter beschrieben über ein UserReading aus:

userReadings onoff {(ReadingsVal("HM_6440EA_SenPwr","state",0) >10)?1:0;;}

Internals:
   DEF        HM_6440EA_SenPwr:onoff:.1 HM_6440EA_SenPwr:onoff:.0
   FUUID      5f5242ee-f33f-9c2c-b41d-ce649e312e329374
   NAME       hc_Waermepumpe
   NR         1420
   NTFY_ORDER 50-hc_Waermepumpe
   STATE      0
   TYPE       HourCounter
   VERSION    1.0.1.2 - 24.12.2014
   READINGS:
     2021-03-21 08:20:45   countsOverall   156
     2021-03-21 08:20:45   countsPerDay    0
     2021-03-21 08:20:45   pauseTimeEdge   19629
     2021-03-21 08:20:45   pauseTimeIncrement 19629
     2021-03-21 08:20:45   pauseTimeOverall 11920323
     2021-03-21 08:20:45   pauseTimePerDay 0
     2021-03-21 08:20:45   pulseTimeEdge   237332
     2021-03-21 08:20:45   pulseTimeIncrement 42486
     2021-03-21 08:20:45   pulseTimeOverall 4580086
     2021-03-21 08:20:45   pulseTimePerDay 30040
     2021-03-21 08:20:45   state           0
     2021-03-20 20:32:38   tickChanged     311
     2021-03-21 00:00:05   tickDay         1
     2021-03-21 08:00:03   tickHour        16
     2021-03-20 16:29:03   tickMonth       0
     2021-03-21 08:20:45   tickUpdated     496
     2021-03-21 00:00:05   tickWeek        1
     2021-03-20 16:29:03   tickYear        0
     2021-03-21 08:20:45   value           1
   helper:
     OFF_Regexp HM_6440EA_SenPwr:onoff:.0
     ON_Regexp  HM_6440EA_SenPwr:onoff:.1
     calledByEvent
     changedTimestamp 2021-03-21 08:20:45
     forceClear
     forceDayChange
     forceHourChange
     forceMonthChange
     forceWeekChange
     forceYearChange
     isFirstRun
     sdRoundHourLast 1616310000
     value      1
     cmdQueue:
Attributes:
   alias      hc_Waermepumpe


Darüber hinaus lasse ich mich per Pushover über die Zustände informieren. Hier vermute ich den Fehler. Ich kann mir aber keinen Reim aus der Fehlermeldung machen, da der State von "onoff" für mich numerisch (0/1) ist.

Internals:
   DEF        ([HM_6440EA_SenPwr:onoff] == 1)
(set PushMsg msg 'Info' 'Wärmepumpe an!' 'Mein-iPhone' 0 '')
DOELSEIF
([HM_6440EA_SenPwr:onoff] == 0)
((set PushMsg msg 'Info' 'Wärmepumpe aus! Laufzeit: {(sprintf("%.1f",[hc_Waermepumpe:pulseTimeEdge]/3600))} h' 'Mein-iPhone' 0 ''))
   FUUID      5f53ce7c-f33f-9c2c-952c-a80bae2fef884659
   MODEL      FHEM
   NAME       push_Waermepumpe
   NOTIFYDEV  global,HM_6440EA_SenPwr
   NR         1423
   NTFY_ORDER 50-push_Waermepumpe
   STATE      cmd_1
   TYPE       DOIF
   VERSION    24016 2021-03-19 23:34:44
   READINGS:
     2021-03-21 08:25:50   Device          HM_6440EA_SenPwr
     2021-03-21 07:27:34   cmd             1
     2021-03-21 07:27:34   cmd_event       HM_6440EA_SenPwr
     2021-03-21 07:27:34   cmd_nr          1
     2021-03-21 08:25:50   e_HM_6440EA_SenPwr_onoff 1
     2021-03-21 07:26:57   mode            enabled
     2021-03-21 07:27:34   state           cmd_1
     2021-03-21 07:27:34   wait_timer      no timer
   Regex:
     accu:
     cond:
       HM_6440EA_SenPwr:
         0:
           onoff      ^HM_6440EA_SenPwr$:^onoff:
         1:
           onoff      ^HM_6440EA_SenPwr$:^onoff:
   attr:
     cmdState:
     wait:
       0:
         15
       1:
         15
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'HM_6440EA_SenPwr','onoff') == 1
     1          ::ReadingValDoIf($hash,'HM_6440EA_SenPwr','onoff') == 0
   do:
     0:
       0          set PushMsg msg 'Info' 'Wärmepumpe an!' 'Mein-iPhone' 0 ''
     1:
       0          (set PushMsg msg 'Info' 'Wärmepumpe aus! Laufzeit: {(sprintf("%.1f",[hc_Waermepumpe:pulseTimeEdge]/3600))} h' 'Mein-iPhone' 0 '')
     2:
   helper:
     DEVFILTER  ^global$|^HM_6440EA_SenPwr$
     NOTIFYDEV  global|HM_6440EA_SenPwr
     event      883.61,onoff: 1
     globalinit 1
     last_timer 0
     sleepdevice HM_6440EA_SenPwr
     sleepsubtimer -1
     sleeptimer -1
     timerdev   HM_6440EA_SenPwr
     timerevent 883.61,onoff: 1
     triggerDev HM_6440EA_SenPwr
     timerevents:
       883.61
       onoff: 1
     timereventsState:
       state: 883.61
       onoff: 1
     triggerEvents:
       883.61
       onoff: 1
     triggerEventsState:
       state: 883.61
       onoff: 1
   internals:
   readings:
     all         HM_6440EA_SenPwr:onoff
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      push_Wärmepumpe
   room       Push
   wait       15:15


Wie werde ich die Fehlermeldungen los?

odie13690
Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: Otto123 am 21 März 2021, 19:06:48
Hi,

der Fehler muss woanders liegen
Zitatisn't numeric in numeric gt (>) at
Er meckert größer als und nicht gleich an :)

BTW: userReadings onoff {(ReadingsVal("HM_6440EA_SenPwr","state",0) >10)?1:0;;} -> userReadings onoff {(ReadingsNum("HM_6440EA_SenPwr","state",0) >10)?1:0}

Gruß Otto
Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: odie13690 am 21 März 2021, 19:57:30
Hi,

oh ja, ich habe noch ein zweites Device mit Überwachung.

Internals:
   DEF        ([+01:00] and [?Pumpensumpf_Leistung:onoff:sec]>3600)
(set PushMsg msg 'Status' 'Pumpensumpf überprüfen' 'Mein-iPhone' 0 '')
   FUUID      5f9c7868-f33f-9c2c-a25e-bccc47bbe4d0df36
   MODEL      FHEM
   NAME       doif_PumpensumpfUeberwachen
   NOTIFYDEV  global
   NR         1429
   NTFY_ORDER 50-doif_PumpensumpfUeberwachen
   STATE      initialized
   TYPE       DOIF
   VERSION    24016 2021-03-19 23:34:44
   READINGS:
     2021-03-21 19:49:31   cmd             0
     2021-03-21 19:49:31   mode            enabled
     2021-03-21 19:49:31   state           initialized
     2021-03-21 19:49:31   timer_01_c01    21.03.2021 20:49:31
   Regex:
     accu:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ::ReadingSecDoIf('Pumpensumpf_Leistung','onoff')>3600
   days:
   do:
     0:
       0          set PushMsg msg 'Status' 'Pumpensumpf überprüfen' 'Mein-iPhone' 0 ''
     1:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 1
     sleeptimer -1
   intervalfunc:
   localtime:
     0          1616356171
   realtime:
     0          20:49:31
   time:
     0          +01:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1616356171:
       localtime  1616356171
       hash:
   uiTable:
Attributes:
   alias      doif_PumpensumpfUeberwachen
   do         always


Internals:
   DEF        32883603
   FUUID      5c4f5000-f33f-9c2c-5628-ba2497392cae8602
   NAME       Pumpensumpf_Leistung
   NOTIFYDEV  global
   NR         483
   NTFY_ORDER 50-Pumpensumpf_Leistung
   STATE      0.65
   TYPE       CUL_HM
   chanNo     03
   device     HM_328836
   READINGS:
     2019-01-28 19:56:06   R-cndTxCycAbove off
     2019-01-28 19:56:06   R-cndTxCycBelow off
     2019-01-28 19:56:06   R-cndTxDecAbove 200
     2019-01-28 19:56:06   R-cndTxDecBelow 0
     2019-01-28 19:56:06   R-cndTxFalling  off
     2019-01-28 19:56:06   R-cndTxRising   off
     2019-01-28 19:56:06   R-sign          off
     2019-01-28 19:56:06   R-txThrHiPwr    200 W
     2019-01-28 19:56:06   R-txThrLoPwr    100 W
     2021-02-17 13:14:44   RegL_01.        00:00 08:00 22:64 30:06 84:00 85:C8 86:00 87:00 88:00 89:4E 8A:20 8B:00 8C:00 8D:27 8E:10
     2021-02-17 13:14:41   cfgState        updating
     2021-03-21 19:52:25   onoff           0
     2021-03-21 19:52:25   state           0.65
   helper:
     peerFriend peerAct,peerVirt
     peerIDsState complete
     peerOpt    4:powerMeter
     regLst     1,4p
     cmds:
       TmplKey    :no:1616254133.3006
       TmplTs     1616254133.3006
       cmdKey     1:0:0::HM_328836:00AC:03:
       cmdLst:
         clear      [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
         getConfig  noArg
         getRegRaw  (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
         peerBulk   -peer1,peer2,...- [({set}|unset)]
         peerChan   0 -actChn- [({single})] [({set}|unset)] [actor|remote|both]
         peerSmart  -peerOpt-
         regBulk    -list-.-peerChn- -addr1:data1- -addr2:data2-...
         regSet     [(prep|{exec})] -regName- -value- [-peerChn-]
         sign       [(on|{off})]
         tplDel     -tplDel-
         trgEventL  -peer- -condition-
         trgEventS  -peer- -condition-
         trgPressL  [(-peer-|{all})]
         trgPressS  [(-peer-|{all})]
       lst:
         condition  slider,0,1,255
         peer       
         peerOpt
         tplDel     
       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        0
       raw        1
       tpl        0
     peerIDsH:
       00000000   broadcast
     role:
       chn        1
     tmpl:
Attributes:
   alias      Pumpensumpf_Leistung
   group      x_Aktordetails
   model      HM-ES-PMSW1-PL
   peerIDs    00000000
   userReadings onoff {(ReadingsNum("Pumpensumpf_Leistung","state",0) >10)?1:0;;}


odie13690
Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: Otto123 am 21 März 2021, 20:09:46
Da versteh ich die Meldung auch noch nicht.
Er meckert ja explizit an
Argument "onoff:" isn't numeric in numeric gt (>) at
Also "er" liest onoff: und soll es  mit > vergleichen.

Es ist auch kein Fehler: er warnt "nur": onoff: ist für ihn numerisch null :)
Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: odie13690 am 21 März 2021, 20:12:53
Hi,

grundsätzlich funktioniert ja auch alles wie es soll. Mich stören nur die mehreren 100 Zeilen "Hinweise" pro Tag im LogFile.

odie13690
Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: Sany am 22 März 2021, 18:09:34
du könntest mal stacktrace einschalten, da siehst etwas mehr von der Warning und könntest evtl. den Verursacher finden.
attr global stacktrace 1

Im Moment scheint ja nicht klar, woher die Meldung kommt, oder kannst Du das dem zuornden, was Du hier vorgestellt hast?
"onoff" ist z.B. ein Standard-Reading bei HUEDevices
mit list .* onoff siehst Du alle Devices, die das Reading haben.
Vielleicht kommt es ja aus einer ganz anderen Ecke. Bei mehreren hundert Meldungen?

Andere Überlegung: das ist so eine Homematic Schaltsteckdose mit Leistungsmessung, korrekt?
Homematics neigen dazu, sehr viele Events zu produzieren. So wie dein userReadings definiert ist wird das bei jedem beliebigen Event des Devices getriggert. Das könntest Du auf das Pwr Reading eingrenzen:
Zitat<reading>[:<trigger>] [<modifier>] { <perl code> }
If <trigger> is given, then all processing for this specific user reading is only done if one of the just updated "reading: value" combinations matches <trigger>, which is treated as a regexp

userReadings onoff:power.* {(ReadingsVal($name,"power",0) >10)?1:0}
Den Devicenamen kannst Du mit $name ersetzen. So wird das userReading nur bei Event von power gerechnet. Das sollte die Anzahl der Meldungen schon mal reduzieren. Die sind ja auch alle "gleichzeitig", das deutet schon in die Richtung von vielen Events des Homematic.
Du könntest auch mal ein list vom Homematic hier einstellen.

Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: odie13690 am 22 März 2021, 19:21:50
Hi,

ich habe nur die beiden Devices mit dem onoff-Reading (mit list .* onoff sicherheitshalber geprüft). Und das > schränkt es dann auf das eine Device ein.

Ja, es handelt sich um einen HomeMatic Schaltaktor mit Leistungsmessung. Hier das List:

Internals:
   DEF        328836
   FUUID      5c4f5000-f33f-9c2c-9504-53403de763b49b11
   HMLAN1_MSGCNT 1632
   HMLAN1_RAWMSG E328836,0000,0A0671A3,FF,FFBE,D3845E32883600000080092D000041000808DC01
   HMLAN1_RSSI -66
   HMLAN1_TIME 2021-03-22 19:12:00
   HMLAN2_MSGCNT 1
   HMLAN2_RAWMSG E328836,0000,AB60D165,FF,FF97,39A45F3288362BAA798008A10015FE01DD08FDFF
   HMLAN2_RSSI -105
   HMLAN2_TIME 2021-03-22 17:19:50
   IODev      HMLAN1
   LASTInputDev HMLAN1
   MSGCNT     1633
   NAME       HM_328836
   NOTIFYDEV  global
   NR         477
   NTFY_ORDER 50-HM_328836
   STATE      CMDs_done
   TYPE       CUL_HM
   channel_01 Pumpensumpf
   channel_02 Pumpensumpf_Verbrauch
   channel_03 Pumpensumpf_Leistung
   channel_04 Pumpensumpf_Strom
   channel_05 Pumpensumpf_Spannung
   channel_06 Pumpensumpf_Frequenz
   lastMsg    No:D3 - t:5E s:328836 d:000000 80092D000041000808DC01
   protLastRcv 2021-03-22 19:12:00
   protRcv    1616 last_at:2021-03-22 19:12:00
   protSnd    443 last_at:2021-03-22 18:56:23
   protState  CMDs_done
   rssi_HMLAN1 cnt:24 min:-72 max:-57 avg:-63.54 lst:-64
   rssi_at_HMLAN1 cnt:1632 min:-85 max:-57 avg:-68.3 lst:-66
   rssi_at_HMLAN2 cnt:1 min:-105 max:-105 avg:-105 lst:-105
   READINGS:
     2021-03-20 16:38:44   Activity        alive
     2019-01-28 19:55:00   D-firmware      2.5
     2019-01-28 19:55:00   D-serialNr      LEQ0931299
     2021-03-22 17:05:56   PairedTo        0x2BAA79
     2019-01-28 19:56:00   R-pairCentral   0x2BAA79
     2021-03-22 17:05:56   RegL_00.         00:00 02:01 0A:2B 0B:AA 0C:79 15:FF 18:00
     2021-03-22 17:05:55   cfgState        updating
     2021-03-22 18:56:24   commState       CMDs_done
     2021-03-22 17:05:49   powerOn         2021-03-22 17:05:49
     2021-03-22 18:56:24   state           CMDs_done
   helper:
     HM_CMDNR   211
     PONtest    0
     cSnd       112BAA793288360201000000,112BAA793288360201C80000
     mId        00AC
     peerFriend
     peerOpt    -:powerMeter
     regLst     0
     rxType     1
     supp_Pair_Rep 0
     cmds:
       TmplKey    :no:1616254130.61548
       TmplTs     1616254130.61548
       cmdKey     0:1:0::HM_328836:00AC:00:
       cmdLst:
         assignHmKey noArg
         clear      [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
         deviceRename -newName-
         fwUpdate   -filename- [-bootTime-]
         getConfig  noArg
         getDevInfo noArg
         getRegRaw  (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
         raw        -data- [...]
         regBulk    -list-.-peerChn- -addr1:data1- -addr2:data2-...
         regSet     [(prep|{exec})] -regName- -value- [-peerChn-]
         reset      noArg
         tplDel     -tplDel-
         unpair     noArg
       lst:
         condition  slider,0,1,255
         peer       
         peerOpt   
         tplDel     
       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        0
       raw        1
       tpl        0
     io:
       newChn     +328836,00,00,00
       nextSend   1616436720.50604
       prefIO     
       rxt        0
       vccu       
       p:
         328836
         00
         00
         00
     mRssi:
       mNo        D3
       io:
         HMLAN1:
           -62
           -62
         HMLAN2:
     peerIDsH:
     prt:
       bErr       0
       sProc      0
     q:
       qReqConf   
       qReqStat   
     regCollect:
     role:
       dev        1
       prs        1
     rssi:
       HMLAN1:
         avg        -63.5416666666667
         cnt        24
         lst        -64
         max        -57
         min        -72
       at_HMLAN1:
         avg        -68.3039215686274
         cnt        1632
         lst        -66
         max        -57
         min        -85
       at_HMLAN2:
         avg        -105
         cnt        1
         lst        -105
         max        -105
         min        -105
     shadowReg:
     tmpl:
Attributes:
   IODev      HMLAN1
   actCycle   000:10
   actStatus  alive
   alias      HM_328836
   autoReadReg 4_reqStatus
   expert     defReg,rawReg
   firmware   2.5
   model      HM-ES-PMSW1-PL
   room       CUL_HM
   serialNr   LEQ0931299
   subType    powerMeter
   webCmd     getConfig:clear msgEvents


odie13690
Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: Jamo am 22 März 2021, 20:51:24
Also in deinem HomeMatic Schaltaktor mit Leistungsmessung kann ich kein Reading power finden.
READINGS:
     2021-03-20 16:38:44   Activity        alive
     2019-01-28 19:55:00   D-firmware      2.5
     2019-01-28 19:55:00   D-serialNr      LEQ0931299
     2021-03-22 17:05:56   PairedTo        0x2BAA79
     2019-01-28 19:56:00   R-pairCentral   0x2BAA79
     2021-03-22 17:05:56   RegL_00.         00:00 02:01 0A:2B 0B:AA 0C:79 15:FF 18:00
     2021-03-22 17:05:55   cfgState        updating
     2021-03-22 18:56:24   commState       CMDs_done
     2021-03-22 17:05:49   powerOn         2021-03-22 17:05:49
     2021-03-22 18:56:24   state           CMDs_done
   helper:

Die Power wird im channel_02 Pumpensumpf_Verbrauch erzeugt. Dort sollte dann auch das userreading stehen.

Wie Otto geschrieben hat, solltest Du ausserdem  in userReadings onoff:power.* {(ReadingsVal($name,"power",0) >10)?1:0}
das ReadingsVal durch ReadingsNum ersetzten. Sonst, falls das reading nicht existiert, wird ein string zurueckgeliefert, ReadingsVal($name,"power",0) erwartet als letztes Argument einen String (also ReadingsVal($name,"power","0") und keine Zahl.
Also entweder ReadingsVal($name,"power","0") oder ReadingsNum($name,"power",0);

Für > ist dann ReadingsNum($name,"power",0) richtig.
Titel: Antw:Fehlersuche PERL WARNING: Argument "onoff:" isn't numeric
Beitrag von: Sany am 22 März 2021, 21:01:11
@odie13690
danke für das list. Du hast ja weiter oben schon eins vom Pumpensumpf_Verbrauch gezeigt, da ist aber auch kein power reading? Das wundert mich, bei meinem HM-ES-PMSW1-PL gibts da etliche readings mit volt, current, energy, power etc. Gibts vielleicht ein Register zu setzen, kann ich im Moment nicht mehr sagen. Sollte aber auch mit state gehen, und der Hinweis mit ReadingsNum von Jamo ist korrekt, das habe aber nur ich falsch hingeschrieben, Du hattest das ja schon drin. Ob das userReadings onoff:state.* {(ReadingsNum($name,"state",0) >10)?1:0} dann funktioniert musst Du mal testen. Sollte dann weniger Meldungen bringen, da ja nur noch auf state das Reading gerechnet wird.
Was sagt stacktrace?