Hallo, ich habe schon seit einiger Zeit immer mal wieder das Problem, das bei meinen Tankstellen-Devices, die per HHTMOD von Clever-Tanken die aktuellen Preise auslesen an einzelnen Tankstellen immer mal wieder nur eine 0 ausgelesen wird. Das verhaut mir natürlich dann auch alle Statistic-Berechnungen und führt somit zu Falschbenachrichtigungen.
Ich habe schon ein paar Sachen ausprobiert aber bekomme den Fehler einfach nicht ausgemerzt.
Aktuelle Lösung (laut Netz/KI-Recherge):
reading08OExpr
{ ($val < 1) ? ReadingsVal($name,"Diesel-1",0) : $val }
Dazu noch Versucht im Filelog die 0-Werte nicht mitzuloggen.
Hier noch eins der Devices (sind alle iedentisch):
Internals:
BUSY 0
DEF https://www.clever-tanken.de/tankstelle_details/15360 600
FUUID 69d76140-f33f-7706-a7d6-12051dc493774932
FVERSION 98_HTTPMOD.pm:0.291590/2024-09-23
Interval 600
MainURL https://www.clever-tanken.de/tankstelle_details/15360
ModuleVersion 4.2.0 - 11.8.2023
NAME Tankstelle_HSe_ARAL_Roermonderstr
NOTIFYDEV global
NR 588
NTFY_ORDER 50-Tankstelle_HSe_ARAL_Roermonderstr
STATE Super E5: 0.01 € * Super E10: 0.01 € * Super Plus: 0.01 € * Diesel: 0.01 €
TYPE HTTPMOD
eventCount 4798
value
CompiledRegexes:
HTTPCookieHash:
csrftoken;:
Name csrftoken
Options expires=Sun, 30 May 2027 14:59:47 GMT; Max-Age=31449600; Path=/; SameSite=Lax
Path
Value k4JmswBEcTxSBI6FDGz09aL5gSVOm2x5
HttpUtils:
NAME
addr https://www.clever-tanken.de:443
auth 0
data
displayurl https://www.clever-tanken.de/tankstelle_details/15360
header Cookie: csrftoken=k4JmswBEcTxSBI6FDGz09aL5gSVOm2x5
host www.clever-tanken.de
httpversion 1.0
ignoreredirects 1
loglevel 4
path /tankstelle_details/15360
protocol https
redirects 0
timeout 10
url https://www.clever-tanken.de/tankstelle_details/15360
sslargs:
QUEUE:
READINGS:
2026-05-31 17:39:55 Bioethanol_avg 0
2026-05-31 17:39:55 Bioethanol_complete 0
2026-05-31 17:39:55 Bioethanol_old -
2026-05-31 17:39:55 CNG_avg 0
2026-05-31 17:39:55 CNG_complete 0
2026-05-31 17:39:55 CNG_old -
2026-05-31 17:39:55 Diesel_avg 1.92
2026-05-31 17:39:55 Diesel_complete 0
2026-05-31 17:39:55 Diesel_old -
2026-05-31 17:39:55 LNG_avg 0
2026-05-31 17:39:55 LNG_complete 0
2026-05-31 17:39:55 LNG_old -
2026-05-31 17:39:55 LPG_avg 1.14
2026-05-31 17:39:55 LPG_complete 0
2026-05-31 17:39:55 LPG_old -
2026-05-31 17:39:55 SuperE10_avg 1.93
2026-05-31 17:39:55 SuperE10_complete 0
2026-05-31 17:39:55 SuperE10_old -
2026-05-31 17:29:55 SuperE5_avg 1.21
2026-05-31 17:39:55 SuperE5_complete 0
2026-05-31 17:39:55 SuperE5_old -
2026-05-31 17:19:55 SuperPlus_avg 1.06
2026-05-31 17:39:55 SuperPlus_complete 0
2026-05-31 17:39:55 SuperPlus_old -
2026-05-31 17:39:55 Wasserstoff_avg 0
2026-05-31 17:39:55 Wasserstoff_complete 0
2026-05-31 17:39:55 Wasserstoff_old -
REQUEST:
context reading
data
header
ignoreredirects 0
num unknown
retryCount 0
type update
url https://www.clever-tanken.de/tankstelle_details/15360
defptr:
readingBase:
readingNum:
readingOutdated:
readingSubNum:
requestReadings:
update:
Attributes:
alias ARAL in Karken (Roermonder Str.)
enableControlSet 1
event-min-interval .*:1800
event-on-change-reading .*
group Informationen
icon fuel
model clever_tanken_single_station
reading01Name Name
reading01Regex <span class="strong-title" itemprop="name">(.*)</span>
reading02Name Strasse
reading02Regex <span itemprop="streetAddress">(.*)</span>
reading03Name PLZ
reading03Regex <span itemprop="http://schema.org/postalCode">(.*)</span>
reading04Name Ort
reading04Regex <span itemprop="http://schema.org/addressCountry">(.*)</span>
reading05Name open_days
reading05RegOpt g
reading05Regex <div class="d-flex justify-content-between weak-body">\s*<span>\s*(.*)<\/span>
reading06Name open_hours
reading06RegOpt g
reading06Regex <div class="d-flex justify-content-between weak-body">\s*<span>\s*.*<\/span>\s*<span>\s*(.*)<\/span>
reading07Name last_update
reading07Regex <span>Letzte Aktualisierung: (.*)</span>
reading08Name Diesel
reading08OExpr { ($val < 1) ? ReadingsVal($name,"Diesel-1",0) : $val }
reading08Regex <div[^>]*class="price-type-name"[^>]*>Diesel<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading09Name SuperE10
reading09OExpr { ($val < 1) ? ReadingsVal($name,"SuperE10-1",0) : $val }
reading09Regex <div[^>]*class="price-type-name"[^>]*>Super E10<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading10Name SuperE5
reading10OExpr { ($val < 1) ? ReadingsVal($name,"SuperE5-1",0) : $val }
reading10Regex <div[^>]*class="price-type-name"[^>]*>Super E5<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading11Name SuperPlus
reading11OExpr { ($val < 1) ? ReadingsVal($name,"SuperPlus-1",0) : $val }
reading11Regex <div[^>]*class="price-type-name"[^>]*>ARAL Superplus<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading12Name LPG
reading12OExpr { ($val < 1) ? ReadingsVal($name,"LPG-1",0) : $val }
reading12Regex <div[^>]*class="price-type-name"[^>]*>LPG<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading13Name LNG
reading13OExpr { ($val < 1) ? ReadingsVal($name,"LNG-1",0) : $val }
reading13Regex <div[^>]*class="price-type-name"[^>]*>LNG<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading14Name CNG
reading14OExpr { ($val < 1) ? ReadingsVal($name,"CNG-1",0) : $val }
reading14Regex <div[^>]*class="price-type-name"[^>]*>CNG<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading15Name Bioethanol
reading15OExpr { ($val < 1) ? ReadingsVal($name,"Bioethanol-1",0) : $val }
reading15Regex <div[^>]*class="price-type-name"[^>]*>Bioethanol<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading16Name Wasserstoff
reading16OExpr { ($val < 1) ? ReadingsVal($name,"Wasserstoff-1",0) : $val }
reading16Regex <div[^>]*class="price-type-name"[^>]*>Wasserstoff<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
readingMaxAge 5
readingMaxAgeReplacementMode delete
readingOExpr $val =~ s/<[\d\D]+>//;;$val
room Information->Spritpreise
stateFormat {
sprintf("Super E5: %.2f € * Super E10: %.2f € * Super Plus: %.2f € * Diesel: %.2f €",
ReadingsNum($name,"SuperE5-1",0) + 0.01,
ReadingsNum($name,"SuperE10-1",0) + 0.01,
ReadingsNum($name,"SuperPlus-1",0) + 0.01,
ReadingsNum($name,"Diesel-1",0) + 0.01
)
}
timeout 10
timestamp-on-change-reading .*
userReadings Diesel_old { OldReadingsVal($name,"Diesel-1", ReadingsVal($name,"Diesel-1","-")) },
SuperE5_old { OldReadingsVal($name,"SuperE5-1", ReadingsVal($name,"SuperE5-1","-")) },
SuperE10_old { OldReadingsVal($name,"SuperE10-1", ReadingsVal($name,"SuperE10-1","-")) },
SuperPlus_old { OldReadingsVal($name,"SuperPlus-1", ReadingsVal($name,"SuperPlus-1","-")) },
LPG_old { OldReadingsVal($name,"LPG-1", ReadingsVal($name,"LPG-1","-")) },
LNG_old { OldReadingsVal($name,"LNG-1", ReadingsVal($name,"LNG-1","-")) },
CNG_old { OldReadingsVal($name,"CNG-1", ReadingsVal($name,"CNG-1","-")) },
Bioethanol_old { OldReadingsVal($name,"Bioethanol-1", ReadingsVal($name,"Bioethanol-1","-")) },
Wasserstoff_old { OldReadingsVal($name,"Wasserstoff-1", ReadingsVal($name,"Wasserstoff-1","-")) },
Diesel_complete { ReadingsNum($name,"Diesel-1", 0) + (ReadingsNum($name,"Diesel-2", 0) / 1000) },
SuperE5_complete { ReadingsNum($name,"SuperE5-1", 0) + (ReadingsNum($name,"SuperE5-2", 0) / 1000) },
SuperE10_complete { ReadingsNum($name,"SuperE10-1", 0) + (ReadingsNum($name,"SuperE10-2", 0) / 1000) },
SuperPlus_complete { ReadingsNum($name,"SuperPlus-1", 0) + (ReadingsNum($name,"SuperPlus-2", 0) / 1000) },
LPG_complete { ReadingsNum($name,"LPG-1", 0) + (ReadingsNum($name,"LPG-2", 0) / 1000) },
LNG_complete { ReadingsNum($name,"LNG-1", 0) + (ReadingsNum($name,"LNG-2", 0) / 1000) },
CNG_complete { ReadingsNum($name,"CNG-1", 0) + (ReadingsNum($name,"CNG-2", 0) / 1000) },
Bioethanol_complete { ReadingsNum($name,"Bioethanol-1", 0) + (ReadingsNum($name,"Bioethanol-2", 0) / 1000) },
Wasserstoff_complete { ReadingsNum($name,"Wasserstoff-1", 0) + (ReadingsNum($name,"Wasserstoff-2", 0) / 1000) },
Diesel_avg { ReadingsVal("Diesel","Durchschnitt","0") },
SuperE5_avg { ReadingsVal("SuperE5","Durchschnitt","0") },
SuperE10_avg { ReadingsVal("SuperE10","Durchschnitt","0") },
SuperPlus_avg { ReadingsVal("SuperPlus","Durchschnitt","0") },
LPG_avg { ReadingsVal("LPG","Durchschnitt","0") },
LNG_avg { ReadingsVal("LNG","Durchschnitt","0") },
CNG_avg { ReadingsVal("CNG","Durchschnitt","0") },
Bioethanol_avg { ReadingsVal("Bioethanol","Durchschnitt","0") },
Wasserstoff_avg { ReadingsVal("Wasserstoff","Durchschnitt","0") },
userattr
verbose 3
Ich weiß, dass es inzwischen auch eine API über Tankerkönig gibt, doch 1) liefert die nicht alle Daten die ich suche und 2) weiß ich nicht wie man aus einer API Daten ausliest und 3) handelt es sich wenn dann auch nur um ein HTTPMOD soweit ich das nachgelesen habe.
Daher wäre mir lieber eine Lösung über Clever-Tanken wo dann beim Auslesen sichergestellt wird, dass einfach keine 0 zurückgegeben werden kann oder in einem solchen Fall der alte Wert beibehalten wird.