Werte aus XML Seite in FHEM anzeigen

Begonnen von MadMax75, 28 Februar 2016, 14:13:32

Vorheriges Thema - Nächstes Thema

MadMax75

Hallo zusammen,

ich bin verzweifelt am suchen (im Netz und im Forum) wie man Werte aus einer XML Seite in FHEM anzeigen und als Bedienung für eine Schaltung verwenden kann.

Die XML Seite (von einem IP Thermometer) sieht folgendermaßen aus:

<root xmlns="http://www.papouch.com/xml/papago/act">
<sns id="1" name="Sensor A" type="1" status="0" unit="0" val="22.1" w-min="-55.0" w-max="125.0"/>
<sns id="2" name="Sensor B" type="1" status="0" unit="0" val="22.1" w-min="-55.0" w-max="125.0"/>
<status level="2" location="Pool Temperatur" time="02/28/2016 9:09:24"/>
</root>

Mit HTTPMOD habe ich bereits gefühlte 100 erfolglose Versuche hinter mir.

In den Anleitungen zu FHEM habe ich leider nichts gefunden was mit hilft.

Daher meine Frage an die Community.

DANKE im voraus

mfg
Markus

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

MadMax75

Danke für den Hinweis. Leider habe ich es immer noch nicht hinbekommen. :-[

Was ich bisher habe - aber leider nicht funktioniert:

define Temperaturen HTTPMOD http://192.168.1.100/fresh.xml 60
attr Temperaturen userattr readingsName_Pooltemperatur Pooltemeratur

Das dürfte meiner Meinung nach so falsch nicht sein.

Aber der Regex eintrag ist mir absolut unklar - habe schon vieles versucht, leider kein Erfolg.

Ich möchte aus der XML Seite von einem oder beiden Sensoren die Temperatur (val) wiedergeben.


CoolTux

Zitat von: MadMax75 am 28 Februar 2016, 16:58:41
Danke für den Hinweis. Leider habe ich es immer noch nicht hinbekommen. :-[

Was ich bisher habe - aber leider nicht funktioniert:

define Temperaturen HTTPMOD http://192.168.1.100/fresh.xml 60
attr Temperaturen userattr readingsName_Pooltemperatur Pooltemeratur

Das dürfte meiner Meinung nach so falsch nicht sein.

Aber der Regex eintrag ist mir absolut unklar - habe schon vieles versucht, leider kein Erfolg.

Ich möchte aus der XML Seite von einem oder beiden Sensoren die Temperatur (val) wiedergeben.


define Temperaturen HTTPMOD http://192.168.1.100/fresh.xml 60
attr Temperaturen readingsName_temperature temperature
attr Temperaturen readingsRegex_temperature <hier die korrekte Regex>

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

ernst1024

Vielleicht hilft das hier:

so kommt die Meldung bei mir an:

HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 86 Connection: close Access-Control-Allow-Origin: * 8266_f_Aussen --- Status Anzahl Sensoren : 1 ROM : 402552363516421481 Temp : 5.69

Ich isoliere also Temp: 5.69 wobei der Wert natürlich auch ins minus gehen kann. Das hatte ich anfangs in meinem regex nicht berücksichtigt. Jetzt ein Auszug aus meiner fhem.cfg mit der entscheidenden Zeile:  attr 8266_f_Aussen reading1Regex Temp : ([\-\d\.]+)

Also würde ich mal in deinem Fall probieren mit reading1Regexw-min=" ([\-\d\.]+) und mal sehen was er ausspuckt. RegExp ist einen Wissenschaft für sich, da wollte ich mich auch mal intensiver mit beschäftigen .... aber

define 8266_f_Aussen HTTPMOD http://192.168.2.116/status 60
attr 8266_f_Aussen userattr event-min-interval event-on-change-reading icon reading1Name reading1Regex requestData.* requestHeader requestHeader.* stateFormat
attr 8266_f_Aussen event-min-interval 600
attr 8266_f_Aussen event-on-change-reading temperature
attr 8266_f_Aussen group Temperatur-Sensoren
attr 8266_f_Aussen icon it_wifi
attr 8266_f_Aussen reading1Name temperature
attr 8266_f_Aussen reading1Regex Temp : ([\-\d\.]+)
attr 8266_f_Aussen requestHeader.* 1
attr 8266_f_Aussen room Wohnung
attr 8266_f_Aussen stateFormat {sprintf("T: %.2f ", ReadingsVal($name,"temperature",0))}
Gruß Ernst

MadMax75

Danke für die schnellen Rückmeldungen.
Leider komme ich nicht wirklich weiter.

Bei dem Vorschlag von CoolTux bekomme ich nur ??? als Rückmeldung. Ich denke  ich scheitere an der korrekten Regex
Vorschlag von Ernst habe ich auch versucht. Hier bekomme ich 0,00 als Rückmeldung.

Da ich 2 Temperaturen habe würde ich gerne den Namen und den Wert von beiden anzeigen.

<sns id="1" name="Sensor A" type="1" status="0" unit="0" val="22.1" w-min="-55.0" w-max="125.0"/>
<sns id="2" name="Sensor B" type="1" status="0" unit="0" val="22.1" w-min="-55.0" w-max="125.0"/>

Soll so ungefähr aussehen:

Sensor A 22.1 °C
Sensor B 22.1 °C

Ich zweifle derzeit schon echt an mir - war echt der Meinung das geht ohne große Probleme.

Bin für jede Rückmeldung dankbar

Icinger

Regex Sensor A:
Sensor.A.*val=.(-?\d*\.?\d*)

Regex Sensor B:
Sensor.B.*val=.(-?\d*\.?\d*)
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

CoolTux

Die Herausforderungen besteht darin Deine eine Zeile Regex auf zwei Treffer an zu wenden.

Einmal brauchst du alles nach name=" oder auch ID=" bis zum nächsten " und dann noch mal alles ab val=" bis zum nächsten " und das val lässt Du dann als Readingwert schreiben.

Die attr Zeilen Änderst Du so das Dein Reading Sensor A heißt.
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

MadMax75

Danke für die Antworten - es funktioniert :) :D

Die Lösung:
readingsRegex_Pooltemperatur sns id="1".*val=.(-?\d*\.?\d*)
readingsRegex_RL-Temperatur sns id="2".*val=.(-?\d*\.?\d*)