[HTTPMOD] XPath-Erweiterung

Begonnen von nesges, 02 Mai 2015, 03:17:48

Vorheriges Thema - Nächstes Thema

nesges

Ich habe HTTPMOD um die Möglichkeit XPath statt regulärer Ausdrücke zu verwenden um Inhalte zu extrahieren, erweitert. Die Änderung in HTTPMOD habe ich minimal gehalten und lediglich HTTPMOD_ExtractReading (Zeile 598ff) um die "Keywords" xpath: und xpath-strict: erweitert. Zwei Beispiele:

attr KINO_PRUEM reading01Regex xpath://div[@class="movie-title"]/a

attr FEED reading01Regex xpath-strict://item/title/text()

Mit xpath: kann HTML gematcht werden, mit xpath-strict nur wellformed XML. Dazu werden die Perl Module HTML::TreeBuilder::XPath bzw. XML::XPath::XMLParser verwendet. Es wird bei Verwendung dynamisch geprüft ob die Module vorhanden sind. D.h. Nutzer, die die Funktion nicht benötigen, müssen die Perl Module nicht nachinstallieren.

Bekanntes Problem: Sollte man einen Regex notieren wollen, der mit einem der Keywords beginnt, muss man den Mechanismus umgehen, zB so:

attr CAVEAT reading01Regex [x]path:

Prof. Dr. Peter Henning


SirUli

Hi nesges,

wirst du diese Änderungen in das reguläre Modul übernehmen lassen?

Viele Grüße,
Uli

nesges

Ich hatte Stefan Strobel, den Maintainer des Moduls, auf die Erweiterung hingewiesen, allerdings keine Antwort erhalten. Evtl. ist's bei ihm untergegangen - von mir aus kann's aber natürlich gerne übernommen werden.

StefanStrobel

Hallo Nesges,

Ich finde die Grundidee der Erweiterung gut und habe sie auch schon testweise eingebaut. Allerdings bin ich gerade dabei noch mehrere andere Kleinigkeiten ins Modul einzubauen und daher kommt eine neue Version erst wenn ich damit einen sinnvollen Stand erreicht habe. Ich bin auch nicht ganz so glücklich mit der Verwendung des Regex Attributes für xpath. Eventuell baue ich es noch so um, dass man ein explizites xpath Attribut verwenden kann. Das fände ich etwas eleganter.
Bis ich eine neue Version poste kann es noch eine Weile dauern, da ich momentan leider nur sehr wenig Zeit fürs Programmieren habe.

Gruß
    Stefan

nesges

Eine Trennung der Attribute fände ich selbst besser. Ich hatte die Idee einfach mit möglichst wenig Aufwand implementiert - saubere Lösungen sind aber natürlich höchst willkommen :) Danke, dass du's übernimmst!

SirUli


BKSolo

Ich verwende die Fussbodenheizungssteuerung Alpha 2 und will diese ins FHEM (auf Raspberry 2B) einbinden. Bereits erfolgreich bin ich mit HTTPMOD und habe die XML-Daten im FHEM Buffer. Nun gelingt es mir mit Regex nur Daten von der ersten Heizzone zu addressieren, ich habe aber vier Heizzonen. Beharrlich in den Foren, Internet etc. gesucht bin ich auf die X-Path Erweiterung gestossen.
Ich bekomme die FHEM Meldung "configfile: Please install XML::XPath and XML::XPath::XMLParser to use the xpath-strict-Option".  Hier komme ich nicht weiter. Die Installation muss sicher auf dem Raspberry OS gemacht werden. Was muss ich laden?


define Alpha2 HTTPMOD http://xxx.xxx.xxx.xxx/data/dynamic.xml 600
attr Alpha2 userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex stateFormat
attr Alpha2 comment Fussbodenheizung
attr Alpha2 group Fussbodenheizung
attr Alpha2 enableXPath-Strict 1
attr Alpha2 reading01Name Ist-Temperatur1
attr Alpha2 reading01Regex xpath-strict://Devices/HEATAREA [@nr="1"]/T_ACTUAL([\d\.]+)
attr Alpha2 reading02Name Soll-Temperatur1
attr Alpha2 reading02Regex <T_TARGET>([\d\.]+)
attr Alpha2 reading03Name Ist-Temperatur2
attr Alpha2 reading03Regex <T_ACTUAL>([\d\.]+)
attr Alpha2 reading04Name Soll-Temperatur2
attr Alpha2 reading04Regex <T_TARGET>([\d\.]+)
attr Alpha2 room Fussbodenheizung


Danke, Bruno
Raspberry PI 2/3 - CUL-433(V3) - CUL-868 (V3) - Jeelink 868 - 433 S/E Eigenbau
TX29DTH-IT - FHT80B - FHT80TF - FS20KSE
FHEMobile 3.7r803 - Fhem2Fhem - Alpha2 - OZW672 - TelegramBot

nesges

Das müssten die Pakete libxml-parser-perl und libxml-xpath-perl sein, also als root:

apt-get install libxml-parser-perl libxml-xpath-perl

BKSolo

Vielen Dank - hat funktioniert. Ich musste folgendes noch installieren:

sudo apt-get install libxml-TreeBuilder-perl


Jetzt konnte ich meine vier Heizzonen auslesen mit:

define Alpha2 HTTPMOD http://xxx.xxx.xx.xxx/data/dynamic.xml 600
attr Alpha2 userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex stateFormat
attr Alpha2 comment Fussbodenheizung
attr Alpha2 group Fussbodenheizung
attr Alpha2 enableXPath-Strict 1
attr Alpha2 reading01Name Ist-Temperatur1
attr Alpha2 reading01Regex xpath-strict://Devices/Device/HEATAREA [@nr="1"]/T_ACTUAL
attr Alpha2 reading02Name Soll-Temperatur1
attr Alpha2 reading02Regex  xpath-strict://Devices/Device/HEATAREA [@nr="1"]/T_TARGET
attr Alpha2 reading03Name Ist-Temperatur2
attr Alpha2 reading03Regex xpath-strict://Devices/Device/HEATAREA [@nr="2"]/T_ACTUAL
attr Alpha2 reading04Name Soll-Temperatur2
attr Alpha2 reading04Regex xpath-strict://Devices/Device/HEATAREA [@nr="2"]/T_TARGET
attr Alpha2 reading05Name Ist-Temperatur3
attr Alpha2 reading05Regex xpath-strict://Devices/Device/HEATAREA [@nr="3"]/T_ACTUAL
attr Alpha2 reading06Name Soll-Temperatur3
attr Alpha2 reading06Regex  xpath-strict://Devices/Device/HEATAREA [@nr="3"]/T_TARGET
attr Alpha2 reading07Name Ist-Temperatur4
attr Alpha2 reading07Regex xpath-strict://Devices/Device/HEATAREA [@nr="4"]/T_ACTUAL
attr Alpha2 reading08Name Soll-Temperatur4
attr Alpha2 reading08Regex xpath-strict://Devices/Device/HEATAREA [@nr="4"]/T_TARGET
attr Alpha2 room Fussbodenheizung
attr Alpha2 stateFormat {sprintf("Ist-Temperatur1: %s , Soll-Temperatur1: %s \n, Ist-Temperatur2: %s , Soll-Temperatur2: %s \n, Ist-Temperatur3: %s , Soll-Temperatur3: %s  \n, Ist-Temperatur4: %s , Soll-Temperatur4: %s  \n",  ReadingsVal($name,"Ist-Temperatur1",0), ReadingsVal($name,"Soll-Temperatur1",0), ReadingsVal($name,"Ist-Temperatur2",0), ReadingsVal($name,"Soll-Temperatur2",0),ReadingsVal($name,"Ist-Temperatur3",0), ReadingsVal($name,"Soll-Temperatur3",0), ReadingsVal($name,"Ist-Temperatur4",0), ReadingsVal($name,"Soll-Temperatur4",0))}


In FHEM bekomme ich nun die jeweils aktuellsten Angaben von Alpha2


Ist-Temperatur1: 22.3 , Soll-Temperatur1: 23.5 , Ist-Temperatur2: 22.5 , Soll-Temperatur2: 23.5 , Ist-Temperatur3: 23.0 , Soll-Temperatur3: 19.0 , Ist-Temperatur4: 22.9 , Soll-Temperatur4: 19.0


Jetzt kann ich noch das Filelog und gplot ergänzen damit ich eine Protokollierung der Raumtemperaturen habe.

Werde mir anschliessend auch noch überlegen wie ich über XML die Soll-Temperaturen im Alpha 2 ändern kann.

Ich bin sehr dankbar für die XPath-Erweiterung.

Bruno

Raspberry PI 2/3 - CUL-433(V3) - CUL-868 (V3) - Jeelink 868 - 433 S/E Eigenbau
TX29DTH-IT - FHT80B - FHT80TF - FS20KSE
FHEMobile 3.7r803 - Fhem2Fhem - Alpha2 - OZW672 - TelegramBot

BKSolo

Habe die Alpha 2 Fussbodenheizungssteuerung ins Fhem http://forum.fhem.de/index.php?topic=42040.0 dokumentiert.
Raspberry PI 2/3 - CUL-433(V3) - CUL-868 (V3) - Jeelink 868 - 433 S/E Eigenbau
TX29DTH-IT - FHT80B - FHT80TF - FS20KSE
FHEMobile 3.7r803 - Fhem2Fhem - Alpha2 - OZW672 - TelegramBot

pwfhem

Hallo zusammen,

(ich hatte die Frage zuerst im ALPHA2-thread -- es scheint aber eher ein XML-Problem zu sein, deshalb hier nochmal)
zuerst vielen Dank für die Anleitung für die ALPHA2-Integration.
Ich habe 2 ALPHA2 (1x 4-Kanal, 1x 8-Kanal) eingebunden. geht zuverlässig.
Allerdings musste ich unbedingt auf dblog wegen plot umstellen.
Danach funktionieren die Grafiken schön schnell.

Soweit die guten Nachrichten.
Die schlechte ist: ich habe irgendwo ein memory leak:
- alle 10min (das ist das XML-Abhol-Intervall) steigt der perl-Speicher (top, free)
- irgendwann ist dann Schluss und lowmemkill beendet perl

Hat jemand eine Idee, wie ich der Sache weiter auf die Spur kommen kann ?
Ich habe im Forum einen einzigen Hinweis auf XML und memory leak gefunden, komme aber nicht weiter.


update 01.12.15
- das reine Abholen des XML per HTTPMOD scheint nicht das Problem zu sein
- solange "enableXPath-Strict 0" ist, wird zwar nix erkannt, aber der Speicher steigt nicht
- erst wenn XML-Erkennung an ist, steigt der Speicherbedarf stetig


Peter

Umgebung:
- cubietruck
- Linux 3.4.110-sun7i on armv7l
- fhem.cfg: nur ALPHA2-XML-Abfrage aktiv (alles andere deaktiviert)
- FHEM - version
fhem.pl             10024 2015-11-28 08:02:51Z rudolfkoenig
98_autocreate.pm     9911 2015-11-16 07:52:18Z rudolfkoenig
93_DbLog.pm          9718 2015-10-29 15:05:52Z rapster
91_eventTypes.pm     8725 2015-06-10 09:50:06Z rudolfkoenig
01_FHEMWEB.pm        9988 2015-11-24 13:45:07Z rudolfkoenig
92_FileLog.pm       10007 2015-11-26 14:05:29Z rudolfkoenig
98_HTTPMOD.pm        9127 2015-08-24 18:43:31Z ststrobel
91_notify.pm         8953 2015-07-13 15:13:06Z rudolfkoenig
33_readingsGroup.pm  9513 2015-10-18 10:25:13Z justme1968
99_SUNRISE_EL.pm     9831 2015-11-08 19:13:09Z rudolfkoenig
98_SVG.pm            9577 2015-10-21 17:45:02Z rudolfkoenig
42_SYSMON.pm         9437 2015-10-11 17:46:08Z hexenmeister
98_telnet.pm         9927 2015-11-18 18:53:43Z rudolfkoenig
99_Utils.pm          7914 2015-02-08 11:14:10Z rudolfkoenig
98_weblink.pm        9861 2015-11-11 18:25:40Z rudolfkoenig

StefanStrobel

Hallo,

ich bin gerade dabei HTTPMOD stark zu überarbeiten und zu erweitern. Die Integration alternativer Parser (XPATH oder auch JSON statt Regex) ändert sich dabei auch und ich hatte beim Überarbeiten auch den Eindruck dass es im bisherigen Code ein Memory-Leak geben könnte.
Die neue Doku ist noch nicht fertig und einzelne Features fehlen noch, aber das meiste funktioniert bereits so dass ich in den nächsten Tagen eine Version zum Testen posten kann.

Gruss
    Stefan

pwfhem

Zitat von: StefanStrobel am 02 Dezember 2015, 07:47:43
Hallo,

ich bin gerade dabei HTTPMOD stark zu überarbeiten und zu erweitern. Die Integration alternativer Parser (XPATH oder auch JSON statt Regex) ändert sich dabei auch und ich hatte beim Überarbeiten auch den Eindruck dass es im bisherigen Code ein Memory-Leak geben könnte.
Die neue Doku ist noch nicht fertig und einzelne Features fehlen noch, aber das meiste funktioniert bereits so dass ich in den nächsten Tagen eine Version zum Testen posten kann.

Gruss
    Stefan

ok. schön.  danke.

StefanStrobel

Hallo,

die neue Version ist jetzt gepostet:
http://forum.fhem.de/index.php/topic,45176.0.html
Bitte schaut doch mal ob Ihr mit der neuen Variante klar kommt. Im Gegensatz zur bisherigen Syntax werden bei der neuen Syntax mehrere Ergebnisse eines XPath nicht mehr einfach zusammengepackt sondern in einzelne Readings gespeichert. Ich hoffe das ist ein Schritt in die richtige Richtung. Bei Bedarf könnte ich auch noch ein "joinMultipleHits" Attribut oder etwas ähnliches einbauen.
Die alte Syntax mit dem "xpath:" in einer Regex würde ich gerne irgendwann wieder rauswerfen.

Gruss
    Stefan

BKSolo

Ich habe mit der neusten Version HTTPMOD (siehe http://forum.fhem.de/index.php?topic=45176.new;topicseen#new meine Alpha2 Implementierung angepasst.
Dabei verwende ich die neue Möglichkeit der mehrfachen XML-Werte.
Raspberry PI 2/3 - CUL-433(V3) - CUL-868 (V3) - Jeelink 868 - 433 S/E Eigenbau
TX29DTH-IT - FHT80B - FHT80TF - FS20KSE
FHEMobile 3.7r803 - Fhem2Fhem - Alpha2 - OZW672 - TelegramBot

pwfhem

Hallo,

ich habe die neue Version HTTPMOD gern eingespielt und die ALPHA2-Abfrage gleich entsprechend vereinfacht.
Sieht viel übersichtlicher aus.

Mein memory-leak Problem ist leider noch da, allerdings steigt der Speicherverbrauch nicht mehr so schnell.
FHEM macht aktuell nichts anderes, als alle 10min insgesamt 10 ALPHA2-Reglerwerte abholen und per dblog sichern.
FHEM läuft jetzt etwa 24h
Speicher benutzt zu Anfang: 64 MB (sysmon-Wert)
Speicher benutzt nach 24h: 142 MB (sysmon-Wert)

Hat jemand eine Idee?
@ Stefan: was könnte ich zu Diagnose-Zwecken noch prüfen ?

Ich poste mal den Teil aus der CFG:

# Fussboden oben
define EZR_oben HTTPMOD http://192.168.2.22/data/dynamic.xml 600
attr EZR_oben userattr comment enableXPath-Strict reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict stateFormat
attr EZR_oben comment Fussbodenheizung
attr EZR_oben enableXPath-Strict 1
attr EZR_oben group Fussbodenheizung
attr EZR_oben reading01Name Ist-Temperatur
attr EZR_oben reading01XPath-Strict //Devices/Device/HEATAREA/T_ACTUAL/text()
attr EZR_oben reading02Name Soll-Temperatur
attr EZR_oben reading02XPath-Strict //Devices/Device/HEATAREA/T_TARGET/text()
attr EZR_oben stateFormat {sprintf("Ist-Temperatur-1: %.1f, Soll-Temperatur-1: %.1f , Ist-Temperatur-2: %.1f , Soll-Temperatur-2: %.1f , Ist-Temperatur-3: %.1f , Soll-Temperatur-3: %.1f  , Ist-Temperatur-4: %.1f , Soll-Temperatur-4: %.1f  ",  ReadingsNum($name,"Ist-Temperatur-1",0), ReadingsNum($name,"Soll-Temperatur-1",0), ReadingsNum($name,"Ist-Temperatur-2",0), ReadingsNum($name,"Soll-Temperatur-2",0),ReadingsNum($name,"Ist-Temperatur-3",0), ReadingsNum($name,"Soll-Temperatur-3",0), ReadingsNum($name,"Ist-Temperatur-4",0), ReadingsNum($name,"Soll-Temperatur-4",0))}

# Fussboden unten
define EZR_unten HTTPMOD http://192.168.2.21/data/dynamic.xml 600
attr EZR_unten userattr comment disable enableXPath-Strict reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict stateFormat
attr EZR_unten comment Fussbodenheizung
attr EZR_unten enableXPath-Strict 1
attr EZR_unten group Fussbodenheizung
attr EZR_unten reading01Name Ist-Temp
attr EZR_unten reading01XPath-Strict //Devices/Device/HEATAREA/T_ACTUAL/text()
attr EZR_unten reading02Name Soll-Temp
attr EZR_unten reading02XPath-Strict //Devices/Device/HEATAREA/T_TARGET/text()
attr EZR_unten stateFormat {sprintf("Ist-Temp-1: %.1f, Soll-Temp-1: %.1f , Ist-Temp-2: %.1f , Soll-Temp-2: %.1f , Ist-Temp-3: %.1f , Soll-Temp-3: %.1f  , Ist-Temp-4: %.1f , Soll-Temp-4: %.1f  , Ist-Temp-5: %.1f , Soll-Temp-5: %.1f  , Ist-Temp-6: %.1f , Soll-Temp-6: %.1f ",  ReadingsNum($name,"Ist-Temp-1",0), ReadingsNum($name,"Soll-Temp-1",0), ReadingsNum($name,"Ist-Temp-2",0), ReadingsNum($name,"Soll-Temp-2",0),ReadingsNum($name,"Ist-Temp-3",0), ReadingsNum($name,"Soll-Temp-3",0), ReadingsNum($name,"Ist-Temp-4",0), ReadingsNum($name,"Soll-Temp-4",0),ReadingsNum($name,"Ist-Temp-5",0), ReadingsNum($name,"Soll-Temp-5",0),ReadingsNum($name,"Ist-Temp-6",0), ReadingsNum($name,"Soll-Temp-6",0))}

StefanStrobel

Hallo pwfhem,

Bitte beobachte den Prozess doch mal mit einem anderen Tool. Ich kann bei meinen Tests keinen Anstieg der Speichernutzung feststellen (mit top den Prozess ausgewählt und und in fhem ein XML alle 10 Sekunden abgeholt).
Es könnte natürlich auch an den XML Libs liegen, die ggf. in eine bestimmten Version ein Leak haben ...
Wie groß sind denn die XML-Daten? Kannst Du mal ein File zum Testen posten? Vielleicht ist es ja auch von den Daten abhängig.

Gruss
    Stefan

pwfhem

bei mir werden von 2-ALPHA-Fussbodenregelungen XMLs abgefragt.
die beiden XML sind exemplarisch in der Anlage.
die gesamte HTTP-Antwort sieht (passend zu "alpha_2") so aus:

HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Date: Tue, 08 Dec 2015 19:39:32 GMT Content-Length: 5134 <?xml version="1.0" encoding="UTF-8"?> <Devices> <Device> <ERRORCOUNT>0</ERRORCOUNT> <DATETIME>2015-12-08T19:39:32</DATETIME> <DAYOFWEEK>2</DAYOFWEEK> <TIMEZONE>1</TIMEZONE> <TPS>0</TPS> <LIMITER>0</LIMITER> <CHANGEOVER>0</CHANGEOVER> <COOLING>0</COOLING> <MODE>2</MODE> <ANTIFREEZE_TEMP>8.0</ANTIFREEZE_TEMP> <ECO_INPUT_STATE>0</ECO_INPUT_STATE> <T_HEAT_VACATION>16.0</T_HEAT_VACATION> <VACATION> <VACATION_STATE>0</VACATION_STATE> <START_DATE>2015-00-00</START_DATE> <START_TIME>12:00:00</START_TIME> <END_DATE>2015-00-00</END_DATE> <END_TIME>12:00:00</END_TIME> </VACATION> <CLOUD> <M2MSTATE>Online</M2MSTATE> </CLOUD> <HEATAREA nr="1"> <HEATAREA_MODE>1</HEATAREA_MODE> <T_ACTUAL>22.3</T_ACTUAL> <T_ACTUAL_EXT>22.3</T_ACTUAL_EXT> <T_TARGET>22.0</T_TARGET> <T_TARGET_BASE>22.0</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>2</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <RPM_MOTOR>0</RPM_MOTOR> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <SENSOR_EXT>0</SENSOR_EXT> </HEATAREA> <HEATAREA nr="2"> <HEATAREA_MODE>1</HEATAREA_MODE> <T_ACTUAL>21.7</T_ACTUAL> <T_ACTUAL_EXT>21.7</T_ACTUAL_EXT> <T_TARGET>22.4</T_TARGET> <T_TARGET_BASE>22.4</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>2</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <RPM_MOTOR>0</RPM_MOTOR> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <SENSOR_EXT>0</SENSOR_EXT> </HEATAREA> <HEATAREA nr="4"> <HEATAREA_MODE>1</HEATAREA_MODE> <T_ACTUAL>22.4</T_ACTUAL> <T_ACTUAL_EXT>22.4</T_ACTUAL_EXT> <T_TARGET>22.2</T_TARGET> <T_TARGET_BASE>22.2</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>2</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <RPM_MOTOR>0</RPM_MOTOR> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <SENSOR_EXT>0</SENSOR_EXT> </HEATAREA> <HEATAREA nr="5"> <HEATAREA_MODE>1</HEATAREA_MODE> <T_ACTUAL>21.5</T_ACTUAL> <T_ACTUAL_EXT>21.5</T_ACTUAL_EXT> <T_TARGET>21.4</T_TARGET> <T_TARGET_BASE>21.4</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>2</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <RPM_MOTOR>0</RPM_MOTOR> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <SENSOR_EXT>0</SENSOR_EXT> </HEATAREA> <HEATAREA nr="6"> <HEATAREA_MODE>1</HEATAREA_MODE> <T_ACTUAL>20.5</T_ACTUAL> <T_ACTUAL_EXT>20.5</T_ACTUAL_EXT> <T_TARGET>20.0</T_TARGET> <T_TARGET_BASE>20.0</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>2</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <RPM_MOTOR>0</RPM_MOTOR> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <SENSOR_EXT>0</SENSOR_EXT> </HEATAREA> <HEATAREA nr="7"> <HEATAREA_MODE>1</HEATAREA_MODE> <T_ACTUAL>22.1</T_ACTUAL> <T_ACTUAL_EXT>22.1</T_ACTUAL_EXT> <T_TARGET>22.0</T_TARGET> <T_TARGET_BASE>22.0</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>0</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <RPM_MOTOR>0</RPM_MOTOR> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <SENSOR_EXT>0</SENSOR_EXT> </HEATAREA> <IODEVICE nr="1"> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="2"> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="3"> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="4"> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="5"> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="6"> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> </Device> </Devices>

pwfhem

ich habe den Speicherverbrauch noch einmal mit "top" und einem kürzeren Intervall beobachtet:

- alle 10s 2 XMLs abholen:

top -p"perl-PID"

time            VIRT         RES
19:07   33452   28060
19:08   35216   30072
19:09   37380   32036
19:10   39756   34392
19:11   42136   36756
19:12   44512   39128
19:13   46888   41484
19:14   49264   43852
19:15   51568   46228
19:16   53948   48572
19:17   56324   50952

StefanStrobel

Hallo pwfhem,

ich habe versucht Dein Szenario bei mir nachzustellen und beide XML Dateien alle 10 Sekunden mit Deiner Konfiguration gelesen (per file:// statt http://, aber das ändert nichts an der Verarbeitung). Der Speicher ist absolut konstant.
Das Attribut EnableXpath-Strict ist inzwischen übrigens überflüssig. Das war nur für die alte Syntax nötig.
Bei Reading01XPath-Strict etc. geht es ohne, es schadet aber auch nichts.

Könntest Du es mal auf einem Raspi oder in einer anderen Linux VM testen? Nicht dass es an Perl oder an den XML Libraries für Deinen cubietruck liegt ...

Gruss
    Stefan

pwfhem

#21
Hallo Stefan,

danke für's Testen.
raspi geht (kernel 4.1.7), auf dem cubi muss es wegen "boot von nand, root auf sata" 3.4.110 sein.
Vielleicht muss ich NAND aufgeben und den neuen Kernel auf dem cubi versuchen.

Gruss
Peter

update 13.12., 14:10:
- cubietruck neu installiert (boot SD, root auf SATA)
- Kernel 4.2.6.sunxi
- perl: 5.20.2-3+deb8u1
- mini fhem.cfg, nur alle 10s xml abholen (geht noch falsch "didn't match any reading" wegen fehlender libxml)
- noch alles perfekt: stabiler, nicht steigender Speicherverbrauch
- apt-get install libxml-parser-perl libxml-xpath-perl
- jetzt klappt das decodieren
- jetzt steigt allerdings wieder im 10s-Takt der Speicherverbrauch

bin etwas ratlos.
Peter

StefanStrobel

Hallo,

sieht für mich so aus, als ob die Perl-XML Libs auf der Plattform ein Leak haben ...
Ist das eine andere Version?

Gruss
    Stefan

pwfhem

ich glaube, es sind identische Versionen -- andere Plattform (ARM) allerdings
libxml-parser-perl: 2.41-3
libxml-xpath-perl: 1.13-7

Peter

BKSolo

Ich habe das FileLog auf DbLog geändert, verwende dazu SQLite. Zusätzlich habe ich das Plot auf ein einzelnes GPlot File mit Parametern angepasst.
Zu lesen unter http://forum.fhem.de/index.php/topic,42040.msg375369.html#msg375369
Bruno
Raspberry PI 2/3 - CUL-433(V3) - CUL-868 (V3) - Jeelink 868 - 433 S/E Eigenbau
TX29DTH-IT - FHT80B - FHT80TF - FS20KSE
FHEMobile 3.7r803 - Fhem2Fhem - Alpha2 - OZW672 - TelegramBot

jnewton957

Hallo,

ich würde gerne aus einer Seite meines Radiosenders den aktuellen Song auslesen.

www.radiobonn.de bzw. http://www.radiobonn.de/bonn/rb/53226/mp3-livestream

und da eben auf der rechten Seite die aktuelle Playlist.

Wie mache ich das am besten ???


Ich würde gerne den aktuellen Titel und wenn möglich das Bild/Cover als reading haben.

Grüße

Jörg
FHEM6.2 auf Pi5
V 1.66 nanoCUL 433 (IT)
V 1.66 nanoCUL868 (HM)
sqlite3 LogDb
ELRO AB440, DECT200,  TFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo),tibber Pulse, Kostal Pico, cfos Wallbox, Modbus TCP

Bytechanger

Hallo,

hier noch eine aktuelle Frage zum XPath, ich habe folgendes Phänomen:

Ich möchte von WeatherUnderground aktuelle Wetterdaten ziehen. Nun scheint es, dass neuerdings in dem gesendeten XML der Verlauf angezeigt wird, also Daten des Tages.
Daher würde mir der letzte Temperatureintrag reichen...

Habe versucht mit nachfolgendem Code das letzte Element zu bekommen.
Die [] wird jedoch ignoriert. Selbst ein //temp_c[1]/text() brachte das selbe Ergebnis, es wird ignoriert und als Ergebnis bekommt man
jeden Eintrag als separaten Reading , also temperature-1, temperature-2,...,temperature-64

define wetter_test HTTPMOD http://api.wunderground.com/weatherstation/WXDailyHistory.asp?ID=INORDRHE357&format=XML 600
attr wetter_test reading01Name Zeitpunkt
attr wetter_test reading01XPath-Strict //observation_time_rfc822[last()]/text()
attr wetter_test reading02Name temperature
attr wetter_test reading02XPath-Strict //temp_c[last()]/text()
attr wetter_test room Wettervorhersage


Mache ich etwas falsch, warum wird die Klammer ignoriert??


Greets

Byte

Prof. Dr. Peter Henning

#27

Bytechanger

Genau, und noch mal Sorry, hatte Bretter vor den Augen. Das XML war anders als gedacht aufgebaut!!

Greets

Byte

Prof. Dr. Peter Henning

Tipp: Eine kostenlose 4-Wochen-Lizenz für oXygen XML Editor. Oder zu mir in die Vorlesung kommen.

LG

pah

Bytechanger

JA, danke für das Angebot.
Wie gesagt, war nur ein Brett vor dem Kopf. Hatte eine andere XML Strucktur erwartet.

Gibt es kein kostenloses Programm um XML übersichtlich darzustellen (farblich und eingerückt) ?

XPath ist für meine Zwecke ja nicht so kompliziert. Da ich selber entwickle (SQL, .NET usw) ist es eigentlich selbsterklärend.


Gruß

Byte

Garbsen

Zitat von: pwfhem am 13 Dezember 2015, 22:06:10
ich glaube, es sind identische Versionen -- andere Plattform (ARM) allerdings
libxml-parser-perl: 2.41-3
libxml-xpath-perl: 1.13-7

Peter
Habt ihr das Memory Problem lösen können?
Habe auch das Problem, dass meine Memory usage langsam aber stetig ansteigt.
Denke auch, dass es an der httpmod Abfrage meiner Alpha2 liegen könnte
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

StefanStrobel

Hallo Garbsen,

Seit Februar setzt HTTPMOD $XML::XPath::SafeMode = 1 für die XPath Bibliothek. Seither gab es keine Beschwerden mehr.
Eigentlich sollte das auch nicht nötig sein, aber scheinbar gibt es auf manchen Plattformen defekte Versionen der XPath Bibliothek und ich vermute dass Safemode das Problem umschifft.
Wenn es nicht klappt, würde ich auf Regex-Parsing umstellen. Damit bekommt man es sicher auch hin - vermutlich auch performanter.

Gruß
   Stefan

Garbsen

Zitat von: StefanStrobel am 16 November 2016, 23:58:07
Hallo Garbsen,

Seit Februar setzt HTTPMOD $XML::XPath::SafeMode = 1 für die XPath Bibliothek. Seither gab es keine Beschwerden mehr.
Eigentlich sollte das auch nicht nötig sein, aber scheinbar gibt es auf manchen Plattformen defekte Versionen der XPath Bibliothek und ich vermute dass Safemode das Problem umschifft.
Wenn es nicht klappt, würde ich auf Regex-Parsing umstellen. Damit bekommt man es sicher auch hin - vermutlich auch performanter.

Gruß
   Stefan

Erstmal danke, klingt für mich ein wenig kryptisch, bin noch relativer Anfänger und eher gut im copy paste als im Selbstentwickeln.
Schaue es mir mal an und wenn Google nicht hilft, melde ich mich wieder
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

Garbsen

Zitat von: StefanStrobel am 16 November 2016, 23:58:07
Hallo Garbsen,

Seit Februar setzt HTTPMOD $XML::XPath::SafeMode = 1 für die XPath Bibliothek. Seither gab es keine Beschwerden mehr.
Eigentlich sollte das auch nicht nötig sein, aber scheinbar gibt es auf manchen Plattformen defekte Versionen der XPath Bibliothek und ich vermute dass Safemode das Problem umschifft.
Wenn es nicht klappt, würde ich auf Regex-Parsing umstellen. Damit bekommt man es sicher auch hin - vermutlich auch performanter.

Gruß
   Stefan

Wie schon von mir befürchtet, ich verstehe nicht, wie ich die Abfragen d.h. Die Attr. Ändern muss.

Folgende xml will ich auslesen:

HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Date: Thu, 17 Nov 2016 22:15:49 GMT Content-Length: 13707 <?xml version="1.0" encoding="UTF-8"?> <Devices> <Device> <ID>FBH_Unten_Code_1234</ID> <TYPE>EZRCTRL1</TYPE> <NAME>FBH_Unten_Code_1234</NAME> <ORIGIN>FBH_Unten_Code_1234</ORIGIN> <ERRORCOUNT>0</ERRORCOUNT> <DATETIME>2016-11-17T22:15:49</DATETIME> <DAYOFWEEK>4</DAYOFWEEK> <TIMEZONE>1</TIMEZONE> <NTPTIMESYNC>1</NTPTIMESYNC> <VERS_SW_STM>02.02</VERS_SW_STM> <VERS_SW_ETH>02.02</VERS_SW_ETH> <VERS_HW>01</VERS_HW> <TEMPERATUREUNIT>0</TEMPERATUREUNIT> <SUMMERWINTER>1</SUMMERWINTER> <TPS>0</TPS> <LIMITER>0</LIMITER> <MASTERID>MASTERID</MASTERID> <CHANGEOVER>0</CHANGEOVER> <COOLING>0</COOLING> <MODE>0</MODE> <OPERATIONMODE_ACTOR>0</OPERATIONMODE_ACTOR> <ANTIFREEZE>1</ANTIFREEZE> <ANTIFREEZE_TEMP>5.0</ANTIFREEZE_TEMP> <FIRSTOPEN_TIME>10</FIRSTOPEN_TIME> <SMARTSTART>1</SMARTSTART> <ECO_DIFF>4.0</ECO_DIFF> <ECO_INPUTMODE>0</ECO_INPUTMODE> <ECO_INPUT_STATE>0</ECO_INPUT_STATE> <T_HEAT_VACATION>15.0</T_HEAT_VACATION> <VACATION> <VACATION_STATE>1</VACATION_STATE> <START_DATE>2016-11-25</START_DATE> <START_TIME>12:00:00</START_TIME> <END_DATE>2016-11-27</END_DATE> <END_TIME>12:00:00</END_TIME> </VACATION> <NETWORK> <MAC>38:DE:60:01:33:97</MAC> <DHCP>1</DHCP> <IPV6ACTIVE>0</IPV6ACTIVE> <IPV4ACTUAL>192.168.177.33</IPV4ACTUAL> <IPV4SET>192.168.100.100</IPV4SET> <IPV6ACTUAL></IPV6ACTUAL> <IPV6SET></IPV6SET> <NETMASKACTUAL>255.255.255.0</NETMASKACTUAL> <NETMASKSET>255.255.255.0</NETMASKSET> <DNS>192.168.177.1</DNS> <GATEWAY>192.168.177.1</GATEWAY> </NETWORK> <CLOUD> <USERID>455A5215</USERID> <PASSWORD>455A520D</PASSWORD> <M2MSERVERPORT>55555</M2MSERVERPORT> <M2MLOCALPORT>50919</M2MLOCALPORT> <M2MHTTPPORT>50919</M2MHTTPPORT> <M2MHTTPSPORT>55014</M2MHTTPSPORT> <M2MSERVERADDRESS>www.ezr-cloud1.de</M2MSERVERADDRESS> <M2MACTIVE>0</M2MACTIVE> <M2MSTATE>Offline</M2MSTATE> </CLOUD> <KWLCTRL> <KWL_CONTROL_VISIBLE>0</KWL_CONTROL_VISIBLE> <KWL_PRESENT>0</KWL_PRESENT> <KWL_CONNECTION>0</KWL_CONNECTION> <KWL_URL>---</KWL_URL> <KWL_PORT>7777</KWL_PORT> <KWL_STATUS>0</KWL_STATUS> <KWL_FLOWCTRL>0</KWL_FLOWCTRL> </KWLCTRL> <CODE> <EXPERT>455A52DC16B62C64</EXPERT> </CODE> <PROGRAM> <SHIFT_PROGRAM nr="1" shiftingtime="1"> <START>09:15</START> <END>23:15</END> </SHIFT_PROGRAM> <SHIFT_PROGRAM nr="3" shiftingtime="1"> <START>06:30</START> <END>10:00</END> </SHIFT_PROGRAM> <SHIFT_PROGRAM nr="3" shiftingtime="2"> <START>16:00</START> <END>22:15</END> </SHIFT_PROGRAM> <SHIFT_PROGRAM nr="4" shiftingtime="1"> <START>06:00</START> <END>22:00</END> </SHIFT_PROGRAM> </PROGRAM> <PUMP_OUTPUT> <LOCALGLOBAL>0</LOCALGLOBAL> <PUMP_OUTPUT_TYPE>1</PUMP_OUTPUT_TYPE> <PUMP_LEADTIME>2</PUMP_LEADTIME> <PUMP_STOPPINGTIME>2</PUMP_STOPPINGTIME> <PUMP_OPERATIONMODE>0</PUMP_OPERATIONMODE> <MINRUNTIME>30</MINRUNTIME> <MINSTANDSTILL>20</MINSTANDSTILL> </PUMP_OUTPUT> <RELAIS> <FUNCTION>0</FUNCTION> <RELAIS_LEADTIME>0</RELAIS_LEADTIME> <RELAIS_STOPPINGTIME>0</RELAIS_STOPPINGTIME> <RELAIS_OPERATIONMODE>0</RELAIS_OPERATIONMODE> </RELAIS> <CHANGEOVER_FUNC> <CHANGEOVER_FUNC_MODE>0</CHANGEOVER_FUNC_MODE> </CHANGEOVER_FUNC> <EMERGENCYMODE> <EMERGENCYMODE_TIME>180</EMERGENCYMODE_TIME> <PWMCYCLE>15</PWMCYCLE> <PWMHEAT>25</PWMHEAT> <PWMCOOL>0</PWMCOOL> </EMERGENCYMODE> <VALVEPROTECT> <VALVEPROTECT_TIME>14</VALVEPROTECT_TIME> <DURATION>5</DURATION> </VALVEPROTECT> <PUMPPROTECT> <PUMPPROTECT_TIME>3</PUMPPROTECT_TIME> <DURATION>5</DURATION> </PUMPPROTECT> <HEATAREA nr="1"> <HEATAREA_NAME>GastHK1</HEATAREA_NAME> <HEATAREA_MODE>0</HEATAREA_MODE> <T_ACTUAL>22.8</T_ACTUAL> <T_ACTUAL_EXT>22.8</T_ACTUAL_EXT> <T_TARGET>17.0</T_TARGET> <T_TARGET_BASE>17.0</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>0</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <T_TARGET_MIN>5.0</T_TARGET_MIN> <T_TARGET_MAX>25.0</T_TARGET_MAX> <RPM_MOTOR>0</RPM_MOTOR> <OFFSET>1.0</OFFSET> <T_HEAT_DAY>22.0</T_HEAT_DAY> <T_HEAT_NIGHT>17.0</T_HEAT_NIGHT> <T_COOL_DAY>21.0</T_COOL_DAY> <T_COOL_NIGHT>23.0</T_COOL_NIGHT> <T_FLOOR_DAY>3.0</T_FLOOR_DAY> <HEATINGSYSTEM>0</HEATINGSYSTEM> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_CODE>455A52C835D83047</LOCK_CODE> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <LIGHT>15</LIGHT> <SENSOR_EXT>0</SENSOR_EXT> <T_TARGET_ADJUSTABLE>1</T_TARGET_ADJUSTABLE> </HEATAREA> <HEATAREA nr="2"> <HEATAREA_NAME>WZHK2ab</HEATAREA_NAME> <HEATAREA_MODE>0</HEATAREA_MODE> <T_ACTUAL>23.8</T_ACTUAL> <T_ACTUAL_EXT>23.8</T_ACTUAL_EXT> <T_TARGET>18.0</T_TARGET> <T_TARGET_BASE>18.0</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>0</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <T_TARGET_MIN>5.0</T_TARGET_MIN> <T_TARGET_MAX>25.0</T_TARGET_MAX> <RPM_MOTOR>0</RPM_MOTOR> <OFFSET>-2.0</OFFSET> <T_HEAT_DAY>23.0</T_HEAT_DAY> <T_HEAT_NIGHT>18.0</T_HEAT_NIGHT> <T_COOL_DAY>21.0</T_COOL_DAY> <T_COOL_NIGHT>17.0</T_COOL_NIGHT> <T_FLOOR_DAY>3.0</T_FLOOR_DAY> <HEATINGSYSTEM>0</HEATINGSYSTEM> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_CODE>455A527BDAAB2602</LOCK_CODE> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <LIGHT>15</LIGHT> <SENSOR_EXT>0</SENSOR_EXT> <T_TARGET_ADJUSTABLE>1</T_TARGET_ADJUSTABLE> </HEATAREA> <HEATAREA nr="5"> <HEATAREA_NAME>FlurHK5ab</HEATAREA_NAME> <HEATAREA_MODE>0</HEATAREA_MODE> <T_ACTUAL>21.7</T_ACTUAL> <T_ACTUAL_EXT>21.7</T_ACTUAL_EXT> <T_TARGET>23.0</T_TARGET> <T_TARGET_BASE>23.0</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>0</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <T_TARGET_MIN>5.0</T_TARGET_MIN> <T_TARGET_MAX>25.0</T_TARGET_MAX> <RPM_MOTOR>0</RPM_MOTOR> <OFFSET>0.1</OFFSET> <T_HEAT_DAY>23.0</T_HEAT_DAY> <T_HEAT_NIGHT>19.0</T_HEAT_NIGHT> <T_COOL_DAY>21.0</T_COOL_DAY> <T_COOL_NIGHT>17.0</T_COOL_NIGHT> <T_FLOOR_DAY>3.0</T_FLOOR_DAY> <HEATINGSYSTEM>0</HEATINGSYSTEM> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_CODE>455A527BDAAB2602</LOCK_CODE> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <LIGHT>15</LIGHT> <SENSOR_EXT>0</SENSOR_EXT> <T_TARGET_ADJUSTABLE>1</T_TARGET_ADJUSTABLE> </HEATAREA> <HEATAREA nr="6"> <HEATAREA_NAME>HWRHK6</HEATAREA_NAME> <HEATAREA_MODE>0</HEATAREA_MODE> <T_ACTUAL>18.8</T_ACTUAL> <T_ACTUAL_EXT>18.8</T_ACTUAL_EXT> <T_TARGET>21.5</T_TARGET> <T_TARGET_BASE>21.5</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>0</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <T_TARGET_MIN>0.0</T_TARGET_MIN> <T_TARGET_MAX>0.0</T_TARGET_MAX> <RPM_MOTOR>0</RPM_MOTOR> <OFFSET>0.0</OFFSET> <T_HEAT_DAY>0.0</T_HEAT_DAY> <T_HEAT_NIGHT>0.0</T_HEAT_NIGHT> <T_COOL_DAY>0.0</T_COOL_DAY> <T_COOL_NIGHT>0.0</T_COOL_NIGHT> <T_FLOOR_DAY>0.0</T_FLOOR_DAY> <HEATINGSYSTEM>0</HEATINGSYSTEM> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_CODE>455A52B23DD035D8</LOCK_CODE> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <LIGHT>0</LIGHT> <SENSOR_EXT>0</SENSOR_EXT> <T_TARGET_ADJUSTABLE>1</T_TARGET_ADJUSTABLE> </HEATAREA> <HEATAREA nr="7"> <HEATAREA_NAME>KücheHK7</HEATAREA_NAME> <HEATAREA_MODE>0</HEATAREA_MODE> <T_ACTUAL>22.3</T_ACTUAL> <T_ACTUAL_EXT>22.3</T_ACTUAL_EXT> <T_TARGET>19.0</T_TARGET> <T_TARGET_BASE>19.0</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>0</PROGRAM_WEEK> <PROGRAM_WEEKEND>0</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <T_TARGET_MIN>5.0</T_TARGET_MIN> <T_TARGET_MAX>25.0</T_TARGET_MAX> <RPM_MOTOR>0</RPM_MOTOR> <OFFSET>1.5</OFFSET> <T_HEAT_DAY>23.0</T_HEAT_DAY> <T_HEAT_NIGHT>19.0</T_HEAT_NIGHT> <T_COOL_DAY>21.0</T_COOL_DAY> <T_COOL_NIGHT>17.0</T_COOL_NIGHT> <T_FLOOR_DAY>3.0</T_FLOOR_DAY> <HEATINGSYSTEM>0</HEATINGSYSTEM> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_CODE>455A52E6421A93C6</LOCK_CODE> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <LIGHT>15</LIGHT> <SENSOR_EXT>0</SENSOR_EXT> <T_TARGET_ADJUSTABLE>1</T_TARGET_ADJUSTABLE> </HEATAREA> <HEATAREA nr="8"> <HEATAREA_NAME>Bad unten HK8</HEATAREA_NAME> <HEATAREA_MODE>0</HEATAREA_MODE> <T_ACTUAL>20.3</T_ACTUAL> <T_ACTUAL_EXT>20.3</T_ACTUAL_EXT> <T_TARGET>17.2</T_TARGET> <T_TARGET_BASE>17.2</T_TARGET_BASE> <HEATAREA_STATE>0</HEATAREA_STATE> <PROGRAM_SOURCE>0</PROGRAM_SOURCE> <PROGRAM_WEEK>3</PROGRAM_WEEK> <PROGRAM_WEEKEND>3</PROGRAM_WEEKEND> <PARTY>0</PARTY> <PARTY_REMAININGTIME>0</PARTY_REMAININGTIME> <PRESENCE>0</PRESENCE> <T_TARGET_MIN>0.0</T_TARGET_MIN> <T_TARGET_MAX>0.0</T_TARGET_MAX> <RPM_MOTOR>0</RPM_MOTOR> <OFFSET>0.0</OFFSET> <T_HEAT_DAY>0.0</T_HEAT_DAY> <T_HEAT_NIGHT>0.0</T_HEAT_NIGHT> <T_COOL_DAY>0.0</T_COOL_DAY> <T_COOL_NIGHT>0.0</T_COOL_NIGHT> <T_FLOOR_DAY>0.0</T_FLOOR_DAY> <HEATINGSYSTEM>0</HEATINGSYSTEM> <BLOCK_HC>0</BLOCK_HC> <ISLOCKED>0</ISLOCKED> <LOCK_CODE>455A524174A15B6A</LOCK_CODE> <LOCK_AVAILABLE>0</LOCK_AVAILABLE> <LIGHT>0</LIGHT> <SENSOR_EXT>0</SENSOR_EXT> <T_TARGET_ADJUSTABLE>1</T_TARGET_ADJUSTABLE> </HEATAREA> <HEATCTRL nr="1"> <INUSE>1</INUSE> <HEATAREA_NR>1</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="2"> <INUSE>1</INUSE> <HEATAREA_NR>2</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="3"> <INUSE>0</INUSE> <HEATAREA_NR>0</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="4"> <INUSE>0</INUSE> <HEATAREA_NR>0</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="5"> <INUSE>1</INUSE> <HEATAREA_NR>5</HEATAREA_NR> <ACTOR>1</ACTOR> <ACTOR_PERCENT>90</ACTOR_PERCENT> <HEATCTRL_STATE>1</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="6"> <INUSE>1</INUSE> <HEATAREA_NR>6</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>90</ACTOR_PERCENT> <HEATCTRL_STATE>1</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="7"> <INUSE>1</INUSE> <HEATAREA_NR>7</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="8"> <INUSE>1</INUSE> <HEATAREA_NR>8</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="9"> <INUSE>0</INUSE> <HEATAREA_NR>0</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="10"> <INUSE>0</INUSE> <HEATAREA_NR>0</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="11"> <INUSE>0</INUSE> <HEATAREA_NR>0</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <HEATCTRL nr="12"> <INUSE>0</INUSE> <HEATAREA_NR>0</HEATAREA_NR> <ACTOR>0</ACTOR> <ACTOR_PERCENT>0</ACTOR_PERCENT> <HEATCTRL_STATE>0</HEATCTRL_STATE> </HEATCTRL> <IODEVICE nr="1"> <IODEVICE_TYPE>0</IODEVICE_TYPE> <IODEVICE_ID>1</IODEVICE_ID> <IODEVICE_VERS_HW>1</IODEVICE_VERS_HW> <IODEVICE_VERS_SW>02.02</IODEVICE_VERS_SW> <HEATAREA_NR>1</HEATAREA_NR> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <!-- XML-BUF: Out of Memory! --> <!-- XML-BUF: Continue... --> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="2"> <IODEVICE_TYPE>0</IODEVICE_TYPE> <IODEVICE_ID>2</IODEVICE_ID> <IODEVICE_VERS_HW>1</IODEVICE_VERS_HW> <IODEVICE_VERS_SW>02.02</IODEVICE_VERS_SW> <HEATAREA_NR>2</HEATAREA_NR> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="3"> <IODEVICE_TYPE>0</IODEVICE_TYPE> <IODEVICE_ID>3</IODEVICE_ID> <IODEVICE_VERS_HW>1</IODEVICE_VERS_HW> <IODEVICE_VERS_SW>02.02</IODEVICE_VERS_SW> <HEATAREA_NR>5</HEATAREA_NR> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="4"> <IODEVICE_TYPE>1</IODEVICE_TYPE> <IODEVICE_ID>4</IODEVICE_ID> <IODEVICE_VERS_HW>1</IODEVICE_VERS_HW> <IODEVICE_VERS_SW>01.71</IODEVICE_VERS_SW> <HEATAREA_NR>6</HEATAREA_NR> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="5"> <IODEVICE_TYPE>0</IODEVICE_TYPE> <IODEVICE_ID>5</IODEVICE_ID> <IODEVICE_VERS_HW>1</IODEVICE_VERS_HW> <IODEVICE_VERS_SW>02.02</IODEVICE_VERS_SW> <HEATAREA_NR>7</HEATAREA_NR> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> <IODEVICE nr="6"> <IODEVICE_TYPE>1</IODEVICE_TYPE> <IODEVICE_ID>6</IODEVICE_ID> <IODEVICE_VERS_HW>1</IODEVICE_VERS_HW> <IODEVICE_VERS_SW>02.02</IODEVICE_VERS_SW> <HEATAREA_NR>8</HEATAREA_NR> <SIGNALSTRENGTH>2</SIGNALSTRENGTH> <BATTERY>2</BATTERY> <IODEVICE_STATE>0</IODEVICE_STATE> <IODEVICE_COMERROR>0</IODEVICE_COMERROR> <ISON>1</ISON> </IODEVICE> </Device> </Devices>

Derzeit mache ich das mit folgenden attr. (Beispiel)

reading01Name Gast-Ist

reading01Regex xpath-strict://devices/Device/HEATAREA [@nr="1"]/T_ACTUAL/text()

Das funktioniert, führt aber zu den Memory Problemen, die mich zwingen d`en Pi regelmäßig neu zu starten, was lästig ist.

Wie muss ich die regex Attr. Ändern, um auf regex-parsing umzustellen?

Danke
K-H
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

StefanStrobel

Hallo Garbsen,

probier doch so was wie

reading01Regex <HEATAREA_NAME>GastHK1</HEATAREA_NAME>[^<]+<[^<]+>[^<]+</[^<]+>[^<]+<T_ACTUAL>([\d\.]+)</T

um den Wert für GastHK1 zu bekommen.

Ein Regex-Tester ist da auf jeden Fall hilfreich, z.B. http://retester.herokuapp.com/

Gruss
   Stefan

Garbsen

Zitat von: StefanStrobel am 18 November 2016, 09:16:13
Hallo Garbsen,

probier doch so was wie

reading01Regex <HEATAREA_NAME>GastHK1</HEATAREA_NAME>[^<]+<[^<]+>[^<]+</[^<]+>[^<]+<T_ACTUAL>([\d\.]+)</T

um den Wert für GastHK1 zu bekommen.

Ein Regex-Tester ist da auf jeden Fall hilfreich, z.B. http://retester.herokuapp.com/

Gruss
   Stefan

Hallo Stefan

Jo, das klappt, damit bekomme ich den Wert der aktuellen Temperatur.
Leider klingt das für mich sehr unverständlich, auch dein Link bringt mich nicht weiter.
Kannst du mir verraten nach welcher Logik sich das aufbaut oder wo ich den Aufbau studieren kann?
Wofür stehen die [^<]? Warum fängst du mit [HEATAREA_NAME] an? Kann man auch an anderer Stelle "einsteigen"
Danke für die Nachhilfe
K-H
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

StefanStrobel

Hallo K-H,

als dem Wiki:

If you have trouble defining a regular expression that matches a certain name, then many complicated characters and then a number, it might be helpful to use a negation in matching like temp[^\d]+([\d\.]).*. In this examle [^\d]+ means any character that is not a numerical digit, more than once.


bzw.
http://perldoc.perl.org/perlretut.html

Gruss
    Stefan

Garbsen

Zitat von: StefanStrobel am 19 November 2016, 09:35:26
Hallo K-H,

als dem Wiki:

If you have trouble defining a regular expression that matches a certain name, then many complicated characters and then a number, it might be helpful to use a negation in matching like temp[^\d]+([\d\.]).*. In this examle [^\d]+ means any character that is not a numerical digit, more than once.


bzw.
http://perldoc.perl.org/perlretut.html

Gruss
    Stefan

Danke, hätte ich vermutlich auch finden können, wohl blöde Suchanfrage gestellt.
Damit sollte ich es rausbekommen
Ein wenig war ich schon durch trial and error weitergekommen, mit diesen Hinweisen bastele ich mal weiter rum
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

Michi1978

Hallo!

ich möchte alle werte aus folgender Seite auslesen, jedoch weis ich nicht wie ich dies anstellen soll.
Habe schon mit Xpath einiges getestet aber es kommt nix :(

https://netzfrequenzmessung.de:9080/frequenz01.xml

Kann mir da jemand bei helfen? Bin kein Programmierer

StefanStrobel

Zitat von: Michi1978 am 16 August 2022, 10:13:17
Habe schon mit Xpath einiges getestet aber es kommt nix :(
https://netzfrequenzmessung.de:9080/frequenz01.xml

von der Adresse bekomme ich einfach nur eine Zeile mit Werten, die durch Leerzeichen getrennt sind.
Das machst Du am besten mit einer Regex.

Gruss
   Stefan

StefanStrobel

Beispiel:
Die Regex ([^\s]+)\s([^\s]+) extrahiert zwei Werte die jeweils in runden Klammern als Gruppe definiert sind.
\s steht für ein Leerzeichen und [^\s] für ein Zeichen, das kein Leerzeichen ist. Das + danach bedeutet dass man mehrere solche Zeichen erfasst.

Gruß
   Stefan