[gelöst] Frage zu HTTPMOD

Begonnen von MarkoP, 24 August 2020, 08:42:38

Vorheriges Thema - Nächstes Thema

MarkoP

Hallo, ich habe ein Problem mit dem HTTPMOD-Modul.

Ich versuche per HTTPMOD die Spritpreise abzurufen, doch leider schaffe ich es nicht, dass der Code der Webseite eingelesen wird.
Ich habe einem Beispiel auf www.haus-automation.com folgend ein Device für unsere benachbarte JET-Tankstelle erstellt, indem ich "define jet HTTPMOD https://www.clever-tanken.de/tankstelle_details/101012 900" benutzt habe Doch leider wird der Quelltext der Webseite nicht im "Buf" angezeigt. Somit funktionieren auch die UserReadings nicht.

Hat jemand eine Idee wo der Fehlerteufel sich versteckt hat?
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8

yersinia

Warum so kompliziert? Es gibt bereits ein Template für clever-tanken ;) -> https://forum.fhem.de/index.php/topic,110257.msg1042954.html#msg1042954

Es gibt sogar einen Wiki-Artikel und ansonsten hat das Forum einige Threads zu diesem Thema, wie zB
https://forum.fhem.de/index.php/topic,99939.msg979341.html#msg979341
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

betateilchen

Zitat von: MarkoP am 24 August 2020, 08:42:38
Hat jemand eine Idee wo der Fehlerteufel sich versteckt hat?

Ja, Du hast die falsche Quelle für Dein Beispiel gewählt

Zitat von: MarkoP am 24 August 2020, 08:42:38
Ich habe einem Beispiel auf www.haus-automation.com folgend

Wenn Du das in FHEM einrichten willst - warum verwendest Du dann nicht die Dokumentation und die zahlreich vorhandenen (aktuellen!) Beispiele aus FHEM?


defmod beispiel_jet HTTPMOD http://www.clever-tanken.de/tankstelle_details/101012 600
attr beispiel_jet userattr reading01Name reading01Regex reading02Name reading02Regex
attr beispiel_jet enableControlSet 1
attr beispiel_jet reading01Name Diesel
attr beispiel_jet reading01Regex "current-price-1">(\d.\d{2})
attr beispiel_jet reading02Name Super
attr beispiel_jet reading02Regex "current-price-2">(\d.\d{2})
attr beispiel_jet timeout 5
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: yersinia am 24 August 2020, 09:11:50
Warum so kompliziert? Es gibt bereits ein Template für clever-tanken ;) -

templates sind gut und schön, man sollte sie aber erst einsetzen, wenn man verstanden hat, was da passiert. Und zum Verständnis gehört auch zu erkennen, warum etwas NICHT funktioniert.

Das mit der Erkenntnis des Nicht-Funktionierens ist hier im Thread aber nicht möglich, dafür hat der Fragesteller viel zu wenig sinnvolle Informationen geliefert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MarkoP

@betateilchen
Leider ist nicht zu ersehen welche Quelle aktuell und welche nicht aktuell ist.
Für Anfänger ist so eine Videoanleitung von www.haus-automation.com wesendlich einfach nachvollziehbar als die teilweise sehr kuriosen Codesnipsel hier im Forum oder im Wiki.

Zum Thema, das einzige was auf www.haus-automation zu deinem Code anders ist, ist das "enablecontrolset" und die Readingsnamen (Diese dürften aber doch keinen Unterschied ausmachen).
Leider bringt dein Code genauso wenig Erfolg wie der von haus-automation. Es wird einfach kein Quelltext der Webseite zurückgegeben.

Was Informationen angeht, leider bin ich aktuell auf der Arbeit und habe nur beschränkten Zugriff zum Fhem-Server über mein Handy.
Außerdem ist es immer die Frage welche Informationen gebraucht werden. Das zu erraten ist immer sehr schwierig. Aber wenn du mir schreibst was du brauchst, versuche ich es dir bei erst bester Gelegenheit zu liefern.

Was die Templates angeht, gebe ich dir Recht. Wenn man die Templates nicht versteht bringen Sie einem nur bedingt einen Nutzen.
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8

Otto123

#5
Zitat von: MarkoP am 24 August 2020, 09:54:56
Außerdem ist es immer die Frage welche Informationen gebraucht werden. Das zu erraten ist immer sehr schwierig. Aber wenn du mir schreibst was du brauchst, versuche ich es dir bei erst bester Gelegenheit zu liefern.
Du bist ja nicht ganz neu und diesen Beitrag kennst Du doch? https://forum.fhem.de/index.php/topic,71806.0.html
Du musst nicht viel raten, mit einem list device anzufangen ist nie verkehrt. Für einen kurzen Zeitraum verbose 5 einstellen und ins Log schauen auch nicht :)

Und das Beispiel von betateilchen funktioniert auf Anhieb (bzw. nach einem zweiten reread oder 10 min warten):
Internals:
   BUSY       0
   CFGFN     
   DEF        http://www.clever-tanken.de/tankstelle_details/101012 600
   FUUID      5f4375f6-f33f-457b-5b0d-c53fd8f628c1e4ba
   Interval   600
   LASTSEND   1598256715.93133
   MainURL    http://www.clever-tanken.de/tankstelle_details/101012
   ModuleVersion 3.5.22 - 7.2.2020
   NAME       beispiel_jet
   NOTIFYDEV  global
   NR         723
   NTFY_ORDER 50-beispiel_jet
   STATE      ???
   TRIGGERTIME 1598257232.22262
   TRIGGERTIME_FMT 2020-08-24 10:20:32
   TYPE       HTTPMOD
   addr       https://www.clever-tanken.de:443
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl https://www.clever-tanken.de/tankstelle_details/101012
   header     Cookie: csrftoken=kA6zzbAIT7hFvAApJMQxCVc2Jzn5dbgPk2YSB7Rhk1MraVPlYbFEJIeeeHsLgNXM
   host       www.clever-tanken.de
   httpheader HTTP/1.1 200 OK
Date: Mon, 24 Aug 2020 08:11:56 GMT
Server: Apache/2.4.18 (Ubuntu)
Vary: Cookie,Accept-Encoding
Content-Encoding: gzip
Content-Length: 24271
Content-Type: text/html; charset=utf-8
Set-Cookie: csrftoken=kA6zzbAIT7hFvAApJMQxCVc2Jzn5dbgPk2YSB7Rhk1MraVPlYbFEJIeeeHsLgNXM; expires=Mon, 23-Aug-2021 08:11:56 GMT; Max-Age=31449600; Path=/
Connection: close
   httpversion 1.0
   hu_blocking 0
   hu_filecount 4
   hu_port    443
   hu_portSfx
   ignoreredirects 1
   loglevel   4
   path       /tankstelle_details/101012
   protocol   https
   redirects  0
   timeout    5
   url        https://www.clever-tanken.de/tankstelle_details/101012
   value      0
   CompiledRegexes:
   HTTPCookieHash:
     csrftoken;:
       Name       csrftoken
       Options    expires=Mon, 23-Aug-2021 08:11:56 GMT; Max-Age=31449600; Path=/
       Path       
       Value      kA6zzbAIT7hFvAApJMQxCVc2Jzn5dbgPk2YSB7Rhk1MraVPlYbFEJIeeeHsLgNXM
   QUEUE:
   READINGS:
     2020-08-24 10:11:56   Diesel          1.05
     2020-08-24 10:11:56   Super           1.23
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        https://www.clever-tanken.de/tankstelle_details/101012
     value      0
   defptr:
     readingBase:
       Diesel     reading
       Super      reading
     readingNum:
       Diesel     01
       Super      02
     readingOutdated:
     requestReadings:
       update:
         Diesel     reading 01
         Super      reading 02
   sslargs:
Attributes:
   enableControlSet 1
   reading01Name Diesel
   reading01Regex "current-price-1">(\d.\d{2})
   reading02Name Super
   reading02Regex "current-price-2">(\d.\d{2})
   timeout    5
   userattr   reading01Name reading01Regex reading02Name reading02Regex


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MarkoP

Leider funktioniert sein Beispiel eben nicht, sonst hätte ich das ja nicht geschrieben.

Habe extra ein zweites neues Device exakt nach seinem Code erstellt mit exakt gleichem Ergebnis.
es wird kein Quelltext ausgegeben. Somit sind alle readings nutzlos, da sie nichts haben worauf sie sich beziehen könnten.

Der Fehler liegt schon bei der Rückgabe des Quellcodes der Webseite.

List folgt:
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8

MarkoP

Hier ein List des neuen Device nach betateilchens Code:
Internals:
   BUSY       1
   CFGFN     
   DEF        https://www.clever-tanken.de/tankstelle_details/101012 600
   FUUID      5f43747e-f33f-b8b5-fec7-5cabc188353dd4c5
   Interval   600
   LASTSEND   1598256856.94442
   MainURL    https://www.clever-tanken.de/tankstelle_details/101012
   ModuleVersion 3.5.22 - 7.2.2020
   NAME       Jet_Tankstelle
   NOTIFYDEV  global
   NR         430
   NTFY_ORDER 50-Jet_Tankstelle
   STATE      ???
   TRIGGERTIME 1598257456.94386
   TRIGGERTIME_FMT 2020-08-24 10:24:16
   TYPE       HTTPMOD
   addr       https://www.clever-tanken.de:443
   auth       0
   compress   1
   data       
   displayurl https://www.clever-tanken.de/tankstelle_details/101012
   header     
   host       www.clever-tanken.de
   httpversion 1.0
   hu_blocking 0
   hu_port    443
   hu_portSfx
   ignoreredirects 1
   loglevel   4
   path       /tankstelle_details/101012
   protocol   https
   redirects  0
   timeout    5
   url        https://www.clever-tanken.de/tankstelle_details/101012
   value      0
   CompiledRegexes:
   QUEUE:
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        https://www.clever-tanken.de/tankstelle_details/101012
     value      0
   sslargs:
Attributes:
   enableControlSet 1
   group      Spritpreise
   reading01Name Diesel
   reading01Regex "current-price-1">(\d.\d{2})
   room       95_Draussen
   timeout    5
   userattr   reading01Name reading01Regex reading02Name reading02Regex
   verbose    5
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8

MarkoP

Unterschiede zwischen den Lists:

Busy ist bei mir auf 1 statt auf 0 bei dir
die Mainurl ist https statt http, genau wie in der def
buf, code und conn gibt es gar nicht
header ist bei mir leer

Das fällt mir sofort auf, sicher gibt es auch noch andere Unterschiede.
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8

betateilchen

#9
Zitat von: MarkoP am 24 August 2020, 10:18:44
Leider funktioniert sein Beispiel eben nicht, sonst hätte ich das ja nicht geschrieben.

Mein Beispiel funktioniert einwandfrei. Zumindest bei Otto und mir.

Wenn das bei Dir nicht funktioniert, hat das andere Ursachen. Um die zu erforschen, solltest Du das Logfile beobachten und ggf. mal den Loglevel entsprechend höher einstellen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MarkoP

Wenn ich schreibe dein Beispiel funktioniert nicht, dann meine ich selbstverständlich bei mir nicht.
Sorry, aber ich hätte nicht gedacht, dass man sowas in einem Tech-Forum extra hinzuschreiben muss.
Es ist doch logisch, dass die Aussage einzig auf meinen Anwendungsfall beschränkt ist. Wie sollte ich denn eine Aussage treffen können, ob der code bei irgendjemand anderem funktioniert oder nicht.

Natürlich hat das "andere" Ursachen, deshalb habe ich ja hier nach Hilfe gesucht.
Die Frage ist halt welches die Ursache ist.
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8

betateilchen

Du bist nicht sehr kooperativ gegenüber den Leuten, die hier versuchen, Dir zu helfen.
Ohne qualifizierte Informationen kann man kaum was schreiben, das Dir weiterhilft.

Hilfreich wäre z.B. ein Logauszug, wenn Du versuchst, die Daten abzurufen.

Sorry, aber ich hätte nicht gedacht, dass man sowas in einem Tech-Forum jemandem, der Hilfe sucht, extra aus der Nase ziehen muss.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MarkoP

Ich bin also nicht kooperativ? Sorry, aber soviel Ironie habe ich gar nicht um das zu verkraften.

Ich habe geschrieben, dass ich alles liefere was gefordert wird, das nur nicht sofort kann, da nur beschränkter Zugriff vorhanden ist. Trotzdem diesem beschränkten Zugriff habe ich das List eingestellt, obwohl ich es mühsam an einem winzigen Handyscreen erzeugen und kopieren musste. Und du behauptest ich sei nicht kooperativ? Mal ehrlich, was erwartest du? Danke, Amen, Ja bitte lieber Gott?

Statt dessen schaffst du es nicht mal so logisch zu überlegen, dass sich eine gemachte Aussage auf meine Person bezieht und nicht auf die Allgemeinheit.
Ich bin sicher nicht der einfachste Mensch auf der Welt, aber ich erwarte - genau wie es von mir erwartet wird - etwas logisches denken, keine Vorwürfe und keine Beleidigungen.
Wenn das zu viel für dich ist, tut es mir leid.

Und ja, ich suche Hilfe, aber nicht zu jedem Preis.
Also überleg noch mal genau was du schreibst und was nicht, denn nicht ich bin es der hier gegen die Höflichkeitsregeln verstößt.
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8

betateilchen

ich geh mal Popcorn holen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MarkoP

Mach das, dann schaffst du wenigstens etwas sinnvolles heute. Wenn's schon mit der Logik nicht funktioniert.
Fhem-Server läuft per Bridge mit eigener IP auf einem Docker-Container auf meinem NAS. Alle Geräte haben eine statische IP im Netzwerk und laufen im gleichen Subnetzwerk. DHCP ist deaktiviert. DNS läuft über den Router (Fritzbox Cable), alternative über Googles 8.8.8.8