[gelöst] Prüfung ob URL erreichbar ist

Begonnen von franky08, 30 September 2015, 09:36:37

Vorheriges Thema - Nächstes Thema

franky08

Hallo, wie oben schon im Thema geschrieben, suche ich nach einer Möglichkeit zu prüfen ob eine bestimmte url innerhalb eines timeout´s von 15 sec. erreichbar ist oder nicht. Leider habe ich bis jetzt im Netz oder meinen zwei Perl Handbüchern da nicht das Richtige gefunden oder vlt. nach den falschen Begriffen gesucht.
Hat da jemand einen Tip wo ich suchen könnte?

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

justme1968

#1
das kannst du nur prüfen in dem du die url abrufst. wenn es klappt schmeißt du die rückgabe weg, wenn es einen fehler gibt reagierst du.

in fhem geht das am sinnvollsten über ein at und eine routine die HttpUtils_NonblockingGet. presence im function mode (dann auch mit HttpUtils_BlockingGet ) wäre auch ein ansatz. dann kannst du auch den verbindungsaufbau im hintergrund machen. das schliesst noch ein paar blockierungsmöglichkeiten mehr aus.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Brockmann

Ich habe etwas in der Art mit dem HTTPMOD-Modul umgesetzt.

justme1968

das ist auch eine idee. aber ich glaube das dann noch ein watchdog oder ähnliches nötig ist wenn es eine gewisse zeit keine readings änderung ergeben hat weil httpmod nur im erfolgsfall etwas tut und fehler mehr oder weniger ignoriert.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

Danke Andre. Hintergrund ist, dass der Netzwerkcontroller ENC28J60 auf dem avr-net-io, trotz zusätzlichen Stützkondensatoren, ab und an hängt. Per Ping ist das Board noch erreichbar und das PRESENCE Modul liefert auch brav present zurück. Versucht man jedoch den Webserver des Boards zu erreichen, dauert das ewig und mitunter gibt es einen Timeout. Die Heizungssteuerung über das Board und einen nachgeschalteten DAC funktioniert zum Glück trotzdem weiter und es lassen sich auch neue Werte setzen nur eben der Webserver des AVR-IO-Boards ist nicht mehr erreichbar. Nach einem Reset (Netzteil kurz vom Netz) ist die Weboberfläche dann wieder da.
Das wollte ich auswerten und dann das Board kurz vom Netz trennen.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

#5
Habe jetzt gerade mal begonnen etwas mit HTTPMOD rumzuspielen, leider wird folgender Log ausgegeben:

2015.09.30 21:23:05 3: AVR_Status: Defined with URL 192.168.2.111 and interval 60
2015.09.30 21:23:07 3: AVR_Status: Read callback: request type was Update, no headers, buffer empty,
Error 192.168.2.111: malformed or unsupported URL
2015.09.30 21:24:07 3: AVR_Status: Read callback: request type was Update, no headers, buffer empty,
Error 192.168.2.111: malformed or unsupported URL


Laut commandref müsste die Def doch stimmen? Das Error 192.168.2.111: malformed or unsupported URL macht mich stutzig.
Warum wird die URL nicht unterstützt, das Format müsste doch auch stimmen, sehr viel kann ja in der DEF nicht angegeben werden.

P.S. Der Slash hat gefehlt  ;)

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

justme1968

hast du http:// mit angegeben ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

Habs schon gefunden, die volltändige url muss natürlich http://192.168.2.111/ sein.
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Brockmann

Zitat von: justme1968 am 30 September 2015, 10:03:43
das ist auch eine idee. aber ich glaube das dann noch ein watchdog oder ähnliches nötig ist wenn es eine gewisse zeit keine readings änderung ergeben hat weil httpmod nur im erfolgsfall etwas tut und fehler mehr oder weniger ignoriert.
Ja sicher. Ein einfaches DOIF überwacht, ob die Readings regelmäßig aktualisiert werden (also kein Timeout auftritt) und auch, ob ein bestimmter Inhalt in der Antwort enthalten ist (also keine Fehlerseite o. ä. kommt).

franky08

Habe jetzt mal versucht mit HTTPMOD etwas hin zubekommen, doch leider werde ich da nicht so ganz schlau draus. Einfach gesagt, ich weis nicht was ich da auswerten könnte. Habe mit http://192.168.2.111/adc.ht 60 versucht von der Weboberfläche der ADC channels Informationen zu bekommen, woraus man present/absent herleiten könnte, da komme ich aber nicht weiter.
Ein list vom device gibt:

Internals:
   BUSY       0
   CFGFN
   CHANGED
   DEF        http://192.168.2.111/adc.ht 60
   GetSeq     0
   HTTPHEADER
   Interval   60
   LASTSEND   1443719914.11635
   MainURL    http://192.168.2.111/adc.ht
   NAME       AVR_Status
   NR         10101
   STATE      ???
   TRIGGERTIME 1443719974.11506
   TRIGGERTIME_FMT 2015-10-01 19:19:34
   TYPE       HTTPMOD
   addr       http://192.168.2.111:80
   buf        HTTP/1.1 400 Bad Request
Connection: close
Content-Type: text/plain; charset=utf-8
Content-Length: 12

Bad Request

   conn
   data       1
   displayurl http://192.168.2.111/adc.ht
   header
   host       192.168.2.111
   httpheader
   hu_blocking 0
   hu_filecount 12
   ignoreredirects 0
   loglevel   4
   path       /adc.ht
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.2.111/adc.ht
   QUEUE:
   Readings:
   Request:
     data       1
     header
     ignoreredirects 0
     retryCount 0
     type       Update
     url        http://192.168.2.111/adc.ht
   Sslargs:
Attributes:
   DbLogExclude .*
   disable    0
   requestData.* 1
   room       Heizung
   userattr   disable requestData.*


Es fehlt mir hier ein weiterführenden Tip.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

justme1968

in Bus steht die seite die der web server zurück geliefert hat. das ist bei dir gerade 'HTTP/1.1 400 Bad Request' da stimmt also etwas noch nicht.

wie schaut die seite denn aus wenn du per browser oder wget abrufst?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

#11
Im Browser gibt ein http://192.168.2.111/adc.ht

Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

justme1968

dann versuch mal wget und schau ob vielleicht noch bestimmte header gesetzt werden müssen damit es geht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

Mit wget kann ich doch aber nur Dateien vom Server laden, wenn ich das richtig in Erinnerung habe. Und das macht es auch:
frank1@zotac:~$ wget http://192.168.2.111/adc.ht
--2015-10-01 21:32:45--  http://192.168.2.111/adc.ht
Verbindungsaufbau zu 192.168.2.111:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 624 [text/html]
In »»adc.ht.1«« speichern.

100%[================================================================================================================================================================>] 624         --.-K/s   in 0,008s 

2015-10-01 21:32:45 (71,9 KB/s) - »»adc.ht.1«« gespeichert [624/624]



VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

justme1968

das was du mit wget lädst ist genau das was ein browser unter der gleichen url ausgeliefert bekommt. das können genau so gut webseiten wie andere daten sein. wget ist sozusagen ein browser ohne gui. was steht in dem geladenen file?

wenn hier etwas richtigeres drin steht starte mal wget mit den debug und verbose optionen und schau dir an welche header gesetzt sind. die fehlen dann eventuell in der httpmod version.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968