Ich bin in der Fehleranalyse etwas weiter gekommen.
Code in 99_fronthemUtils.pm Zeile 774/775 :
$resonse[$i] =~ /([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}:[0-9]{2})\s+([0-9\.]+)/;
push(@{$data[0]->{plotdata}[$i]}, main::fronthem_TimeStamp($1));
Dort wird mit $1 das erste Ergebnis der vorherigen Regex an die Sub fronthem_TimeStamp übergeben. Im Fall einer Zeichenkette '2018-12-28_00:15:13 -1.0' wird $1 nicht gefüllt. Damit kann die Funktion keinen Timestamp ermitteln, was zu einem Fehler und Abbruch führt.
Das Verhalten kann ich in FHEM mit einer einfachen Funktion, z.B. in einem Notify, reproduzieren:
Test:.* {
my $msg = '2018-12-28_00:15:13 -1.0';
$msg =~ /([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}:[0-9]{2})\s+([0-9\.]+)/;
Log 3, ("msg: $msg, 1: $1, 2: $2")
}
Das führt zu folgenden FHEM-Fehler-Log-Einträgen:
2018.12.29 13:51:34.430 1: PERL WARNING: Use of uninitialized value $1 in concatenation (.) or string at (eval 34321) line 4.
2018.12.29 13:51:34.430 3: eval: my $EVTPART0='off';my $NAME='Test';my $SELF='n_test';my $TYPE='dummy';my $EVENT='off';{
my $msg = '2018-12-28_00:15:13 -1.0';
$msg =~ /([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}:[0-9]{2})\s+([0-9\.]+)/;
Log 3, ("msg: $msg, 1: $1, 2: $2")
}
2018.12.29 13:51:34.431 1: PERL WARNING: Use of uninitialized value $2 in concatenation (.) or string at (eval 34321) line 4.
2018.12.29 13:51:34.431 3: eval: my $EVTPART0='off';my $NAME='Test';my $SELF='n_test';my $TYPE='dummy';my $EVENT='off';{
my $msg = '2018-12-28_00:15:13 -1.0';
$msg =~ /([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}:[0-9]{2})\s+([0-9\.]+)/;
Log 3, ("msg: $msg, 1: $1, 2: $2")
}
Das sieht irgendwie nach einem Perl-Problem aus. Ab hier bin ich mit meinem Latein am Ende. Vielleicht kann jemand das Verhalten in seiner Installation überprüfen. Ich habe Perl v5.24.1 installiert.
Update: Ich habe die Regex in 99_fronthemUtils.pm von
$resonse[$i] =~ /([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}:[0-9]{2})\s+([0-9\.]+)/;
nach
$resonse[$i] =~ /([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}:[0-9]{2}:[0-9]{2})(.*)([0-9\.]+)/;
geändert. Damit werden die Rückreferenzen der Regex korrekt gefüllt - und das Problem ist weg.
Ein kleines Problem bleibt: das neue Regex schneidet die Dezimalstelle des $2-Wertes ab (aus -1.0 wird -1.).
Vielleicht hat hier ein Regex-Experte noch einen besseren Vorschlag.
Viele Grüße