Abfrage Heizölpreis HTTPMOD

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

Vorheriges Thema - Nächstes Thema

Guzzi-Charlie

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  :) :) :)
- 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

Jump2016

@yersinia Vielen Dank für die Anpassung  :) nun funktionierts auch bei mir wieder

yersinia

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

Schotty

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/

yersinia

Zitat von: Schotty 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

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.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

Schotty

Zitat von: yersinia am 19 März 2020, 15:50:24
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/

hdosw

Zitat von: Bartimaus am 15 Januar 2020, 14:16:00
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

hdosw

Hallo Bartimaus,

habs rausgefunden  :)

Viele Grüße

yersinia

#53
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)
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

yersinia

#54
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).
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

yersinia

#55
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
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

yersinia

Dank amenomade sind die beiden Heizölabfragen via esyoil und heizöl24 auch als httpmod.template vorhanden. :)
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

amenomade

#57
Zitat von: yersinia am 05 Dezember 2020, 09:56:03
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 ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

daheim

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...

yersinia

Ja, funktioniert bei mir seit dem 17.05. auch nicht mehr.
Zitat von: daheim am 21 Juni 2021, 13:15:29Habe 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.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