[gelöst] Bitte um Hilfe bei HTTPMOD: HVO 100 Preis von Homepage einer Tankstelle

Begonnen von Gisbert, 26 Juni 2024, 18:53:22

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo zusammen,

ich bin auf der Suche, wie ich den Preis von HVO 100 auslesen kann. Mittlerweile ist eine Tankstelle von Hoyer in Dormagen bei clever-tanken.de eingepflegt - nur ist es leider so, dass der Preis vom Betreiber nicht beim Bundeskartellamt gemeldet wird, so dass er sich nur sporadisch dann ändert, wenn ein User den aktuellen Preis bei clever-tanken.de meldet.

Hoyer hat eine Webseite, bei der der aktuelle Preis eingesehen werden kann. Damit ist es prinzipiell möglich den Preis für "HVO 100" per HTTPMOD auszulesen. Da die Seite aber anders aufgebaut ist, greift die Definition bei clever-tanken.de zum Auslesen nicht.

Könnte sich jemand diese Seite: https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2|48/ freundlicherweise anschauen und mir sagen, wie die Regex aussehen muss, um den Preis von "HVO 100" auszulesen? Vor Jahren hatte ich mich ansatzweise mit dieser Materie beschäftigt, aber mittlerweile ist auch das weg.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Gisbert

Hallo zusammen,

da sich bisher niemand gemeldet hat, ist dies ein Versuch, Aufmerksamkeit zu erreichen.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

betateilchen

Zitat von: Gisbert am 28 Juni 2024, 09:18:42ist dies ein Versuch, Aufmerksamkeit zu erreichen.

sowas nervt... ok, negative Aufmerksamkeit ist immerhin auch Aufmerksamkeit.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DeeSPe

Zitat von: betateilchen am 28 Juni 2024, 09:52:02sowas nervt... ok, negative Aufmerksamkeit ist immerhin auch Aufmerksamkeit.

Darüber dass es jemanden "nervt" bin ich mehr erstaunt als dass man noch mal einen kleinen "Aufmerksamkeits"-Post absetzt. Nicht jeder sieht jeden Tag alles was hier im Forum abgeht...
Ob der Post schon nach 1,5 Tagen nötig gewesen wäre, ist auch für mich fraglich.

Aber helfen möchte man (zumindest ich) gern, wenn es denn geht.
Ich habe leider im Moment keinen Zugriff auf ein FHEM System um Dir (Gisbert) eine fertige Lösung anbieten zu können, dafür fehlt mir auch das spezielle Wissen um HTTPMOD.

Probier mal folgendes:
readingXXRegex HVO.100<.h.*css-125p0aq.ev2ns5r2..(\d\.<span>\d\d<.*css-1k8r6qu ev2ns5r1..\d)
readingOExpr $val =~ s/(\d.)<span>(\d+)<[\d\D]+>(\d)/$1$2$3/;;$val

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

Gisbert

Hallo Dan,

ich versuche immer sachlich und hoffentlich auch freundlich Anfragen zu stellen. In diesem Fall hatte ich mich zunächst an einen bestehenden Thread zum generellen Thema HTTPMOD drangehängt und meine Frage gestellt. Nachdem ich gewartet hatte (Zeit weiß ich nicht mehr genau, es waren vermutlich einige Tage), und keine Antwort bekommen habe, kam mir der Gedanke, dass es vielleicht unklug ist in einem allgemeinen Thema zu HTTPMOD meine spezielle Frage zu stellen. Deshalb habe ich einen neuen Thread geöffnet und die Beiträge im anderen Thread gelöscht, um Doppel-Posts und Konfusion zu vermeiden.
Dass es tatsächlich erst 1.5 Tage her sind, dass ich meine Anfrage gestellt hatte, hab ich im Nachhinein auch bemerkt - ich werde also für die Zukunft länger warten und auf eine Antwort hoffen.

Zum Thema:
Wenn ich das "innere HTML" in regex101.com kopiere:
<h5 class="css-rkiwex ev2ns5r3">HVO.100</h5><h5 class="css-125p0aq.ev2ns5r2">1.<span>87</span><span class="css-1k8r6qu ev2ns5r1">9</span></h5><span class="css-ot4ncn ev2ns5r0">28.06.2024
    11:24 Uhr</span>
und mit dieser Regex abfrage:
HVO.100<.h.*css-125p0aq.ev2ns5r2..(\d\.<span>\d\d<.*css-1k8r6qu ev2ns5r1..\d)erhalte ich als Group 1:
1.<span>87</span><span class="css-1k8r6qu ev2ns5r1">9Edit (s. unten): Damit sind schon mal alle Informationen vorhanden, aber das Attribut getxxOExpr liefert kein Ergebnis.

Mit verbose 5 erhalte ich dagegen folgende Einträge, wenn ich eine Anfrage starte (reread):
2024.06.28 12:55:25.631 5: Premiumdiesel: ExtractReading Hoyer_Automatenstation_Dormagen with regex /(?^:HVO.100<.h.*css-125p0aq.ev2ns5r2..(\d\.<span>\d\d<.*css-1k8r6qu ev2ns5r1..\d))/...
2024.06.28 12:55:25.632 5: Premiumdiesel: ExtractReading Hoyer_Automatenstation_Dormagen did not match
2024.06.28 12:55:25.632 4: Premiumdiesel: Read response to get04 didn't match any Reading

Viele Grüße Gisbert

Edit:
Das Attribut getxxOExpr würde das richtige Ergebnis liefern, wenn die Abfrage richtig funktionieren würde:
{my $val = '1.<span>87</span><span class="css-1k8r6qu ev2ns5r1">9';; $val =~ s/(\d.)<span>(\d+)<[\d\D]+>(\d)/$1$2$3/;;$val}liefert: 1.879
Demnach ist die Abfrage noch nicht in Ordnung, getxxOExpr schon.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Gisbert

Hallo zusammen,

diesmal als Ergänzung zum vorherigen Beitrag (ich wollte das Editieren nicht überstrapazieren).

Log-Auszug mit verbose 4:
2024.06.28 16:18:35.300 4: kill_HVO_100: GetUpdate called (reread)
2024.06.28 16:18:35.302 4: kill_HVO_100: HandleSendQueue sends update with timeout 10 to https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/, No Data, No Header
2024.06.28 16:18:36.361 4: kill_HVO_100: Read callback: request type was update retry 0,
header: HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 237337
Connection: close
Last-Modified: Fri, 28 Jun 2024 04:49:42 GMT
Server: AmazonS3
Date: Fri, 28 Jun 2024 14:18:36 GMT
Cache-Control: public, max-age=0, must-revalidate
ETag: "2853683fd1d315e62cd8cfd72e9c7fe5"
Vary: Accept-Encoding
X-Cache: RefreshHit from cloudfront
Via: 1.1 c80ae6bd97b709ed6e4747f0d5ea4efc.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P3
X-Amz-Cf-Id: ftUM7TM_-T1wuS_7pgjB3Dz3wBL526WWe5VgBAnAKCAbQ4vK2qeSKQ==, body length 237337
2024.06.28 16:18:36.362 4: kill_HVO_100: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2024.06.28 16:18:36.363 4: kill_HVO_100: checking for redirects, code=200, ignore=0
2024.06.28 16:18:36.363 4: kill_HVO_100: no redirects to handle
2024.06.28 16:18:36.364 4: kill_HVO_100: Read response to update didn't match any Reading

Device-Definition (als einzelne Abfrage, um den Vorgang lesbar zu halten):
defmod kill_HVO_100 HTTPMOD https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/ 600
attr kill_HVO_100 enableControlSet 1
attr kill_HVO_100 enableCookies 1
attr kill_HVO_100 group Dieselpreise
attr kill_HVO_100 icon fuel
attr kill_HVO_100 model clever_tanken_single_station
attr kill_HVO_100 reading01Name HVO100
attr kill_HVO_100 reading01OExpr $val =~ s/(\d.)<span>(\d+)<[\d\D]+>(\d)/$1$2$3/;;;; $val
attr kill_HVO_100 reading01Regex HVO.100<.h.*css-125p0aq.ev2ns5r2..(\d\.<span>\d\d<.*css-1k8r6qu ev2ns5r1..\d)
attr kill_HVO_100 room Strassenverkehr
attr kill_HVO_100 stateFormat HVO100
attr kill_HVO_100 timeout 10
attr kill_HVO_100 verbose 4

Hier noch einvollständiges List:
define kill_HVO_100 HTTPMOD https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/ 600
attr kill_HVO_100 enableControlSet 1
attr kill_HVO_100 enableCookies 1
attr kill_HVO_100 group Dieselpreise
attr kill_HVO_100 icon fuel
attr kill_HVO_100 model clever_tanken_single_station
attr kill_HVO_100 reading01Name HVO100
attr kill_HVO_100 reading01OExpr $val =~ s/(\d.)<span>(\d+)<[\d\D]+>(\d)/$1$2$3/;;;; $val
attr kill_HVO_100 reading01Regex HVO.100<.h.*css-125p0aq.ev2ns5r2..(\d\.<span>\d\d<.*css-1k8r6qu ev2ns5r1..\d)
attr kill_HVO_100 room Strassenverkehr
attr kill_HVO_100 stateFormat HVO100
attr kill_HVO_100 timeout 10
attr kill_HVO_100 verbose 4
#   BUSY       0
#   CFGFN     
#   DEF        https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/ 600
#   FUUID      667eb87d-f33f-e986-6773-b8eab011228fe8a5
#   Interval   600
#   MainURL    https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/
#   ModuleVersion 4.2.0 - 11.8.2023
#   NAME       kill_HVO_100
#   NOTIFYDEV  global
#   NR         1456
#   NTFY_ORDER 50-kill_HVO_100
#   STATE      HVO100
#   TYPE       HTTPMOD
#   eventCount 15
#   value     
#   CompiledRegexes:
#   HttpUtils:
#     NAME      
#     addr       https://www.hoyer.de:443
#     auth       0
#     buf       
#     code       200
#     compress   1
#     conn      
#     data      
#     displayurl https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/
#     header    
#     host       www.hoyer.de
#     httpheader HTTP/1.1 200 OK
#Content-Type: text/html
#Content-Length: 237337
#Connection: close
#Last-Modified: Fri, 28 Jun 2024 04:49:42 GMT
#Server: AmazonS3
#Date: Fri, 28 Jun 2024 14:18:36 GMT
#Cache-Control: public, max-age=0, must-revalidate
#ETag: "2853683fd1d315e62cd8cfd72e9c7fe5"
#Vary: Accept-Encoding
#X-Cache: RefreshHit from cloudfront
#Via: 1.1 c80ae6bd97b709ed6e4747f0d5ea4efc.cloudfront.net (CloudFront)
#X-Amz-Cf-Pop: FRA60-P3
#X-Amz-Cf-Id: ftUM7TM_-T1wuS_7pgjB3Dz3wBL526WWe5VgBAnAKCAbQ4vK2qeSKQ==
#     httpversion 1.0
#     hu_blocking 0
#     hu_filecount 1
#     hu_port    443
#     hu_portSfx
#     ignoreredirects 1
#     loglevel   4
#     path       /tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/
#     protocol   https
#     redirects  0
#     timeout    10
#     url        https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/
#     sslargs:
#   QUEUE:
#   READINGS:
#     2024-06-28 15:53:44   attrTemplateVersion 20201129
#   REQUEST:
#     context    reading
#     data      
#     header    
#     ignoreredirects 0
#     num        unknown
#     retryCount 0
#     type       update
#     url        https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2%7C48/
#   helper:
#     bm:
#       CODE(0x56358473aa58):
#         cnt        50
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        28.06. 15:27:59
#         max        0.000174999237060547
#         tot        0.00428271293640137
#         mAr:
#           HASH(0x5635989c8850)
#           kill_HVO_100
#           ?
#       CODE(0x5635847bdc60):
#         cnt        219
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        28.06. 15:53:44
#         max        0.48801589012146
#         tot        0.614885091781616
#         mAr:
#           HASH(0x5635989c8850)
#           kill_HVO_100
#           attrTemplate
#           clever_tanken_single_station
#       CODE(0x5635848a69a8):
#         cnt        8
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        28.06. 15:38:02
#         max        0.0020749568939209
#-         tot        0.0159111022949219
#         mAr:
#           HASH(0x5635989c8850)
#           kill_HVO_100 HTTPMOD https://www.hoyer.de/tankstelle/hoyer-automatenstation-41540-dormagen-alte-heerstr-2|48/ 600
#       CODE(0x5635848a7960):
#         cnt        106
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        28.06. 15:53:44
#         max        6.00814819335938e-05
#         tot        0.00172209739685059
#         mAr:
#           HASH(0x5635989c8850)
#           HASH(0x56357ec54e20)
#       CODE(0x5635848a8dc8):
#         cnt        82
#         dmx        -1000
#         dtot       0
#         dtotcnt    0
#         mTS        28.06. 15:57:18
#         max        0.00847005844116211
#         tot        0.123710632324219
#         mAr:
#           set
#           kill_HVO_100
#           verbose
#           4
#   lastpoll:
#     Hoyer_Automatenstation_Dormagen 1719582382.73628
#
setstate kill_HVO_100 HVO100
setstate kill_HVO_100 2024-06-28 15:53:44 attrTemplateVersion 20201129

Warum kein Treffer gefunden wird, ist mir ein Rätsel.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

DeeSPe

Hab es mir mal angesehen!
Die unter der URL geladene Webseite enthält keinen HTML Code. Dieser wird erst durch JavaScript erzeugt, hab keine Ahnung ob HTTPMOD das irgendwie per Attribut kann.

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

Gisbert

Hallo Dan,

vielen Dank für deine Antwort zu JavaScript und HTTPMOD. Dann muss ich mich wohl vom Ziel verabschieden, den Preis abfragen zu können.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

DeeSPe

Zitat von: Gisbert am 28 Juni 2024, 20:32:03Dann muss ich mich wohl vom Ziel verabschieden, den Preis abfragen zu können.

Ich weiß nicht ob das wirklich so ist!
Wie gesagt, evtl. gibt es dazu eine mögliche Konfiguration für HTTPMOD.

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

habl

ohne Gewähr:

defmod hoymod HTTPMOD https://api.hoyer.de/rest/gas-stations/48/prices/146
attr hoymod extractAllJSON 1

VG
  habl

betateilchen

Zitat von: DeeSPe am 28 Juni 2024, 11:00:28Ob der Post schon nach 1,5 Tagen nötig gewesen wäre, ist auch für mich fraglich.

Aber helfen möchte man (zumindest ich) gern, wenn es denn geht.
Ich habe leider im Moment keinen Zugriff auf ein FHEM System um Dir (Gisbert) eine fertige Lösung anbieten zu können

Darum ging es mir. Man möchte ja helfen, aber das Forum ist halt keine 24/7 Supportabteilung und manchmal muss man deshalb eben etwas mehr Geduld haben.

Im Moment bin ich seit Mittwoch nur mit ipad auf Reisen, und damit macht Quellcodeanalyse einfach keinen Spaß.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Gisbert

#11
Zitat von: habl am 29 Juni 2024, 08:52:52ohne Gewähr:

defmod hoymod HTTPMOD https://api.hoyer.de/rest/gas-stations/48/prices/146
attr hoymod extractAllJSON 1

VG
  habl

Hallo habe,

phänomenal, es funktioniert und die Preise sind mit denen auf der Homepage identisch.
Wie hast du diese Quelle ausfindig gemacht? Ich hatte deren Service per Email angeschrieben und nach einer Datenschnittstelle gefragt, dann aber nur den Link zu deren Homepage bekommen.

Da das meiste an Readings nicht gebraucht wird, hab ich es noch so eingeschränkt:
attr <device> extractAllJSONFilter preise_03_preisDas Reading preise_03_preis ist der Preis für HVO 100.

Kann man auch noch nach mehr als einem Ausdruck filtern? Die commandref sagt nur:
extractAllJSONFilter
is an optional regular expression that filters the readings to be created with extractAllJSON.

Vielen Dank und viele Grüße
Gisbert

Edit:
Wenn man es so einschränkt:
attr <device> extractAllJSONFilter preise_03_.*bekommt man alles was mit "preise_03_" anfängt - schon mal deutlich weniger, aber immer noch viel.

Edit2:
So geht es:
attr <device> extractAllJSONFilter preise_03_preis|preise_03_gueltig_datum|preise_03_gueltig_zeit|preise_03_kraftstoffe_name
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Christoph Morrison

Du findest sowas z.B. mit den Entwicklertools von Chrome. In diesem Fall hatte ich die API auch gefunden, aber keine Zeit zum Posten gehabt. Dazu habe ich die Seite aufgerufen, die Entwicklertools geöffnet, Fetch/XHR im Network-Tab ausgewählt und dann nach dem Preis gesucht. Da waren eh nur vier Items geladen und das letzte war's dann auch.

betateilchen

Wenn es schon eine api gibt, die json als Ergebnis liefert, wäre meine Empfehlung aber JsonMod anstatt HTTPMOD, dann kann man sich genau die Werte als reading erzeugen, die man wirklich haben möchte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Super, das ist mal wieder eine api, die nur per IPv4 erreichbar ist :-\
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!