Spritpreise/HTTPMOD: Wie lassen sich RegEx-funde inline- oder nach-bearbeiten?

Begonnen von GiBy, 11 Februar 2020, 23:22:21

Vorheriges Thema - Nächstes Thema

GiBy

Guten Abend

Ich möchte in meinem Übersichtsschirm "everything", "floorplan" u.a. die Treibstoffpreise (für eine Sorte) der 3 nächstgelegenen Tanken integrieren und habe dies getan, allerdings stimmen die Preise nicht ganz, weil die Preise auf der clever-tanken-Website nicht als z.B. 1.339, sondern als 1.33<sup>9 notiert sind. Durchschnitts- und Einzelpreise aus den 2 Zahlausdrücken als Ergebnis meiner RegEx [z.B. attr Spritpreis reading02Regex (....)\<sup\>(.)]
müssten daher nachträglich zusammengesetzt werden, wenn ich nicht im Ausdruck selbst neben dem Parsermuster noch ein delete oder replace integriert bekomme.
Da ich u.a. auch kaum etwas von Perl UND RegEx verstehe, würde ich mir gerne durch Codebeispiele auf die Sprünge helfen lassen. Im Forum fand ich bisher nichts (jedenfalls nicht ausreichend Aktuelles) zu dieser Fragestellung.

Darf ich Euch um Vorschläge bitten?
Gebhardt
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2

amenomade

Dein Reading inkl <sup> mit readingxxRegex extrahieren
Dies mit readingxxOExpr nachformatieren.

Z.B.:attr sprit reading01Name Tankstelle1
attr sprit reading01Regex (?s)price-text.*?([\d\.]+<sup>\d)
attr sprit reading01OExpr join('',split(/<sup>/,$val))


Alternativ: 2 capturing groups in Regex (wie Du anscheinend schon hast), und join in recombineExpr:
attr sprit reading01Name Tankstelle1
attr sprit reading01Regex (?s)price-text.*?([\d\.]+)<sup>(\d)
attr sprit reading01RecombineExpr join "", @matchlist


Alternativ: XPath nutzen
attr sprit reading01Name Tankstelle
attr sprit reading01XPath //div[contains(@class, 'price-text')]
attr sprit reading01AutoNumLen 2


Die letzte Alternative holt alle Tankstellen auf einmal

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

GiBy

Danke, amenomade

Warum gibt mein FHEM mir da einen Fehler aus (s. beigefügten ScrnClip), der neben dem Umstand:

Warning
This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.
Alternatives to this function include:
    preg_split()
    explode()
    str_split()

an der Syntax des split-Arguments liegen könnte?

Gebhardt
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2

amenomade

Zitat von: GiBy am 13 Februar 2020, 15:30:46
Danke, amenomade

Warum gibt mein FHEM mir da einen Fehler aus (s. beigefügten ScrnClip), der neben dem Umstand:

Warning
This function was DEPRECATED in PHP 5.3.0, and REMOVED in PHP 7.0.0.
Alternatives to this function include:
    preg_split()
    explode()
    str_split()

an $val liegen könnte?

Gebhardt

Ne, eher an split. Aber
- ich verstehe nicht, was PHP hier zu tun hat
- dein Bild ist nicht lesbar

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

GiBy

Nicht les-, lad- oder darstellbar? Anbei das hoff. lesbare Bild, A..
Ich hatte mich zwar auch gewundert, warum der Fehlertext nach Upload kaum noch Kontrast zum Hintergrund hatte. - ich kann ihn allerdings im Thumbnail normal kontrastiert erkennen und im Download.png noch entziffern.
Zum Thema PERL/PHP:
Ich dachte, dass PHP-Funktionen join, split, ... genutzt werden und ich habe gerade dieser Tage für eine Funktion/Modul ein Update auf PHP7 machen (müssen), sodass ich einen solchen versionsbedingten Fehler auf meinem System nicht ausschließen wollte.
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2

GiBy

Ach ja, der Fehler mag auch nur daran liegen, dass <sup> als Formatierungskommando interpretiert, statt als Zeichenkette entfernt, wird. Just in der Fehlermeldung ist ersteres jedenfalls offensichtlich passiert.
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2

amenomade

Aber Fhem ist perl, nicht PHP...
Die Fehlermeldung ist komisch. Ist es daselbe mit '<sup>' statt /<sup>/ ?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

GiBy

Ja, die Fehlermeldung ist die gleiche.
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2

amenomade

Und preg_split("/<sup>/", $val), die empfohlene Alternative, statt split(...)?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

GiBy

Stets die gleiche Fehlermeldung, Amenomade. :(
Und ich habe "-Gänsefüßchen, Leerzeichen nach den Kommata und /\<sup\>/ und auch einfach mal sup als zu entfernendes Bröckchen, @val, $EVTPART0 ausprobiert, um eine andere Fehlermeldung zu erhalten, doch alles ohne Wirkung!
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2

amenomade

Und wenn Du denn attr erst mit:
attr Spritpreis reading01OExpr xeinträgst, und dann über die Weboberfläsche auf reading01OExpr klicks, und den Wert im Feld auf join('',split(/<sup>/,$val)) änderst und auf attr klicks?

Ich sehe überhaupt keine Grund, wofür Fhem <sup> als Formattierung interpretieren sollte, und zwar noch mit einer PHP Fehlermeldung. Wie läuft dein Fhem?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

GiBy

Danke, unermüdliche(r) Amenomade,

aber ich muss gestehen, dass ich bei der ganzen Hin-und-Her-RegExp-erei eine Schließklammer für das Join vergessen hatte, und das war's.
Mein FHEM läuft stabil trotz meiner Hin- und-Her-Definier-Aktionen, wohingegen die USB-Buchse wackelt, die Maus prellt und immer mal wieder ausfällt. Daher vielleicht vernachlässigte ich leider die Syntax außerhalb des eigentlichen RegExp.   >:(
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2

GiBy

Ich danke Euch für die Ratschläge und die Selbst-Marterungen zu meinem Problem.
Mit
reading02Regex   [\d\.]+<sup>\d
und
reading04Regex   (\d\d\d\d\d) (.*)<\/div>
konnte ich, nachdem ich irgendwann meine selbstentworfene Formatierung (à la Preis=Preis-3^Preis-4 und andere) in Device-Übersicht etc. entfernt hatte, ganz reelle Zahlen mit 3-stelliger Mantisse sehen, diese auch in der DB wiederfinden und auch den Ort konnte ich durch das andere RegExp von der PLZ befreien. Mehr wollte ich nicht, auch wenn mir die bis dahin ge<sup>ten Tausendstel-Euro gefallen hatten.
Vielleicht lerne ich ja einmal, wie ich das etwa in das stateFormat einarbeiten kann... :)

Und damit schließe ich mooorgen diesen Thread -hint-hint ;)
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2