fronthem / smartVISU / fehlendes Minus mit NumDisplay und NumDirect

Begonnen von GammaTwin, 31 Dezember 2018, 12:00:18

Vorheriges Thema - Nächstes Thema

GammaTwin

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?

smai

Welches Widget nutzt du für die Anzeige und welche Version der smartVISU?

GammaTwin

smartVisu 2.9

{{ basic.float('SunTracer.Temp1', 'SunTracer.Temp', 'temp') }}

de.ini
temp = "%01,1f °C"

smai

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.

herrmannj

NumDisplay kann eigentlich. in der browser console was zu sehen ? Direct geht an gleicher Stelle geht ? Evtl alte fhconverter Datei ?

Gigafix

Ich hatte das Problem auch mal - bin mir aber nicht mehr sicher was die Lösung war.
Teste mal mit einem geschützten Leerzeichen &nbsp sieht bei mir so aus:

Garten:  
{{ basic.float('Aussen.temperatur', 'Aussen.temperatur.Luft', ' °C') }}


Gruß Gigafix
VM Synology DS918 | CubieTruck |2x HMLAN | HMUSB | 3x HMWLAN | CCU2 | MAX-Cube | nanoCUL | ZWDongle |

GammaTwin

@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) 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 - 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;
}

GammaTwin

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

herrmannj

Ja, ich schau mir das morgen an.

Das ps ist eine regex um Dezimalzahlen zu filtern, die kann aber Vorzeichen.

Chris46

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.

GammaTwin

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

herrmannj

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+)?).*$

Chris46

"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/

herrmannj

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.

GammaTwin

#14
Sehr schön :) Es funktioniert!

Könntest Du auch noch "NumDisplay" korriegieren?

herrmannj