Jetzt die Temperaturen draußen kälter werden, ist mit aufgefallen, dass in der smartVISU keine Minuszeichen angezeigt werden.
FHEM
Readings
state -4.10 °C
fronthem
SunTracer.Temp:
converter NumDisplay
device AussenTempMin
reading state
set
type item
Habt Ihr auch das Problem?
Welches Widget nutzt du für die Anzeige und welche Version der smartVISU?
smartVisu 2.9
{{ basic.float('SunTracer.Temp1', 'SunTracer.Temp', 'temp') }}
de.ini
temp = "%01,1f °C"
Ich kann das in smartVISU direkt nicht nachvollziehen. Das Problem liegt also wahrscheinlich entweder auf Seite von fronthem oder am Treiber.
Damit bin ich leider der falsche um weiterhelfen zu können.
NumDisplay kann eigentlich. in der browser console was zu sehen ? Direct geht an gleicher Stelle geht ? Evtl alte fhconverter Datei ?
Ich hatte das Problem auch mal - bin mir aber nicht mehr sicher was die Lösung war.
Teste mal mit einem geschützten Leerzeichen   sieht bei mir so aus:
Garten:
{{ basic.float('Aussen.temperatur', 'Aussen.temperatur.Luft', ' °C') }}
Gruß Gigafix
@Gigafix:
Das Leerzeichen brachte keinen Erfolg
@herrmannj/smai:
Ich habe vor einiger Zeit am fronthem gemäß "fronthem + Plots + status.log für smartVISU 2.9" (https://forum.fhem.de/index.php/topic,86584 (https://forum.fhem.de/index.php/topic,86584)) Dinge geändert. Die Diagramme aus der mySQL-DB lassen sich seither darstellen.
Ich habe meine alte Version "smartVISU 2.8" nochmal aktiviert und auch dort fehlt das Minus. Ich kann allerdings nicht sagen, ob es letztes Jahr noch da war ;)
Die fhconverter.pm entspricht der https://github.com/herrmannj/fronthem/tree/master/FHEM (https://github.com/herrmannj/fronthem/tree/master/FHEM) - ist also 4 Jahre alt. Gibt es eine neuere?
Die Stelle aus der fhconverter:
sub NumDisplay(@)
{
my ($param) = @_;
my $cmd = $param->{cmd};
my $gad = $param->{gad};
my $gadval = $param->{gadval};
my $device = $param->{device};
my $reading = $param->{reading};
my $event = $param->{event};
my @args = @{$param->{args}};
my $cache = $param->{cache};
if ($param->{cmd} eq 'get')
{
$event = ($reading eq 'state')?main::Value($device):main::ReadingsVal($device, $reading, '0');
$param->{cmd} = 'send';
}
if ($param->{cmd} eq 'send')
{
return "NumDisplay converter got [$event] from $device, $reading but cant interpret it as a number" unless $event =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/;
$event = $1;
my $format = (@args)?$args[0]:"%.1f";
$param->{gad} = $gad;
$param->{gadval} = sprintf($format, $1);
$param->{gads} = [];
return undef;
}
elsif ($param->{cmd} eq 'rcv')
{
return 'done'; # only a display, no set
}
elsif ($param->{cmd} eq '?')
{
return 'usage: TBD!!!';
}
return undef;
}
Ich habe ein ein Userreading angelegt, mit dem Code aus der fhconverter.pm.
userReadings
Test { my $test = ReadingsVal( $name, 'state', '' ); return unless $test =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/; $test = $1; }
Ich erhalte ebenfalls eine Zahl ohne Minus.
Readings
Test 4.10
state -4.10 °C
Ist das bei Euch auch so?
Könnte das jemand ausprobieren?
PS: Ich habe keine Ahnung was /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/ bedeutet :o
Ja, ich schau mir das morgen an.
Das ps ist eine regex um Dezimalzahlen zu filtern, die kann aber Vorzeichen.
Reicht nicht dieser Regex: ([+-]{0,1}\d+[.]{0,1}\d*) oder habe ich ich nicht alle Fälle betrachtet? Auf jeden Fall wird mit \D* das + oder - davor weggeschnitten.
Es würde funktionieren - in meinem Fall :D
userReadings
Test { my $test = ReadingsVal( $name, 'state', '' ); return unless $test =~ /\D*([+-]{0,1}\d+[.]{0,1}\d*).*?/; $test = $1; }
Test2 { my $test = ReadingsVal($name, 'getG1', ''); return unless $test =~ /([+-]{0,1}\d+[.]{0,1}\d*)/; $test = $1; }
Ich erhalte ebenfalls eine Zahl ohne Minus.
Readings
Test 4.30
Test2 -4.30
state -4.30 °C
Das "\D" ist da um Fälle wie "T: -1.5" zu behandeln und die "-1.5" zu extrahieren.
Probiere mal diese regex bitte:
^[^-\d]*(-?[0-9]\d*(?:\.\d+)?).*$
"T: -1.5" funktioniert auch mit dem Regex:
([+-]{0,1}\d+[.]{0,1}\d*)
-1.5
Hingegen liefert
^[^-\d]*(-?[0-9]\d*(?:\.\d+)?).*$
T: -1.5
Beides mit folgendem Link getestet: https://regex101.com/
Der converter nimmt die erste capture group, nicht das full match.
Aber Du hast Recht, da geht dann beides. Im Zweifel ist einfach besser, also Deine. :)
eingecheckt.
Sehr schön :) Es funktioniert!
Könntest Du auch noch "NumDisplay" korriegieren?
yes. Danke @all