Autor Thema: Abfrage Heizölpreis HTTPMOD  (Gelesen 16900 mal)

Offline subseven

  • Jr. Member
  • **
  • Beiträge: 90
Abfrage Heizölpreis HTTPMOD
« am: 09 Januar 2020, 16:51:01 »
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= 1800Ersetzen 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
Gefällt mir Gefällt mir x 5 Liste anzeigen

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #1 am: 10 Januar 2020, 16:31:02 »
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.
« Letzte Änderung: 17 März 2020, 16:43:36 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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
Gefällt mir Gefällt mir x 4 Liste anzeigen

Offline subseven

  • Jr. Member
  • **
  • Beiträge: 90
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #2 am: 13 Januar 2020, 09:42:47 »
Die Attribute werde ich bei mir auch noch nachrüsten. Danke!

Offline Bartimaus

  • Hero Member
  • *****
  • Beiträge: 1333
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #3 am: 15 Januar 2020, 10:56:11 »
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.


RaspberryP4-4G - Raspbian-Buster, RootFS@256GB-USB-SSD, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs

Offline tarum

  • New Member
  • *
  • Beiträge: 48
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #4 am: 15 Januar 2020, 12:32:40 »
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-2.9.1

Offline Tedious

  • Hero Member
  • *****
  • Beiträge: 1434
  • Indocti discant et ament meminisse periti
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #5 am: 15 Januar 2020, 13:52:31 »
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...

Offline Bartimaus

  • Hero Member
  • *****
  • Beiträge: 1333
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #6 am: 15 Januar 2020, 14:16:00 »
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....)

« Letzte Änderung: 15 Januar 2020, 20:46:47 von Bartimaus »
LG
B.


RaspberryP4-4G - Raspbian-Buster, RootFS@256GB-USB-SSD, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline tarum

  • New Member
  • *
  • Beiträge: 48
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #7 am: 16 Januar 2020, 12:24:24 »
@Bartimaus

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

Offline GreenFHEMfan

  • Full Member
  • ***
  • Beiträge: 109
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #8 am: 26 Januar 2020, 20:48:17 »
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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #9 am: 27 Januar 2020, 10:16:39 »
wä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)
Apropos, 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.
« Letzte Änderung: 19 März 2020, 15:45:18 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline BM-Sorry

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #10 am: 28 Januar 2020, 17:10:08 »
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15787
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #11 am: 28 Januar 2020, 17:29:09 »
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 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4533
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #12 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.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #13 am: 29 Januar 2020, 09:42: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.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15787
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #14 am: 29 Januar 2020, 11:33:57 »
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... ;) )

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 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4533
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #15 am: 29 Januar 2020, 12:36:09 »
oder habe ich was verpaßt?
nein nein alles gut :) klar da kommt kein Mensch drauf beim Grundthema Benzin nach Heizöl zu suchen - die SuFu findet es eh nur wenn man direkt nach esyoil sucht.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1835
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #16 am: 22 Februar 2020, 10:34:46 »
Für Interessierte anbei mein HTTPMOD
Ich hab mich dessen bedient und ... es etwas erweitert
Danke!
« Letzte Änderung: 22 Februar 2020, 12:07:33 von Schotty »
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline subseven

  • Jr. Member
  • **
  • Beiträge: 90
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #17 am: 09 März 2020, 20:32:59 »
Esyoil hat die Seite umgebaut. Das Feld, welche ich abgefragt habe, existiert in der Form nicht mehr. Morgen werde ich mal schauen welches man stattdessen abfragen kann.
Falls jemand schneller als ich ist, kann er gerne seine Lösung zur Verfügung stellen.
Gefällt mir Gefällt mir x 3 Liste anzeigen

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1835
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #18 am: 10 März 2020, 10:06:13 »
Hmm, also ich hatte yersinias Codebeispiel übernommen (was ja eigtl auf deinem beruht) und bis jetzt funktioniert noch alles!
 
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #19 am: 10 März 2020, 11:42:46 »
Bei mir funktioniert das HTTPMOD fehlerfrei, aber die RegEx zieht nicht mehr. Ich habe zurzeit kein FHEM zur Hand, aber einen regextester. Kann einer von euch diese RegEx bitte testen:
attr Heizoelpreis reading010Regex ([\d\,]+)[\s]*€Ist leider nicht so schnell wie die Version vorher....
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1835
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #20 am: 10 März 2020, 11:56:04 »
Ich bin diesbzgl noch nicht so fit.. Ist es das hier (bei der Ausgabe von "list Heizoelpreis"):
   READINGS:
     2020-03-07 14:33:33   Heizoelpreis    54.50
Dann stimmt es in der Tat nicht mehr - war mir vorhin nicht aufgefallen, da der Preis zu dem Zeitpunkt noch passte. Momentan aber nicht mehr, der liegt für meine Abfrage (1000l + PLZ) gerade bei 55,57€.

Kurze Frage am Rande (ich hoffe, es ist hier erlaubt?): Wäre es möglich, zusätzlich die Preistendenzgrafik von der esyoil-Startseite mit abzurufen und quasi 1:1 darstellen zu lassen (bspw bei FPUI/FTUI)?

EDIT: Sorry, anscheinend ist mein RegEx aber leicht anders:
reading010Regex <span class="fw_b ">([\d\,]+)

Hier mal das komplette Listing falls es irgendwie hilft - PLZ habe ich durch XXXXX ersetzt:
Internals:
   BUSY       0
   CHANGED   
   DEF        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%%&submit= 1800
   FUUID      5e50f415-f33f-e3ee-29c5-4268f0198d30d1eb
   Interval   1800
   LASTSEND   1583835976.00684
   MainURL    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%%&submit=
   ModuleVersion 3.5.22 - 7.2.2020
   NAME       Heizoelpreis
   NOTIFYDEV  global
   NR         30
   NTFY_ORDER 50-Heizoelpreis
   ReplacementEnabled 1
   STATE      <div>2020-03-07 14:33:33  <b>54.50&euro;</b>/100l</div>
   TRIGGERTIME 1583837776.00568
   TRIGGERTIME_FMT 2020-03-10 11:56:16
   TYPE       HTTPMOD
   addr       https://www.esyoil.com:443
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl 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=XXXXX&pr-amount=1000&submit=
   header     Cookie: calc_arguments=XXXXX%3B1000%3B1%3B8%3B2%3B0%3B%3B%3B%3B%242y%2410%243JEU7KQKYEwoIYPXuKyHWeFj%2FwfDkhCAyi%2FGGzm0aGdtBd4kZ%2Fleu; esyoil_com=mf642ujk9k74h90evsg36s0qg8
   host       www.esyoil.com
   httpheader HTTP/1.1 200 OK
Date: Tue, 10 Mar 2020 10:26:16 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Security-Policy: style-src 'unsafe-inline' 'self' https://stackpath.bootstrapcdn.com https://use.fontawesome.com https://fonts.googleapis.com https://cdnjs.cloudflare.com blob:; font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com https://use.fontawesome.com data:; report-uri /api.php?sid=570
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: calc_arguments=XXXXX%3B1000%3B1%3B8%3B2%3B0%3B%3B%3B%3B%242y%2410%243JEU7KQKYEwoIYPXuKyHWeFj%2FwfDkhCAyi%2FGGzm0aGdtBd4kZ%2Fleu; expires=Tue, 24-Mar-2020 10:26:16 GMT; Max-Age=1209600; path=/; secure
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Upgrade: h2
Connection: Upgrade, close
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: no-cache
Content-Language: de
Content-Length: 36468
Content-Type: text/html; charset="utf-8"
   httpversion 1.0
   hu_blocking 0
   hu_filecount 4
   hu_port    443
   hu_portSfx
   ignoreredirects 1
   loglevel   4
   path       /preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=XXXXX&pr-amount=1000&submit=
   protocol   https
   redirects  0
   timeout    2
   url        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=XXXXX&pr-amount=1000&submit=
   value      0
   CompiledRegexes:
   HTTPCookieHash:
     calc_arguments;/:
       Name       calc_arguments
       Options    expires=Tue, 24-Mar-2020 10:26:16 GMT; Max-Age=1209600; path=/; secure
       Path       /
       Value      XXXXX%3B1000%3B1%3B8%3B2%3B0%3B%3B%3B%3B%242y%2410%243JEU7KQKYEwoIYPXuKyHWeFj%2FwfDkhCAyi%2FGGzm0aGdtBd4kZ%2Fleu
     esyoil_com;/:
       Name       esyoil_com
       Options    expires=Tue, 10-Mar-2020 09:06:17 GMT; Max-Age=600; path=/; secure; HttpOnly
       Path       /
       Value      mf642ujk9k74h90evsg36s0qg8
   QUEUE:
   READINGS:
     2020-03-07 14:33:33   Heizoelpreis    54.50
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        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%%&submit=
     value      0
   sslargs:
Attributes:
   DbLogExclude 1
   enableControlSet 1
   reading010Expr $val =~ s/,/\./; $val;
   reading010Name Heizoelpreis
   reading010OExpr $val =~ s/,/\./; $val;
   reading010Regex <span class="fw_b ">([\d\,]+)
   replacement01Mode text
   replacement01Regex %%PLZ%%
   replacement01Value XXXXX
   replacement02Mode text
   replacement02Regex %%MENGE%%
   replacement02Value 1000
   room       HEIZOEL,Unsorted
   stateFormat {"<div>".ReadingsTimestamp($name,"Heizoelpreis","-")." \ <b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;</b>/100l</div>"}
   userattr   reading010Expr reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value
   webCmd     reread
« Letzte Änderung: 10 März 2020, 12:00:52 von Schotty »
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #21 am: 10 März 2020, 12:33:49 »
Dat hascht aber jelesen, oder?
Bei mir funktioniert das HTTPMOD fehlerfrei, aber die RegEx zieht nicht mehr. Ich habe zurzeit kein FHEM zur Hand, aber einen regextester. Kann einer von euch diese RegEx bitte testen:
attr Heizoelpreis reading010Regex ([\d\,]+)[\s]*€Ist leider nicht so schnell wie die Version vorher....

Nach Sicherung könntest du testhalber das Attribut von
reading010Regex <span class="fw_b ">([\d\,]+)auf
reading010Regex ([\d\,]+)[\s]*ۊndern.

Keine Garantie, das es sauber funktioniert, ist ein erster Schuß. Wie gesagt, hab derzeit kein FHEM zur Hand.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1835
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #22 am: 10 März 2020, 12:47:30 »
Ja hatte ich (EDIT: Zur Erklärung: Ich hatte den Code von dir auf S.1 so übernommen), hab's jetzt geändert und es scheint zu funktionieren:
Heizoelpreis  2020-03-10 12:45:35 55.57€/100l
Danke schonmal! :)
« Letzte Änderung: 10 März 2020, 13:09:55 von Schotty »
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #23 am: 10 März 2020, 17:02:10 »
Danke Schotty. Ich hatte jetzt auch die Gelegenheit es zu testen und es sieht gut aus.

Schön wäre es, wenn noch mehr testen würden. Oder gar das RegEx optimieren würden.

Wenn es keine Einwände gibt, werde ich die Änderung in das httpmod.template einpflegen.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline subseven

  • Jr. Member
  • **
  • Beiträge: 90
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #24 am: 10 März 2020, 18:45:06 »
Funktioniert auch bei mir  :D

Offline Jump2016

  • Jr. Member
  • **
  • Beiträge: 51
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #25 am: 11 März 2020, 07:59:17 »
@Schotty: Habe es getestet. Kann bestätigen, es funktioniert :)

Offline FHEM-User22

  • Full Member
  • ***
  • Beiträge: 480
  • Viele Grüße aus Grimma
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #26 am: 11 März 2020, 08:03:26 »
Moin,
auch bei mir, funzt.
Dankeschön
FHEM auf Raspberry Pi und Proxmox und... und.... und....

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15787
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #27 am: 11 März 2020, 08:33:25 »
Wenn es keine Einwände gibt, werde ich die Änderung in das httpmod.template einpflegen.
:)
...das habe ich gehört und hoffe, es richtig interpretiert zu haben!
*freu*

Mit dem nächsten update zu diversen attrTemplate wird der Fix jedenfalls drin sein,  falls das die richtige Version ist:
attr DEVICE reading010Regex ([\d\,]+)[\s]*€
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #28 am: 11 März 2020, 09:11:16 »
:)
...das habe ich gehört und hoffe, es richtig interpretiert zu haben!
*freu*
Höchstwahrscheinlich nicht. Ich hätte das angepasste Template dir kopierfertig in httpmod.template thread gekippt.... ;D

Mit dem nächsten update zu diversen attrTemplate wird der Fix jedenfalls drin sein,  falls das die richtige Version ist:
attr DEVICE reading010Regex ([\d\,]+)[\s]*€
Ja, das ist mMn richtig. Verstehe _ich_ das richtig, dass du das direkt übernimmst? ;)
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15787
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #29 am: 11 März 2020, 10:14:32 »
Schade, aber du bist jederzeit weiter herzlich eingeladen...

Ja, update kommt, ich war nur etwas zu spät dran für den regulären update-Zyklus und habe noch ein paar andere Baustellen, von denen evtl. weitere Kleinigkeiten zurückkommen, die dann ggf. gleich auch noch mit rein können.
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #30 am: 11 März 2020, 11:33:26 »
Ja, update kommt, ich war nur etwas zu spät dran für den regulären update-Zyklus und habe noch ein paar andere Baustellen, von denen evtl. weitere Kleinigkeiten zurückkommen, die dann ggf. gleich auch noch mit rein können.
Danke dafür, kein Druck. So eilig ist es auch wieder nicht und die meisten FHEM User schaffen das Update des Attributes sicherlich auch via WebGUI. ;)
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15787
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #31 am: 11 März 2020, 12:11:18 »
Klar...

Nur: Wer jetzt via attrTemplate einsteigt, sollte eigentlich möglichst direkt funktionalen Code bekommen, und nicht gleich nachbessern müssen...

[OT]
Trotzdem wäre es nett, wenn du mal alle HTTPMOD-templates auf Verbesserungsmöglichkeiten durchsehen könntest, die sich auf allg. Quellen beziehen - das Wetter-Zeug für Österreich und so. Auch das eilt nicht, aber mir wäre es sehr viel wohler, wenn sich jemand das ansehen würde, der was von der Sache versteht ;D . Wenn ich das mache, dauert es ewig, und ob es dann funktional (oder gar optimal!) ist, ist eine ganz andere Frage.

aber auch da gilt: eilt nicht...
[/OT]
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #32 am: 16 März 2020, 16:10:16 »
Hallo,

ich habe auch das Modul zum Abfragen der Heizölpreise (mit dem Template fuel_oil_check) angelegt, aber irgendwie funktioniert es nicht richtig. Es hat genau einmal den Preis abgefragt, wobei ich noch nicht einmal weiß woher es den Preis hat (der auch falsch zu sein scheint), denn eine manuelle Abfrage auf der easyoil-Seite bringt nur eine Fehlermeldung aber keinen Preis.

Auch ein "reread" zeigt keinerlei Funktion, d.h. es wird kein neuer Wert geholt.

Wie kann ich die Funktion prüfen?
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #33 am: 16 März 2020, 16:29:47 »
1. stimmt deine Version mit der Letzten überein (post #9 mit dem Edit)?
2. Attribute replacement01Value, replacement02Value, replacement03Value, replacement04Value und replacement05Value sind richtig gepflegt (siehe auch post #9)?
3. wenn du den Link des Internal displayurl manuell öffnest, wird der richtige Preis angezeigt?
4. wenn alles mit 'ja' beantwortet worden ist, bitte ein List des Devices
« Letzte Änderung: 16 März 2020, 16:37:04 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #34 am: 16 März 2020, 17:48:32 »
Hallo yersinia,

vielen Dank für die schnelle Antwort.

Es war alles richtig und (fast) alles Gleich, nur die PLZ nicht. Als ich die URL manuell eingegeben hatte bekam ich auch eine aussagekräftige Fehlermeldung auf der easyoil-Seite "Diese Postleitzahl wird leider nicht beliefert. (Fehler 2001)". Mit einer PLZ aus dem "Liefergebiet" funktioniert alles. Da muß man erstmal drauf kommen. Ich dachte das wäre eine bundesweite Seite.

Ich habe meine Preise bisher immer manuell über "Heizoelboerse.de" abgefragt.

Naja, dann muß ich mal sehen ob ich das HTTMOD umbauen kann, damit es mir von einer anderen Seite die Preise holt.
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #35 am: 16 März 2020, 18:24:18 »
Hallo,

ich habe es gerade mal versucht von einer anderen Seite Werte zu lesen, aber das ist "eine Nummer zu hoch" für mich. Da fehlt mir einfach das Wissen. Ich werde also wohl weiterhin die Preise manuell abfragen müssen. Danke nochmal für die Hilfe.

Falls sich aber Jemand berufen fühlen sollte mich zu unterstützen, dann wäre das natürlich super. Am liebsten würde ich die Preise von "heizoelboerse.de" auslesen, aber die haben irgendwie ein Berechnungsscript drin und der Preis wird dann auf einer neuen Seite angezeigt.
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1835
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #36 am: 17 März 2020, 11:41:13 »
Es war alles richtig und (fast) alles Gleich, nur die PLZ nicht.
...
Mit einer PLZ aus dem "Liefergebiet" funktioniert alles. Da muß man erstmal drauf kommen. Ich dachte das wäre eine bundesweite Seite.
Genau, yersinia hatte es in seinem ersten Beitrag als Anmerkung geschrieben:
PLZ und Menge können dynamisch über die Attribute
attr Heizoelpreis replacement01Value 36211 (PLZ)
attr Heizoelpreis replacement02Value 3500 (Menge in l)
angepasst werden.
Dann nimmst du vorher nur die Version, die dir
1. stimmt deine Version mit der Letzten überein (post #9 mit dem Edit)?
hier empfohlen hat.
Schon hast du einen auf dein Liefergebiet und mit deiner Wunschmenge abgefragten Heizölpreis der entspr Firmen. Die Preise variieren ja bundesweit, lokal weichen sie ab, das wird bei der von dir erwähnten heizoelberse letztlich nicht anders sein.
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #37 am: 17 März 2020, 12:31:27 »
Hallo Schotty,

Danke für Deine Antwort, aber leider ist diese für mich nutzlos. Ich glaube Du hast meine Antwort nicht vollständig gelesen. Natürlich hatte ich die entsprechenden Felder angepaßt. Genau deshalb hat es ja nicht funktioniert.

Bei easyoil ist offensichtlich kein Lieferant für meine Anschrift gelistet, ergo gibt es auch keinen Preis sondern nur die von mir genannte Fehlermeldung.
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #38 am: 17 März 2020, 12:56:43 »
[OT]
Ich finde es kurios, dass es PLZ gibt, die nicht beliefert werden. Oder lebst du auf eine der Nordseeinseln? Oder in Büsingen:o
Hast du mal bei heizoel24.de geschaut, listen die Lieferanten, welche zu dir liefern? (Erfahrung sagt aber, dass heizoel24 teurer als esyoil ist, bei gleicherm Lieferanten...)
[/OT]

Funktionieren Nachbar-PLZ? Ansonsten frag doch mal bei esyoil an, ob es da einen Fehler geben könnte.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #39 am: 17 März 2020, 14:43:30 »
Hallo,

ich glaube ich habe das Problem gefunden.

Die zu übergebenden Werte für die Schlauchlängen scheinen so nicht zu funktionieren.
Wenn man auf der Webseite die verschiedenen Meterzahlen auswählt, dann erscheinen diese nicht in der URL, sondern statt dessen:
40m ==> https://www.esyoil.com/preisausgabe.php?pr-zip=67246&pr-amount=3000&pr-product=8&pr-payment-type=2&pr-delivery-date=&pr-unloading-points=1&pr-hose-length=&pr-truck-type=&pr-app=1&submit=Neu+rechnen
60m ==> https://www.esyoil.com/preisausgabe.php?pr-zip=67246&pr-amount=3000&pr-product=8&pr-payment-type=2&pr-delivery-date=&pr-unloading-points=1&pr-hose-length=hose_l&pr-truck-type=&pr-app=1&submit=Neu+rechnen
80m ==> https://www.esyoil.com/preisausgabe.php?pr-zip=67246&pr-amount=3000&pr-product=8&pr-payment-type=2&pr-delivery-date=&pr-unloading-points=1&pr-hose-length=hose_xl&pr-truck-type=&pr-app=1&submit=Neu+rechnen

Die Website erwartet also nicht 40/60/80m sondern ', hose_l oder hose_xl. Wenn ich also jetzt nur ein Hochkomma oder "hose_l" eingebe dann funktioniert der Abruf, d.h. Standard (40m) ist offenbar "Nichts", 60m = L und 80m XL.

Auf jeden Fall funktioniert es jetzt so. Danke nochmal für die Unterstützung.

P.S.
Wenn ich bei meiner PLZ "80m" abfrage, dann kommt auch wieder "Wir liefern nicht an diese PLZ". Es gibt offensichtlich keinen gelisteten Händler der Fahrzeuge mit 80m hat/anbietet.
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200
Informativ Informativ x 1 Liste anzeigen

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #40 am: 17 März 2020, 16:25:53 »
Hallo,

ich glaube ich habe das Problem gefunden.

Die zu übergebenden Werte für die Schlauchlängen scheinen so nicht zu funktionieren.
Wenn man auf der Webseite die verschiedenen Meterzahlen auswählt, dann erscheinen diese nicht in der URL, sondern statt dessen:
40m ==> https://www.esyoil.com/preisausgabe.php?pr-zip=67246&pr-amount=3000&pr-product=8&pr-payment-type=2&pr-delivery-date=&pr-unloading-points=1&pr-hose-length=&pr-truck-type=&pr-app=1&submit=Neu+rechnen
60m ==> https://www.esyoil.com/preisausgabe.php?pr-zip=67246&pr-amount=3000&pr-product=8&pr-payment-type=2&pr-delivery-date=&pr-unloading-points=1&pr-hose-length=hose_l&pr-truck-type=&pr-app=1&submit=Neu+rechnen
80m ==> https://www.esyoil.com/preisausgabe.php?pr-zip=67246&pr-amount=3000&pr-product=8&pr-payment-type=2&pr-delivery-date=&pr-unloading-points=1&pr-hose-length=hose_xl&pr-truck-type=&pr-app=1&submit=Neu+rechnen

Die Website erwartet also nicht 40/60/80m sondern ', hose_l oder hose_xl. Wenn ich also jetzt nur ein Hochkomma oder "hose_l" eingebe dann funktioniert der Abruf, d.h. Standard (40m) ist offenbar "Nichts", 60m = L und 80m XL.
Vielen Dank für den Hinweis. Das fällt nur auf, wenn man einen langen Schlauch benötigt. Oo Danke fürs Testen und Feedback!
Ich werde das in der 'Doku' anpassen. post #9 ist angepasst.

Achja, für alle, die noch die Gesamtkosten anzeigen lassen wollen, können stateFormat wie folgt ersetzen (Raw definition):
attr Heizoelpreis stateFormat { my $price = 0.0;;;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;;;\
my $ret = "<div>".ReadingsTimestamp($name,"Heizoelpreis","-");;;;\
$ret .= "&nbsp;;<b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;;</b>/100l";;;;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;;;\
$ret .= sprintf("%.2f",$price);;;;\
$ret .= "€)</div>";;;;\
return $ret;;;;\
}
ergibt einen state wie diesen:
Zitat
2020-03-17 16:01:01 52.66€/100l (2000l = 1053.20€)
« Letzte Änderung: 17 März 2020, 16:35:30 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #41 am: 17 März 2020, 17:16:40 »
Hallo,

gern geschehen.

Nachdem die Abfrage nun funktioniert hab ich natürlich gleich noch ein wenig weiter "gespielt" und zwar auch genau mit dem stateFormat.

Ich wollte die Zahlenwerte in Grün und die Einheiten/Texte in weiß darstellen. Im Prinzip klappt das auch, aber aus mir nicht ersichtlichen Gründen macht FHEM nach jedem Farbwechsel einen Zeilenumbruch. Wenn ja, wie kann ich das verhindern?

Mein stateFormat sieht aktuell so aus:
{"<div style='color:green'>".ReadingsVal($name,"Heizoelpreis","-")."<div style='color:white'>"." Cent/Liter"."<br>"
."max. Bestellmenge: "."<div style='color:green'>".int(ReadingsVal($name,"Tankmenge","-"))." Liter"."</div>"}
und das Ergebnis so:
==> siehe Dateianhang
Eigentlich soll das "Cent/Liter" hinter dem Wert in der gleichen Zeile stehen. Genauso sollte das "max. Bestellmenge:" vor dem Wert stehen.
« Letzte Änderung: 17 März 2020, 17:18:14 von Guzzi-Charlie »
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #42 am: 17 März 2020, 21:14:35 »
Das liegt an deinen <div> container, die ohne weitere Definition untereinander dargestellt werden.

Versuche es mal so:
{"<div><font style=\"color:green;\">".ReadingsVal($name,"Heizoelpreis","-")."</font><font style=\"color:white;\"> Cent/Liter</font><br />max. Bestellmenge: <font style=\"color:green;\">".ReadingsVal($name,"Tankmenge","-")."</font><font style=\"color:white;\"> Liter</font></div>"}
« Letzte Änderung: 17 März 2020, 21:31:08 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #43 am: 17 März 2020, 23:30:35 »
Hallo yersinia,

FHEM ist doch eine Raketenwissenschaft. Ich glaube das hätte ich Allein nicht hingekriegt, aber jetzt klappt es perfekt.

Danke Dir nochmal. Vielen Dank.
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #44 am: 18 März 2020, 15:55:18 »
FHEM ist doch eine Raketenwissenschaft.
Naja, Raketenwissenschaft ist es in diesem Fall nicht. Nur ein bisschen HTML richtig angwendet und fertig.

Apropos, 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.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Guzzi-Charlie

  • Full Member
  • ***
  • Beiträge: 222
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #45 am: 18 März 2020, 17:27:53 »
Ha, gerade hab ich das auch festgestellt und wollte schon fragen warum es jetzt schon wieder nicht mehr funktioniert.

==> Deine Änderung eingebaut und es funktioniert wieder.

Super  :) :) :)
- Raspberry PI 3+: (Cuno V2 mit 2x KS300, JeeLink mit 13x EC3000
- Stromzähler: 38x DRS155M (B+G E-Tech) bisher noch nicht in FHEM
- LAN: Intertechno LAN-Gateway mit 28x RMF-R1 (Rohrmotor24)
- WLAN: 32x Shelly, 12x Gosund SP111, 10x D1-Mini, 15x Sonoff Basic
- DECT: 4x DECT200

Offline Jump2016

  • Jr. Member
  • **
  • Beiträge: 51
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #46 am: 18 März 2020, 21:08:26 »
@yersinia Vielen Dank für die Anpassung  :) nun funktionierts auch bei mir wieder

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1835
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #48 am: 19 März 2020, 15:45:36 »
Hi yersinia,
hab durch Zufall gerade einen Logeintrag entdeckt - nur für den Fall, dass das wichtig ist (ich kenne mich da nicht so aus ;) ):

2020.03.19 13:12:14 3: Heizoelpreis: the attribute reading010Expr should no longer be used. Please use reading010OExpr instead
2020.03.19 13:12:14 3: Heizoelpreis: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #49 am: 19 März 2020, 15:50:24 »
Hi yersinia,
hab durch Zufall gerade einen Logeintrag entdeckt - nur für den Fall, dass das wichtig ist (ich kenne mich da nicht so aus ;) ):

2020.03.19 13:12:14 3: Heizoelpreis: the attribute reading010Expr should no longer be used. Please use reading010OExpr instead
2020.03.19 13:12:14 3: Heizoelpreis: For most old attributes you can specify enableControlSet and then set device upgradeAttributes to automatically modify the configuration
Ja, hatte ich 'damals' auch gesehen und 'meinen' Definition entsprechend angepasst.
subsevens ursprünglicher Code:
attr Heizoel reading01Expr $val =~ s/,/\./;; $val;;meine Version
attr Heizoelpreis reading010OExpr $val =~ s/,/\./;; $val;;
Das in dem Device zu ersetzen ist kein Hexenwerk.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline Schotty

  • Hero Member
  • *****
  • Beiträge: 1835
    • Handbuch zur BSB-LAN Hard- & Software (DE)
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #50 am: 19 März 2020, 15:54:46 »
meine Version
attr Heizoelpreis reading010OExpr $val =~ s/,/\./;; $val;;
Das in dem Device zu ersetzen ist kein Hexenwerk.
Genau so habe ich es bei mir ja auch eingetragen..
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Offline hdosw

  • New Member
  • *
  • Beiträge: 14
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #51 am: 19 März 2020, 17:03:48 »
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....)

Hallo Bartimaus,
ich habe das Tankvolumen eingebaut nur weiss ich nicht wie ich dies manuell setzen soll  :-\
kannst du mir dies verraten?

Viele Grüße

Offline hdosw

  • New Member
  • *
  • Beiträge: 14
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #52 am: 19 März 2020, 18:09:09 »
Hallo Bartimaus,

habs rausgefunden  :)

Viele Grüße

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #53 am: 20 März 2020, 15:12:31 »
Wäre anstelle eines userReadings nicht ein (zusätzliches) userAttr für das Tankvolumen sinnvoller bzw. einfacher zu pflegen für den Endbenutzer?

Ich stelle mir das so vor:
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 Tankvolumen
attr Heizoelpreis replacement02Mode expression
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value ReadingsVal($name,"Tankmenge",0)
attr Heizoelpreis Tankvolumen 0
attr Heizoelpreis userReadings Tankmenge {AttrNum($name,"Tankvolumen",0)-ReadingsNum("CN.Blaubrenner","appTanklevel",0)}, Fuellkosten {ReadingsNum($name,"Tankmenge",0)/100*ReadingsNum($name,"Heizoelpreis",0)}
(Anstelle von xxVal würde ich für die Berechnungen xxNum verwenden - und $name anstelle des Devicenamens)

Man könnte noch weiter gehen und das Füllstands-Device und -Reading über zwei weitere User-Attribute definieren:
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 Tankvolumen FuellstandDevice FuellstandReading
attr Heizoelpreis replacement02Mode expression
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value ReadingsVal($name,"Tankmenge",0)
attr Heizoelpreis Tankvolumen 0
attr Heizoelpreis FuellstandDevice CN.Blaubrenner
attr Heizoelpreis FuellstandReading appTanklevel
attr Heizoelpreis userReadings Tankmenge {AttrNum($name,"Tankvolumen",0)-ReadingsNum(AttrVal($name,"FuellstandDevice","no device defined"),AttrVal($name,"FuellstandReading","no reading defined"),0)}, Fuellkosten {ReadingsNum($name,"Tankmenge",0)/100*ReadingsNum($name,"Heizoelpreis",0)}

(die Raw defines müssten sich nahtlos in die urprüngliche Definition einfügen, einfach die entsprechenden attr, sofern vorhanden, ersetzen)
« Letzte Änderung: 20 März 2020, 16:20:21 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #54 am: 18 Mai 2020, 14:23:11 »
Konkurrenz belebt das Geschäft, hier eine Version für heizoel24.de zum Testen:
defmod Heizoel_heizoel24 HTTPMOD https://www.heizoel24.de/heizoelpreise-direkt/%%PLZ%%/%%MENGE%%/%%ENTLADESTELLEN%% 1800
attr Heizoel_heizoel24 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
attr Heizoel_heizoel24 enableControlSet 1
attr Heizoel_heizoel24 reading010Name Heizoelpreis
attr Heizoel_heizoel24 reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading010Regex <span class="unitprice">([\d\,]+)[\s]+<span
attr Heizoel_heizoel24 replacement01Mode text
attr Heizoel_heizoel24 replacement01Regex %%PLZ%%
attr Heizoel_heizoel24 replacement01Value 36211
attr Heizoel_heizoel24 replacement02Mode text
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value 3500
attr Heizoel_heizoel24 replacement03Mode text
attr Heizoel_heizoel24 replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_heizoel24 replacement03Value 1
attr Heizoel_heizoel24 room WHICHROOM
attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"Heizoelpreis","2000-01-01 00:00:00"))));;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
$ret .= "&nbsp;;<a href=\"".InternalVal($name,"displayurl","https://www.heizoel24.de")."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_heizoel24 webCmd reread
PLZ, Menge und Entladestellen sind wie gehabt; was nicht funktioniert sind Schlauchlänge und Fahrzeugbeschränkungen (hab ich noch nicht herausgefunden, wie man das mit HTTPMOD via POST weiterreicht).
« Letzte Änderung: 18 Mai 2020, 16:04:52 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #55 am: 02 Dezember 2020, 13:45:09 »
Unter anderem wegen einiger Änderungen im httpmod Modul (das internal displayUrl existiert nicht mehr und wird jetzt im stateFormat zusammengebaut), hier ein kleines Update:

easyoil:
defmod Heizoel_esyoil 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= 3600
attr Heizoel_esyoil 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 Heizoel_esyoil enableControlSet 1
attr Heizoel_esyoil reading010Name Heizoelpreis
attr Heizoel_esyoil reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_esyoil reading010Regex ([\d\,]+)[\s]+€
attr Heizoel_esyoil replacement01Mode text
attr Heizoel_esyoil replacement01Regex %%PLZ%%
attr Heizoel_esyoil replacement01Value 12345
attr Heizoel_esyoil replacement02Mode text
attr Heizoel_esyoil replacement02Regex %%MENGE%%
attr Heizoel_esyoil replacement02Value 3000
attr Heizoel_esyoil replacement03Mode text
attr Heizoel_esyoil replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_esyoil replacement03Value 1
attr Heizoel_esyoil replacement04Mode text
attr Heizoel_esyoil replacement04Regex %%SCHLAUCHLAENGE%%
attr Heizoel_esyoil replacement04Value 40m
attr Heizoel_esyoil replacement05Mode text
attr Heizoel_esyoil replacement05Regex %%ANHAENGER%%
attr Heizoel_esyoil replacement05Value pr-truck-type=short_vehicle
attr Heizoel_esyoil stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
my $link = "https://www.esyoil.com/preisausgabe.php?";;\
$link .= "pr-unloading-points=".AttrVal($name,"replacement03Value","");;\
$link .= "&pr-product=8&pr-payment-type=2";;\
$link .= "&".AttrVal($name,"replacement05Value","");;\
$link .= "&pr-hose-length=".AttrVal($name,"replacement04Value","");;\
$link .= "&pr-app=1&pr-zip=".AttrVal($name,"replacement01Value","");;\
$link .= "&pr-amount=".AttrVal($name,"replacement02Value","");;\
$link .= "&submit=";;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_esyoil timeout 10
attr Heizoel_esyoil webCmd reread

heizoel24.de
defmod Heizoel_heizoel24 HTTPMOD https://www.heizoel24.de/heizoelpreise-direkt/%%PLZ%%/%%MENGE%%/%%ENTLADESTELLEN%% 3600
attr Heizoel_heizoel24 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
attr Heizoel_heizoel24 enableControlSet 1
attr Heizoel_heizoel24 reading010Name Heizoelpreis
attr Heizoel_heizoel24 reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading010Regex <span class="unitprice">([\d\,]+)[\s]+<span
attr Heizoel_heizoel24 replacement01Mode text
attr Heizoel_heizoel24 replacement01Regex %%PLZ%%
attr Heizoel_heizoel24 replacement01Value 12345
attr Heizoel_heizoel24 replacement02Mode text
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value 3000
attr Heizoel_heizoel24 replacement03Mode text
attr Heizoel_heizoel24 replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_heizoel24 replacement03Value 1
attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
my $link = "https://www.heizoel24.de/heizoelpreise-direkt";;\
$link .= "/".AttrVal($name,"replacement01Value","");;\
$link .= "/".AttrVal($name,"replacement02Value","");;\
$link .= "/".AttrVal($name,"replacement03Value","");;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_heizoel24 timeout 10
attr Heizoel_heizoel24 webCmd reread
« Letzte Änderung: 03 Dezember 2020, 12:26:56 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #56 am: 05 Dezember 2020, 09:56:03 »
Dank amenomade sind die beiden Heizölabfragen via esyoil und heizöl24 auch als httpmod.template vorhanden. :)
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline amenomade

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7449
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #57 am: 05 Dezember 2020, 18:37:53 »
Dank amenomade sind die beiden Heizölabfragen via esyoil und heizöl24 auch als httpmod.template vorhanden. :)
Naja, eher dank den Autoren der jeweiligen Templates (subseven+yersinia und yersinia). Ich habe nur eingecheckt ;)
« Letzte Änderung: 05 Dezember 2020, 18:54:11 von amenomade »
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Offline daheim

  • Full Member
  • ***
  • Beiträge: 131
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #58 am: 21 Juni 2021, 13:15:29 »
Hallo zusammen,
meine ich das nur oder funktioniert Heizöl24 nicht mehr? Habe die URL auf das aktuelle Format angepasst aber ich bekomme nichts geliefert...

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #59 am: 21 Juni 2021, 15:28:55 »
Ja, funktioniert bei mir seit dem 17.05. auch nicht mehr.
Habe die URL auf das aktuelle Format angepasst aber ich bekomme nichts geliefert...
Was heisst aktuelles Format?
https://www.heizoel24.de/heizoel/angebotsliste?zipCode=%%PLZ%%&amount=%%MENGE%%&stations=%%ENTLADESTELLEN%%&product=1?

Die URL allein reicht nicht, die RegEx muss auch angepasst werden. Da ist mir aber auch noch überhaupt nicht klar, was fhem via httpmod hier überhaupt empfängt und wie die RegEx auszusehen hat. :-\
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #60 am: 22 Juni 2021, 09:18:50 »
Beim suchen nach einer API bin ich über diese xml Schnittstelle gestolpert, der aktualisierte Code wäre dann:
defmod Heizoel_heizoel24 HTTPMOD https://www.heizoel24.de/DailyPriceXml.ashx?zipcode=%%PLZ%%&litre=%%MENGE%%&unloadingpoints=%%ENTLADESTELLEN%%&oilgrade=standard 3600
attr Heizoel_heizoel24 userattr replacement03Value:1,2,3,4,5,6,7,8,9,10
attr Heizoel_heizoel24 enableControlSet 1
attr Heizoel_heizoel24 reading010Name Heizoelpreis
attr Heizoel_heizoel24 reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading010Regex ([\d\,]+)<\/price
attr Heizoel_heizoel24 replacement01Mode text
attr Heizoel_heizoel24 replacement01Regex %%PLZ%%
attr Heizoel_heizoel24 replacement01Value 12345
attr Heizoel_heizoel24 replacement02Mode text
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value 3000
attr Heizoel_heizoel24 replacement03Mode text
attr Heizoel_heizoel24 replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_heizoel24 replacement03Value 1
attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
my $link = "https://www.heizoel24.de/heizoel/angebotsliste?";;\
$link .= "zipCode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".AttrVal($name,"replacement02Value","");;\
$link .= "&stations=".AttrVal($name,"replacement03Value","");;\
$link .= "&product=1";;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_heizoel24 timeout 10
attr Heizoel_heizoel24 webCmd reread
Ich habe das kurz getestet und es sieht erstmal gut aus.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline AET_FHEM

  • Full Member
  • ***
  • Beiträge: 251
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #61 am: 22 Juni 2021, 17:13:47 »
kann ich nur so bestätigen sieht sehr gut aus ...
=> bis auf den Preis :-) der ist zu hoch  ;D
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline amenomade

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7449
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #62 am: 26 Juni 2021, 02:07:01 »
Danke, ich habe es so in httpmod.template eingecheckt.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #63 am: 15 Juli 2021, 11:02:07 »
Coole Sache, das mit der Heizölpreisabfrage. Seit kurzem habe ich einen Tanksensor, den ich in FHEM eingebunden habe und jetzt wollte ich das mit dem aktuellen Heizölpreis ergänzen.

Ich habe das Template verwendet, aber leider klappt die Abfrage von esyoil nicht. Ich bekomme nur das
Heizoelpreis                       2021-07-15 10:46:34: -€/100l (2500l = 0.00€)
Mein STATE sieht so aus
<div style="text-align: left;;">2021-07-15 10:16:34:&nbsp;<a href="https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=40m&pr-app=1&pr-zip=88447&pr-amount=2500&submit=" rel="noopener noreferrer" target="_blank" style="font-weight:bold;">-&euro;</a>/100l&nbsp;(2500l = 0.00&euro;)</div>
Nehm ich die URL aus dem STATE, so klappt die Abfrage. Kann mir jemand helfen, woran das liegt?

Noch was: Ich habe das Attribut "replacement02Value" fix auf 2500 gesetzt. Das war vorher "replacement02Value ReadingsVal("Heizoelpreis","Tankmenge",0)", aber damit landet der String "ReadingsVal("Heizoelpreis","Tankmenge",0)" in der URL anstatt dem Wert des Readings. Das "Tankvolumen" Reading habe ich manuell gesetzt, er rechnet auch richtig, im Device sehe ich im Reading "Tankmenge" den korrekten Wert.

Zur Ergänzung meine Definition:

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 replacement03Value:1,2,3,4,5,6,7,8,9,10 replacement04Value:40m,60m,80m replacement05Value:pr-truck-type=,pr-truck-type=short_vehicle
attr Heizoelpreis enableControlSet 1
attr Heizoelpreis model fuel_oil_check_esyoil
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 88447
attr Heizoelpreis replacement02Mode text
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value 2500
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,Heizung/Warmwasser
attr Heizoelpreis stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $ret = "<div style=\"text-align: left;;;;\">".$lastCheck.":";;\
my $link = "https://www.esyoil.com/preisausgabe.php?";;\
$link .= "pr-unloading-points=".AttrVal($name,"replacement03Value","");;\
$link .= "&pr-product=8&pr-payment-type=2";;\
$link .= "&".AttrVal($name,"replacement05Value","");;\
$link .= "&pr-hose-length=".AttrVal($name,"replacement04Value","");;\
$link .= "&pr-app=1&pr-zip=".AttrVal($name,"replacement01Value","");;\
$link .= "&pr-amount=".AttrVal($name,"replacement02Value","");;\
$link .= "&submit=";;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoelpreis timeout 10
attr Heizoelpreis userReadings Tankvolumen:none {}, Tankmenge {ReadingsVal("Heizoelpreis","Tankvolumen",0)-ReadingsVal("Heizoel","liter",0)}, Fuellkosten {ReadingsVal("Heizoelpreis","Tankmenge",0)/100*ReadingsVal("Heizoelpreis","Heizoelpreis",0)}
attr Heizoelpreis webCmd reread

setstate Heizoelpreis <div style="text-align: left;;;;">2021-07-15 13:14:15:&nbsp;;<a href="https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=40m&pr-app=1&pr-zip=88447&pr-amount=2500&submit=" rel="noopener noreferrer" target="_blank" style="font-weight:bold;;">-&euro;;</a>/100l&nbsp;;(2500l = 0.00&euro;;)</div>
setstate Heizoelpreis 2021-07-15 13:14:17 Fuellkosten 0
setstate Heizoelpreis 2021-07-15 13:14:17 Tankmenge 2238
setstate Heizoelpreis 2021-07-15 08:28:03 Tankvolumen 3000
setstate Heizoelpreis 2021-07-15 13:05:15 attrTemplateVersion 20201206
« Letzte Änderung: 15 Juli 2021, 13:18:02 von docolli »

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #64 am: 15 Juli 2021, 14:22:29 »
Esyoil hat scheinbar gestern die Seitenstruktur geändert - ruf' die Seite mal ohne JavaScript auf, dann siehst du genau keine Preise. Und somit das bisher verwendete HTTPMOD Template ebenso wenig. Ich habe spontan keine Idee, wie man HTTPMOD dazu ermutigt, das JavaScript beim Abruf entsprechend zuzulassen - vlt. weiß jemand anders mehr. :)
Eine alternative Quelle bei easyoil fehlt mir ebenso, leider. Jedenfalls spuckt [Suchmaschine] dazu nichts aus. :-[

Bis dahin bleibt (erstmal) nur heizoel24.

Bezgl der Tankmenge/-größe versuche dies mal: https://forum.fhem.de/index.php/topic,121789.msg1163821.html#msg1163821
attr Heizoelpreis replacement02Value Heizoelpreis:Tankmenge
« Letzte Änderung: 15 Juli 2021, 14:25:58 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #65 am: 15 Juli 2021, 16:31:11 »
Okay, ich befürchte HTTPMOD kann kein Javascript ausführen.

Dann habe ich jetzt esyoil gelöscht, mir egal, woher der Preis kommt. Soll ja nur eine ungefähre Angabe sein.
Ich habe nun Heizöl24 eingerichtet, aber auch hier bekomme ich keine Daten.

Meine Definition:
defmod Heizoelpreis HTTPMOD https://www.heizoel24.de/heizoelpreise-direkt/%%PLZ%%/%%MENGE%%/%%ENTLADESTELLEN%% 3600
attr Heizoelpreis userattr replacement03Value:1,2,3,4,5,6,7,8,9,10
attr Heizoelpreis enableControlSet 1
attr Heizoelpreis model fuel_oil_check_heizoel24
attr Heizoelpreis reading010Name Heizoelpreis
attr Heizoelpreis reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoelpreis reading010Regex <span class="unitprice">([\d\,]+)[\s]+<span
attr Heizoelpreis replacement01Mode text
attr Heizoelpreis replacement01Regex %%PLZ%%
attr Heizoelpreis replacement01Value 88447
attr Heizoelpreis replacement02Mode text
attr Heizoelpreis replacement02Regex %%MENGE%%
attr Heizoelpreis replacement02Value 2500
attr Heizoelpreis replacement03Mode text
attr Heizoelpreis replacement03Regex %%ENTLADESTELLEN%%
attr Heizoelpreis replacement03Value 1
attr Heizoelpreis room Heizung/Warmwasser
attr Heizoelpreis stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $ret = "<div style=\"text-align: left;;;;\">".$lastCheck.":";;\
my $link = "https://www.heizoel24.de/heizoelpreise-direkt";;\
$link .= "/".AttrVal($name,"replacement01Value","");;\
$link .= "/".AttrVal($name,"replacement02Value","");;\
$link .= "/".AttrVal($name,"replacement03Value","");;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoelpreis timeout 10
attr Heizoelpreis webCmd reread

setstate Heizoelpreis <div style="text-align: left;;;;">2021-07-15 16:25:46:&nbsp;;<a href="https://www.heizoel24.de/heizoelpreise-direkt/88447/2500/1" rel="noopener noreferrer" target="_blank" style="font-weight:bold;;">-&euro;;</a>/100l&nbsp;;(2500l = 0.00&euro;;)</div>
setstate Heizoelpreis 2021-07-15 16:24:53 attrTemplateVersion 20201206


Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #66 am: 15 Juli 2021, 16:38:59 »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #67 am: 15 Juli 2021, 17:06:04 »
Danke! So klappt es jetzt mit dem Preis.

Aber das mit dem Attribut und der Übernahme des Wertes aus dem reading bekomme ich nicht hin (habe schon expression und text Mode probiert):
2021-07-15 16:49:16: 69.94€/100l (Heizoel_heizoel24:Tankmengel = 16.79€)
attr Heizoel_heizoel24 replacement02Mode expression
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value Heizoel_heizoel24:Tankmenge

setstate Heizoel_heizoel24 2021-07-15 17:34:24 Fuellkosten 1763.0964
setstate Heizoel_heizoel24 2021-07-15 17:34:24 Heizoelpreis 78.78
setstate Heizoel_heizoel24 2021-07-15 17:34:24 Tankmenge 2238
setstate Heizoel_heizoel24 2021-07-15 16:47:33 Tankvolumen 3000
« Letzte Änderung: 15 Juli 2021, 17:37:04 von docolli »

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #68 am: 15 Juli 2021, 17:55:36 »
Bin ein Stück weiter. Die Menge wird in der Get URL schon korrekt eingetragen, das sehe ich am Preis, der zurück kommt. Es ist ein Problem im stateFormat, welches den Wert des Attributes über "AttrVal($name,"replacement02Value","") zu ermitteln versucht, aber dabei nur den Text "ReadingsVal("Heizoel_heizoel24","Tankmenge",0)" zurück bekommt. Das wird hier nicht als "expression" interpretiert!

attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">";;\
my $link = "https://www.heizoel24.de/heizoel/angebotsliste?";;\
$link .= "zipCode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".AttrVal($name,"replacement02Value","");;\
$link .= "&stations=".AttrVal($name,"replacement03Value","");;\
$link .= "&product=1";;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;) - ".$lastCheck."</div>";;\
return $ret;;\
}

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #69 am: 15 Juli 2021, 18:21:10 »
Für mich habe ich jetzt eine Lösung!
Ich rechne in einer userreadings Definition und beziehe mich dann auf diese Readings:

attr Heizoel_heizoel24 userReadings Tankvolumen:none {}, Tankmenge {ReadingsVal("Heizoel_heizoel24","Tankvolumen",0)-ReadingsVal("Heizoel","liter",0)}, Fuellkosten {ReadingsVal("Heizoel_heizoel24","Tankmenge",0)/100*ReadingsVal("Heizoel_heizoel24","Heizoelpreis",0)}

attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = ReadingsNum($name,"Fuellkosten",0);;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">";;\
my $link = "https://www.heizoel24.de/heizoel/angebotsliste?";;\
$link .= "zipCode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".ReadingsNum($name,"Tankmenge",0);;\
$link .= "&stations=".AttrVal($name,"replacement03Value","");;\
$link .= "&product=1";;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".ReadingsNum($name,"Tankmenge",0)."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;) - ".$lastCheck."</div>";;\
return $ret;;\
}

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #70 am: 15 Juli 2021, 18:53:34 »
Ich habe mich noch etwas mit den XML Parametern beschäftigt und das "oilgrade" noch über ein userattribut konfigurierbar gemacht.

Für die Copy&Paste Fraktion (so habe ich heute morgen auch angefangen) hier die Definition:
defmod Heizoel_heizoel24 HTTPMOD https://www.heizoel24.de/DailyPriceXml.ashx?zipcode=%%PLZ%%&litre=%%MENGE%%&unloadingpoints=%%ENTLADESTELLEN%%&oilgrade=%%OELSORTE%% 3600
attr Heizoel_heizoel24 userattr replacement03Value:1,2,3,4,5,6,7,8,9,10 replacement04Value:standard,super,bio
attr Heizoel_heizoel24 alias Heizölpreis
attr Heizoel_heizoel24 enableControlSet 1
attr Heizoel_heizoel24 group Heizung
attr Heizoel_heizoel24 reading010Name Heizoelpreis
attr Heizoel_heizoel24 reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading010Regex ([\d\,]+)<\/price
attr Heizoel_heizoel24 replacement01Mode text
attr Heizoel_heizoel24 replacement01Regex %%PLZ%%
attr Heizoel_heizoel24 replacement01Value 88447
attr Heizoel_heizoel24 replacement02Mode expression
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value ReadingsVal($name,"Tankmenge",0)
attr Heizoel_heizoel24 replacement03Mode text
attr Heizoel_heizoel24 replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_heizoel24 replacement03Value 1
attr Heizoel_heizoel24 replacement04Mode text
attr Heizoel_heizoel24 replacement04Regex %%OELSORTE%%
attr Heizoel_heizoel24 replacement04Value super
attr Heizoel_heizoel24 room Heizung/Warmwasser
attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
$price = ReadingsNum($name,"Fuellkosten",0);;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">";;\
my $link = "https://www.heizoel24.de/heizoel/angebotsliste?";;\
$link .= "zipCode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".ReadingsNum($name,"Tankmenge",0);;\
$link .= "&stations=".AttrVal($name,"replacement03Value","");;\
$link .= "&product=1";;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".ReadingsNum($name,"Tankmenge",0)."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;) - ".$lastCheck."</div>";;\
return $ret;;\
}
attr Heizoel_heizoel24 timeout 10
attr Heizoel_heizoel24 userReadings Tankvolumen:none {}, Tankmenge {ReadingsVal($name,"Tankvolumen",0)-ReadingsVal("Heizoel","liter",0)}, Fuellkosten {ReadingsVal($name,"Tankmenge",0)/100*ReadingsVal($name,"Heizoelpreis",0)}
attr Heizoel_heizoel24 webCmd reread

Unbedingt noch den maximalen Tankinhalt als Reading "Tankvolumen" mit eurem Wert xxxx anlegen:
setreading Heizoelpreis_heizoel24 Tankvolumen xxxx
und das ReadingsVal [ReadingsVal("Heizoel","liter",0)] in den userReadings, welches auf den aktuellen Tankinhalt zeigt, auch anpassen.

« Letzte Änderung: 15 Juli 2021, 18:55:17 von docolli »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #71 am: 16 Juli 2021, 09:11:44 »
Ich habe mich noch etwas mit den XML Parametern beschäftigt und das "oilgrade" noch über ein userattribut konfigurierbar gemacht.
Cool! 8)
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #72 am: 16 Juli 2021, 19:04:39 »
Weitere Verbesserungen:
  • Ölsorte premiumecotherm ergänzt
  • Name der Ölsorte wird aus XML geholt, als Reading abgelegt und im state angezeigt
  • Link zu Heizöl24 enthält gewählte Ölsorte aus dem Attribut
  • Abrunden der abgefragten Ölmenge auf definierten Wert -> Attribut roundTo
  • Abfragezeit auf 86400s (24h) hochgesetzt

Hinweis: Wenn es die gewählte Heizölsorte im PLZ Bereich nicht gibt, dann erkennt man das daran, dass der State nicht aktualisiert wird. Es kommt keine Fehlermeldung oder ähnliches!

defmod Heizoel_heizoel24 HTTPMOD https://www.heizoel24.de/DailyPriceXml.ashx?zipcode=%%PLZ%%&litre=%%MENGE%%&unloadingpoints=%%ENTLADESTELLEN%%&oilgrade=%%OELSORTE%% 86400
attr Heizoel_heizoel24 userattr replacement03Value:1,2,3,4,5,6,7,8,9,10 replacement04Value:standard,super,premiumecotherm,bio roundTo:1,10,50,100,250,500,1000
attr Heizoel_heizoel24 alias Heizölpreis
attr Heizoel_heizoel24 enableControlSet 1
attr Heizoel_heizoel24 group Heizung
attr Heizoel_heizoel24 reading010Name Heizoelpreis
attr Heizoel_heizoel24 reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading010Regex ([\d\,]+)<\/price
attr Heizoel_heizoel24 reading020Name Heizoelsorte
attr Heizoel_heizoel24 reading020OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_heizoel24 reading020Regex oilGrade="([^"]*)"
attr Heizoel_heizoel24 replacement01Mode text
attr Heizoel_heizoel24 replacement01Regex %%PLZ%%
attr Heizoel_heizoel24 replacement01Value 88447
attr Heizoel_heizoel24 replacement02Mode expression
attr Heizoel_heizoel24 replacement02Regex %%MENGE%%
attr Heizoel_heizoel24 replacement02Value ReadingsVal($name,"Tankmenge",0)
attr Heizoel_heizoel24 replacement03Mode text
attr Heizoel_heizoel24 replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_heizoel24 replacement03Value 1
attr Heizoel_heizoel24 replacement04Mode text
attr Heizoel_heizoel24 replacement04Regex %%OELSORTE%%
attr Heizoel_heizoel24 replacement04Value super
attr Heizoel_heizoel24 room Heizung/Warmwasser
attr Heizoel_heizoel24 roundTo 250
attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
my $index = 1;;\
my $oilgradecode;;\
my @oilgrade = ("standard","super","premiumecotherm","bio");;\
foreach my $i (@oilgrade){ if ($i eq AttrVal($name,"replacement04Value","")){ $oilgradecode=$index;; } $index++;; }\
$price = ReadingsNum($name,"Fuellkosten",0);;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">";;\
my $link = "https://www.heizoel24.de/heizoel/angebotsliste?";;\
$link .= "zipCode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".ReadingsNum($name,"Tankmenge",0);;\
$link .= "&stations=".AttrVal($name,"replacement03Value","");;\
$link .= "&product=".$oilgradecode;;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".ReadingsNum($name,"Tankmenge",0)."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;) ";;\
        $ret .= " / ".ReadingsVal($name,"Heizoelsorte","-");;\
        $ret .= " - ".$lastCheck."</div>";;\
return $ret;;\
}\

attr Heizoel_heizoel24 timeout 10
attr Heizoel_heizoel24 userReadings Tankvolumen:none {}, Tankmenge {int((ReadingsVal($name,"Tankvolumen",0)-ReadingsVal("Heizoel","liter",0))/AttrVal($name,"roundTo",1))*AttrVal($name,"roundTo",1)}, Fuellkosten {ReadingsVal($name,"Tankmenge",0)/100*ReadingsVal($name,"Heizoelpreis",0)}
attr Heizoel_heizoel24 webCmd reread
Hilfreich Hilfreich x 1 Liste anzeigen

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #73 am: 20 Juli 2021, 10:40:16 »
Da esyoil sich nicht mehr abfragen lässt, habe ich den Weg via check24 gefunden - lustigerweise nutzt check24 nach Angaben auf deren Webseite den Service von esyoil. Anbei die neue & erweiterte raw:
defmod Heizoel_esyoil HTTPMOD https://www.check24.de/heizoel/?c24_calculate=calculate&zipcode=%%PLZ%%&amount=%%MENGE%%&up=%%ENTLADESTELLEN%%&prod=%%OILGRADE%%&payment_type=%%PAYMENT%%&%%ANHANGER%%&%%SCHLAUCHLAENGE%%&%%EXPRESS%% 3600
attr Heizoel_esyoil userattr replacement03Value:1,2,3,4,5,6,7,8,9,10 replacement04Value:hose=,hose=hose_l,hose=hose_xl replacement05Value:short_vehicle=,short_vehicle=short_vehicle replacement06Value:8,4 replacement07Value:1,2,3,4,6 replacement08Value:express=,express=1
attr Heizoel_esyoil enableControlSet 1
attr Heizoel_esyoil reading010Name Heizoelpreis
attr Heizoel_esyoil reading010OExpr $val =~ s/,/\./;; $val;;
attr Heizoel_esyoil reading010Regex ([\d\,]+)\&nbsp\;;\&euro\;;
attr Heizoel_esyoil replacement01Mode text
attr Heizoel_esyoil replacement01Regex %%PLZ%%
attr Heizoel_esyoil replacement01Value 12345
attr Heizoel_esyoil replacement02Mode text
attr Heizoel_esyoil replacement02Regex %%MENGE%%
attr Heizoel_esyoil replacement02Value 5000
attr Heizoel_esyoil replacement03Mode text
attr Heizoel_esyoil replacement03Regex %%ENTLADESTELLEN%%
attr Heizoel_esyoil replacement03Value 1
attr Heizoel_esyoil replacement04Mode text
attr Heizoel_esyoil replacement04Regex %%SCHLAUCHLAENGE%%
attr Heizoel_esyoil replacement04Value hose=
attr Heizoel_esyoil replacement05Mode text
attr Heizoel_esyoil replacement05Regex %%ANHAENGER%%
attr Heizoel_esyoil replacement05Value short_vehicle=
attr Heizoel_esyoil replacement06Mode text
attr Heizoel_esyoil replacement06Regex %%OILGRADE%%
attr Heizoel_esyoil replacement06Value 8
attr Heizoel_esyoil replacement07Mode text
attr Heizoel_esyoil replacement07Regex %%PAYMENT%%
attr Heizoel_esyoil replacement07Value 2
attr Heizoel_esyoil replacement08Mode text
attr Heizoel_esyoil replacement08Regex %%EXPRESS%%
attr Heizoel_esyoil replacement08Value express=
attr Heizoel_esyoil stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
#my $lastCheck = POSIX::strftime("%d.%m. %H:%M",localtime(time_str2num(ReadingsTimestamp($name,"Heizoelpreis","2000-01-01 00:00:00"))));;\
#my $lastCheck = FmtDateTime(InternalVal($name,".LastUpdate",0));;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
my $link = "https://www.check24.de/heizoel/?c24_calculate=calculate";;\
$link .= "&zipcode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".AttrVal($name,"replacement02Value","");;\
$link .= "&up=".AttrVal($name,"replacement03Value","");;\
$link .= "&".AttrVal($name,"replacement04Value","");; #hose length\
$link .= "&".AttrVal($name,"replacement05Value","");; #short vehicle\
$link .= "&prod=".AttrVal($name,"replacement06Value","");; # product 8 = normal schwefelarm 4 = premium schwefelarm\
$link .= "&payment_type=".AttrVal($name,"replacement07Value","");; # 1 = Barzahlung, 2 = EC-Karte, 3 = Vorkasse, 4 = Lastschrift, 5 = Wärmekonto, 6 = Rechnung, 10 = Ratenkauf\
$link .= "&".AttrVal($name,"replacement08Value","");; #express;;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr Heizoel_esyoil timeout 10
attr Heizoel_esyoil webCmd reread
Dabei sind
  • replacement01Value => Postleitzahl
  • replacement02Value => Bestellmenge
  • replacement03Value => Entladestellen
  • replacement04Value => Schlauchlänge (hose= = egal; hose=hose_l = 60m; hose=hose_xl = 80m)
  • replacement05Value => Tankwagen mit/ohne Anhänger (short_vehicle= = mit Anhänger möglich; short_vehicle=short_vehicle = ohne Anhänger)
  • replacement06Value => Ölsorte (8 = normal schwefelarm; 4 = premium schwefelarm)
  • replacement07Value => Zahlart (1 = Bar; 2 = EC-Karte; 3 = Vorkasse; 4 = Lastschrift; 6 = Rechnung)
  • replacement08Value => Expresslieferung (express= = nein; express=1 = ja)


EDIT: @amenomade: ein Vorschlag für das Template:
#Contributed by subseven & yersinia, see https://forum.fhem.de/index.php/topic,107189.msg1167281.html#msg1167281
name:fuel_oil_check_esyoil
filter:TYPE=HTTPMOD
desc: checks fuel oil prices via check24.de (service provided by esyoil.com)<br />Define a HTTPMOD device like<br />define heizoelpreis HTTPMOD https://www.check24.de/heizoel/?c24_calculate=calculate&zipcode=%%PLZ%%&amount=%%MENGE%%&up=%%ENTLADESTELLEN%%&prod=%%OILGRADE%%&payment_type=%%PAYMENT%%&%%ANHANGER%%&%%SCHLAUCHLAENGE%%&%%EXPRESS%% 3600<br />Maintain Attributes for ZIP (PLZ), order volume (Bestellmenge), unloading points (Entladestellen), hose length (Schlauchlaenge), truck trailer accessibility (mit Anhaenger moeglich), oilgrade (Oelsorte), payment method (Zahlart) and express delivery (Expresslieferung) before senseful values can be retrieved.<br />Further information and documentation can be found in <a href="https://forum.fhem.de/index.php/topic,107189.msg1167281.html#msg1167281">this FHEM forum thread</a>
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD")}
par:INTERVAL;Actual interval for updating, defaults to hourly (3600s); {InternalVal("DEVICE","Interval","3600")}
par:ZIPCODE;German ZIP Code / deutsche Postleitzahl; {AttrVal("DEVICE","replacement01Value","12345")}
par:ORDERVOLUME;fuel order volume in litre / Bestellmenge in Liter; {AttrVal("DEVICE","replacement02Value","5000")}
defmod DEVICE HTTPMOD https://www.check24.de/heizoel/?c24_calculate=calculate&zipcode=%%PLZ%%&amount=%%MENGE%%&up=%%ENTLADESTELLEN%%&prod=%%OILGRADE%%&payment_type=%%PAYMENT%%&%%ANHANGER%%&%%SCHLAUCHLAENGE%%&%%EXPRESS%% INTERVAL
attr DEVICE userattr replacement03Value:1,2,3,4,5,6,7,8,9,10 replacement04Value:hose=,hose=hose_l,hose=hose_xl replacement05Value:short_vehicle=,short_vehicle=short_vehicle replacement06Value:8,4 replacement07Value:1,2,3,4,6 replacement08Value:express=,express=1
attr DEVICE enableControlSet 1
attr DEVICE reading010Name Heizoelpreis
attr DEVICE reading010OExpr $val =~ s/,/\./;; $val;;
attr DEVICE reading010Regex ([\d\,]+)\&nbsp\;;\&euro\;;
attr DEVICE replacement01Mode text
attr DEVICE replacement01Regex %%PLZ%%
attr DEVICE replacement01Value ZIPCODE
attr DEVICE replacement02Mode text
attr DEVICE replacement02Regex %%MENGE%%
attr DEVICE replacement02Value ORDERVOLUME
attr DEVICE replacement03Mode text
attr DEVICE replacement03Regex %%ENTLADESTELLEN%%
attr DEVICE replacement03Value 1
attr DEVICE replacement04Mode text
attr DEVICE replacement04Regex %%SCHLAUCHLAENGE%%
attr DEVICE replacement04Value hose=
attr DEVICE replacement05Mode text
attr DEVICE replacement05Regex %%ANHAENGER%%
attr DEVICE replacement05Value short_vehicle=
attr DEVICE replacement06Mode text
attr DEVICE replacement06Regex %%OILGRADE%%
attr DEVICE replacement06Value 8
attr DEVICE replacement07Mode text
attr DEVICE replacement07Regex %%PAYMENT%%
attr DEVICE replacement07Value 2
attr DEVICE replacement08Mode text
attr DEVICE replacement08Regex %%EXPRESS%%
attr DEVICE replacement08Value express=
attr DEVICE stateFormat { my $price = 0.0;;\
$price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";;\
my $link = "https://www.check24.de/heizoel/?c24_calculate=calculate";;\
$link .= "&zipcode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".AttrVal($name,"replacement02Value","");;\
$link .= "&up=".AttrVal($name,"replacement03Value","");;\
$link .= "&".AttrVal($name,"replacement04Value","");; #hose length\
$link .= "&".AttrVal($name,"replacement05Value","");; #short vehicle\
$link .= "&prod=".AttrVal($name,"replacement06Value","");; # product 8 = normal schwefelarm 4 = premium schwefelarm\
$link .= "&payment_type=".AttrVal($name,"replacement07Value","");; # 1 = Barzahlung, 2 = EC-Karte, 3 = Vorkasse, 4 = Lastschrift, 5 = Wärmekonto, 6 = Rechnung, 10 = Ratenkauf\
$link .= "&".AttrVal($name,"replacement08Value","");; #express;;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".AttrVal($name,"replacement02Value","0")."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;)</div>";;\
return $ret;;\
}
attr DEVICE timeout 10
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model fuel_oil_check_esyoil
setreading DEVICE attrTemplateVersion 20210720
« Letzte Änderung: 20 Juli 2021, 11:04:14 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1094
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #74 am: 20 Juli 2021, 11:19:14 »
Weitere Verbesserungen:
  • Ölsorte premiumecotherm ergänzt
  • Name der Ölsorte wird aus XML geholt, als Reading abgelegt und im state angezeigt
  • Link zu Heizöl24 enthält gewählte Ölsorte aus dem Attribut
  • Abrunden der abgefragten Ölmenge auf definierten Wert -> Attribut roundTo
  • Abfragezeit auf 86400s (24h) hochgesetzt
Danke! :)

Einiges davon halte ich für Template-Sinnvoll: Ölsorten einfügen und Auswählbar; Ölsorte als Reading (aber nicht anzeigen via stateFormat); Ölsorte aus Attribut als Teil des Links; kein Runden (mMn wenig Sinnvoll wenn man feste Bestellmengen angibt und nicht ein Reading der (dynamischen) Tankmenge aus einem anderen Device errechnet)

@amenomade: Teile von docolli habe ich in eine Template-Aktualisierung gegossen.
#Contributed by yersinia & enhanced by docolli, see https://forum.fhem.de/index.php/topic,107189.msg1166854.html#msg1166854
name:fuel_oil_check_heizoel24
filter:TYPE=HTTPMOD
desc: checks fuel oil prices via heizoel24.de<br />Define a HTTPMOD device like<br />https://www.heizoel24.de/DailyPriceXml.ashx?zipcode=%%PLZ%%&litre=%%MENGE%%&unloadingpoints=%%ENTLADESTELLEN%%&oilgrade=%%OELSORTE%% 3600<br />Maintain Attributes for ZIP (PLZ), order volume (Bestellmenge) and unloading points (Entladestellen) before senseful values can be retrieved.<br />Further information and documentation can be found in <a href="https://forum.fhem.de/index.php/topic,107189.msg1166854.html#msg1166854">this FHEM forum thread</a>
order:FUEL04
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD")}
par:INTERVAL;Actual interval for updating, defaults to hourly (3600s); {InternalVal("DEVICE","Interval","3600")}
par:ZIPCODE;German ZIP Code / deutsche Postleitzahl; {AttrVal("DEVICE","replacement01Value","12345")}
par:ORDERVOLUME;fuel order volume in litre / Bestellmenge in Liter; {AttrVal("DEVICE","replacement02Value","5000")}
defmod DEVICE HTTPMOD https://www.heizoel24.de/DailyPriceXml.ashx?zipcode=%%PLZ%%&litre=%%MENGE%%&unloadingpoints=%%ENTLADESTELLEN%%&oilgrade=%%OELSORTE%% INTERVAL
attr DEVICE userattr replacement03Value:1,2,3,4,5,6,7,8,9,10 replacement04Value:standard,super,premiumecotherm,bio
attr DEVICE enableControlSet 1
attr DEVICE reading010Name Heizoelpreis
attr DEVICE reading010OExpr $val =~ s/,/\./; $val;
attr DEVICE reading010Regex ([\d\,]+)<\/price
attr DEVICE reading020Name Heizoelsorte
attr DEVICE reading020OExpr $val =~ s/,/\./;; $val;;
attr DEVICE reading020Regex oilGrade="([^"]
attr DEVICE replacement01Mode text
attr DEVICE replacement01Regex %%PLZ%%
attr DEVICE replacement01Value ZIPCODE
attr DEVICE replacement02Mode text
attr DEVICE replacement02Regex %%MENGE%%
attr DEVICE replacement02Value ORDERVOLUME
attr DEVICE replacement03Mode text
attr DEVICE replacement03Regex %%ENTLADESTELLEN%%
attr DEVICE replacement03Value 1
attr DEVICE replacement04Mode text
attr DEVICE replacement04Regex %%OELSORTE%%
attr DEVICE replacement04Value standard
attr DEVICE stateFormat {       my $price = 0.0;\
my %oilgradecodes = ('standard', '1',\
'super', '2',\
'premiumecotherm', '3',\
'bio', '4');\
        $price = (AttrNum($name,"replacement02Value",0)*ReadingsNum($name,"Heizoelpreis",0))/100;\
        my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");\
        my $ret = "<div style=\"text-align: left;;\">".$lastCheck.":";\
my $link = "https://www.heizoel24.de/heizoel/angebotsliste?";\
$link .= "zipCode=".AttrVal($name,"replacement01Value","");\
$link .= "&amount=".AttrVal($name,"replacement02Value","");\
$link .= "&stations=".AttrVal($name,"replacement03Value","");\
$link .= "&oilgrade=".AttrVal($name,"replacement04Value","");\
$link .= "&product=".$oilgradecodes{AttrVal($name,"replacement04Value","standard")};\
        $ret .= "&nbsp;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";\
        $ret .= ReadingsVal($name,"Heizoelpreis","-");\
        $ret .= "&euro;</a>/100l";\
        $ret .= "&nbsp;(".AttrVal($name,"replacement02Value","0")."l = ";\
        $ret .= sprintf("%.2f",$price);\
        $ret .= "&euro;)</div>";\
        return $ret;\
}
attr DEVICE timeout 10
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model fuel_oil_check_heizoel24_v2
setreading DEVICE attrTemplateVersion 20210720
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with RasPi OS Buster (perl 5.28.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@aculfw | 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

Offline docolli

  • New Member
  • *
  • Beiträge: 8
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #75 am: 02 September 2021, 14:10:37 »
Ich hatte Probleme mit der Abfrage bei Heizöl24 und bin jetzt drauf gekommen, dass es daran liegt, dass ich die Bedarfsmenge dynamisch aus meinem Tankinhaltssensor berechne und die Menge aktuell nur bei wenigen Litern liegt.

Die Mindestmenge liegt aber bei 500 Litern und geringere Menge erzeugen nur einen Fehlercode im XML

<result>
<error>LitreTooLow</error>
<errorMessage>Die Mindestabnahmemenge beträgt 500 Liter.</errorMessage>
</result>

Ich habe ein paar Werte nun so angepasst, dass die Mindestbestellmenge berücksichtigt wird

attr Heizoel_heizoel24 replacement02Value my $minvolume = 500;;\
if (ReadingsNum($name,"Tankmenge",0) > $minvolume) {ReadingsNum($name,"Tankmenge",0)} else {$minvolume};;\

attr Heizoel_heizoel24 stateFormat { my $price = 0.0;;\
my $volume = 500;;\
if (ReadingsNum($name,"Tankmenge",0) > $volume) {$volume = ReadingsNum($name,"Tankmenge",0)}\
my $index = 1;;\
my $oilgradecode;;\
my @oilgrade = ("standard","super","premiumecotherm","bio");;\
foreach my $i (@oilgrade){ if ($i eq AttrVal($name,"replacement04Value","")){ $oilgradecode=$index;; } $index++;; }\
$price = ReadingsNum($name,"Fuellkosten",0);;\
my $lastCheck = ReadingsTimestamp($name,"Heizoelpreis","");;\
my $ret = "<div style=\"text-align: left;;\">";;\
my $link = "https://www.heizoel24.de/heizoel/angebotsliste?";;\
$link .= "zipCode=".AttrVal($name,"replacement01Value","");;\
$link .= "&amount=".$volume;;\
$link .= "&stations=".AttrVal($name,"replacement03Value","");;\
$link .= "&product=".$oilgradecode;;\
$ret .= "&nbsp;;<a href=\"".$link."\" rel=\"noopener noreferrer\" target=\"_blank\" style=\"font-weight:bold;;\">";;\
$ret .= ReadingsVal($name,"Heizoelpreis","-");;\
$ret .= "&euro;;</a>/100l";;\
$ret .= "&nbsp;;(".$volume."l = ";;\
$ret .= sprintf("%.2f",$price);;\
$ret .= "&euro;;) ";;\
        $ret .= " / ".ReadingsVal($name,"Heizoelsorte","-");;\
        $ret .= " - ".$lastCheck."</div>";;\
return $ret;;\
}\



Gefällt mir Gefällt mir x 1 Liste anzeigen