Abfrage Heizölpreis HTTPMOD

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

Vorheriges Thema - Nächstes Thema

TomLee

Gerade mal getestet, fuel_oil_check_heizoel24_v2 funzt nach wie vor.

cotecmania

#106
Hmmm, gerade getestet, nur PLZ angepasst :
2023.03.04 18:13:11 5: Heizoel_esyoil: set called with reread
2023.03.04 18:13:11 4: Heizoel_esyoil: GetUpdate called (reread)
2023.03.04 18:13:11 5: Heizoel_esyoil: AddToQueue adds type update to URL Heizoel_esyoil, no data, no headers, retry 0, initial queue len: 0
2023.03.04 18:13:11 5: Heizoel_esyoil: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.03.04 18:13:11 5: Heizoel_esyoil: HandleSendQueue is using Cookie cs_code with path / and Value deleted (key cs_code;/, destination path is )
2023.03.04 18:13:11 5: Heizoel_esyoil: HandleSendQueue is using Cookie nrg_session with path / and Value a9c755421be386a8d3c8c113be3584c1 (key nrg_session;/, destination path is )
2023.03.04 18:13:11 5: Heizoel_esyoil: HandleSendQueue is using Cookie ppset with path / and Value deleted (key ppset;/, destination path is )
2023.03.04 18:13:11 5: Heizoel_esyoil: DoCookies is adding Cookie header: cs_code=deleted; nrg_session=a9c755421be386a8d3c8c113be3584c1; ppset=deleted
2023.03.04 18:13:11 4: Heizoel_esyoil: HandleSendQueue sends update with timeout 2 to Heizoel_esyoil, No Data,
header: Cookie: cs_code=deleted; nrg_session=a9c755421be386a8d3c8c113be3584c1; ppset=deleted
2023.03.04 18:13:11 5: Heizoel_esyoil: ReadCallback called from HttpUtils_NonblockingGet
2023.03.04 18:13:11 5: Heizoel_esyoil: Read callback Error LogLvl set to 3, regex
2023.03.04 18:13:11 3: Heizoel_esyoil: Read callback: Error: Heizoel_esyoil: malformed or unsupported URL
2023.03.04 18:13:11 4: Heizoel_esyoil: Read callback: request type was update retry 0, no headers, no body
2023.03.04 18:13:11 5: Heizoel_esyoil: Read callback: body empty
2023.03.04 18:13:11 4: Heizoel_esyoil: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2023.03.04 18:13:11 5: Heizoel_esyoil: GetCookies is looking for Cookies
2023.03.04 18:13:11 5: Heizoel_esyoil: ExtractSid called, context reading, num unknown
2023.03.04 18:13:11 4: Heizoel_esyoil: no header to look for redirects
2023.03.04 18:13:11 5: Heizoel_esyoil: Read callback sets LAST_REQUEST to update
2023.03.04 18:13:11 5: Heizoel_esyoil: CheckAuth decided no authentication required
2023.03.04 18:14:29 5: Heizoel_esyoil: set called with start



Internals:
   BUSY       0
   CFGFN     
   DEF        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 73568
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 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
   FUUID      640377b2-f33f-623c-131e-9ab37823f0dbcc81
   Interval   0
   MainURL    Heizoel_esyoil
   ModuleVersion 4.1.15 - 17.12.2022
   NAME       Heizoel_esyoil
   NOTIFYDEV  global
   NR         3213
   NTFY_ORDER 50-Heizoel_esyoil
   STATE      ???
   TYPE       HTTPMOD
   eventCount 3
   value     
   HTTPCookieHash:
     cs_code;/:
       Name       cs_code
       Options    expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.check24.de; HttpOnly; SameSite=lax
       Path       /
       Value      deleted
     nrg_session;/:
       Name       nrg_session
       Options    path=/; domain=.check24.de; secure; HttpOnly
       Path       /
       Value      a9c755421be386a8d3c8c113be3584c1
     ppset;/:
       Name       ppset
       Options    expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.check24.de; SameSite=lax
       Path       /
       Value      deleted
   HttpUtils:
     data       
     displayurl Heizoel_esyoil
     header     Cookie: cs_code=deleted; nrg_session=a9c755421be386a8d3c8c113be3584c1; ppset=deleted
     httpversion 1.0
     hu_blocking 0
     ignoreredirects 1
     loglevel   4
     redirects  0
     timeout    2
     url        Heizoel_esyoil
     sslargs:
   QUEUE:
   READINGS:
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        Heizoel_esyoil
Attributes:
   room       Heizung
   userattr   
   verbose    5

FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI


cotecmania

ok nochmals versucht, geht aber immer noch nicht.
Ich muss doch nur das Device anlegen und die PLZ anpassen ?

2023.03.04 18:40:49 5: Heizoel_esyoil: set called with reread
2023.03.04 18:40:49 4: Heizoel_esyoil: GetUpdate called (reread)
2023.03.04 18:40:49 5: Heizoel_esyoil: AddToQueue adds type update to URL HTTPMOD, no data, no headers, retry 0, initial queue len: 0
2023.03.04 18:40:49 5: Heizoel_esyoil: HandleSendQueue called from AddToSendQueue, qlen = 1
2023.03.04 18:40:49 5: Heizoel_esyoil: HandleSendQueue is using Cookie cs_code with path / and Value deleted (key cs_code;/, destination path is )
2023.03.04 18:40:49 5: Heizoel_esyoil: HandleSendQueue is using Cookie nrg_session with path / and Value 5dc3c05ead51a0c69c7b00d0130f5cf6 (key nrg_session;/, destination path is )
2023.03.04 18:40:49 5: Heizoel_esyoil: HandleSendQueue is using Cookie ppset with path / and Value deleted (key ppset;/, destination path is )
2023.03.04 18:40:49 5: Heizoel_esyoil: DoCookies is adding Cookie header: cs_code=deleted; nrg_session=5dc3c05ead51a0c69c7b00d0130f5cf6; ppset=deleted
2023.03.04 18:40:49 4: Heizoel_esyoil: HandleSendQueue sends update with timeout 2 to HTTPMOD, No Data,
header: Cookie: cs_code=deleted; nrg_session=5dc3c05ead51a0c69c7b00d0130f5cf6; ppset=deleted
2023.03.04 18:40:49 5: Heizoel_esyoil: ReadCallback called from HttpUtils_NonblockingGet
2023.03.04 18:40:49 5: Heizoel_esyoil: Read callback Error LogLvl set to 3, regex
2023.03.04 18:40:49 3: Heizoel_esyoil: Read callback: Error: HTTPMOD: malformed or unsupported URL
2023.03.04 18:40:49 4: Heizoel_esyoil: Read callback: request type was update retry 0, no headers, no body
2023.03.04 18:40:49 5: Heizoel_esyoil: Read callback: body empty
2023.03.04 18:40:49 4: Heizoel_esyoil: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2023.03.04 18:40:49 5: Heizoel_esyoil: GetCookies is looking for Cookies
2023.03.04 18:40:49 5: Heizoel_esyoil: ExtractSid called, context reading, num unknown
2023.03.04 18:40:49 4: Heizoel_esyoil: no header to look for redirects
2023.03.04 18:40:49 5: Heizoel_esyoil: Read callback sets LAST_REQUEST to update
2023.03.04 18:40:49 5: Heizoel_esyoil: CheckAuth decided no authentication required


Internals:
   BUSY       0
   CFGFN     
   DEF        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 73568
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
   FUUID      64038208-f33f-623c-8e79-e6e8826992b34840
   Interval   0
   MainURL    HTTPMOD
   ModuleVersion 4.1.15 - 17.12.2022
   NAME       Heizoel_esyoil
   NOTIFYDEV  global
   NR         3443
   NTFY_ORDER 50-Heizoel_esyoil
   STATE      ???
   TYPE       HTTPMOD
   eventCount 3
   value     
   HTTPCookieHash:
     cs_code;/:
       Name       cs_code
       Options    expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.check24.de; HttpOnly; SameSite=lax
       Path       /
       Value      deleted
     nrg_session;/:
       Name       nrg_session
       Options    path=/; domain=.check24.de; secure; HttpOnly
       Path       /
       Value      5dc3c05ead51a0c69c7b00d0130f5cf6
     ppset;/:
       Name       ppset
       Options    expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.check24.de; SameSite=lax
       Path       /
       Value      deleted
   HttpUtils:
     data       
     displayurl HTTPMOD
     header     Cookie: cs_code=deleted; nrg_session=5dc3c05ead51a0c69c7b00d0130f5cf6; ppset=deleted
     httpversion 1.0
     hu_blocking 0
     ignoreredirects 1
     loglevel   4
     redirects  0
     timeout    2
     url        HTTPMOD
     sslargs:
   QUEUE:
   READINGS:
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        HTTPMOD
Attributes:
   verbose    5
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

TomLee

Zitatund die PLZ anpassen ?

Habs mir nicht nochmal angeschaut, wie auch das Template aufgebaut ist, zusätzlich zur PLZ wurde bei mir die Menge mit abgefragt in dem Dialogfenster das erscheint wenn man das Template anwendet.

Zum weiteren Problem, nochmal, hilft der Link https://wiki.fhem.de/wiki/Erste_Schritte_in_FHEM#Device_anlegen_-_define ?

oder einmal ums Quadrat laufen ?


Bartimaus

Moin,

muss das Thema nochmal hochholen. Leider bietet Check24 keine Heizölabfrage mehr an.
Hat jemand Alternativvorschläge ?

LG
LG
B.


FHEM@AMD-Ryzen7-5825U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Wzut

Heizölpreis gibt es inzwischen als Template von HTTPMOD und nutzt IMHO https://www.heizoel24.de/DailyPriceXml.ashx als Quelle
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Bartimaus

Danke, das habe ich auch bereits umgestellt.

Leider gibt es ein kleines "Aber"....

im
replacement02Regex. %%MENGE%%
replacement02Value. CN.Blaubrenner:Bestellmenge

habe ich bislang die Bestellmenge nicht als absolute Zahl erfasst, sondern mir den Wert als das Reading aus einem anderen Device (Hourcounter) geholt wo ich zuverlässig die Bestellmenge errechne. Das hat bislang auch prächtig funktioniert, und auch die Bestellmenge wird derzeit dort korrekt errechnet.

Alternativ habe ich hier im Device ein Userreading eingerichtet wo ich das Reading zur Bestellmenge mir einfach aus dem anderen Device hole. Auch ohne Erfolg. Kaum trage ich hier allerdings eine Absolute Zahl ein, wird der aktuelle Heizölpreis errechnet

Das es funktionieren soll, ist ja auch hier beschrieben:

replacement[0-9]*Value
Defines the replacement. If the corresponding replacementMode is text, then value is a static text that is used as the replacement.
If replacementMode is reading then Value can be the name of a reading of this device or it can be a reading of a different device referred to by devicename:reading.
If replacementMode is internal the Value can be the name of an internal of this device or it can be an internal of a different device referred to by devicename:internal.
If replacementMode is expression the the Value is treated as a Perl expression that computes the replacement value. The expression can use $1, $2 and so on to refer to capture groups of the corresponding regex that is matched against the original URL, header or post data.
If replacementMode is key then the module will use a value from a key / value pair that is stored in an obfuscated form in the file system with the set storeKeyValue command. This might be useful for storing passwords.

Nur wie gesagt, funktioniert es derzeit nicht mehr.
Was mache ich hier falsch ?
LG
B.


FHEM@AMD-Ryzen7-5825U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

TomLee

Zitat von: Bartimaus am 13 Dezember 2025, 09:58:59Was mache ich hier falsch ?

Nach der Umstellung auf "replacementMode reading" weiterhin in stateFormat mit dem Attributwert zu rechnen. Da steht ja jetzt kein numerischer Wert mehr drin.

Lösung: stateFormat anpassen und mit dem Wert aus dem Hourcounter-Device rechnen.

Gruß Thomas