[gelöst] Umwandlung von Komma nach Punkt / sprintf

Begonnen von Heimweh, 30 August 2019, 12:11:30

Vorheriges Thema - Nächstes Thema

Heimweh

Hallo, ich hole mit über httpmod aus meiner Heizung die Außentemperatur ab.
Mit dem folgenden sprintf wird aber eine Komma statt einem Punkt übernommen

{sprintf("%.1f Grad",int(ReadingsVal($name,"AT_Eta",0)))}

Wie kann ich denn das Komma durch einen Punkt ersetzen lassen? Es führt in verschiedensten Modulen zu Problemen wenn ich mein Logfile richtig interpretiere...
(isn't numeric)
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

Otto123

#1
Hi,

passiert bei  mir nicht
{sprintf("%.1f Grad",int(10.2))} aber Gegenfrage: welchen Sinn macht das?
Mit int()schneidest Du die Kommastelle weg, da brauchst Du doch dann auch kein sprintf("%.1f) mehr?

Was gibt denn {ReadingsVal($name,"AT_Eta",0)}zurück?
Du musst natürlich $name ersetzen in das Device wo der Code oben wirklich ausgelöst wird :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heimweh

Hallo Otto, um ehrlich zu sein - ich habe mir diese httpmod Abfragen aus Codeschnipseln zusammengeschustert, aus mangeldem Wissen...

Die Heizung gibt folgendes zurück:


<eta xmlns="http://www.eta.co.at/rest/v1"version="1.0">


<value uri="/user/var/40/10241/0/0/12197"strValue="27,6" unit="°C" decPlaces="1"scaleFactor="10"advTextOffset="0">276</value>

</eta>


Und das Device:


Internals:
   BUSY       0
   CHANGED   
   DEF        http://192.168.178.58:8080/user/var/40/10241/0/0/12197 60
   FUUID      5cf64a97-f33f-55ed-e1a9-4aaf472c01afa14b
   Interval   60
   LASTSEND   1567166008.81667
   MainURL    http://192.168.178.58:8080/user/var/40/10241/0/0/12197
   ModuleVersion 3.5.9 - 13.2.2019
   NAME       aussentempEta
   NOTIFYDEV  global
   NR         317
   NTFY_ORDER 50-aussentempEta
   STATE      27.0 Grad
   TRIGGERTIME 1567166068.81577
   TRIGGERTIME_FMT 2019-08-30 13:54:28
   TYPE       HTTPMOD
   addr       http://192.168.178.58:8080
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl http://192.168.178.58:8080/user/var/40/10241/0/0/12197
   header     
   host       192.168.178.58
   httpheader HTTP/1.0 200 OK
Content-Length: 235
Content-Type: application/xml;charset=UTF-8
Cache-Control: no-cache
Date: Fri, 30 Aug 2019 13:53:47 GMT
   httpversion 1.0
   hu_blocking 0
   hu_filecount 5
   hu_port    8080
   hu_portSfx :8080
   ignoreredirects 0
   loglevel   4
   path       /user/var/40/10241/0/0/12197
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.178.58:8080/user/var/40/10241/0/0/12197
   value      0
   QUEUE:
   READINGS:
     2019-08-30 13:53:28   AT_Eta          27,6
     2019-08-30 13:49:31   AT_Eta_avg_day  19.4
     2019-08-30 13:49:31   AT_Eta_avg_month 19.6
     2019-08-30 13:49:31   AT_Eta_cum_day  963472
     2019-08-30 13:49:31   AT_Eta_cum_month 51759229
     2019-08-30 13:19:32   AT_Eta_max_day  27.0
     2019-08-04 19:13:33   AT_Eta_max_month 37.0
     2019-08-30 05:33:04   AT_Eta_min_day  16.0
     2019-08-21 05:08:38   AT_Eta_min_month 8.0
     2019-08-30 13:53:28   temperature     27,6
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.178.58:8080/user/var/40/10241/0/0/12197
     value      0
   defptr:
     readingBase:
       AT_Eta     reading
     readingNum:
       AT_Eta     01
     readingOutdated:
     requestReadings:
       update:
         AT_Eta     reading 01
   sslargs:
Attributes:
   alexaName  aussentemperatur
   alexaRoom  alexaroom
   alias      Eta Aussentemperatur
   enableControlSet 1
   event-min-interval AT_Eta:3600
   event-on-change-reading .*
   genericDeviceType thermometer
   group      ETA Heizung
   icon       temp_temperature
   reading01Name AT_Eta
   reading01Regex strValue="([\d,-]+)"
   room       EG_Temperaturen,Wetter,alexa
   stateFormat {no warnings 'numeric' ; sprintf("%.1f Grad",int(ReadingsVal($name,"AT_Eta",0)))}
   userReadings temperature { ReadingsVal("aussentempEta","AT_Eta",0) }
   userattr   event-min-interval event-on-change-reading reading01Name reading01Regex readingsExpr1 stateFormat verbose

RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

CoolTux

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

amenomade

#4
Ja, und der will einen Punkt ;)
Mit reading01OExpr kann man das Reading umformattieren. Siehe CommandRef

reading01OExpr {$val=~s/,/\./; return $val;}
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

#5
aber es gibt das Reading doch -> temperature
{sprintf("%.1f Grad",int(ReadingsVal($name,"temperature",0)))}

Aber um die Frage zu beantworten, zum probieren in der FHEM Kommandozeile:
{my $val=ReadingsVal("aussentempEta","AT_Eta",0);;$val =~ s/,/\./;;$val}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heimweh

Zitat von: Otto123 am 30 August 2019, 14:09:43
aber es gibt das Reading doch -> temperature
{sprintf("%.1f Grad",int(ReadingsVal($name,"temperature",0)))}

Ja das Reading gibt es, aber leider mit Komma...

Aber um die Frage zu beantworten, zum probieren in der FHEM Kommandozeile:
{my $val=ReadingsVal(aussentempEta,"AT_Eta",0);;$val =~ s/,/\./;;$val}

Da kommt die Meldung: Bareword "aussentempEta" not allowed while "strict subs" in use at (eval 15717) line 1.
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

Heimweh

Zitat von: amenomade am 30 August 2019, 14:02:52
Ja, und der will einen Punkt ;)
Mit reading01OExpr kann man das Reading umformattieren. Siehe CommandRef

reading01OExpr {$val=~s/,/\./; return $val;}

Danke. Das habe ich jetzt mal reingenommen, aber es ist noch immer ein Komma  :-[
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

amenomade

Mach ein reread, und zeig wieder ein "list"
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

Zitat von: Heimweh am 30 August 2019, 14:17:05
Da kommt die Meldung: Bareword "aussentempEta" not allowed while "strict subs" in use at (eval 15717) line 1.

Da warst Du zu schnell, habe ich doch noch korrigiert :)

ZitatJa das Reading gibt es, aber leider mit Komma...
Und ich hatte Matsch auf den Augen :( -sorry
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heimweh

Zitat von: Otto123 am 30 August 2019, 14:39:40
Da warst Du zu schnell, habe ich doch noch korrigiert :)
Und ich hatte Matsch auf den Augen :( -sorry

Guten Morgen Otto, das klappt! Die Temp wird mit Punkt angezeigt. Wohin muss diese Umwandlung in meinem Device?

Zitat von: amenomade

Ich weiss nicht wo ich Deinen Code gestern eingefügt hab, ich habe kein Feld mit Reading01OExpr - nur Name und Regex...
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

Otto123

Moin,
Zitat von: Heimweh am 31 August 2019, 09:36:19
Guten Morgen Otto, das klappt! Die Temp wird mit Punkt angezeigt. Wohin muss diese Umwandlung in meinem Device?
Weiß ich auch nicht, aber dein Original:
{sprintf("%.1f Grad",int(ReadingsVal($name,"AT_Eta",0)))}
sollte so funktionieren (nicht getestet)
{sprintf("%.1f Grad",{my $val=ReadingsVal($name,"AT_Eta",0);$val =~ s/,/\./;return $val})}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

amenomade

Zitat von: amenomade

Ich weiss nicht wo ich Deinen Code gestern eingefügt hab, ich habe kein Feld mit Reading01OExpr - nur Name und Regex...
Das weiss ich auch nicht.
Einfach in der Kommandozeile:
attr aussentempEta reading01OExpr {$val=~s/,/\./; return $val;}
Dann set aussentempEta reread

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Heimweh

Zitat von: Otto123 am 31 August 2019, 11:05:20
Moin,Weiß ich auch nicht, aber dein Original:
{sprintf("%.1f Grad",int(ReadingsVal($name,"AT_Eta",0)))}
sollte so funktionieren (nicht getestet)
{sprintf("%.1f Grad",{my $val=ReadingsVal($name,"AT_Eta",0);$val =~ s/,/\./;return $val})}

Gruß Otto

Guten Morgen Otto, dass habe ich versucht, klappt leider nicht mit folgendem Fehler  :'(

syntax error at (eval 2382974) line 1, near ";$val "
Global symbol "$val" requires explicit package name (did you forget to declare "my $val"?) at (eval 2382974) line 1.
Global symbol "$val" requires explicit package name (did you forget to declare "my $val"?) at (eval 2382974) line 1.
syntax error at (eval 2382974) line 1, near "})"
syntax error at (eval 2382974) line 1, near "}}"
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

Heimweh

Zitat von: amenomade am 02 September 2019, 00:37:27
Das weiss ich auch nicht.
Einfach in der Kommandozeile:
attr aussentempEta reading01OExpr {$val=~s/,/\./; return $val;}
Dann set aussentempEta reread


Das funktioniert auch nicht. Ebenfalls ein Fehler:

Invalid Expression {$val=~s/,/\./
Unknown command return, try help.
Unknown command }, try help.
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,