Hallo!
Kann mir jemand sagen, warum die Zeile
fhem("define $at_name at +$timestamp {helios_dec_level(\"$dev\",$level);;;;helios_calc_level(\"$dev\")}");
den Fehler
Use of uninitialized value in pattern match (m//) at ./FHEM/33_readingsGroup.pm line 121.
im Logfile erzeugt.
Stacktrace liefert keine zusätzlichen Ausgaben (oder ich mache was falsch)
Hinweis: Die Zeile funktioniert bis auf die Fehlermeldung ganz normal.
Danke!
Hugo
Der Kontext fehlt. lists von beteiligten Devices (readingsGroup, at), Code der sub...
Das ist ja das Problem, dass ich in keinster Weise verstehe was diese Definition mit einer Readingsgroup zu tun haben könnte.
Der Code der Sub sieht so aus:
sub helios_req_level($$$){
my ($dev,$level,$time) = @_;
helios_inc_level("$dev",$level);
helios_calc_level("$dev");
my $at_name = "at_".$dev."_dec_level_".$level;
my $timestamp = strftime "%H:%M:%S", gmtime($time*60);
fhem("define $at_name at +$timestamp {helios_dec_level(\"$dev\",$level);;;;helios_calc_level(\"$dev\")}");
}
Das mit den lists verstehe ich nicht, denn es sind ja keine Geräte beteiligt.
Der Aufruf der Funktion legt das at an und es funktioniert tadellos, aber wie gesagt kommt diese Fehlermeldung.
Ich bin völlig ratlos. Kann ich noch etwas liefern?
Grüße
Hugo
Ich würde mal vermuten, dass die regexp irgendeiner readingsgroup auf das at matcht... Schau mal eine Readingsgroups durch und poste ein list der "verdächtigen" readingsgroups...
evtl. hilft es auch noch was die subs helios_dec_level bzw. helios_calc_level so machen?!
wird deine funktion mehrfach verwendet?
dann könntest ja die ein oder andere logausgabe mit einbauen, vielleicht findest du dann die "verdächtigen"
Ich habe genau eine Readingsgroup und in dieser finde ich nichts Verdächtiges.
<Gerät>,<Position>,<Standort>,<Automatik>,<Verdunkelung>,<Zeitzone>,<Offen-Pos.>,<Geschlossen-Pos.>,<Beschattung>,<Sonnentol.>,<Beschattungs-Pos.>,<Zwangsbelichtung>,<Schlafraum> subType&blindActuator:state,?group,?automatic,?darkening,?timezone,?openedlevel,?closedlevel,?shadow,?sunlevel,?shadowposition,?forced_unshadow,?sleeping
Die Fehlermeldung kommt bei der Definition des at und nicht bei der Ausführung.
Nur zum Verständnis: Die beiden Funktionen im at werden beim Definieren des at in keinster Weise interpretiert/ausgewertet, oder?
Was meinst du mit mehrfach verwendet? Die Meldung kommt immer wenn sie aufgerufen wird. (von verschiedenen notifys, oder manuell über die Kommandozeile)
Ich habe unmittelbar vor der Definition und unmittelbar nach der Definition einen Logeintrag erstellen lassen und es ist definitiv diese Zeile.
Hier die beiden Funktionen:
sub helios_dec_level($$){
my ($dev,$level) = @_;
my $req_level = ReadingsVal($dev,"req_level$level","0");
my $new_level = $req_level - 1;
fhem("setreading $dev req_level$level $new_level");
}
sub helios_calc_level($){
my ($dev) = @_;
my $req_level4 = ReadingsVal($dev,"req_level4","0");
my $req_level3 = ReadingsVal($dev,"req_level3","0");
my $req_level2 = ReadingsVal($dev,"req_level2","0");
my $req_level1 = ReadingsVal($dev,"req_level1","0");
my $level = ReadingsVal($dev,"v00102","0");
if($req_level4 != 0){
if($level != 4){
fhem("setreading $dev v00102 4");
HeliosKWL($dev,"v00102=4");
Log 1, "Helios: $dev Stufe 4 aktiviert!";
}
}elsif($req_level3 != 0){
if($level != 3){
fhem("setreading $dev v00102 3");
HeliosKWL($dev,"v00102=3");
Log 1, "Helios: $dev Stufe 3 aktiviert!";
}
}elsif($req_level2 != 0){
if($level != 2){
fhem("setreading $dev v00102 2");
HeliosKWL($dev,"v00102=2");
Log 1, "Helios: $dev Stufe 2 aktiviert!";
}
}elsif($req_level1 != 0){
if($level != 1){
fhem("setreading $dev v00102 1");
HeliosKWL($dev,"v00102=1");
Log 1, "Helios: $dev Stufe 1 aktiviert!";
}
}
}
Grüße
Hugo
Zitat von: hugomckinley am 04 Juli 2017, 23:18:16
Nur zum Verständnis: Die beiden Funktionen im at werden beim Definieren des at in keinster Weise interpretiert/ausgewertet, oder?
ich denke nicht. (aber durch die verschiedenen "möglichkeiten" / aufrufebenen (fhem, perl, semikolon verdoppeln, geschweifte klammern... usw.), mache ich da oft auch trial-and-error ;)
das findest du aber heraus, wenn du logausgaben in die funktionen reinbaust. die sollten dann natürlich nicht beim anlegen ausgeführt werden.
Nein, da kommt nichts. Es liegt definitiv an dieser Zeile.
Ich werde da in den nächsten Tagen etweas forschen wenn ich Zeit habe.
Danke für die Tipps.
Grüße
Hugo