FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hugomckinley am 01 Juli 2017, 23:37:53

Titel: at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: hugomckinley am 01 Juli 2017, 23:37:53
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
Titel: Antw:at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: marvin78 am 02 Juli 2017, 07:29:20
Der Kontext fehlt. lists von beteiligten Devices (readingsGroup, at), Code der sub...
Titel: Antw:at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: hugomckinley am 02 Juli 2017, 10:33:31
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
Titel: Antw:at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: KernSani am 02 Juli 2017, 23:15:40
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...
Titel: Antw:at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: nils_ am 03 Juli 2017, 13:29:11
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"
Titel: Antw:at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: hugomckinley am 04 Juli 2017, 23:18:16
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
Titel: Antw:at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: nils_ am 05 Juli 2017, 08:50:55
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.
Titel: Antw:at-Definition erzeugt Fehlermeldung von Readingsgroup
Beitrag von: hugomckinley am 05 Juli 2017, 11:10:09
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