Frequentes DOIF mit get wirft error

Begonnen von holle75, 14 Juni 2023, 12:09:24

Vorheriges Thema - Nächstes Thema

holle75

Hallo ihr, ich versuche ein Reading eines modbus devices alle 55 Sekunden abzufragen

define Studer485_Gateway_Trigger_Timer_DOIF DOIF ([00:00-23:59,+00:00:55]) (get Studer485_Gateway Message_Count_must_read_first)
das funktioniert einmal, ab dem zweiten Durchlauf bekomme ich einen error

error | get Studer485_Gateway Message_Count_must_read_first: 49
device list
Internals:
   CFGFN     
   DEF        ([00:00-23:59,+00:00:55]) (get Studer485_Gateway Message_Count_must_read_first)
   FUUID      64898f82-f33f-6bb4-2c4b-1a040e1483949821
   MODEL      FHEM
   NAME       Studer485_Gateway_Trigger_Timer_DOIF
   NOTIFYDEV  global
   NR         77692
   NTFY_ORDER 50-Studer485_Gateway_Trigger_Timer_DOIF
   STATE      cmd_1
   TYPE       DOIF
   VERSION    24570 2021-06-02 22:25:40
   READINGS:
     2023-06-14 12:00:25   cmd             1
     2023-06-14 12:00:25   cmd_event       timer_3
     2023-06-14 12:00:25   cmd_nr          1
     2023-06-14 12:00:25   error           get Studer485_Gateway Message_Count_must_read_first: 49
     2023-06-14 11:59:30   mode            enabled
     2023-06-14 12:00:25   state           cmd_1
     2023-06-14 11:59:30   timer_01_c01    15.06.2023 00:00:00
     2023-06-14 11:59:30   timer_02_c01    14.06.2023 23:59:00
     2023-06-14 12:01:20   timer_03_c01    14.06.2023 12:02:15
   Regex:
     accu:
     collect:
   attr:
     cmdState:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms)
   days:
   do:
     0:
       0          get Studer485_Gateway Message_Count_must_read_first
     1:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     event      timer_3
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent timer_3
     triggerDev
     DOIF_eventa:
       cmd_nr: 1
       cmd: 1
       cmd_event: timer_3
       error: get Studer485_Gateway Message_Count_must_read_first: 49
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: timer_3
       error: get Studer485_Gateway Message_Count_must_read_first: 49
       state: cmd_1
     timerevents:
       timer_3
     timereventsState:
       timer_3
     triggerEvents:
       timer_3
     triggerEventsState:
       timer_3
   interval:
     0          -1
     1          0
   intervalfunc:
     2          ::DOIF_time($hash,0,1,$wday,$hms)
   intervaltimer:
     0          2
     1          2
   localtime:
     0          1686780000
     1          1686779940
     2          1686736935
   realtime:
     0          00:00:00
     1          23:59:00
     2          12:02:15
   time:
     0          00:00:00
     1          23:59:00
     2          +00:00:55
   timeCond:
     0          0
     1          0
     2          0
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0  1  2
   triggertime:
     1686736935:
       localtime  1686736935
       hash:
     1686779940:
       localtime  1686779940
       hash:
     1686780000:
       localtime  1686780000
       hash:
   uiState:
   uiTable:
Attributes:

warum mag das DOIF den zweiten Durchlauf (und folgend) nicht mehr? Und warum macht es einen Eintrag im fhem logfile für den ersten Durchgang?

2023.06.14 12:00:25 2: Studer485_Gateway_Trigger_Timer_DOIF: get Studer485_Gateway Message_Count_must_read_first: 49
Diesen Eintrag macht auch ein vorher probiertes AT (was funktioniert, aber ich mag DOIF lieber weil ich die Syntax schneller verstehe/lese). Werden get Befehle generell im fhem log verewigt? Und falls, wie kann man das vermeiden?

Damian

error bedeutet in dem Fall, dass der get-Befehl etwas ungleich Null zurückliefert, hier 49. Es ist also kein echte Fehler. Normalweise liefern set/get-Befehle etwas zurück, wenn es ein Fehler ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

Danke Damian, aber wie bekomme ich das Baby zum Laufen? Falls möglich. Ich kann auch auf das AT zurück, aber da muss ich jedesmal nachlesen um es zu verstehen ;)

Für die fhem Logeinträge sollte ein verbose helfen, gerade eingefallen.

Damian

Wenn es in der Kommandozeile funktioniert, dann muss es auch im DOIF funktionieren. Error kannst du ignorieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

Mmh, in der Kommandozeile geht es, im DOIF nicht. Dewegen war mir der error aufgefallen, resp. dachte ich, das könnte ein Hinweis sein.
Allerdings funktionierte das AT am Anfang auch nicht. Warum auch immer. Werde das DOIF mal genau so nochmals einbauen und schauen.

Danke dir!