FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ToM_ToM am 28 März 2016, 13:42:37

Titel: [gelöst] Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: ToM_ToM am 28 März 2016, 13:42:37
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 ;)
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag 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  ;)
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: fhainz am 28 März 2016, 15:47:28
Versuch mal reading01Format Attribut auf %.3f zu setzen.
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: ToM_ToM am 29 März 2016, 10:20:32
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
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: frank am 29 März 2016, 12:32:15
wie schaut es hiermit aus? komma wird durch punkt ersetzt.
attr BenzinpreisePL_Apexim reading01OExpr $val =~ s/,/\./
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag 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
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: CoolTux am 29 März 2016, 14:31:44
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?
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: frank am 29 März 2016, 14:36:05
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?
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: ToM_ToM am 29 März 2016, 14:44:58
Im Reading. Das State lasse ich erst mal außen vor solange wie ich den Wert im Reading nicht korrekt hinbekomme.

VG, Thomas
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: betateilchen am 29 März 2016, 14:45:14
@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.
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: betateilchen am 29 März 2016, 15:12:28
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)
Titel: Antw:Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: ToM_ToM am 29 März 2016, 15:34:32
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
Titel: Antw:[gelöst] Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: Hauswart am 09 Mai 2016, 23:03:09
Ich bin heute wieder darüber gestolpert - die Lösung:
attr httpmod reading01Expr $val =~ s/,/\./; $val;
Titel: Antw:[gelöst] Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: Steffen am 10 Juli 2018, 17:53:19
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
Titel: Antw:[gelöst] Komma durch Punkt ersetzen nach HTTPMOD-Abfrage
Beitrag von: ToM_ToM am 11 Juli 2018, 11:11:03
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