FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: cwagner am 29 April 2021, 07:51:39

Titel: Bareword
Beitrag von: cwagner am 29 April 2021, 07:51:39
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
Titel: Antw:Bareword
Beitrag von: Sany am 29 April 2021, 09:05:36
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_Ereignissteuerung_ueber_Auswertung_von_Events)
https://fhem.de/commandref_modular_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung (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!
Titel: Antw:Bareword
Beitrag von: Christoph Morrison am 29 April 2021, 16:41:59
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")}}
Titel: Antw:Bareword
Beitrag von: cwagner am 29 April 2021, 17:25:57
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