FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Muschelpuster am 04 Oktober 2017, 12:18:19

Titel: XML mit HTTPMOD einlesen
Beitrag von: Muschelpuster am 04 Oktober 2017, 12:18:19
Moin zusammen,

Irgendwie bin ich mal wieder zu dusselig. Ich habe folgendes HTTPMOD definiert:defmod httpmod_test HTTPMOD http://172.30.1.127/CMD0/box_info.xml?xsl=box_info.xsl&m3=&help=General/Info 15
attr httpmod_test userattr reading01Name reading01XPath-Strict
attr httpmod_test reading01Name Uptime
attr httpmod_test reading01XPath-Strict //sys/@uptime


Zurück bekommt das Modul:<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="box_info.xsl"?>
<info>
<modes modes="!firm!fw-save!boot-save!fullboot!"/>
<sys version="123, Hardware[1300] " hardware-id="IP222-46-05-79" serial="123456789579" coder-chs="2" sntp="172.30.1.1" dhcp0-cfg-mode="client" uptime="6818" date="04.10.2017 11:07"/>
</info>


So bekomme ich auch nach meinen spärlichen XPath-Kenntnissen völlig korrekt ein reading Uptime mit dem Inhalt uptime="6818". Aber natürlich möchte ich nur den Wert haben und daher habe ich folgendes gemacht: attr httpmod_test reading01XPath-Strict //sys/@uptime/text()Nun wird mein Reading leider nicht mehr aktualsiert. Aber warum?

unwissende Grüße
Niels
Titel: Antw:XML mit HTTPMOD einlesen
Beitrag von: viegener am 04 Oktober 2017, 13:30:16
Ohne, dass ich das ausprobiert hätte müsste der Ausdruck um den Wert zu bekommen einfach ein string()-operator auf dem xpath  sein:
string(//sys/@uptime)
Titel: Antw:XML mit HTTPMOD einlesen
Beitrag von: Muschelpuster am 04 Oktober 2017, 13:43:55
Jo, danke - so geht es.
Kann ich jetzt auch noch die Sekunden gleich in (Tage,) Stunden & Minuten umrechnen oder verbietet sich das, weil ich mich hier in der XPath-Welt bewege?

optimierungswillige Grüße
Niels
Titel: Antw:XML mit HTTPMOD einlesen
Beitrag von: viegener am 04 Oktober 2017, 13:52:12
Ich kann jetzt nicht sagen, ob das gut in der xpath-Welt geht, aber in HTTPMod wäre dafür eigentlich reading...OExpr zuständig, da müsste es möglich sein einen perl-Ausdruck zu hinterlegen, der die Umwandlung macht, alternativ wäre ein userreading oder gar eine myutils-Funktion der richtige Ort, wenn die berechnung zu kompliziert wird