Hallo Zusammen,
nachdem ich nun schon stundenlang mehrere Möglichkeiten ausprobiert habe, hoffe ich, dass mir von euch jemand helfen kann.
Ich frage Daten per HTTPMOD ab und das Ergebnis (Spritpresi für SuperE5 und Diesel) wird mit Komma dargestellt. Dieses Komma würde ich aber gerne gegen einen Punkt ersetzen.
Aktuell steht im Reading: Apexim_SuperE5: 1,130
Später soll dort dann aber stehen: Apexim_SuperE5: 1.130
define BenzinpreisePL_Apexim HTTPMOD http://www.apexim-ab.pl/de 600
attr BenzinpreisePL_Apexim room Benzinpreise
#Apexim
attr BenzinpreisePL_Apexim reading01Name Apexim_SuperE5
attr BenzinpreisePL_Apexim reading01Regex "Schwedt___Krajnik_Dolny":[\s]+\{[\s]+"super95":[\s]+"([\d\,]+)
attr BenzinpreisePL_Apexim reading02Name Apexim_Diesel
attr BenzinpreisePL_Apexim reading02Regex "Schwedt___Krajnik_Dolny":[\s]+\{[\s]+"super95":[\s]+"[\d\,]+",[\s]+"super98_plus":[\s]+"[\d\,]+",[\s]+"diesel":[\s]+"([\d\,]+)"[\s]+\}
#attr BenzinpreisePL_Apexim stateFormat { sprintf("E5 %.3f €, Diesel %.3f €", ReadingsVal($name,"Apexim_SuperE5",0), ReadingsVal($name,"Apexim_Diesel",0))}
#attr BenzinpreisePL_Apexim userReadings SuperE5Formatted { my $val = (ReadingsVal("$name", "Apexim_SuperE5", 0)); $val =~ s/,/\./g; return $val;}
# attr BenzinpreisePL_Apexim replacement01Mode text
# attr BenzinpreisePL_Apexim replacement01Regex [,]
# attr BenzinpreisePL_Apexim replacement01Value .
attr BenzinpreisePL_Apexim userattr reading01Name reading01Regex reading02Name reading02Regex
attr BenzinpreisePL_Apexim enableControlSet 1
attr BenzinpreisePL_Apexim timeout 5
Hat jemand eine Idee wie man das elegant lösen kann?
VG und frohe Ostern, Thomas ;)
wenn dort niemand eine Lösung für dich hat.
https://forum.fhem.de/index.php/topic,22554.msg430772.html#msg430772 (https://forum.fhem.de/index.php/topic,22554.msg430772.html#msg430772)
meinst es klappt hier ??
Aber kann ja sein, zweimal das gleiche Fragen = eine Antwort ;)
Versuch mal reading01Format Attribut auf %.3f zu setzen.
Hallo fhainz,
das funktioniert leider nicht da dann alles nach dem Komma abgeschnitten wird.
Ich habe es gerade noch mit dem replacement attribute probiert, aber da passiert irgendwie gar nichts.
define BenzinpreisePL_Apexim HTTPMOD http://www.apexim-ab.pl/de 600
attr BenzinpreisePL_Apexim userattr reading01Name reading01Regex reading02Name reading02Regex replacement01Value
attr BenzinpreisePL_Apexim enableControlSet 1
attr BenzinpreisePL_Apexim reading01Name Apexim_SuperE5
attr BenzinpreisePL_Apexim reading01Regex "Schwedt___Krajnik_Dolny":[\s]+\{[\s]+"super95":[\s]+"([\d\,]+)
attr BenzinpreisePL_Apexim replacement01Mode expression
attr BenzinpreisePL_Apexim replacement01Regex (\d+)[\,](\d+)
attr BenzinpreisePL_Apexim replacement01Value $1
wie schaut es hiermit aus? komma wird durch punkt ersetzt.
attr BenzinpreisePL_Apexim reading01OExpr $val =~ s/,/\./
Hallo frank,
auch hier wird alles ab dem Komma abgeschnitten.
Und dann wird aus 1,10 nur noch 1.
Das verfälscht leider das Ergebnis um ganze 10 Cent.
VG, Thomas
Zitat von: Intruder1956 am 28 März 2016, 14:35:18
wenn dort niemand eine Lösung für dich hat.
https://forum.fhem.de/index.php/topic,22554.msg430772.html#msg430772 (https://forum.fhem.de/index.php/topic,22554.msg430772.html#msg430772)
meinst es klappt hier ??
Aber kann ja sein, zweimal das gleiche Fragen = eine Antwort ;)
Viel interessanter ist doch, hier soll Komma durch Punkt ersetzt werden und im anderen Thread Punkt durch Komma. Was stimmt denn nun davon?
Zitat von: ToM_ToM am 29 März 2016, 14:16:29
Hallo frank,
auch hier wird alles ab dem Komma abgeschnitten.
Und dann wird aus 1,10 nur noch 1.
Das verfälscht leider das Ergebnis um ganze 10 Cent.
VG, Thomas
im reading oder in der übersicht, die du zusätzlich mit stateformat bearbeitest?
Im Reading. Das State lasse ich erst mal außen vor solange wie ich den Wert im Reading nicht korrekt hinbekomme.
VG, Thomas
@CoolTux es soll Komma durch Punkt ersetzt werden.
Das Problem ist, dass reading01OExpr offenbar nicht korrekt arbeitet und dass es gar kein Problem der regexp an sich ist.
Einfacher Test:
attr BenzinpreisePL_Apexim reading01OExpr $val =~ s/1/2/
liefert als Ergebnis einfach eine "2".
Wenn man in $val 1,10 stehen hat, sieht das für perl schon verdammt nach einem Array aus.
Es funktioniert über den Umweg mit userReadings:
attr BenzinpreisePL_Apexim userReadings reading01User {my $v = ReadingsVal('BenzinpreisePL_Apexim','Apexim_SuperE5','');; $v =~ tr/,/./;; return $v;;}
(http://up.picr.de/25027967oc.jpg)
Hey betateilchen,
vielen Dank. Deine Lösung funktioniert super. :D
Wie du siehst, hatte ich mit userReadings auch experimentiert, allerdings muss ich da irgendwas falsch gemacht haben.
VG, Thomas
Ich bin heute wieder darüber gestolpert - die Lösung:
attr httpmod reading01Expr $val =~ s/,/\./; $val;
Hallo!
Ist zwar schon her aber wollte jetzt nicht unbedingt ein neues Thema aufmachen, denn ich würde gerne anderes als im Thema angegeben den
Punkt durch ein Kommer austauschen, aber es klappt einfach nicht hier mein versuch:
Temperatur { my $val = (ReadingsVal("$name", "measured-temp", 0)); $val =~ s/./\,/; $val;}
Reading was geändert werden soll:
measured-temp 26.4
Wie könnte ich das ändern?
Mfg Steffen
ZitatPunkt durch ein Kommer austauschen, aber es klappt einfach nicht hier mein versuch:
Hi Steffen,
auf den ersten Blick würde ich sagen, du musst deinen Punkt maskieren da ein Punkt im Regex = beliebiges Zeichen bedeutet. Das Komma musst du nicht maskieren.
Also:
$val =~ s/\./,/;
Zweitens hätte ich gesagt, musst du hinten noch return vor $val schreiben.
Also:
Temperatur { my $val = (ReadingsVal("$name", "measured-temp", 0)); $val =~ s/\./,/; return $val;}
Probier es mal aus.
VG, Thomas