Frage / Problem mit GetSite()

Bugreports und Updatewünsche an die Firma contronics
Keine allgemeinen Fragen!

Moderator: Co-Administratoren

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Frage / Problem mit GetSite()

Beitrag von Mister2 » 09.11.2013, 20:16

Hallo,

ich möchte per GetSite die Daten einer Webseite auslesen.
Leider kommt als Rückmeldung in der Variablen, bzw. in der gespeicherten Datei immer nur "ERROR Host not found".
Wenn ich die URL per Webbrowser aufrufe funktioniert dies problemlos.

Code: Alles auswählen

Text := ""
GetSite("http://wxdata.weather.com/wxdata/weather/local/GMXX0087?cc=*&dayf=0&unit=m",80,Text)
SCHREIBEDATEI("Weather-com.txt",Text,2)
SCHLIESSEDATEIEN
Text := ""
Text ist eine Variable vom Typ = Zeichen

Jemand eine gute Idee?
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Frage / Problem mit GetSite()

Beitrag von buempi » 10.11.2013, 09:56

Hallo Mister2

Ich habe verschiedene Versuche gemacht (Ausführung auf dem PC). Auch die Variable "Text" umbenannt, weil das ja ein intern verwendetes Schlüsselwort sein könnte. Bei mir bleibt er immer im GetSite() hängen. Ein gleich nach dieser Zeile eingefügtes «Anzeige := "Makro abgelaufen"» wird nie angezeigt.

Im Browser oder mit WGET.EXE hingegen funktioniert die URL einwandfrei. - Ich verschiebe den Thread deshalb in die Bugs.

Viele Grüsse
Bümpi

PS: Während ich diesen Beitrag schrieb, lief das Makro noch im Hintergrund. Als ich "zurückkehrte", war die Datei plötzlich da!! Ein erneuter Test mit folgendem Makro:

Code: Alles auswählen

Anzeige := Uhrzeit
Text := ""
GetSite("http://wxdata.weather.com/wxdata/weather/local/GMXX0087?cc=*&dayf=0&unit=m",80,Text)
Anzeige := Anzeige + " / " + Uhrzeit
SCHREIBEDATEI("Weather-com.txt",Text,2)
SCHLIESSEDATEIEN
Text := ""
ergab eine Ausführungsdauer von 8 Minuten und 20 Sekunden! - Dann war auch die Datei (mit dem vollständigen Inhalt) auf der Festplatte!

Wird die URL im Browser oder mit WGET aufgerufen, kommt die Antwort in 0,1 Sekunden! - Auch sonst ist GetSite() ja sehr langsam. Vielleicht hilft das Beispiel ja Herrn Krapoth, die Ursache dafür zu eruieren.

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Re: Frage / Problem mit GetSite()

Beitrag von Mister2 » 25.11.2013, 19:03

Hallo buempi,

ich hatte Herrn Krapoth wegen dem Problem per E-Mail angeschrieben und eben die Antwort bekommen.
Das „http//:“ gehört da nicht hin (siehe Hilfetxte).

Die Abfrage wird durchgeführt mit GET HTTP/1.1

Üblicherweise wird eine solche Anfrage von einem Webserver beantwortet, es kann aber vereinzelt Server geben, die einfache http/1.1-Anfragen nicht bearbeiten.

Testen Sie einfach mal mit:
GetSite("www.contronics-software.de/cgi-bin/FreigabeCL.cgi", 80, Text)

Ich hoffe mit diesen Hinweisen können Sie das Problem lösen.
Allerdings geht es bei mir ohne http:// genauso wenig.
GetSite("wxdata.weather.com/wxdata/weather/local/GMXX0087?cc=*&dayf=0&unit=m",80,Text) liefert nur ein "ERROR Host not found"

Auch die von Herrn Krapoth genannte Abfrage von GetSite("www.contronics-software.de/cgi-bin/FreigabeCL.cgi", 80, Text) liefert bei mir nur ein "ERROR Host not found".

Muss ich bei der CCU noch was umstellen (DNS-Server, Firewall, ...) damit die Verbindung zum Host klappt?
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Re: Frage / Problem mit GetSite()

Beitrag von Mister2 » 25.11.2013, 21:13

Die Fehlermeldung "ERROR Host not found" kam daher das in den Netzwerkeinstellungen der CCU keine DNS-Server eingetragen waren.
Nachdem ich diese eingetragen hatte und die CCU einmal neu gebootet wurde, war dieses Problem weg.

Allerdings dauert die Abfrage mit GetSite der wxdata.weather.com/wxdata/weather/local/GMXX0087?cc=*&dayf=0&unit=m immer noch ca. 8 Minuten obwohl die Seite nur ca. 3 KB hat.

Die von Herrn Krapoth genannte URL http://www.contronics-software.de/cgi-b ... gabeCL.cgi benötigt nur ca. 10 Sekunden und ist auch nicht viel kleiner.
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Frage / Problem mit GetSite()

Beitrag von buempi » 26.11.2013, 04:57

Mister2 hat geschrieben:Allerdings dauert die Abfrage mit GetSite der wxdata [...] immer noch ca. 8 Minuten obwohl die Seite nur ca. 3 KB hat.
... das deckt sich ziemlich genau mit der von mir gemessenen Zeitdauer! Bei mit hat übrigens das "http://.." nicht gestört.
Mister2 hat geschrieben:Die von Herrn Krapoth genannte URL http://www.contronics-software.de/cgi-b ... gabeCL.cgi benötigt nur ca. 10 Sekunden und ist auch nicht viel kleiner.
... auch das ist noch zu viel! - Unterrichte doch bitte Herrn Krapoth über das Ergebnis. Vielleicht lässt sich ja so die Ursache finden?

Viele Grüsse
Bümpi

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Re: Frage / Problem mit GetSite()

Beitrag von Mister2 » 26.11.2013, 21:19

Hallo Bümpi,

Mail an Herrn Krapoth ist soeben raus:
Hallo Herr Krapoth,

es ging nicht darum das der Server die http/1.1-Anfragen nicht bearbeitet sondern darum das der Abruf des Quelltextes der Seite mit GetSite extrem lange dauert.

Ich habe es auch mal mit dem von Ihnen genannten GetSite("www.contronics-software.de/cgi-bin/FreigabeCL.cgi", 80, Text) getestet.
Der Quelltext der Seite hat 1 KB Größe und wird im Browser innerhalb von 1 Sekunde angezeigt.
Bei der Abfrage mit GetSite dauert es 18 Sekunden bis die Daten da sind.

Bei der von mir genannten Seite GetSite("wxdata.weather.com/wxdata/weather/local/GMXX0087?cc=*&dayf=0&unit=m",80,Text) ist es noch viel extremer.
Der Quelltext der Seite hat 3 KB Größe und wird im Browser innerhalb von 1 Sekunde angezeigt.
Bei der Abfrage mit GetSite dauert es über 8 Minuten bis die Daten da sind.

Ich habe mir erlaubt mal die Zeit mit zu protokollieren bis die Daten von der jeweiligen Seite da sind.
Die erste Uhrzeit ist die vor dem Aufruf von GetSite und die zweite Uhrzeit die nachdem das Makro das GetSite abgearbeitet hat.

18:00:00 / 18:08:22 / weather.com
18:08:22 / 18:08:39 / "FreigabeCL.cgi"
18:30:00 / 18:38:22 / weather.com
18:38:22 / 18:38:39 / "FreigabeCL.cgi"
19:00:00 / 19:08:22 / weather.com
19:08:22 / 19:08:39 / "FreigabeCL.cgi"
19:30:00 / 19:38:23 / weather.com
19:38:23 / 19:38:42 / "FreigabeCL.cgi"

Wie Sie sehen sind es für Ihre Seite ca. 17 Sekunden und für die von mir genannte Seite über 8 Minuten.

Auch andere User im Forum http://homematic-forum.de schildern diese Probleme mit dem GetSite und der langen Zeit bis die Rückantwort vorliegt.
Daher die Bitte an Sie dies ggf. noch einmal näher zu prüfen.

PS:
Ob man die URL beim GetSite mit oder ohne http:// aufruft macht keinen Unterschied. Die Anfrage wird vom Server in beiden Fällen beantwortet und auch die Antwortzeit ist gleich.
Für meine oben genannten Tests habe ich es allerdings wie von Ihnen genannt ohne http:// laufen gelassen.

Mit freundlichen Grüßen
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Re: Frage / Problem mit GetSite()

Beitrag von Mister2 » 27.11.2013, 18:45

Hallo Bümpi,

hier die Antwort von Herrn Krapoth:
Sorry, ich lag falsch das „http“ wird in der aktuellen Version bei Bedarf schon vom Programm entfernt.

Die Anweisung GETSITE verbindet sich mit einem Server und holt die angegebene Webseite des Servers, ohne diese zu parsen.
Das Ende der Übertragung wird also nicht aus Headerdaten oder dem Inhalt der Seite, sondern durch das Schliessen der Netzwerkverbindung durch den Server erkannt.
Das passiert üblicherweise einige Sekunden nachdem der Server seine Daten übertragen hat, daher dauert eine GETSITE-Abfrage auch immer länger als bei einem Browser oder bei WGET welche die empfangenen Daten parsen und so die Nutzdaten und deren Ende erkennen. Das erkennen Sie daran, dass bei diesen Programmen der Header gar nicht ausgegeben wird. Die einfache Anweisung WGET ist übrigens ein Programm mit einer Grösse von über 300kB, also fast so gross wie die komplette ExecEngine.

Üblicherweise schliessen Webserver die Verbindung einige Sekunden nachdem die normale html-Seite übermittelt wurde, bei der fraglichen Seite steht jedoch im Header nicht wie üblich „Connection:close“ sondern:
…..
Connection: keep-alive
…...

Der Webserver lässt die Verbindung also anscheinend und schliesst diese erst nach einem Timeout von mehreren Minuten statt Sekunden.
Eine Kommunikation mit Webservern die das Parsen von Inhalten und alle Protokollmöglichkeiten berücksichtigt ist im Rahmen der ExecEngine und der Anweisung GETSITE leider nicht möglich, dazu wäre ein komplettes und relativ aufwändiges Programm erforderlich.

Tut mir leid da keine besseren Nachrichten zu haben.
Auf anderem Wege das Ende der Übertragung zu erkennen ist nicht so einfach, da die Längen-Angabe in Content-Length oftmals unterschiedlich oder falsch ist.
Wir werden für künftige Updates überlegen als zusätzlichen Parameter beim Aufruf evtl. noch eine maximale Länge für die Empfangsdaten mitzugeben, nach der die ExecEngine die Verbindung von sich aus beendet und nicht wartet bis der Server das macht.

Ich hoffe diese Infos helfen erstmal weiter.
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Frage / Problem mit GetSite()

Beitrag von buempi » 27.11.2013, 19:05

Hallo Mister2

Danke für die Informationen. - Es zeigt sich, dass für den Aussenstehenden oft ganz einfach zu lösen scheinende Probleme viel komplexer sein können, als es auf den ersten Blick den Anschein macht!

Die Idee von Herr Krapoth, eine Maximallänge der Empfangsdaten mitzugeben, erscheint mir aber nicht optimal. Man möchte ja am Schluss die ganze Seite haben und müsste so immer etwas Reserve dazurechnen. Und dann wartet die Funktion wieder endlos auf die paar vermeintlich fehlenden Bytes. Wenn aber eine maximale Wartedauer angegeben werden könnte, würde das wohl in den meisten Fällen zum Ziel führen. Wenn z.B. bei deinem Link nach 3 Sekunden nicht alles da ist, kommt's in absehbarer Zeit überhaupt nicht mehr...

Viele Grüsse
Bümpi

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Re: Frage / Problem mit GetSite()

Beitrag von Mister2 » 27.11.2013, 20:28

Das mit der Maximaldauer die man einstellen kann, bzw. beim GetSite als Parameter mitgeben kann würde ich auch besser finden.

Momentan ist die Funktion GetSite somit für mich nicht wirklich zu gebrauchen.
Mir fallen derzeit nur Verwendungsmöglichkeiten ein bei denen die Gegenstelle die Daten meist als XML zurückliefern und dort ist aber nie ein normaler Header mit "Connection:close" vorhanden.

Und bei normalen Internetseiten ist der Quelltext durch Java-Script, Formatierungen, ... meist so groß das dann die CCU ruck-zuck schlapp macht, bzw. das Risiko groß ist die max. Größe der Variablen zu überschreiten.
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 35 Mal

Re: Frage / Problem mit GetSite()

Beitrag von Familienvater » 27.11.2013, 22:19

Moin,

dann muss man halt in den sauren Apfel beißen, und sich ein wenig mit linux beschäftigen, wenn es nur darum geht, ein paar Werte aus der HTML-Ausgabe rauszugreppen, dann kann man das auch mit einem Shell-Skript machen, was den wget macht, ein bisschen rumgreppt, und die gegreppten Werte entsprechend formatiert in eine Datei schreibt, die man mit HPCL und lesewertedatei wiederum einlesen kann. Schon ist man Probleme mit max. 64k (oder waren es doch 128k) Seitenlänge in HPCL los, und wget oder curl scheinen dafür ja auch besser zu funktionieren.

Das einzige, was mit lesewertedatei wieder zu Krumpel führt, wenn die einzulesende Zeile länger als 1024 Byte (wurde in einem der letzten Releases von 256 Byte auf 1024 erhöht) ist, dann wird der Rest der Zeile abgeschnitten. Also eine ganze Seite bekommt an so auch nicht nach HPCL.

Just my 2 cents,

der Familienvater

Antworten

Zurück zu „homeputer CL - Bugs & Updatewünsche“