Ich versuche von der Seite www.fluessiggas-gemeinsam-kaufen.de (http://www.fluessiggas-gemeinsam-kaufen.de) den Gaspreis für meine Region abzufragen. Datum geht mit(31|30|[012]\d|\d)\. (\:Januar|Februar|März|April|Mai|Juni|July|August|Septemper|Oktober|November|Dezemeber)+ (\d{1,6}+)
auszulesen, beim Preis bringt er ExtractReading Netto did not match. Was habe ich falsch gemacht?
Hier meine Defines:define Gaspreis_fgk HTTPMOD https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich 7200
attr Gaspreis_fgk enableControlSet 1
attr Gaspreis_fgk enableCookies 1
attr Gaspreis_fgk enforceGoodReadingNames 1
attr Gaspreis_fgk handleRedirects 1
attr Gaspreis_fgk reading01Name Netto
attr Gaspreis_fgk reading01Regex 93,.*netto\x20views-align-center\"\>\x20([\d,]+)
attr Gaspreis_fgk reading02Name Datum
attr Gaspreis_fgk reading02Regex (31|30|[012]\d|\d)\. (\:Januar|Februar|März|April|Mai|Juni|July|August|Septemper|Oktober|November|Dezemeber)+ (\d{1,6}+)
attr Gaspreis_fgk reading03Name Brutto
attr Gaspreis_fgk reading03Regex 93,.*brutto views-align-center"\> ([\d,]+)
attr Gaspreis_fgk reading04Name Preis
attr Gaspreis_fgk reading04Regex 93,.*netto views-align-center"\> ([0-9,]+).*brutto views-align-center"\> ([0-9,]+)
Brutto und Preis habe ich hinzugenommen, um Unterschiede in den Abfragen auszutesten. Leider erhalte ich ausser dem Datum nichts zurück.
Hier das List:
Internals: BUSY 0
DEF https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich 7200
FUUID 5f3e271f-f33f-7b43-afaa-d821cbe8e4cf06ec
Interval 60
LASTSEND 1597939860.19593
MainURL https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
ModuleVersion 3.5.22 - 7.2.2020
NAME Gaspreis_fgk
NOTIFYDEV global
NR 448
NTFY_ORDER 50-Gaspreis_fgk
STATE 1.00 Netto am 20. August 2020
TRIGGERTIME 1597939920.19413
TRIGGERTIME_FMT 2020-08-20 18:12:00
TYPE HTTPMOD
addr https://www.fluessiggas-gemeinsam-kaufen.de:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
header
host www.fluessiggas-gemeinsam-kaufen.de
httpheader HTTP/1.1 200 OK
Date: Thu, 20 Aug 2020 16:12:21 GMT
Server: Apache
ETag: "a22d-5ad4c95f66a45-gzip"
Accept-Ranges: bytes
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
X-Cached-By: Boost
Content-Length: 11214
Connection: close
Content-Type: text/html; charset=utf-8
httpversion 1.0
hu_blocking 0
hu_filecount 373
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /fluessiggaspreise-aktuell-jahresvergleich
protocol https
redirects 0
timeout 2
url https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
value 0
CompiledRegexes:
QUEUE:
READINGS:
2020-08-20 18:11:00 Datum-1 20
2020-08-20 18:11:00 Datum-2 August
2020-08-20 18:11:00 Datum-3 2020
2020-08-20 13:10:59 Netto 1
REQUEST:
data
header
ignoreredirects 0
retryCount 0
type update
url https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
value 0
defptr:
readingBase:
Datum-1 reading
Datum-2 reading
Datum-3 reading
Netto reading
readingNum:
Datum-1 02
Datum-2 02
Datum-3 02
Netto 01
readingOutdated:
readingSubNum:
Datum-1 -1
Datum-2 -2
Datum-3 -3
requestReadings:
update:
Datum-1 reading 02-1
Datum-2 reading 02-2
Datum-3 reading 02-3
Netto reading 01
sslargs:
Attributes:
enableControlSet 1
enableCookies 1
enforceGoodReadingNames 1
handleRedirects 1
reading01Name Netto
reading01Regex 93,.*netto\x20views-align-center\"\>\x20([\d,]+)
reading02Name Datum
reading02Regex (31|30|[012]\d|\d)\. (\:Januar|Februar|März|April|Mai|Juni|July|August|Septemper|Oktober|November|Dezemeber)+ (\d{1,6}+)
reading03Name Brutto
reading03Regex 93,.*brutto views-align-center"\> ([\d,]+)
reading04Name Preis
reading04Regex 93,.*netto views-align-center"\> ([0-9,]+).*brutto views-align-center"\> ([0-9,]+)
room I.Gas
stateFormat { sprintf("%.2f Netto am %2i. %s %i", ReadingsVal($name,"Netto",0), ReadingsVal($name,"Datum-1",0), ReadingsVal($name,"Datum-2",0), ReadingsVal($name,"Datum-3",0))}
userattr reading01Format reading01Name reading01RegOpt reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
verbose 5
Beim Reading kommt das Netto einmal vor, da ich es auf .* gesetzt hatte.
Mit dem Befehl:
93,.*netto views-align-center\"\> ([\d,]+)
kann ich unter https://regex101.com/ (https://regex101.com/) den Wert finden.
Hier der entsprechende Teststring gekürzt.
> West I </td> <td class="views-field views-field-field-priceziparea"> 40, 41, 42, 44, 50, 51, 52, 53, 58, 59 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 28,18 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,69 </td> </tr> <tr class="even"> <td class="views-field views-field-field-priceregion"> West II </td> <td class="views-field views-field-field-priceziparea"> 45, 46, 47, 48 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 27,97 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,45 </td> </tr> <tr class="odd"> <td class="views-field views-field-field-priceregion"> Nord-West I </td> <td class="views-field views-field-field-priceziparea"> 49 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 27,80 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,25 </td> </tr> <tr class="even"> <td class="views-field views-field-field-priceregion"> Süd II </td> <td class="views-field views-field-field-priceziparea"> 60, 61, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 88, 89, 97, 98, 99 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 28,44 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 32,99 </td> </tr> <tr class="odd views-row-last"> <td class="views-field views-field-field-priceregion"> Süd-Ost </td> <td class="views-field views-field-field-priceziparea"> 80, 81, 82, 83, 84, 85, 86, 87, 90, 91, 92, 93, 94, 95, 96 </td> <td class="views-field views-field-field-pricenetto views-align-center"> 29,79 </td> <td class="views-field views-field-field-pricebrutto views-align-center"> 34,55 </td> </tr> </tbody> </table>
finden sollte er 29,79. Doch ich erhalte kein Ergebnis
Kann mir da jemand weiter helfen?
defmod gaspreis HTTPMOD https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich
attr gaspreis reading01Name netto
attr gaspreis reading01Regex 93,.*\n.*netto.*\n.*(\d\d,\d\d)
attr gaspreis reading02Name brutto
attr gaspreis reading02Regex 93,.*\n.*\n.*\n.*brutto.*\n.*(\d\d,\d\d)
attr gaspreis reading03Name datum
attr gaspreis reading03Regex am.*<b>(.*)<.*im
Vielen Dank für die schnelle Antwort. damit Funktioniert es.
Wo ist der Unterschied? Wenn ich diese Abfrage mit https://regex101.com/ Teste, habe ich kein Ergebnis. \n kenne ich als Zeilenumbruch. Ist das wegen der Tabellenform notwendig?
Für alle die es Interresiert, hier meine Defines:
Für die Seite fluessiggas-gemeinsam-kaufen
define Gaspreis_fgk HTTPMOD https://www.fluessiggas-gemeinsam-kaufen.de/fluessiggaspreise-aktuell-jahresvergleich 7200
attr Gaspreis_fgk room I.Gas
attr Gaspreis_fgk enableControlSet 1
attr Gaspreis_fgk enableCookies 1
attr Gaspreis_fgk enforceGoodReadingNames 1
attr Gaspreis_fgk handleRedirects 1
attr Gaspreis_fgk stateFormat { sprintf("Netto %s Brutto %s am %s", ReadingsVal($name,"Netto",0), ReadingsVal($name,"Brutto",0), ReadingsVal($name,"Datum",0))}
attr Gaspreis_fgk reading01Name Netto
attr Gaspreis_fgk reading01OExpr $val =~ s/,/\./; $val;
attr Gaspreis_fgk reading01Regex 93,.*\n.*netto.*\n.*(\d\d,\d\d)
attr Gaspreis_fgk reading02Name Datum
attr Gaspreis_fgk reading02Regex am.*<b>(.*)<.*im
attr Gaspreis_fgk reading03Name Brutto
attr Gaspreis_fgk reading03OExpr $val =~ s/,/\./; $val;
attr Gaspreis_fgk reading03Regex 93,.*\n.*\n.*\n.*brutto.*\n.*(\d\d,\d\d)
Tip: "attr Gaspreis_fgk reading01OExpr $val =~ s/,/\./; $val;" lässt sich nicht direkt über die Befehlszeile eingeben, deshalb erst "attr Gaspreis_fgk reading03OExpr $val =~ s/,/\./" eingeben. Den Rest oder den kompletten Ausdruck kann man dan über die grafische Oberfläche von FHEM eintragen. Dort wird er akzeptiert.
Die Log-Datei:
define FileLog_Gaspreis_fgk FileLog ./log/Gaspreis_fgk-%Y.log Gaspreis_fgk
attr FileLog_Gaspreis_fgk room I.Gas
attr FileLog_Gaspreis_fgk logtype text
Für die Seite des energieverbraucher gibt es etwas andere Abfragen.
define Gaspreis_bev HTTPMOD https://www.energieverbraucher.de/de/preisabfrage__1101 7200
attr Gaspreis_bev room I.Gas
attr Gaspreis_bev enableControlSet 1
attr Gaspreis_bev enableCookies 1
attr Gaspreis_bev enforceGoodReadingNames 1
attr Gaspreis_bev handleRedirects 1
attr Gaspreis_bev stateFormat { sprintf("Netto %s Brutto %s bis %s", ReadingsVal($name,"Netto-2",0), ReadingsVal($name,"Brutto-2",0), ReadingsVal($name,"Datum",0))}
attr Gaspreis_bev reading01Name Brutto-1
attr Gaspreis_bev reading01OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading01Regex 93, .*\n.*(\d\d)
attr Gaspreis_bev reading02Name Netto-1
attr Gaspreis_bev reading02OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading02Regex 93, .*\n.*\n.*(\d\d,\d)
attr Gaspreis_bev reading03Name Brutto-2
attr Gaspreis_bev reading03OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading03Regex 93, .*\n.*\n.*\n.*(\d\d)
attr Gaspreis_bev reading04Name Netto-2
attr Gaspreis_bev reading04OExpr $val =~ s/,/\./; $val;
attr Gaspreis_bev reading04Regex 93, .*\n.*\n.*\n.*\n.*(\d\d,\d)
attr Gaspreis_bev reading05Name Datum
attr Gaspreis_bev reading05Regex zum ([1-3]?\d.[0-1]?\d.\d\d\d?\d?)
Die Log-Datei:
define FileLog_Gaspreis_bev FileLog ./log/Gaspreis_bev-%Y.log Gaspreis_bev
attr FileLog_Gaspreis_bev room I.Gas
attr FileLog_Gaspreis_bev logtype text
Ich habe beide Log-Dateien in einem SVG-Plot vereint. Dadurch sieht man dann recht schön die Preisunterschiede und Veränderung.
In meinen befehlen frage ich die PLZ 93 ab. Für andere PLZ bitte diesen Wert ändern.
Ich hoffe, das es dem einen oder anderen Hilfreich sein kann.
RatisBow