Abfrage Heizölpreis HTTPMOD

Begonnen von subseven, 09 Januar 2020, 16:51:01

Vorheriges Thema - Nächstes Thema

subseven

Für die Bestellung meiner Heizölvorräte beobachte ich immer den Preis eine Zeitlang. Dafür hole ich mir von der Seite "esyoil.com" die aktuellen Preise für die benötigte Menge. Der angegebene Preis entspricht dann dem Tatsächlich möglichem Kaufpreis.

Für Interessierte anbei mein HTTPMOD ggf. Hat ja Jemand Verbesserungsvorschläge:

defmod Heizoel HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=[PLZ]&pr-amount=[Menge in Litr]&submit= 1800
attr Heizoel userattr reading01Expr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex
attr Heizoel enableControlSet 1
attr Heizoel reading01Expr $val =~ s/,/\./;; $val;;
attr Heizoel reading01Name Heizoelpreis
attr Heizoel reading01Regex <span class="fw_b ">([\d\,]+)
attr Heizoel room Konfiguration->Websites
attr Heizoel stateFormat Heizöl Heizoelpreis €


In der URL sind die Punkte zip=[PLZ] Durch die eigene Postleitzahl und amount=[Menge in Litr] Durch die Benötigte Menge in Litern abzuändern.
Beispielsweise:
https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=[PLZ]&pr-amount=[Menge in Litr]&submit= 1800
Ersetzen durch:
https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=36211&pr-amount=3500&submit= 1800

Grüße

yersinia

#1
Cool! Ich hab mich dessen bedient und basierend auf diesen Post es etwas erweitert:
<< siehe post #9 >>
PLZ und Menge können dynamisch über die Attribute
attr Heizoelpreis replacement01Value 36211 (PLZ)
attr Heizoelpreis replacement02Value 3500 (Menge in l)
angepasst werden.
viele Grüße, yersinia
----
FHEM 6.2 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

subseven

Die Attribute werde ich bei mir auch noch nachrüsten. Danke!

Bartimaus

Sehr cool, habe für mich jetzt noch Userreadings hinzugefügt (Tankvolumen, Nachfuellmenge (berechnet aus dem Tankvolumen-Fuellstand (aus Heizoel.Hourcounter), Nachüllkosten). Das ganze dann 2 x täglich per Pushnachricht.

Ginge bestimmt auch per attr/regex aber so fit bin ich in der Materie nicht
LG
B.


FHEM@i7-10510U@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

tarum

hallo

@Bartimaus würdest du diesen userreadings abschnitt zur Verfügung stellen.

Danke
Linux Server 20.04 CUL 868+433, CCU3, Homematic, Intertechno, FritzDect 200, JeeLink+LaCrosse, Duofern Stick+Rollotron Gurtwickler,smartVISU-3.0.0

Tedious

Tolle Sache - danke für den Codeschnipsel!
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

Bartimaus

#6
Zitat von: tarum am 15 Januar 2020, 12:32:40
hallo

@Bartimaus würdest du diesen userreadings abschnitt zur Verfügung stellen.

Danke

Bitte:

attr Heizoelpreis replacement02Mode expression
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value ReadingsVal("Heizoelpreis","Tankmenge",0)
attr Heizoelpreis room Heizung,Widget
attr Heizoelpreis stateFormat {"<div>".ReadingsTimestamp($name,"Heizoelpreis","-")." \
<b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;;</b>/100l</div>"}
attr Heizoelpreis userReadings Tankvolumen:none {}, Tankmenge {ReadingsVal("Heizoelpreis","Tankvolumen",0)-ReadingsVal("CN.Blaubrenner","appTanklevel",0)}, Fuellkosten {ReadingsVal("Heizoelpreis","Tankmenge",0)/100*ReadingsVal("Heizoelpreis","Heizoelpreis",0)}


Das Tankvolumen dann manuell setzen (setreading....)

LG
B.


FHEM@i7-10510U@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

tarum

Linux Server 20.04 CUL 868+433, CCU3, Homematic, Intertechno, FritzDect 200, JeeLink+LaCrosse, Duofern Stick+Rollotron Gurtwickler,smartVISU-3.0.0

GreenFHEMfan

Hallo - Super Codeschnipsel,
wäre es auch möglich mehrere Abnahmestellen zu konfigurieren um evtl den Preis für eine Sammelbestellung zu erfragen?
Rasp 3B+,4 / CUL / CC2531 / HmIP-RF / Duofernstick / JeeLink

yersinia

#9
Zitat von: mnennstiel am 26 Januar 2020, 20:48:17wäre es auch möglich mehrere Abnahmestellen zu konfigurieren um evtl den Preis für eine Sammelbestellung zu erfragen?
Ja, einfach das Attribut hinter pr-hose-length= ergänzen.
Müsste ungefähr so funktionieren, ungetestet:
siehe Edit 2020-03-10

EDIT 2020-02-01: Bedingungen für %%ANHAENGER%% angepasst; siehe auch HTTPMOD DEF oben unten.

EDIT 2020-02-03: Beta-User hat es in die httpmod.templates übernommen

EDIT 2020-03-10: esyoil hat die Seite angepasst und das obige httpmod findet keine Preise mehr. Hier eine aktualisierte Version basierend auf post #19 (es ändert sich nur attr Heizoelpreis reading010Regex ([\d\,]+)[\s]*€):
defmod Heizoelpreis HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=%%ENTLADESTELLEN%%&pr-product=8&pr-payment-type=2&%%ANHAENGER%%&pr-hose-length=%%SCHLAUCHLAENGE%%&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit= 1800
attr Heizoelpreis userattr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value
attr Heizoelpreis enableControlSet 1
attr Heizoelpreis reading010Name Heizoelpreis
attr Heizoelpreis reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoelpreis reading010Regex ([\d\,]+)[\s]+€
attr Heizoelpreis replacement01Mode text
attr Heizoelpreis replacement01Regex %%PLZ%%
attr Heizoelpreis replacement01Value 36211
attr Heizoelpreis replacement02Mode text
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value 3500
attr Heizoelpreis replacement03Mode text
attr Heizoelpreis replacement03Regex %%ENTLADESTELLEN%%
attr Heizoelpreis replacement03Value 1
attr Heizoelpreis replacement04Mode text
attr Heizoelpreis replacement04Regex %%SCHLAUCHLAENGE%%
attr Heizoelpreis replacement04Value 40m
attr Heizoelpreis replacement05Mode text
attr Heizoelpreis replacement05Regex %%ANHAENGER%%
attr Heizoelpreis replacement05Value pr-truck-type=
attr Heizoelpreis room HEIZOEL
attr Heizoelpreis stateFormat {"<div>".ReadingsTimestamp($name,"Heizoelpreis","-")." \
<b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;;</b>/100l</div>"}
attr Heizoelpreis webCmd reread

replacement01Regex %%PLZ%% nimmt via replacement01Value die PLZ auf

replacement02Regex %%MENGE%% gibt via replacement02Value die Menge zu bestellenden Heizöls in Liter an

replacement03Regex %%ENTLADESTELLEN%% nimmt über replacement03Value die Entladestellen auf, ist hier mit 1 vorbelegt

replacement04Regex %%SCHLAUCHLAENGE%% gibt über replacement04Value die Schlauchlänge vor, Standard sind 40[m]; Optionen der Webseite sind 40, 60 und 80
--> [2020-03-17] hier gab es auch eine Änderung (siehe post #39): neue Werte für replacement04Value sind 40 oder leer für Standard (40m), hose_l für 60m oder hose_xl für 80m. Danke @Guzzi-Charlie für den Hinweis
--> [2020-03-19] es funktionieren auch 40m, 60m, 80m als Wert (siehe auch post #47)

replacement05Regex %%ANHAENGER%% für all die, die beengt wohnen und einen LKW ohne Anhänger benötigen (wenn ja -> replacement05Value pr-truck-type=short_vehicle setzen, sonst nur replacement05Value pr-truck-type=)

EDIT 2020-03-18: *sigh* (post #44)
Zitat von: yersinia am 18 März 2020, 15:55:18Apropos, ich hatte gerade von esyoil das Heizoelpreis Reading 000 (die scheinen echt an Ihrer Webseite zu schrauben -.-). Ich habe meine RegEx von
attr Heizoelpreis reading010Regex ([\d\,]+)[\s]*€
nach
attr Heizoelpreis reading010Regex ([\d\,]+)[\s]+€
geändert und es funktioniert wieder.
Den obigen Code habe ich angepasst.
viele Grüße, yersinia
----
FHEM 6.2 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

BM-Sorry

Danke für den Code,
war gerade dabei, mir was von fasternergy.de zu bsteln - bin aber mal wieder gescheitert.
Mit dem Code hat es auf Anhieb binnen 5 min. geklappt - 1000 Dank!
fhem auf RPi3, CCU2 für Homematic, ESP8266 mit Espeasy und Tasmota, Sonoff-Geräte mit Tasmota
für den WAF: Heizungssteuerung und Gartenbewässerung

Beta-User

Auch hier wieder eine klasse Koproduktion mehrerer Beteiligter!

Wäre wieder ein HTTPMOD-attrTemplate-Kandidat, oder?
Mag jemand das finalisieren, ist ja jetzt nicht mehr schwierig...?

@yersinia: Suche immer noch nach einem (nennen wir es) Co-Maintainer für httpmod.template... Wäre das nichts für dich?
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Wzut

schönes Beispiel wie Wissen über die Zeit verloren geht. Ich logge damit den Heizoelpreis seit Augist 2016 -> https://forum.fhem.de/index.php/topic,22554.msg479039.html#msg479039
Die Quelle esyoli.com ist noch gleich nur die Regex von damals stimmen nicht mehr weil die irgendwann 2019 ihre Seite etwas geändert hatten.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

yersinia

Zitat von: Beta-User am 28 Januar 2020, 17:29:09@yersinia: Suche immer noch nach einem (nennen wir es) Co-Maintainer für httpmod.template... Wäre das nichts für dich?
Ja, das wäre nichts für mich.
Für derartige Betreuung habe ich zu wenig -verlässlich vorhandene- Zeit. :(
viele Grüße, yersinia
----
FHEM 6.2 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Zitat von: yersinia am 29 Januar 2020, 09:42:09
Ja, das wäre nichts für mich.
Für derartige Betreuung habe ich zu wenig -verlässlich vorhandene- Zeit. :(
Na ja, zum einen ist es "nur" eine Co-Maintainerschaft, zum anderen halten sich die Aktivitäten bei den HTTPMOD-templates sehr in Grenzen, das waren nur etwa 20 commits in etwas mehr wie einem Jahr: https://svn.fhem.de/trac/log/trunk/fhem/FHEM/lib/AttrTemplate/httpmod.template, und das meiste waren Einführungsthemen und kleine fixes...

Das ganze ist auch nicht "kritisch" für den FHEM-Betrieb, kleine Fehler haben keine wirklich gravierenden Auswirkungen.

Und mal ernsthaft: ich bin in HTTPMOD nach wie vor nicht eingearbeitet, und manche templates funktionieren (noch) nicht oder nicht auf allen Maschinen... (aber auch da freue ich mich über "tätige Rückmeldungen" von anderen... ;) )

Zitat von: Wzut am 28 Januar 2020, 17:48:47
schönes Beispiel wie Wissen über die Zeit verloren geht. Ich logge damit den Heizoelpreis seit Augist 2016 -> https://forum.fhem.de/index.php/topic,22554.msg479039.html#msg479039
Die Quelle esyoli.com ist noch gleich nur die Regex von damals stimmen nicht mehr weil die irgendwann 2019 ihre Seite etwas geändert hatten.
Witzig, der Thread sollte in dem Benzinpreis-Ding verlinkt sein. Aber mir war auch nicht geläufig, dass da auch Heizöl versteckt war ::) .
Der erweiterte Code hier geht aber schon noch ein Stück über "das Original" hinaus, oder habe ich was verpaßt?
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files