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
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
Welche DOIF-Version verwendest Du?
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.
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.
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
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.
Alles klar! Danke :-)