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

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

Offline daheim

  • Full Member
  • ***
  • Beiträge: 133
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #76 am: 01 Dezember 2021, 13:34:00 »
Ich habe mal eine Frage: Funktioniert die Abfrage mit Check24 noch EsyOil ist ja in Rente und mag auch nicht mehr....

Bekomme es mit Check24 nicht ans Laufen?!

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1153
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #77 am: 01 Dezember 2021, 13:56:10 »
Ich habe mal eine Frage: Funktioniert die Abfrage mit Check24 noch EsyOil ist ja in Rente und mag auch nicht mehr....
Ja, läuft hier mit check24.
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.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 daheim

  • Full Member
  • ***
  • Beiträge: 133
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #78 am: 01 Dezember 2021, 14:28:50 »
Danke für die Rückmeldung. Hatte eine ; zu viel

Offline Bartimaus

  • Hero Member
  • *****
  • Beiträge: 1340
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #79 am: 02 Dezember 2021, 14:08:12 »
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)

Moin,

habe versucht, dies auf die neue Abfrage mit Check24 zu migrieren, aber wenn ich versuche den Tanklevel so abzufragen wie hier beschrieben, klappt es nicht, bzw. der aktuelle Preis wird nicht ermittelt. NUR wenn "replacement02Value" mit einem numerischen Wert eingetragen wird klappt die Abfrage. Ich habe dies jetzt vorübergehend so gelöst, das der Tanklevel extern ermittelt wird, und dann per DOIF täglich als numerischer Wert ins Feld eingetragen wird. Funktioniert, aber elegant ist anders. Hat vielleicht jemand nen Tip ?

Edith:
Habs hinbekommen, danke an @docolli
« Letzte Änderung: 02 Dezember 2021, 14:33:05 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1153
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #80 am: 02 Dezember 2021, 14:13:02 »
habe versucht, dies auf die neue Abfrage mit Check24 zu migrieren
Was heisst migrieren in diesem Kontext?

NUR wenn "replacement02Value" mit einem numerischen Wert eingetragen wird klappt die Abfrage. Ich habe dies jetzt vorübergehend so gelöst, das der Tanklevel extern ermittelt wird, und dann per DOIF täglich als numerischer Wert ins Feld eingetragen wird. Funktioniert, aber elegant ist anders. Hat vielleicht jemand nen Tip ?
userReading und/oder ReadingsNum?
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.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 Bartimaus

  • Hero Member
  • *****
  • Beiträge: 1340
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #81 am: 02 Dezember 2021, 14:37:05 »
@yersinia,

Danke für die schnelle Rückmeldung.

Mit der Migration meinte ich, meine bestehende (veraltete) Abfrage von Esyoil auf Check24 umzubauen.
Der Fehler lag im von mir falsch verwendeten "stateformat", aber dank dem Posting von Docolli der das gleiche Problem hatte, habe ich es nun gelöst.

Edith: Mist, funktioniert doch nicht, State wird zwar korrekt dargestellt, aber die Abfrage bei Check24 liefert dann doch kein Ergebnis
« Letzte Änderung: 02 Dezember 2021, 15:12:33 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

Offline Bartimaus

  • Hero Member
  • *****
  • Beiträge: 1340
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #82 am: 02 Dezember 2021, 21:55:45 »
Sorry, muss doch nochmal fragen:

Wenn ich beim Attribut "replacement02Value" folgenden Wert eintrage: Heizoel_esyoil:Tankmenge
wird der Heizölpreis bei Check24 nicht automatisch abgefragt. Egal ob das zugehörige Attribut -> Mode auf: expression,text oder reading steht.

Das Userreading "Tankmenge" wird korrekt ermittelt. Aktuell 750.123985

Was mache ich hier falsch ?

Nutzt hier jemand Check24 in Verbindung mit einem Füllstandssensor im Tank ?

Edith: Wenn ich Check24-Heizöl manuell aufrufe, wird kein Wert der Bestellmenge mit Nachkommastellen akzeptiert. Wie bekomme ich die errechnete Tankmenge hin ohne Nachkommastellen ?  ::)
« Letzte Änderung: 02 Dezember 2021, 22:55:17 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1153
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #83 am: Gestern um 08:56:16 »
Was mache ich hier falsch ?
Drei posts ohne list oder raw definition des Devices. ::)

Edith: Wenn ich Check24-Heizöl manuell aufrufe, wird kein Wert der Bestellmenge mit Nachkommastellen akzeptiert. Wie bekomme ich die errechnete Tankmenge hin ohne Nachkommastellen ?  ::)
Du hast ein userReading? Dann würde ich replacement02Value mal
ReadingsNum($name,"Tankmenge",500,0);setzen. (500 war die Mindestbestellmenge, oder)
Zitat
ReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet und ggf. mit 0 aufgefüllt, wenn <round> größer ist als die Anzahl der Dezimalstellen.
https://fhem.de/commandref_DE.html#perl


Edith meint, du kannst im userReading Tankmenge auch schon runden mit
sprintf("%.0f",$deine_variable);bevor du das reading mit einem Wert befüllst.

Im replacement02Value kannst du dann entweder
deinHTTPMODDevice:Tankmengeoder
ReadingsNum($name,"Tankmenge",0);versuchen.
« Letzte Änderung: Gestern um 09:14:33 von yersinia »
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.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 Bartimaus

  • Hero Member
  • *****
  • Beiträge: 1340
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #84 am: Gestern um 09:55:23 »
Moin,

danke, ich habe es jetzt hinbekommen, indem ich mir im Device alle wichtigen Readings als Userreading speichere. Diese Werte habe ich entsprechend formatiert, so das ich jetzt jetzt nur mit ganzzahligen Werten operiere. Damit klappt jetzt auch die Abfrage bei Check24 incl. errechneter Bestellmenge resultierend aus meinem Tanklevel.

Hier mal die von mir verwendete Definition:

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 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 06969
attr Heizoel_esyoil replacement02Mode reading
attr Heizoel_esyoil replacement02Regex %%MENGE%%
attr Heizoel_esyoil replacement02Value Heizoel_esyoil:Bestellmenge
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 6
attr Heizoel_esyoil replacement08Mode text
attr Heizoel_esyoil replacement08Regex %%EXPRESS%%
attr Heizoel_esyoil replacement08Value express=
attr Heizoel_esyoil room Energie,HTTPMOD,Heizung
attr Heizoel_esyoil stateFormat {"<div style='color:green'>".ReadingsVal($name,"Heizoelpreis","-")."<div style='color:white'>"." Cent/Liter"."<br>"\
."max. Bestellmenge: "."<div style='color:green'>".int(ReadingsVal($name,"Bestellmenge","-"))." Liter"."</div>"\
."Tankkosten: "."<div style='color:green'>".int(ReadingsVal($name,"Fuellkosten","-"))." Euro"."</div>"}
attr Heizoel_esyoil timeout 10
attr Heizoel_esyoil userReadings Bestellmenge {ReadingsNum("Heizoel_esyoil","Tankvolumen",0)-ReadingsNum("Heizoel_esyoil","Fuellstand",0)},\
Fuellkosten {ReadingsVal("Heizoel_esyoil","Bestellmenge",0)/100*ReadingsVal("Heizoel_esyoil","Heizoelpreis",0)}, Fuellstand {sprintf("%.d", ReadingsNum("CN.Blaubrenner","appTanklevel",0))}
attr Heizoel_esyoil webCmd reread
setstate Heizoel_esyoil 2021-12-03 09:33:23 Tankvolumen 8400
« Letzte Änderung: Gestern um 09:57:41 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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1153
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #85 am: Gestern um 10:02:55 »
Gut, wenn es klappt. Ich würde beim Rechnen mit Werten aber eher mit ReadingsNum anstelle von ReadingsVal arbeiten:
attr Heizoel_esyoil userReadings Bestellmenge {return (ReadingsNum($name,"Tankvolumen",0)-ReadingsNum($name,"Fuellstand",0));},\
Fuellkosten {return ((ReadingsNum($name,"Bestellmenge",0)/100)*ReadingsNum("Heizoel_esyoil","Heizoelpreis",0));}, Fuellstand {return sprintf("%.d", ReadingsNum("CN.Blaubrenner","appTanklevel",0));}

Weiterhin könntest du die replacmentValues noch optimieren, aber das ist nur nice-to-have:
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
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.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 Bartimaus

  • Hero Member
  • *****
  • Beiträge: 1340
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #86 am: Gestern um 10:14:26 »
Danke, erledigt.

Kannst Du mit einfachen Worten kurz sagen, was das optimieren der replacementvalues bewirkt ?
LG
B.


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

Offline yersinia

  • Hero Member
  • *****
  • Beiträge: 1153
    • Cyanide & Happiness
Antw:Abfrage Heizölpreis HTTPMOD
« Antwort #87 am: Gestern um 10:19:32 »
Du bekommst ein drop-down-Auswahlmenü mit den validen Werten wenn du das Attribut anwählst. Wie gesagt, ist nice-to-have und der Mehrwert bei dir wahrscheinlich nicht gegeben. ;D
viele Grüße, yersinia
----
FHEM 6.1 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.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
Informativ Informativ x 1 Liste anzeigen