Hallo zusammen,
habe eine, für den Perl Versteher, dumme Frage:
Wieso funktioniert der folgende Code, in einem DOIF, nicht
{[+[3]:10]} {fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))}
Das ganze ist ein DOIF, läuft alle 3 Stunden (wie gewollt), gibt auch kein Fehler oder so aus, nur tut dummerweise nicht das was die einzel Befehle tun. Es soll ein dummy und zwei readings desselbigen gesetzt werden.
Vielleicht denke ich auch nur zu kompliziert.
Danke für jedwedige konstruktive Hilfe, Ach ja Verbose und LogLevel sind schon hoch gesetzt, trotzdem keine Meldungen im LOG.
Grimm
Hast Du die einzelne Perl-Befehle ins Kommandofeld von Fhem probiert? Was ergibt es?
{fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""))}
Schau mal dein Proplanta Device. Ich vermute, es hat kein Reading fc0_weather10 oder fc0_weather11
Hi,
der Befehl funktioniert, zumindest um 3,6,9,12,15,18,21 und 0 Uhr, da es diese QuellReadings dann gibt.
Zu den anderen Zeiten gibt es einen Fehler, den ich ja vermeiden will.
Auch die anderen Beiden gehen, ist immer nur doof zu testen, da nur alle 3 Stunden :-)
G.
Poste dann bitte ein vollständiges "list" von deinem DOIF
HI,
bitte:
Internals:
DEF {[+[3]:10]} {fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))}
FUUID 5e00a2bd-f33f-8d50-65d2-1a471893ba05f9c8
MODEL Perl
NAME eingang.wetter.setDI
NOTIFYDEV global
NR 353
NTFY_ORDER 50-eingang.wetter.setDI
STATE ???
TYPE DOIF
VERSION 20811 2019-12-22 17:45:08
READINGS:
2019-12-25 11:15:05 mode enabled
2019-12-25 11:15:05 timer_01_c01 25.12.2019 12:10:00
Regex:
accu:
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))
days:
helper:
DEVFILTER ^global$
NOTIFYDEV global
globalinit 1
last_timer 1
sleeptimer -1
intervalfunc:
localtime:
0 1577272200
perlblock:
0
1
realtime:
0 12:10:00
time:
0 +[3]:10
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1577272200:
localtime 1577272200
hash:
uiState:
uiTable:
Attributes:
loglevel 6
room Flur.EG,steuerung
verbose 5
Du hast zwei Perlblöcke derfiniert. Du willst aber nur einen, der alle drei Stunden getriggert wird:
{[+[3]:10]; fhem("...
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))
Das kommt, weil deine Befehle nicht im gleichen Perl-Block wir die Bedingung sind. Schau mal die Beispiele im CommandRef
Damian war schneller...
Oh, danke.
Werde mal testen, ist ja bald 12... da hatte ich DOIF Perl wohl falsch verstanden.
G.
Besten Dank, wie immer eine schnelle und kompetente Hilfe.
So lob ich mir eine Comunity :) :) :)
Gruß und schöne Feiertage.
G.