[gelöst] Komma durch Punkt ersetzen nach HTTPMOD-Abfrage

Begonnen von ToM_ToM, 28 März 2016, 13:42:37

Vorheriges Thema - Nächstes Thema

ToM_ToM

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 ;)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Intruder1956

wenn dort niemand eine Lösung für dich hat.
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  ;)
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

fhainz

Versuch mal reading01Format Attribut auf %.3f zu setzen.

ToM_ToM

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
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

frank

wie schaut es hiermit aus? komma wird durch punkt ersetzt.
attr BenzinpreisePL_Apexim reading01OExpr $val =~ s/,/\./
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

ToM_ToM

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
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

CoolTux

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
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?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

frank

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?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

ToM_ToM

Im Reading. Das State lasse ich erst mal außen vor solange wie ich den Wert im Reading nicht korrekt hinbekomme.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

betateilchen

@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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ToM_ToM

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
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Hauswart

Ich bin heute wieder darüber gestolpert - die Lösung:
attr httpmod reading01Expr $val =~ s/,/\./; $val;
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

Steffen

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

ToM_ToM

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
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8