gelöst: Semikola u. Rdg error falschinterpretiert: Unknown command {, try help.

Begonnen von abc2006, 22 März 2017, 01:53:43

Vorheriges Thema - Nächstes Thema

abc2006

Hi,

ich habe ein DOIF, welches meinen perl-Code (der in einer sub-routine einwandfrei funktioniert, nicht ausführt. Und ich weiss nicht, warum.
Kann jemand helfen?


Grüße,
Stephan

Internals:
   CFGFN
   DEF        ([+5] and [KNX10.I07_Solarzaehler:literpromin:sec] > 90)({
my $debug = 1;
##if ($debug) {fhem("set remotebot message _execute DF_setSolarPower_")};
### das ganze für Solar.  passt hier zwar nicht rein, ich weiss aber auch nicht, wo es besser passt ...
##my $SOLAR_literpromin = ReadingsNum("KNX10.I07_Solarzaehler","literpromin",1);
##my $SOLAR_readingsAge = ReadingsAge("KNX10.I07_Solarzaehler","literpromin",0);
## if ($SOLAR_readingsAge > 90 && $SOLAR_literpromin !=0) {
## if ($debug) {fhem("set remotebot message _literpromin $SOLAR_literpromin ist bereits $SOLAR_readingsAge Sekunden alt_")}
## fhem("setreading KNX10.I07_Solarzaehler literpromin 0");
## } elsif($SOLAR_literpromin == 0) {
## if ($debug) {fhem("set remotebot message SOLAR_literpromin $SOLAR_literpromin ==0_")};
## } else {
## if ($debug) {fhem("set remotebot message SOLAR_literpromin $SOLAR_literpromin ist erst $SOLAR_readingsAge Sekunden alt_")};
## }
##
##
##
}
)
   NAME       DF_setSolarPower
   NR         65159
   NTFY_ORDER 50-DF_setSolarPower
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-03-22 01:32:56   cmd             1
     2017-03-22 01:32:56   cmd_event       timer_1
     2017-03-22 01:32:56   cmd_nr          1
     2017-03-22 01:32:56   error           { my $debug = 1;                }: Unknown command {, try help.
Unknown command }, try help.
     2017-03-22 01:32:56   state           cmd_1
     2017-03-22 01:32:56   timer_01_c01    22.03.2017 01:33:01
   Condition:
     0          DOIF_time_once($hash,0,$wday) and ReadingSecDoIf('KNX10.I07_Solarzaehler','literpromin') > 90
   Days:
   Devices:
     0           KNX10.I07_Solarzaehler
     all         KNX10.I07_Solarzaehler
   Do:
     0:
       0          { my $debug = 1;                }
     1:
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1490142781
   Readings:
     0           KNX10.I07_Solarzaehler:literpromin
     all         KNX10.I07_Solarzaehler:literpromin
   Realtime:
     0          01:33:01
   Regexp:
     All:
   State:
   Time:
     0          +5
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1490142781:
       localtime  1490142781
       Hash:
Attributes:
   do         always
   room       Solar,_doif
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

abc2006

Habe das Semikolon verdoppelt, weil das in einem anderen doif auch so ist :P
funktioniert leider immer noch nicht.

Grüße
Stephan




Internals:
   CFGFN
   DEF        ([+5] and [KNX10.I07_Solarzaehler:literpromin:sec] > 90)({
my $test = 1;;
}
)
   NAME       DF_setSolarPower
   NR         65159
   NTFY_ORDER 50-DF_setSolarPower
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-03-22 01:53:58   cmd             1
     2017-03-22 01:53:58   cmd_event       timer_1
     2017-03-22 01:53:58   cmd_nr          1
     2017-03-22 01:53:58   error           { my $test = 1;; }: 1
     2017-03-22 01:53:58   state           cmd_1
     2017-03-22 01:53:58   timer_01_c01    22.03.2017 01:54:03
   Condition:
     0          DOIF_time_once($hash,0,$wday) and ReadingSecDoIf('KNX10.I07_Solarzaehler','literpromin') > 90
   Days:
   Devices:
     0           KNX10.I07_Solarzaehler
     all         KNX10.I07_Solarzaehler
   Do:
     0:
       0          { my $test = 1;; }
     1:
   Helper:
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     timerdev
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   Internals:
   Interval:
   Itimer:
   Localtime:
     0          1490144043
   Readings:
     0           KNX10.I07_Solarzaehler:literpromin
     all         KNX10.I07_Solarzaehler:literpromin
   Realtime:
     0          01:54:03
   Regexp:
     All:
   State:
   Time:
     0          +5
   Timecond:
     0          0
   Timer:
     0          0
   Timers:
     0           0
   Triggertime:
     1490144043:
       localtime  1490144043
       Hash:
Attributes:
   do         always
   room       Solar,_doif
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Ellert

Welche DOIF-Version verwendest Du?

Damian

     2017-03-22 01:53:58   error           { my $test = 1;; }: 1

bedeutet nur, dass das Ergebnis ungleich Null ist. Es wird im error-Reading festgehalten und ist hier kein Fehler.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

igami

Zitat von: Damian am 22 März 2017, 09:40:14
     2017-03-22 01:53:58   error           { my $test = 1;; }: 1

bedeutet nur, dass das Ergebnis ungleich Null ist. Es wird im error-Reading festgehalten und ist hier kein Fehler.
Falls man das unterbinden will einfach noch ein "return" mit in den Perl Code packen.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

abc2006

Zitat von: Ellert am 22 März 2017, 07:55:09
Welche DOIF-Version verwendest Du?

98_DOIF.pm               13414 2017-02-14 20:37:20Z Damian


Zitat von: Damian am 22 März 2017, 09:40:14
bedeutet nur, dass das Ergebnis ungleich Null ist.

Okay. Warum ist das Ergebnis einer Funktion, die (ich unterstelle mal, erfolgreich) einer Variablen einen Wert zuweist, nicht 0?

Zitat von: igami am 22 März 2017, 09:46:03
Falls man das unterbinden will einfach noch ein "return" mit in den Perl Code packen.

Alles klar. Wenn ich die gesamte Funktion reinpacke, und alles doppelt versemikolone, dann gehts auch. Hatte ich nach dem vermeintlichen "Fehler" heute Nacht dann nicht mehr probiert. Danke für die Rückmeldungen!

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Zitat von: abc2006 am 22 März 2017, 12:10:59

Okay. Warum ist das Ergebnis einer Funktion, die (ich unterstelle mal, erfolgreich) einer Variablen einen Wert zuweist, nicht 0?

Weil es Perl ist und die Variable den Wert eins bekommen hat und nicht Null.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

abc2006

FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX