Abfrage Heizölpreis HTTPMOD

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

Vorheriges Thema - Nächstes Thema

yersinia

Zitat von: Beta-User am 11 März 2020, 10:14:32
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.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

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-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Guzzi-Charlie

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?
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

yersinia

#33
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
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Guzzi-Charlie

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.
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

Guzzi-Charlie

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.
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

Schotty

Zitat von: Guzzi-Charlie am 16 März 2020, 17:48:32
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:
Zitat von: yersinia am 10 Januar 2020, 16:31:02
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
Zitat von: yersinia am 16 März 2020, 16:29:47
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/

Guzzi-Charlie

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.
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

yersinia

[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.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Guzzi-Charlie

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.
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

yersinia

#40
Zitat von: Guzzi-Charlie 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.
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:
Zitat2020-03-17 16:01:01 52.66€/100l (2000l = 1053.20€)
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Guzzi-Charlie

#41
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.
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

yersinia

#42
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>"}
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Guzzi-Charlie

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.
- RaspPI 4+: (Cuno V2 -2x KS300, JeeLink -13x EC3000)
- Stromzähler (B+G E-Tech): 6x SDM120M, 9x XTM100A, 38x DRS110M
- LAN: IT LAN-Gateway mit 34x RMF-R1 (Rohrmotor24)
- WLAN: 85x Shelly, 12x Gosund SP111, 16x D1-Mini, 15x Sonoff Basic
- DECT: 6x DECT200, 8x DECT301, - HmIP: 3x FalmotC12, 16x WTH2

yersinia

Zitat von: Guzzi-Charlie am 17 März 2020, 23:30:35FHEM 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.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl