DOIF - Can't locate object method "EMS_Bridge" via package "first"

Begonnen von SusisStrolch, 03 November 2023, 13:40:39

Vorheriges Thema - Nächstes Thema

SusisStrolch

Hallo zusammen,
ich laufe mit meinem ersten DOIF direkt auf ein Problem, zu welchem ich bisher keine Lösung gefunden habe.
Problemstellung:
Wenn mein Ölbrenner die Fehlermeldung (ServiceCode) "548" liefert soll die Störung zurückgesetzt werden.

Hierzu habe ich folgendes DOIF definiert:
define di_gb125_svc DOIF { if ([":^serviceCodeNumber",0] == 548) {\
    fhem_set "EMS_Bridge clearError";;\
    set_Exec("timer",15,fhem_set "EMS_Bridge idle");;\
  }\
}
attr di_gb125_svc DOIF_Readings serviceCode:([EMS_Boiler:serviceCode]),\
serviceCodeNumber:([EMS_Boiler:serviceCodeNumber]),\
flameCurr:([EMS_Boiler:flameCurr])
attr di_gb125_svc group GB125
attr di_gb125_svc loglevel 4
attr di_gb125_svc room GB125,Heizung (EMSbus),Heizung (Verbrauch)
attr di_gb125_svc stateFormat serviceCode/serviceCodeNumber (flameCurr)
attr di_gb125_svc verbose 5
#   DEF        { if ([":^serviceCodeNumber",0] == 548) {
#    fhem_set "EMS_Bridge clearError";
#    set_Exec("timer",15,fhem_set "EMS_Bridge idle");
#  }
#}
#   FUUID      65436bc4-f33f-6054-b2c7-39ac2a979f93ad9c
#   MODEL      Perl
#   NAME       di_gb125_svc
#   NOTIFYDEV  EMS_Boiler,.*().*,global
#   NR         59544
#   NTFY_ORDER 50-di_gb125_svc
#   STATE      6L/548 (0)
#   TYPE       DOIF
#   VERSION    27740 2023-07-10 09:31:11
#   eventCount 33
#   DOIF_Readings:
#     flameCurr  (::ReadingValDoIf($hash,'EMS_Boiler','flameCurr'))
#     serviceCode (::ReadingValDoIf($hash,'EMS_Boiler','serviceCode'))
#     serviceCodeNumber (::ReadingValDoIf($hash,'EMS_Boiler','serviceCodeNumber'))
#   OLDREADINGS:
#   READINGS:
#     2023-11-03 13:22:50   Device          EMS_Boiler
#     2023-11-03 13:22:50   block_01        executed
#     2023-11-03 13:23:05   error           in Please define EMS_Bridge first: Can't locate object method "EMS_Bridge" via package "first" (perhaps you forgot to load "first"?) at (eval 3520417) line 1.
#
#     2023-11-03 13:22:50   flameCurr       0
#     2023-11-03 08:36:07   mode            enabled
#     2023-11-03 13:22:50   serviceCode     6L
#     2023-11-03 13:22:50   serviceCodeNumber 548
#     2023-11-03 08:36:07   state           initialized
#   Regex:
#     DOIF_Readings:
#       EMS_Boiler:
#         flameCurr:
#           flameCurr  ^EMS_Boiler$:^flameCurr:
#         serviceCode:
#           serviceCode ^EMS_Boiler$:^serviceCode:
#         serviceCodeNumber:
#           serviceCodeNumber ^EMS_Boiler$:^serviceCodeNumber:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       :
#         0:
#           ":^serviceCodeNumber" :^serviceCodeNumber
#   condition:
#     0           if (::EventDoIf('',$hash,'^serviceCodeNumber',0,'[^\:]*: (.*)','','0') == 548) {
#    fhem_set "EMS_Bridge clearError";
#    set_Exec("timer",15,fhem_set "EMS_Bridge idle");
#  }
#
#   helper:
#     NOTIFYDEV  EMS_Boiler,.*().*,global
#     event      serviceCodeNumber: 548
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#     triggerDev di_gb125_svc
#     triggerEvents:
#       serviceCode: 6L
#       flameCurr: 0
#       serviceCodeNumber: 548
#       timer_timer: 03.11.2023 13:23:05
#     triggerEventsState:
#       serviceCode: 6L
#       flameCurr: 0
#       serviceCodeNumber: 548
#   internals:
#   perlblock:
#     0          block_01
#   ptimer:
#     timer:
#       count      0
#       name       timer
#       sec        15
#       subname    Please define EMS_Bridge first
#       time       1699014185.45546
#       hash:
#   readings:
#   trigger:
#   uiState:
#   uiTable:
#
setstate di_gb125_svc 6L/548 (0)
setstate di_gb125_svc 2023-11-03 13:22:50 Device EMS_Boiler
setstate di_gb125_svc 2023-11-03 13:22:50 block_01 executed
setstate di_gb125_svc 2023-11-03 13:23:05 error in Please define EMS_Bridge first: Can't locate object method "EMS_Bridge" via package "first" (perhaps you forgot to load "first"?) at (eval 3520417) line 1.\

setstate di_gb125_svc 2023-11-03 13:22:50 flameCurr 0
setstate di_gb125_svc 2023-11-03 08:36:07 mode enabled
setstate di_gb125_svc 2023-11-03 13:22:50 serviceCode 6L
setstate di_gb125_svc 2023-11-03 13:22:50 serviceCodeNumber 548
setstate di_gb125_svc 2023-11-03 08:36:07 state initialized

Das Device "EMS_Bridge" hat die setList "idle,clearWarning,clearError" und lässt sich via WebInterface setzen.
Das DEF habe ich nach bestem Wissen aus der Beschreibung abgeleitet.
Allerdings ist mir nicht klar warum ich die Warnung
Can't locate object method "EMS_Bridge" via package "first"erhalte.

(Die Semikolon im DEF-Block hat mir der FHEM Export verdoppelt).

Wo liegt mein Fehler?

Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch

SusisStrolch

Hmm, kann der Fehler daran liegen dass es sich bei "EMS_Bridge" um einen Alias für das MQTT-Device "MQTT2_ems_esp" handelt?
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch

Per

Kannst du den set Befehl in der Befehlszeile fehlerfrei absenden?

Und warum hast du einen sooo globalen Eventfilter definiert? Das erzeugt unnötig Last. Dabei ist das doch nur ein Gerät/Device, was abgefragt wird.

betateilchen

Zitat von: SusisStrolch am 03 November 2023, 13:40:39Problemstellung:
Wenn mein Ölbrenner die Fehlermeldung (ServiceCode) "548" liefert soll die Störung zurückgesetzt werden.

Das klingt nach einem simplen notify.
Warum braucht man dafür ein DOIF?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

SusisStrolch

Zitat von: Per am 03 November 2023, 14:00:26Kannst du den set Befehl in der Befehlszeile fehlerfrei absenden?
Nope - daher kam ich ja drauf dass ich den Alias anstatt des Devicenamens verwendet habe...

ZitatUnd warum hast du einen sooo globalen Eventfilter definiert? Das erzeugt unnötig Last. Dabei ist das doch nur ein Gerät/Device, was abgefragt wird.
Versuchsaufbau, 1. Iteration
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch

SusisStrolch

Zitat von: betateilchen am 03 November 2023, 15:20:48
Zitat von: SusisStrolch am 03 November 2023, 13:40:39Problemstellung:
Wenn mein Ölbrenner die Fehlermeldung (ServiceCode) "548" liefert soll die Störung zurückgesetzt werden.

Das klingt nach einem simplen notify.
Warum braucht man dafür ein DOIF?
Weil ich das DOIF mal ausprobieren wollte...
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch

Per

Aber wenn es schon in der Kommandozeile nicht geht, kann doch DOIF nicht schuld sein.

SusisStrolch

Kommandozeile habe ich doch erst probiert nachdem diese Fehlermeldung aufgetreten ist..
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch