Zitat von: RalfRog am 02 Juni 2026, 21:36:22Attribut "reading[xy]RegOpt g" ist dann bei mehrfachem Auftreten von reading[xy]Name nötig.Offenbar wohl nicht sonst könnte das List hier ja nicht funktionieren:
Internals:
BUSY 0
DEF https://www.clever-tanken.de/tankstelle_details/15360
FUUID 69d76140-f33f-7706-a7d6-12051dc493774932
FVERSION 98_HTTPMOD.pm:0.291590/2024-09-23
Interval 396
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: 1.99 € * Super E10: 1.93 € * Super Plus: 2.11 € * Diesel: 1.91 €
TYPE HTTPMOD
eventCount 5205
value
CompiledRegexes:
HTTPCookieHash:
csrftoken;:
Name csrftoken
Options expires=Tue, 01 Jun 2027 22:20:50 GMT; Max-Age=31449600; Path=/; SameSite=Lax
Path
Value 6T6esr2u7j1BGsgE4wg15PJYAUxFtV84
HttpUtils:
NAME
addr https://www.clever-tanken.de:443
auth 0
buf
code 200
compress 1
conn
data
displayurl https://www.clever-tanken.de/tankstelle_details/15360
header User-Agent: Mozilla/5.0 WindowsNT10.0 Chrome/120.0.0.0 Safari/537.36
Cookie: csrftoken=6T6esr2u7j1BGsgE4wg15PJYAUxFtV84
host www.clever-tanken.de
httpheader HTTP/1.1 200 OK
Date: Tue, 02 Jun 2026 22:20:50 GMT
Server: Apache/2.4.52 (Ubuntu)
Vary: Cookie,Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Set-Cookie: csrftoken=6T6esr2u7j1BGsgE4wg15PJYAUxFtV84; expires=Tue, 01 Jun 2027 22:20:50 GMT; Max-Age=31449600; Path=/; SameSite=Lax
X-Correlation-Uid: ah9XQrz0h5kNjZw-oXv0SAAAACQ
Connection: close
Transfer-Encoding: chunked
httpversion 1.1
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
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-06-03 00:02:09 Bioethanol_avg 0
2026-06-03 00:02:09 Bioethanol_complete 0
2026-06-03 00:02:09 Bioethanol_old 0
2026-06-03 00:02:09 CNG_avg 0
2026-06-03 00:02:09 CNG_complete 0
2026-06-03 00:02:09 CNG_old 0
2026-06-03 00:20:50 Diesel-1 1.90
2026-06-03 00:20:50 Diesel-2 9
2026-06-03 00:08:42 Diesel_avg 1.85
2026-06-03 00:14:33 Diesel_complete 1.909
2026-06-03 00:14:33 Diesel_old 1.90
2026-06-03 00:02:09 LNG_avg 0
2026-06-03 00:02:09 LNG_complete 0
2026-06-03 00:02:09 LNG_old 0
2026-06-03 00:20:50 LPG-1 1.12
2026-06-03 00:20:50 LPG-2 9
2026-06-03 00:08:42 LPG_avg 1.11
2026-06-03 00:02:09 LPG_complete 1.129
2026-06-03 00:02:09 LPG_old 1.12
2026-06-03 00:20:50 Name ARAL
2026-06-03 00:20:50 Ort Heinsberg
2026-06-03 00:20:50 PLZ 52525
2026-06-03 00:20:50 Strasse Roermonder Str. 41
2026-06-03 00:20:50 SuperE10-1 1.92
2026-06-03 00:20:50 SuperE10-2 9
2026-06-03 00:08:42 SuperE10_avg 1.87
2026-06-03 00:14:33 SuperE10_complete 1.929
2026-06-03 00:14:33 SuperE10_old 1.92
2026-06-03 00:20:50 SuperE5-1 1.98
2026-06-03 00:20:50 SuperE5-2 9
2026-06-03 00:20:50 SuperE5_avg 1.93
2026-06-03 00:14:33 SuperE5_complete 1.989
2026-06-03 00:14:33 SuperE5_old 1.98
2026-06-03 00:20:50 SuperPlus-1 2.10
2026-06-03 00:20:50 SuperPlus-2 9
2026-06-03 00:20:50 SuperPlus_avg 2.02
2026-06-03 00:14:33 SuperPlus_complete 2.109
2026-06-03 00:14:33 SuperPlus_old 2.10
2026-06-03 00:02:09 Wasserstoff_avg 0
2026-06-03 00:02:09 Wasserstoff_complete 0
2026-06-03 00:02:09 Wasserstoff_old 0
2026-06-03 00:02:09 last_update 03.06.2026 00:00
2026-06-03 00:20:50 open_days-1 Samstag
2026-06-03 00:20:50 open_days-2 Sonntag
2026-06-03 00:20:50 open_days-3 Mo-Fr
2026-06-03 00:20:50 open_hours-1 8:00-20:00
2026-06-03 00:20:50 open_hours-2 9:00-20:00
2026-06-03 00:20:50 open_hours-3 7:00-20:00
2026-06-03 00:02:09 trigger_next_interval 1
REQUEST:
context reading
data
header User-Agent: Mozilla/5.0 WindowsNT10.0 Chrome/120.0.0.0 Safari/537.36
ignoreredirects 0
num unknown
retryCount 0
type update
url https://www.clever-tanken.de/tankstelle_details/15360
defptr:
readingBase:
Diesel-1 reading
Diesel-2 reading
LPG-1 reading
LPG-2 reading
Name reading
Ort reading
PLZ reading
Strasse reading
SuperE10-1 reading
SuperE10-2 reading
SuperE5-1 reading
SuperE5-2 reading
SuperPlus-1 reading
SuperPlus-2 reading
last_update reading
open_days-1 reading
open_days-2 reading
open_days-3 reading
open_hours-1 reading
open_hours-2 reading
open_hours-3 reading
readingNum:
Diesel-1 08
Diesel-2 08
LPG-1 12
LPG-2 12
Name 01
Ort 04
PLZ 03
Strasse 02
SuperE10-1 09
SuperE10-2 09
SuperE5-1 10
SuperE5-2 10
SuperPlus-1 11
SuperPlus-2 11
last_update 07
open_days-1 05
open_days-2 05
open_days-3 05
open_hours-1 06
open_hours-2 06
open_hours-3 06
readingOutdated:
readingSubNum:
Diesel-1 -1
Diesel-2 -2
LPG-1 -1
LPG-2 -2
SuperE10-1 -1
SuperE10-2 -2
SuperE5-1 -1
SuperE5-2 -2
SuperPlus-1 -1
SuperPlus-2 -2
open_days-1 -1
open_days-2 -2
open_days-3 -3
open_hours-1 -1
open_hours-2 -2
open_hours-3 -3
requestReadings:
update:
Diesel-1 reading 08-1
Diesel-2 reading 08-2
LPG-1 reading 12-1
LPG-2 reading 12-2
Name reading 01
Ort reading 04
PLZ reading 03
Strasse reading 02
SuperE10-1 reading 09-1
SuperE10-2 reading 09-2
SuperE5-1 reading 10-1
SuperE5-2 reading 10-2
SuperPlus-1 reading 11-1
SuperPlus-2 reading 11-2
last_update reading 07
open_days-1 reading 05-1
open_days-2 reading 05-2
open_days-3 reading 05-3
open_hours-1 reading 06-1
open_hours-2 reading 06-2
open_hours-3 reading 06-3
Attributes:
alias ARAL in Karken (Roermonder Str.)
enableControlSet 1
event-min-interval .*:1800
event-on-change-reading .*
group Informationen
httpVersion 1.1
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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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 < 0.25) ? ReadingsNum($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>
readingOExpr $val =~ s/<[\d\D]+>//;;$val
requestHeader1 User-Agent: Mozilla/5.0 WindowsNT10.0 Chrome/120.0.0.0 Safari/537.36
room Information->Spritpreise
stateFormat {
if (InternalVal($name,"LAST_ERROR","") ne "") {
return "⚠️ FEHLER: Automatischer Abruf fehlgeschlagen! (Daten veraltet)";
} else {
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 { OldReadingsNum($name,"Diesel-1", ReadingsNum($name,"Diesel-1",0)) },
SuperE5_old { OldReadingsNum($name,"SuperE5-1", ReadingsNum($name,"SuperE5-1",0)) },
SuperE10_old { OldReadingsNum($name,"SuperE10-1", ReadingsNum($name,"SuperE10-1",0)) },
SuperPlus_old { OldReadingsNum($name,"SuperPlus-1", ReadingsNum($name,"SuperPlus-1",0)) },
LPG_old { OldReadingsNum($name,"LPG-1", ReadingsNum($name,"LPG-1",0)) },
LNG_old { OldReadingsNum($name,"LNG-1", ReadingsNum($name,"LNG-1",0)) },
CNG_old { OldReadingsNum($name,"CNG-1", ReadingsNum($name,"CNG-1",0)) },
Bioethanol_old { OldReadingsNum($name,"Bioethanol-1", ReadingsNum($name,"Bioethanol-1",0)) },
Wasserstoff_old { OldReadingsNum($name,"Wasserstoff-1", ReadingsNum($name,"Wasserstoff-1",0)) },
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 { ReadingsNum("Diesel","Durchschnitt",0) },
SuperE5_avg { ReadingsNum("SuperE5","Durchschnitt",0) },
SuperE10_avg { ReadingsNum("SuperE10","Durchschnitt",0) },
SuperPlus_avg { ReadingsNum("SuperPlus","Durchschnitt",0) },
LPG_avg { ReadingsNum("LPG","Durchschnitt",0) },
LNG_avg { ReadingsNum("LNG","Durchschnitt",0) },
CNG_avg { ReadingsNum("CNG","Durchschnitt",0) },
Bioethanol_avg { ReadingsNum("Bioethanol","Durchschnitt",0) },
Wasserstoff_avg { ReadingsNum("Wasserstoff","Durchschnitt",0) },
trigger_next_interval:.* { fhem("set $name interval " . (360 + int(rand(120)) - 60));; return 1;; },
userattr
verbose 3Wie man sieht werden die Readings bei Mehrfachmatches auch ohne "reading[xy]RegOpt g" mit der Erweiterung -1, -2, etc. ganz normal geschrieben. Scheint dann wohl eine Diskrepanz in der Doku zu sein.MC 22 23 a2 93 3e e6 48 22
deob 22 01 81 31 ad d8 ae 6a <- passt über alle 8 Bytes und alle 10 Zeilen
B0 XOR B7 = 0x40 | cnt
cnt B0 B7
f 37 78
e 30 7e
d 39 74
- (c b a 9 nicht dekodiert)
8 22 6a
7 0f 48
6 08 4e
- (5 4 nicht dekodiert)
3 13 50
2 14 56
1 1d 5c
0 1a 5a
Zitat von: elektron-bbs am 02 Juni 2026, 21:23:38Welche Firmware-Version läuft auf dem SIGNALesp?
2026.06.02 18:14:54.285 4: SIGNALesp: Read, msg READredu: MS;P1=-303;P2=701;P3=298;P4=-713;P5=-7444;D=352121212121342121342121342134343434213434213434213421342121343434252121212121342121342121342134343434213434213434213421342121343434;CP=3;SP=5;R=65;O;m2;
2026.06.02 18:14:54.387 4: SIGNALesp: Read, msg READredu: MS;P1=-303;P2=704;P3=298;P4=-707;P5=-7455;D=3521212121213421213421213421343434342134342134342134213421213434342521212121213421213421213421343434342134342134342134213421213434343;CP=3;SP=5;R=65;
2026.06.02 18:15:16.574 4: SIGNALesp: Read, msg READredu: MS;P3=-307;P4=694;P5=299;P6=-707;P7=-7478;D=574343434343564343564343564356565656435656435656435643435643564343474343434343564343564343564356565656435656435656435643435643564343;CP=5;SP=7;R=49;O;m2;
2026.06.02 18:15:16.582 4: SIGNALesp: Read, msg READredu: MU;P3=-308;P4=692;P5=298;P6=-712;P7=-7478;D=5743434343435643435643435643565656564356564356564356434356435643434;CP=5;R=49;
2026.06.02 18:15:16.590 4: SIGNALesp: Parse_MU, Fingerprint for MU protocol id 20.1 -> RCnoName20 matches, trying to demodulate
2026.06.02 18:15:16.591 4: SIGNALesp: Parse_MU, Decoded matched MU protocol id 20.1 dmsg P20#FB68496B length 32 dispatch(1/4) RSSI = -49.5
2026.06.02 18:15:16.592 4: SIGNALesp: SD_UT protocol 20, bitData 11111011011010000100100101101011, hlen 8
2026.06.02 18:15:16.593 1: SIGNALesp: SD_UT_Parse UNDEFINED sensor RCnoName20_15 detected, protocol 20, data FB68496B, code FB684
defmod CleverTanken HTTPMOD https://www.clever-tanken.de/tankstelle_liste?spritsorte=7&r=5&lat=48.5&lon=11.9&sort=p 0
attr CleverTanken comment Debuggen geht indem du deinen clever-tanken Link öffnest, \
Quelltext anzeigen lässt und diesen dann in das Textfeld auf https://regex101.com kopierst. \
Das RegEx kommt in die Eingabezeile ganz oben und rechts siehst du das Ergebnis.\
spritsorte=7\
1 = Autogas\
2 = LKW-Diesel\
3 = Diesel\
4 = Bioethanol\
5 = SuperE10\
6 = SuperPlus\
7 = SuperE5\
8 = Erdgas
attr CleverTanken enableControlSet 1
attr CleverTanken reading01DeleteIfUnmatched 1
attr CleverTanken reading01Name Tankstellenname
attr CleverTanken reading01RegOpt g
attr CleverTanken reading01Regex <span class=\"fuel-station-location-name\">(.*)<\/span>
attr CleverTanken reading02DeleteIfUnmatched 1
attr CleverTanken reading02Name Preis
attr CleverTanken reading02RegOpt g
attr CleverTanken reading02Regex <div class=\"price-text price text-color-ct-blue\">(?>\s*)(\d.*)<sup>
attr CleverTanken reading03DeleteIfUnmatched 1
attr CleverTanken reading03Name Strasse
attr CleverTanken reading03RegOpt g
attr CleverTanken reading03Regex <div class=\"fuel-station-location-street\">(.*)<\/div>
attr CleverTanken reading04DeleteIfUnmatched 1
attr CleverTanken reading04Name Ort
attr CleverTanken reading04RegOpt g
attr CleverTanken reading04Regex <div class=\"fuel-station-location-city\">(.*)<\/div>
attr CleverTanken reading05DeleteIfUnmatched 1
attr CleverTanken reading05Name Entfernung
attr CleverTanken reading05RegOpt g
attr CleverTanken reading05Regex <div class=\"fuel-station-location-distance d-flex justify-content-end\">(?>\s*)<span>(\d.\d)
attr CleverTanken timeout 2
attr CleverTanken verbose 2