[Gelöst] HTTPMOD liest bei Clever-Tanken nur 0 aus

Begonnen von Marko1976, 31 Mai 2026, 17:43:52

Vorheriges Thema - Nächstes Thema

DeeSPe

Zitat von: Marko1976 am 02 Juni 2026, 12:52:24Ich habe nur wiedergegeben was die KI eventuell als Fehler identifiziert hat.

Meine KI (Kopf-Intelligenz) hat nur wiedergegeben was bei mir funktioniert.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Prof. Dr. Peter Henning

Zitat von: Marko1976 am 02 Juni 2026, 12:52:24Ich habe nur wiedergegeben was die KI eventuell als Fehler identifiziert hat.
"Die KI" ist in diesem Fall ein Sprachmodell ohne Verständnis für Fehler.

Kann also gar nicht sein.

pah (NI = Natürliche Intelligenz)

Marko1976

Zitat von: Prof. Dr. Peter Henning am 02 Juni 2026, 19:44:18"Die KI" ist in diesem Fall ein Sprachmodell ohne Verständnis für Fehler.
Wieder einmal Schwachsinn, denn wir reden nicht von Alexa und Co.
Die KI ist eine Datenbank mit milliarden von Eingaben programmiert und sucht lediglich aus all diesen Informationen die passensde Lösung heraus. Von selbstdenkenden KI's sind wir gottseidank noch Jahre entfernt.
Darum kann eine KI auch nicht selbstständig lernen sondern nur angelernt werden. Der Begriff KI hat also rein gar nichts mit Sprachassistent zutun.
Meine Güte sowas nennt sich Professor und macht hier auf Oberlehrer.

Jamo

Hier mal eine Referenz mit Tankstellen im Umkreis von latitude/longitude.
Vielleicht hilft.
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
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee2MQTT, Conbee III, FB7690, Signal, Alexa (fhem-lazy), Geotracking, LaCrosse JeeLink, LoRaWan (TTN / Chirpstack), Sonos, ESPresence, HomeAssistant via MQTT, Meshtastic

RalfRog

Nachtrag zu deiner Einlassung oben, dass du Diesel-1,-2 erwartest.
Siehe CommandRef:
Attribut "reading[xy]RegOpt g" ist dann bei mehrfachem Auftreten von reading[xy]Name nötig.
FHEM VM Debian13 (trixie) auf Proxmox VE9  (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

Marko1976

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    3
Wie 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.

Nachdem ich das readingsMaxAge und das readingMaxAgeReplacementMode gelöscht hatte ging es wieder Problemlos. Alle anderen Änderungen sind wahrscheinlich nicht nötig, erhöhen aber den Schutz vor einer Boterkennung.