Ich verstehe die regEx Auswertungen nicht

Begonnen von mitdra, 25 Mai 2017, 14:27:38

Vorheriges Thema - Nächstes Thema

mitdra

Hallo zusammen,

mit der RegEx Logik komme ich überhupt nicht klar.

Folgendes steht im File:
<td>FensterGarderobe</td><td>Entry1</td><td></td><td></td><td>Tamper</td><td></td><td>[\d]</td><td>Close</td>

Ich will daraus nur FensterGarederobe und Close oder halt Open herausfiltern, das Tamper sollte ignoriert werden

Was muss ich den in meinem RegEx eintragen, das er mir Tamper oder blank immer ignoriert?

<td>FensterGarderobe</td><td>Entry1</td><td></td><td></td><td> :( ?</td><td></td><td>[\d]</td><td>([^\d]+)</td>

Grüße David

viegener

Bitte beschreibe doch mal was Du rausholen willst (und nicht was Du ignorieren willst) und was in HTTPmod ankommt. Willst Du ein Reading mit Fenstergarderobe und Open oder willst Du ein Reading Fenstergarderobe mit Wert Open oder Close?

Bitte verwende auch Codetags
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

mitdra

#2
Also aus dem HTTPMOD kommt:
<td>FensterGarderobe</td><td>Entry1</td><td></td><td></td><td>Tamper</td><td></td><td>[\d]</td><td>Close</td>

oder

<td>FensterGarderobe</td><td>Entry1</td><td></td><td></td><td>Tamper</td><td></td><td>[\d]</td><td>Open</td>

und ich möchte nur ein reading, das mir FensterGarderobe und den Zustand Open oder Close anzeigt.


Grüße David

viegener

Für den Regexp ist es wichtig zu wissen, wie die ganze Datei aussieht, damit man ausschliessen kann, das noch ein nachfolgender Open/Close matcht.

Wenn es um HTTPMod geht würde ich mal mit folgendem beginnen


Reading01Name FensterGarderobe
reading01Regex FensterGarderobe.*(Open|Close)


Aber wie gesagt, das funkt nur, wenn kein anderes Ding matchen kann und Fenstergarderobe nur einmal vorkommt.

grundsätzlich wenn Du einen Regexp definieren willst für HTTPMod
- Ganze Datei anschauen
- Das was Du auslesen willst muss in Klammern stehen sonst kommt nichts an
- Suche nach eindeutigen Zeichenketten die das was Du willst begrenzen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

mitdra

#4
Also mit

reading01Regex FensterGarderobe.*(Open|Close)
funktioniert es.
Das Problem aus dem HTTPMOD kommt ein langes File mit etlichen Kontakten, die ebenfalls Open oder Close sind aber anders heissen, daher weiss ich mit *(Open|Close) nicht, welcher Kontakt es ist.

Kann man das begrenzen, oder wie werte ich das riesige File korrekt aus?

Vielen Dank für jede Anregung.

viegener

Wie gesagt, ohne die Datei zu kennen geht das nicht - ausserdem müsste man wissen was stabil bleibt.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

KernSani

Mal ein ganz anderer Ansatz: Du versuchst ja offensichtlich irgend ein Web Interface einer Heim Automatisierung auszuwerten. Worum handelt es sich den dabei? Vielleicht gibt es ja bessere Ansätze an die Info zu kommen, als HTTPMOD...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

viegener

Zitat von: mitdra am 25 Mai 2017, 16:47:53
Also mit

reading01Regex FensterGarderobe.*(Open|Close)
funktioniert es.
Das Problem aus dem HTTPMOD kommt ein langes File mit etlichen Kontakten, die ebenfalls Open oder Close sind aber anders heissen, daher weiss ich mit *(Open|Close) nicht, welcher Kontakt es ist.

Kann man das begrenzen, oder wie werte ich das riesige File korrekt aus?

Vielen Dank für jede Anregung.

Nur mal als Anregung: Wenn die Reihenfolge gleich bleibt kann das Open/Close ja nur zwischen FensterGarderobe und dem nächsten Kontakt stehen, also so etwas wie

reading01Regex FensterGarderobe.*(Open|Close).*FensterSonstwas

Dazu darf der Text aber eben nur dort vorkommen, ist aber eigentlich ganz einfach weil der ganze tabellenkrams keine Rolle spielt
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

mitdra

Ja, die Auswertung des HTTPMOD gehen aus folgendem Thread hervor:
https://forum.fhem.de/index.php/topic,66867.msg640045.html#msg640045

Das HTTPMOD Device bietet ja parse functions etc. an, was im DOIF Tool schön aufbereitet wird.
Ich tue mich, mit sehr begrenzten Entwicklerfähigkeiten, schwer dieses File sauber aufzubereiten.

Anbei ein kleiner Ausriss des HTTPMOD:
</head><body> <ul><li><a href="index.htm">Welcome</a></li> <li><a href="control.htm">Control</a></li> <li><a href="panel.htm">Panel</a></li> <li><a href="device.htm">Device</a></li> <li><a href="area.htm">Area</a></li> <li><a href="user.htm">User</a></li> <li><a href="history.htm">History</a></li> <li><a href="capevent.htm">Captured Event</a></li> <li><a href="rptevent.htm">Reported Event</a></li> <li><a href="network.htm">Network</a></li> <li><a href="report.htm">Report</a></li> <li><a href="upload.htm">Upload</a></li> <li><a href="ha.htm">HA</a></li> <li><a href="firmware.htm">Firmware</a></li> </ul><hr/> <h1>Device Management</h1> <form action="device.htm" method=post> <table class=fm> <tr><td>Index</td><td>Type</td><td>Name</td><td>Attribute</td><td>Condition</td><td>Battery</td><td>Tamper</td><td>Bypass</td><td>RSSI</td><td>Status</td><td></td></tr> <tr><td><input name="Z1" value="1" type=checkbox />1 </td><td>Door Contact</td><td>Haustür</td><td>Entry1</td><td></td><td></td><td></td><td></td><td>6</td><td>Close</td><td><a href="deved.htm?Z=1">Edit</a></td></tr> <tr><td><input name="Z2" value="1" type=checkbox />2 </td><td>Remote Controller</td><td></td><td>Personal Attack</td><td></td><td></td><td></td><td></td><td></td><td></td><td><a href="deved.htm?Z=2">Edit</a></td></tr> <tr><td><input name="Z4" value="1" type=checkbox />4 </td><td>Siren</td><td>Aussensirene</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td><a href="deved.htm?Z=4">Edit</a></td></tr> <tr><td><input name="Z5" value="1" type=checkbox />5 </td><td>IR</td><td>BM Wohnzimmer</td><td>Interior</td><td></td><td></td><td></td><td>Permanently Bypass</td><td>9</td><td></td><td><a href="deved.htm?Z=5">Edit</a></td></tr> <tr><td><input name="Z6" value="1" type=checkbox />6 </td><td>Door Contact</td><td>FensterGarderobe</td><td>Entry1</td><td></td><td></td><td>Tamper</td><td></td><td>1</td><td>Close</td><td><a href="deved.htm?Z=6">Edit</a></td></tr> <tr><td><input name="Z11" value="1" type=checkbox />11 </td><td>CO</td><td>CO Melder</td><td>24 HR</td><td></td><td></td><td></td><td></td><td>9</td><td></td><td><a href="deved.htm?Z=11">Edit</a></td></tr> <tr><td><input name="Z13" value="1" type=checkbox />13 </td><td>IR</td><td>BM Keller</td><td>Interior</td><td></td><td></td><td></td><td></td><td>6</td><td></td><td><a href="deved.htm?Z=13">Edit</a></td></tr> <tr><td><input name="Z14" value="1" type=checkbox />14 </td><td>Smoke Detector</td><td>Erdgeschoss</td><td>24 HR</td><td></td><td></td><td></td><td></td><td>9</td><td></td><td><a href="deved.htm?Z=14">Edit</a></td></tr> <tr><td><input name="Z15" value="1" type=checkbox />15 </td><td>Smoke Detector</td><td>Keller</td><td>24 HR</td><td></td><td></td><td></td><td></td><td>9</td><td></td><td><a href="deved.htm?Z=15">Edit</a></td></tr> <tr><td><input name="Z16" value="1" type=checkbox />16 </td><td>Smoke Detector</td><td>Obergeschoss</td><td>24 HR</td><td></td><td></td><td></td><td></td><td>9</td>

Es fehlen noch etwa 10 Kontakte die ich noch anlernen werde.

Viele Grüße David

viegener

Ich wiederhole mich irgendwie - die ganze Datei und keine Ausschnitte würden benötigt wenn ich Dir helfen soll

Ist die Reihenfolge konstant?

Funktioniert der Ausdruck oben?

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können