FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: andi11 am 14 Juni 2023, 08:46:50

Titel: [gelöst] Perlmodus Undefined subroutine &main::set_Reading_Begin
Beitrag von: andi11 am 14 Juni 2023, 08:46:50
Ich erhalte bei meiner Testfunktion die Fehlermeldung:
Undefined subroutine &main::set_Reading_Begin called at (eval 2402) line 1.

Ich habe mir diese Testfunktion erstellt, da ich in einer größeren Funktion die Fehlermeldung erhalten habe, nachdem ich von fhem("setreading......") umstellen wollte auf set_Reading.
laut Wiki sollte es gehen. https://wiki.fhem.de/wiki/DOIF/Perl-Modus#Setzen_mehrerer_Readings_des_eigenen_DOIF-Devices_in_einem_Eventblock (https://wiki.fhem.de/wiki/DOIF/Perl-Modus#Setzen_mehrerer_Readings_des_eigenen_DOIF-Devices_in_einem_Eventblock)

FHEM habe ich gerade zur Sicherheit frisch aktualisiert mit dem selben Ergebniss.

define DOIF_Test DOIF ([+60] )\
{\
set_Reading_Begin();;\
  set_Reading_Update("test",0);;\
set_Reading_End(1);;\
}
attr DOIF_Test DbLogExclude .*
#  CFGFN     
#  DEF        ([+60] )
#{
#set_Reading_Begin();
#  set_Reading_Update("test",0);
#set_Reading_End(1);
#}
#  FUUID      648960ef-f33f-ae17-9d66-5d843dba2376ac41
#  MODEL      FHEM
#  NAME      DOIF_Test
#  NOTIFYDEV  global
#  NR        485
#  NTFY_ORDER 50-DOIF_Test
#  STATE      cmd_1
#  TYPE      DOIF
#  VERSION    27616 2023-05-25 17:55:36
#  eventCount 8
#  READINGS:
#    2023-06-14 08:45:15  cmd            1
#    2023-06-14 08:45:15  cmd_event      set_cmd_1
#    2023-06-14 08:45:15  cmd_nr          1
#    2023-06-14 08:45:15  error          { set_Reading_Begin();  set_Reading_Update("test",0); set_Reading_End(1); }: Undefined subroutine &main::set_Reading_Begin called at (eval 2787) line 1.
#
#    2023-06-14 08:45:12  mode            enabled
#    2023-06-14 08:45:15  state          cmd_1
#    2023-06-14 08:46:12  timer_01_c01    14.06.2023 08:47:12
#  Regex:
#    accu:
#    bar:
#    barAvg:
#    collect:
#  attr:
#    cmdState:
#    waitdel:
#  condition:
#    0          ::DOIF_time_once($hash,0,$wday)
#  days:
#  do:
#    0:
#      0          { set_Reading_Begin();  set_Reading_Update("test",0); set_Reading_End(1); }
#    1:
#  helper:
#    NOTIFYDEV  global
#    event      timer_1
#    globalinit 1
#    last_timer 1
#    sleeptimer -1
#    timerdev 
#    timerevent timer_1
#    triggerDev
#    DOIF_eventa:
#      cmd_nr: 1
#      cmd: 1
#      cmd_event: set_cmd_1
#      error: { set_Reading_Begin();  set_Reading_Update("test",0); set_Reading_End(1); }: Undefined subroutine &main::set_Reading_Begin called at (eval 2787) line 1.
#
#      cmd_1
#    DOIF_eventas:
#      cmd_nr: 1
#      cmd: 1
#      cmd_event: set_cmd_1
#      error: { set_Reading_Begin();  set_Reading_Update("test",0); set_Reading_End(1); }: Undefined subroutine &main::set_Reading_Begin called at (eval 2787) line 1.
#
#      state: cmd_1
#    timerevents:
#      timer_1
#    timereventsState:
#      timer_1
#    triggerEvents:
#      timer_1
#    triggerEventsState:
#      timer_1
#  interval:
#  intervalfunc:
#  localtime:
#    0          1686725232
#  realtime:
#    0          08:47:12
#  time:
#    0          +60
#  timeCond:
#    0          0
#  timer:
#    0          0
#  timers:
#    0          0
#  triggertime:
#    1686725232:
#      localtime  1686725232
#      hash:
#  uiState:
#  uiTable:
#
setstate DOIF_Test cmd_1
setstate DOIF_Test 2023-06-14 08:45:15 cmd 1
setstate DOIF_Test 2023-06-14 08:45:15 cmd_event set_cmd_1
setstate DOIF_Test 2023-06-14 08:45:15 cmd_nr 1
setstate DOIF_Test 2023-06-14 08:45:15 error { set_Reading_Begin();;  set_Reading_Update("test",0);; set_Reading_End(1);; }: Undefined subroutine &main::set_Reading_Begin called at (eval 2787) line 1.\
 
setstate DOIF_Test 2023-06-14 08:45:12 mode enabled
setstate DOIF_Test 2023-06-14 08:45:15 state cmd_1
setstate DOIF_Test 2023-06-14 08:46:12 timer_01_c01 14.06.2023 08:47:12

Titel: Aw: Perlmodus Undefined subroutine &main::set_Reading_Begin
Beitrag von: Damian am 14 Juni 2023, 08:54:09
Aufgrund deiner Definition befindest du dich im DOIF-FHEM-Modus, siehe Internal:

MODEL      FHEM

Die genannten DOIF-Funktionen gibt es nur im DOIF-Perlmodus. Der Aufbau der Definition ist da anders als im FHEM-Modus.


Bereits mit dem Beginn der Definition "DOIF (..." bist du schon im FHEM-Modus. Im Perl-Modus definiert man Ereignisblöcke, diese werden mit geschweiften Klammern definiert, siehe Doku zum Perl-Modus.

Titel: Aw: Perlmodus Undefined subroutine &main::set_Reading_Begin
Beitrag von: andi11 am 14 Juni 2023, 08:56:47
hm?
([+60] )
{
set_Reading_Begin();
  set_Reading_Update("test",0);
set_Reading_End(1);
}

ich dachte mit {} arbeite ich im Perlmodus? Andere Perl Befehle und if funktionieren doch so auch?
Titel: Aw: Perlmodus Undefined subroutine &main::set_Reading_Begin
Beitrag von: Damian am 14 Juni 2023, 09:02:01
Zitat von: andi11 am 14 Juni 2023, 08:56:47hm?
([+60] )
{
set_Reading_Begin();
  set_Reading_Update("test",0);
set_Reading_End(1);
}

ich dachte mit {} arbeite ich im Perlmodus? Andere Perl Befehle und if funktionieren doch so auch?

Nein, du hast eine Bedingung in runden Klammern und einen Ausführungsblock in Perl in geschweiften Klammern - das ist noch kein Perl-Modus. Der Perlmodus hat keine Bedingungen in runden Klammern.
Titel: Aw: Perlmodus Undefined subroutine &main::set_Reading_Begin
Beitrag von: Damian am 14 Juni 2023, 09:07:01
Das wäre eine Definition im Perl-Modus:

{
[+60];
set_Reading_Begin();
  set_Reading_Update("test",0);
set_Reading_End(1);
}

Für ein Reading ist das übrigens das Gleiche wie:

{
[+60];
set_Reading("test",0,1);
}