Hauptmenü

Bareword

Begonnen von cwagner, 29 April 2021, 07:51:39

Vorheriges Thema - Nächstes Thema

cwagner

Hier finde ich nicht die Ursache für die Fehlermeldung von C1, dass ich in der einen Conditionen ein Bareword benutze. Es ist der Name eines Readings, das existiert, und dessen Readingalter ausgewertet werden soll:

Internals:
   .AttrList  disable:0,1 loglevel:0,1,2,3,4,5,6 notexist checkReadingEvent:0,1 addStateEvent:1,0 weekdays setList:textField-long readingList DOIF_Readings:textField-long event_Readings:textField-long uiTable:textField-long event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading
   DEF        {if ( (["^RR:^actuatorState"] ne "ok" and ["^RR.*:actuatorState:sec"] > 3600)  or ["^RR:^alarm"] ) {::DebianMail('XXXXXX@XXXX.de','PI3 meldet: $DEVICE meldet $EVENT','Dieser Aktor scheint Probleme zu haben - Akku alle? Zu lange keine Temperatur-Ansage?'.$EVENT)}}
   DOIFDEV    ^global$|^RR|^RR.*
   FUUID      5c4329af-f33f-e1df-5149-f9d284a565f8af6b
   MODEL      Perl
   NAME       DI_RR_Alarm
   NR         156
   NTFY_ORDER 50-DI_RR_Alarm
   STATE      RR_Wohnzimmer
   TYPE       DOIF
   VERSION    24330 2021-04-24 21:09:16
   .attraggr:
   .attrminint:
   READINGS:
     2021-04-29 07:43:53   Device          RR_Wohnzimmer
     2021-04-29 07:43:53   block_01        condition c01: Bareword "actuatorState" not allowed while "strict subs" in use at (eval 949916) line 1.
syntax error at (eval 949916) line 1, near "actuatorState:"

     2021-04-29 07:43:32   mode            enabled
     2021-04-29 07:43:33   state           initialized
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "^RR.*:actuatorState:sec" ^RR.*:actuatorState:sec
           "^RR:^actuatorState" ^RR:^actuatorState
           "^RR:^alarm" ^RR:^alarm
   condition:
     0          if ( (::EventDoIf('^RR',$hash,'^actuatorState',0) ne "ok" and ::EventDoIf('^RR.*',$hash,'actuatorState:sec',0) > 3600)  or ::EventDoIf('^RR',$hash,'^alarm',0) ) {::DebianMail('XXXXX@XXXX.de','PI3 meldet: $DEVICE meldet $EVENT','Dieser Aktor scheint Probleme zu haben - Akku alle? Zu lange keine Temperatur-Ansage?'.$EVENT)}
   helper:
     DEVFILTER  ^global$|^RR|^RR.*
     NOTIFYDEV  global|RR.*|RR.*.*
     event      actuatorState: ok
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev RR_Wohnzimmer
     triggerEvents:
       actuatorState: ok
     triggerEventsState:
       actuatorState: ok
   internals:
   perlblock:
     0          block_01
   readings:
   trigger:
   uiTable:
Attributes:
   DbLogExclude .*
   room       InArbeit
   stateFormat Device
   verbose    2



Dieses DOIF ist eine Weile gelaufen und wie auch bei einem ähnlichen DOIF ereilt, ist mir erst jetzt aufgefallen, dass der richtige Device-Name "angemeckert" wird als unerlaubt benutztes "Bareword".


Für einen Tipp sage ich schon mal vielen Dank im Voraus

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Sany

Moin,

Zitat["^RR:^actuatorState"] ne "ok" and ["^RR.*:actuatorState:sec"] > 3600)
Du hast hier 2 Event-Trigger mit and verknüpft, das geht schon man grundsätzlich nicht. Der zweite Teil mit der Sekundenauswertung dürfte als Event-Trigger  gar nicht zu definieren sein, sprich falsche Syntax und wohl daher der Fehler.

https://fhem.de/commandref_modular_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
https://fhem.de/commandref_modular_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung

probier das mal ohne die " und ^. Ein .* ist nicht nötig.

Viel Erfolg!
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Christoph Morrison

Versuch mal bitte folgendes. Statt:

{::DebianMail('XXXXXX@XXXX.de','PI3 meldet: $DEVICE meldet $EVENT','Dieser Aktor scheint Probleme zu haben - Akku alle? Zu lange keine Temperatur-Ansage?'.$EVENT)}}

mach mal

{::DebianMail('XXXXXX@XXXX.de',"PI3 meldet: $DEVICE meldet $EVENT","Dieser Aktor scheint Probleme zu haben - Akku alle? Zu lange keine Temperatur-Ansage? $EVENT")}}

cwagner

#3
Zitat von: Christoph Morrison am 29 April 2021, 16:41:59


mach mal

{::DebianMail('XXXXXX@XXXX.de',"PI3 meldet: $DEVICE meldet $EVENT","Dieser Aktor scheint Probleme zu haben - Akku alle? Zu lange keine Temperatur-Ansage? $EVENT")}}
Vielen Dank, Christoph,

tatsächlich bist Du auf der richtigen Spur, die Fehlermeldung stammt aus dem Ausführungsteil und hat mit der Einbindung der Variablen $DEVICE und $EVENT zu tun.
Herzliche Grüße
Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB