at-Definition erzeugt Fehlermeldung von Readingsgroup

Begonnen von hugomckinley, 01 Juli 2017, 23:37:53

Vorheriges Thema - Nächstes Thema

hugomckinley

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
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

marvin78

Der Kontext fehlt. lists von beteiligten Devices (readingsGroup, at), Code der sub...

hugomckinley

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
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

KernSani

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...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

nils_

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"
viele Wege in FHEM es gibt!

hugomckinley

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
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

nils_

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.
viele Wege in FHEM es gibt!

hugomckinley

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
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...