ZitatRaspberry Pi Zero W Rev 1.1 (=eine CPU)Das hat mir gefehlt, damit konnte ich das Problem nachstellen.
ZitatKönnte es vielleicht am delete($defs{$name})/delete($attr{$name}); in FW_Read liegen, wird damit diese Verbindung "gelöscht" und somit für FW_closeInactiveClients verborgen?Das ist Absicht, "plotEmbed=2" Verbindungen werden nach der Berechnung beendet, und muessen nicht extra geprueft werden.
Zitat von: dieter114 am 01 Juni 2026, 17:08:50Den anderen Fehler mit dem Boot werde ich nicht nochmal versuchen....
Zitat von: dieter114 am 01 Juni 2026, 17:08:50Der attr Forecast ctrlUserExitFn Fehler ist noch da.Hast du die ";;\" im o.g. Code auch im Perl-Code so eingetragen ?
Zitat von: RalfRog am 01 Juni 2026, 11:28:07Bist du sicher, dass nur immer mal wieder 0 in deinen Readings steht?Ursprünglich hatte alles funktioniert, dann kam immer mal wieder ein 0-Wert zurück, letzte Woche war es dann so schlimm, dass 3 Tage am Stück nur 0 ausgegeben wurde.
Zitat von: RalfRog am 01 Juni 2026, 11:28:07Von den 16 definierten (HTTPMOD) Readings ist aus meiner Sicht kein Einziges im list - lediglich deine UserreadingsKeine Ahnung wie das kommt, das muss mit dem Fehler zu tun haben. Hier mal ein List eines zur Zeit funktionierenden Device bei dem die Readings eindeutig zu sehen sind (das einzige was anders ist ist die Tankstellennummer):
Internals:
BUSY 0
DEF https://www.clever-tanken.de/tankstelle_details/26021 600
FUUID 69d76460-f33f-7706-165d-443273b731930e6d
FVERSION 98_HTTPMOD.pm:0.291590/2024-09-23
Interval 600
MainURL https://www.clever-tanken.de/tankstelle_details/26021
ModuleVersion 4.2.0 - 11.8.2023
NAME Tankstelle_AC_SB_UebacherWeg
NOTIFYDEV global
NR 590
NTFY_ORDER 50-Tankstelle_AC_SB_UebacherWeg
STATE Super E5: 1.89 € * Super E10: 1.83 € * Super Plus: 1.98 € * Diesel: 1.81 €
TYPE HTTPMOD
eventCount 4936
value
CompiledRegexes:
HTTPCookieHash:
csrftoken;:
Name csrftoken
Options expires=Mon, 31 May 2027 16:57:27 GMT; Max-Age=31449600; Path=/; SameSite=Lax
Path
Value moIMqYSDDODsoKQm1kbsDsiXQ9XsUopo
HttpUtils:
NAME
addr https://www.clever-tanken.de:443
auth 0
code 200
compress 1
conn
data
displayurl https://www.clever-tanken.de/tankstelle_details/26021
header Cookie: csrftoken=moIMqYSDDODsoKQm1kbsDsiXQ9XsUopo
host www.clever-tanken.de
httpheader HTTP/1.1 200 OK
Date: Mon, 01 Jun 2026 16:57:27 GMT
Server: Apache/2.4.52 (Ubuntu)
Vary: Cookie,Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Set-Cookie: csrftoken=moIMqYSDDODsoKQm1kbsDsiXQ9XsUopo; expires=Mon, 31 May 2027 16:57:27 GMT; Max-Age=31449600; Path=/; SameSite=Lax
X-Correlation-Uid: ah25951EIT5UmeGiBjmttQAAAGA
Connection: close
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
ignoreredirects 1
loglevel 4
path /tankstelle_details/26021
protocol https
redirects 0
timeout 10
url https://www.clever-tanken.de/tankstelle_details/26021
sslargs:
QUEUE:
READINGS:
2026-06-01 18:37:26 Bioethanol_avg 0
2026-06-01 18:37:26 Bioethanol_complete 0
2026-06-01 18:37:26 Bioethanol_old -
2026-06-01 18:37:26 CNG_avg 0
2026-06-01 18:37:26 CNG_complete 0
2026-06-01 18:37:26 CNG_old -
2026-06-01 18:57:26 Diesel-1 1.80
2026-06-01 18:57:26 Diesel-2 9
2026-06-01 18:57:26 Diesel_avg 1.91
2026-06-01 18:57:26 Diesel_complete 1.809
2026-06-01 18:57:26 Diesel_old 1.80
2026-06-01 18:37:26 LNG_avg 0
2026-06-01 18:37:26 LNG_complete 0
2026-06-01 18:37:26 LNG_old -
2026-06-01 18:57:26 LPG_avg 1.07
2026-06-01 18:37:26 LPG_complete 0
2026-06-01 18:37:26 LPG_old -
2026-06-01 18:57:26 Name SB
2026-06-01 18:57:26 Ort Alsdorf
2026-06-01 18:57:26 PLZ 52477
2026-06-01 18:57:26 Strasse Übacher Weg 174
2026-06-01 18:57:26 SuperE10-1 1.82
2026-06-01 18:57:26 SuperE10-2 9
2026-06-01 18:57:26 SuperE10_avg 1.91
2026-06-01 18:57:26 SuperE10_complete 1.829
2026-06-01 18:57:26 SuperE10_old 1.82
2026-06-01 18:57:26 SuperE5-1 1.88
2026-06-01 18:57:26 SuperE5-2 9
2026-06-01 18:37:26 SuperE5_avg 1.21
2026-06-01 18:57:26 SuperE5_complete 1.889
2026-06-01 18:57:26 SuperE5_old 1.88
2026-06-01 18:57:26 SuperPlus-1 1.97
2026-06-01 18:57:26 SuperPlus-2 9
2026-06-01 18:37:26 SuperPlus_avg 1.06
2026-06-01 18:57:26 SuperPlus_complete 1.979
2026-06-01 18:57:26 SuperPlus_old 1.97
2026-06-01 18:37:26 Wasserstoff_avg 0
2026-06-01 18:37:26 Wasserstoff_complete 0
2026-06-01 18:37:26 Wasserstoff_old -
2026-06-01 18:57:26 last_update 01.06.2026 18:55
2026-06-01 18:57:26 open_days-1 Samstag
2026-06-01 18:57:26 open_days-2 Sonntag
2026-06-01 18:57:26 open_days-3 Mo-Fr
2026-06-01 18:57:26 open_hours-1 7:00-22:00
2026-06-01 18:57:26 open_hours-2 7:00-22:00
2026-06-01 18:57:26 open_hours-3 7:00-22:00
REQUEST:
context reading
data
header
ignoreredirects 0
num unknown
retryCount 0
type update
url https://www.clever-tanken.de/tankstelle_details/26021
defptr:
readingBase:
Diesel-1 reading
Diesel-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
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
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
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 SB Tankstelle in Alsdorf (Übacher Weg)
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>
reading08Expr { ($val < 1) ? ReadingsVal($name,"Diesel-1",0) : $val }
reading08Name Diesel
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>
reading09Expr { ($val < 1) ? ReadingsVal($name,"SuperE10-1",0) : $val }
reading09Name SuperE10
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>
reading10Expr { ($val < 1) ? ReadingsVal($name,"SuperE5-1",0) : $val }
reading10Name SuperE5
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>
reading11Expr { ($val < 1) ? ReadingsVal($name,"SuperPlus-1",0) : $val }
reading11Name SuperPlus
reading11Regex <div[^>]*class="price-type-name"[^>]*>SuperPlus<\/div>[\s\S]*?<span[^>]*id="current-price-\d+"[^>]*>([\d.]+)<\/span>[\s\S]*?<sup[^>]*id="suffix-price-\d+"[^>]*>(\d+)<\/sup>
reading12Expr { ($val < 1) ? ReadingsVal($name,"LPG-1",0) : $val }
reading12Name LPG
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>
reading13Expr { ($val < 1) ? ReadingsVal($name,"LNG-1",0) : $val }
reading13Name LNG
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>
reading14Expr { ($val < 1) ? ReadingsVal($name,"CNG-1",0) : $val }
reading14Name CNG
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>
reading15Expr { ($val < 1) ? ReadingsVal($name,"Bioethanol-1",0) : $val }
reading15Name Bioethanol
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>
reading16Expr { ($val < 1) ? ReadingsVal($name,"Wasserstoff-1",0) : $val }
reading16Name Wasserstoff
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") },
verbose 0Wie man erkennt sollte Diesel-1 der Hauptpreis und Diesel-2 das Suffix, also die 0,9 Cent sein. Das war bei allen Devices so vorhanden. Das die Readings jetzt nicht mehr da sind fällt mir jetzt erst auf.Zitat von: Otto123 am 01 Juni 2026, 12:20:01es gibt da für HTTPMOD ein paar attrTemplate vielleicht kann man die als Grundlage nehmen und dann das Device anpassenDie Devices haben ja alle funktioniert, daher möchte ich ungern jetzt irgendwelche Templates drüberbügeln.
Zitat von: Otto123 am 01 Juni 2026, 12:20:01Ich sehe zumindest kein Reading mit dem Namen "Diesel-1". Damit wird ReadingsVal($name,"Diesel-1",0) immer null ergeben, wobei dann auch wieder die Verwendung von ReadingsVal() fragwürdig ist - siehe ReadingsNum()Siehe dazu meine Ausführungen weiter oben. Das mit Val und Num ist ein Fakt, hat aber mit Val eigentlich funktioniert und wie man anderem anderen List sieht tut es das ja auch jetzt noch. Wenn ich manuell ein Rerad anstoße funktioniert es manchmal für kurze Zeit und geht dann wieder auf 0. Hatte schon einen Block der Webseite in Verdacht, doch eine Änderung des Intervalls brachte keine Änderung.
Zitat von: Otto123 am 01 Juni 2026, 13:12:34Die regEx im Device des TE sehen (gegenüber der Vorlage, die bei mir gut funktioniert) ziemlich komplex aus, da würde es mich nicht wundern, wenn Fehler beim Auslesen bei Seitenlayoutänderungen passieren.Die Regex stammt ursprüngich aus einem der Templates und wurde von mir angepasst, da ich differenzierte Werte haben wollte. Das Template liefert zb. den Suffix nicht einzeln. Für eine Durchschnittsberechnung darf diese meiner Meinung nach aber nicht im Preis enthalten sein. Die angepasste Regex habe ich bei der Entwicklung stetig mit Regex101.com geprüft wo sie auch funktioniert hat. Das andere oben angefügte List zeigt ja auch, dass es grundsätzlich tut was es soll. Warum bei diesen 0-Werten dann die Readings nicht richtig ausgelesen werden verstehe ich im Moment auch nicht. Aber ich glaube kaum, das Clever-Tanken einige Seiten einer Layoutänderung unterzogen hat und andere nicht.
27948 0.20 * min (2.0, $slope_penalty) + # echte Dynamikdrift
28452 # - API-/Sensorfehler
(ein Bemerkung kann keine Fehler erzeugen)28455 ################################################################
(auch hier kann kein Fehler entstehen)27948 delete @{$data{$name}{neuralnet}{$fanntyp}}{@drift_kpis};
Da ist keine Division sichtbar28452 # MAE, RMSE, RMSErel, MAPE, MdAPE, Median, AbsErrors-Liste, Fehler‑Bias
28455 ###########################################################################
CFGFN
CID zigbee_0x8c73dafffecf1824
DEF zigbee_0x8c73dafffecf1824
FUUID 6a1d8b2d-f33f-3579-1c2b-a029f8a5904b86db
IODev myBroker
LASTInputDev MQTT2_client
MQTT2_client_MSGCNT 8
MQTT2_client_TIME 2026-06-01 15:58:25
MSGCNT 12
NAME MQTT2_zigbee_0x8c73dafffecf1824
NR 1047
STATE Motion: presence
TYPE MQTT2_DEVICE
eventCount 18
myBroker_CONN myBroker_127.0.0.1_33744
myBroker_MSGCNT 4
myBroker_TIME 2026-06-01 15:48:37
READINGS:
2026-06-01 15:37:49 IODev myBroker
2026-06-01 15:46:28 associatedWith MQTT2_zigbee_bridge
2026-06-01 15:40:31 attrTemplateVersion 20230111
2026-06-01 15:45:55 illumination bright
2026-06-01 15:43:15 linkquality 117
2026-06-01 15:45:55 occupancy true
2026-06-01 15:58:25 set_approach_distance near
2026-06-01 15:57:53 set_motion_sensitivity low
2026-06-01 15:58:25 state distance
2026-06-01 15:45:55 update_installed_version 4102
2026-06-01 15:38:58 update_latest_source https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/images/Sonoff/snzb-06p_v1.0.5.ota
2026-06-01 15:45:55 update_latest_version 4102
2026-06-01 15:45:55 update_state idle
Attributes:
alias SNZB-06P_Sonoff
devStateIcon Motion..true:people_sensor Motion..false:motion_detector
devicetopic zigbee2mqtt/0x8c73dafffecf1824
icon people_sensor
model zigbee2mqtt_human_body_presence_detector
readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
zigbee2mqtt/0x8c73dafffecf1824/set:.* { json2nameValue($EVENT, 'set_', $JSONMAP) }
room Zigbee
setList mode:undirected,left_right $DEVICETOPIC/set {"monitoring_mode":"$EVTPART1"}
distance:far,medium,near $DEVICETOPIC/set {"approach_distance":"$EVTPART1"}
sensitivity:low,medium,high $DEVICETOPIC/set {"motion_sensitivity":"$EVTPART1"}
stateFormat Motion: presence
Versuch? Ich erkenne keinen Zusammenhang mit dem Inhalt des Templates Get prices for a single gas station.
Define a HTTPMOD device like
defmod DEVICE HTTPMOD http://www.clever-tanken.de/tankstelle_details/29092 1800
Change station ID to your needs
Source: Forum
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex readingOExpr
attr DEVICE enableControlSet 1
attr DEVICE reading01Name Diesel
attr DEVICE reading01Regex
Diesel
[\S\s\r\n]*?(\d.\d{2}[\S\s\r\n]*?[\d]+)
attr DEVICE reading02Name SuperE10
attr DEVICE reading02Regex
Super E10
[\S\s\r\n]*?(\d.\d{2}[\S\s\r\n]*?[\d]+)
attr DEVICE reading03Name SuperE5
attr DEVICE reading03Regex
Super E5
[\S\s\r\n]*?(\d.\d{2}[\S\s\r\n]*?[\d]+)
attr DEVICE readingOExpr $val =~ s/<[\d\D]+>//;;$val
attr DEVICE stateFormat E5: SuperE5 € / E10: SuperE10 € / D: Diesel €
attr DEVICE timeout 10
attr DEVICE verbose 2
attr DEVICE room WHICHROOM
attr DEVICE model clever_tanken_single_station
setreading DEVICE attrTemplateVersion 20201129Zumal ja eben genau die notwendigen Readings fehlen? Insofern nochmal auf Anfang? 
Zitat von: Otto123 am 01 Juni 2026, 12:20:01es gibt da für HTTPMOD ein paar attrTemplate vielleicht kann man die als Grundlage nehmen und dann das Device anpassen.
Attributes:
alias ARAL in Karken (Roermonder Str.)
...
model clever_tanken_single_station