HTTPMOD erzeugt kein "buf"

Begonnen von T3mplate, 20 März 2017, 00:28:59

Vorheriges Thema - Nächstes Thema

T3mplate

Nachdem ich mehrere Themen mittels copy and paste und dem HTTPMOD Modul realisiert habe, wollte ich mich heute am ersten eigenen versuchen und scheitere direkt am Start.

Abrufen möchte ich diese Seite:
http://stadtplan.dresden.de/(S(amwqgeycotb5opqbwdtc3fup))/project/cardo3Apps/IDU_DDStadtplan/abfall/detailpage.aspx?POS-ADR=Winterbergstraße%7C6

Bisher scheitere ich bereits an der Gerätedefinition:
define httpmod HTTPMOD http://stadtplan.dresden.de/(S(amwqgeycotb5opqbwdtc3fup))/project/cardo3Apps/IDU_DDStadtplan/abfall/detailpage.aspx?POS-ADR=Winterbergstraße%7C 60

Mir legt es zwar das Device an, aber "buf" füllt sich nicht. Im log erscheint:
2017.03.20 00:20:29 3: httpmod: Read response to update didn't match any Reading

Ich weis, dass ich noch keine Readings angelegt habe. In der commandref sind diese aber auch optional gekennzeichnet und ich deute das so, dass es auch erstmal ohne gehen müsste.
Das ich die Readings zum auslesen brauche ist mir bewusst. Erstmal soll aber überhaupt etwas im Device erscheinen.


viegener

Nun gut, wenn Du keine Readings angelegt hast, ist die Meldung ja korrekt und heisst, dass zumindest daten von dem Url abgerufen wurden.

Mit buf meinst Du vermutlich das Internal buf, dass ein interner Puffer der HTTPUtils-Funktionen ist und nicht von HTTPMod direkt erstellt wird. Ich bin auch nicht sicher, ob sich das immer finden wird. 

Wenn Du den Inhalt der HTML-Werte sehen willst, kannst Du ein Reading für die ganze HTTP-Rückgabe angeben --> z.B: mit (.*)
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

T3mplate

Ok. Ich dachte das dieser Puffer immer angelegt wird.
Wie genau kann ich diese vollständige Rückgabe absetzen?
So?
attr httpmod reading01Name test
attr httpmod reading01Regex .*


Leider funktioniert das nicht.

Torben80

#3
@Viegener:
Genau das ist auch gerade mein Problem,... Deshalb hatte ich ja auch schon den Screenshot gemacht.

Ich habe ein "reading01Name" angelegt und ein "reading01Regex"...
Die einziege Sache wo etwas drin steht bei mir ist:

httpheader          HTTP/1.0 200 OK Date: Mon Mar 20 14:33:19 2017 Server: GoAhead-Webs Last-modified: Thu Nov 18 09:40:55 2010 Content-length: 6383 Content-type: text/html

Schon komisch, aber dann bin ich wenigstens nicht alleine hier ;-)

Aber das hier habe ich gerade gefunden, ist auch von Viegener...:

Folgendes anlegen:

reading01Regex ^(.*)$
reading01RegOpt s


Dann legt er ein Unnamed Reading an, da steht schon mal mehr drin als das, was ich bisher geschafft habe ;-)

T3mplate

ZitatFolgendes anlegen:

reading01Regex ^(.*)$
Reading01RegOpt s


Dann legt er ein Unnamed Reading an, da steht schon mal mehr drin als das, was ich bisher geschafft habe ;-)

Das unnamed kann man ja leicht mit
reading01Name Test beheben.

Ich werde es dann gleich mal testen.

Torben80

#5
Ja, das ist richtig...
Geht mir auch nicht um den Namen. Fakt ist: so kommt man auf jeden Fall schon mal etwas weiter...
Aber trotzdem hätte ich das gerne im buf.
Bei mir kommt leider beim Lesen des Strings mit der RegOpt s Methode eine Fehlermeldung. Wenn ich das attr reading01RegOpt s lösche, dann steht im Reading aber der String drin (html-Inhalt)...

ACHTUNG ich habe mein CODE-Schnippsel oben editiert,... da war das "reading01RegOpt s" leider groß geschrieben "Reading01RegOpt s", was ja falsch ist ;-)

viegener

Zitat von: Torben80 am 20 März 2017, 16:17:51
Ja, das ist richtig...
Geht mir auch nicht um den Namen. Fakt ist: so kommt man auf jeden Fall schon mal etwas weiter...
Aber trotzdem hätte ich das gerne im buf.
Bei mir kommt leider beim Lesen des Strings mit der RegOpt s Methode eine Fehlermeldung. Wenn ich das attr reading01RegOpt s lösche, dann steht im Reading aber der String drin (html-Inhalt)...

ACHTUNG ich habe mein CODE-Schnippsel oben editiert,... da war das "reading01RegOpt s" leider groß geschrieben "Reading01RegOpt s", was ja falsch ist ;-)


Welche Fehlermeldung kommt den mit der Option s?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: T3mplate am 20 März 2017, 14:31:21
Ok. Ich dachte das dieser Puffer immer angelegt wird.
Wie genau kann ich diese vollständige Rückgabe absetzen?
So?
attr httpmod reading01Name test
attr httpmod reading01Regex .*


Leider funktioniert das nicht.

Da das hier ja so eine Art Tutorial zu werden scheint (nun ja vielleicht ein grosses Wort für die paar Hinweise), füge ich noch einen an:

grundsätzlich muss in Regex mindestens ein geklammerter Ausdruck () enthalten sein, weil nur der Teil in der Klammer in das Reading übernommen wird.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Torben80

Wenn ich das "attr reading01RegOpt s" setze, und meine HTTPMOD Intervallzeit abläuft (10 sek), dann kommt der Fehler aus Screenshot 1.
Schön zu sehen ist, dass er den HTML-Quellcode sauber als HTML darstellen will ;-)

Wenn ich dann OK klicke und schnell das "attr reading01RegOpt s" lösche, zeigt er danach den Quelltext und es kommt keine weitere Fehlermeldung, was ja auch klar ist.

Jetzt bin ich wieder bei der Frage, warum bekomme ich das nicht in den Buffer?

gruß Torben

viegener

@Torben80: Die Fehlermeldung hat aber eigentlich nichts mit dem Modul HTTPMod oder dem RegOpt zu tun, denn die kommt daher, dass FHEMWeb die Readings dynamisch aktualisiert und dabei den Inhalt als HTML interpretiert. Völlig andere Baustelle...

Das RegOpt ist dafür gedacht, dass ein mehrzeiliges HTML vom Regexp als ein String behandelt wird und nicht in mehrer Readings aufgeteilt wird

Die Frage zum Buffer verstehe ich nicht - in welchen buffer möchstest Du das bekommen und warum?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Torben80

#10
@Viegener:
Das mit RegOpt s hab ich verstanden. Das habe ich, ob du es glaubst oder nicht, tatsächlich alles recherchiert.
Lässt mir ja auch keine Ruhe...

Der Buffer den ich meine, ist der, der zum Beispiel beim Spritpreismonitor genutzt wird.
Warum will ich den nutzen? Damit ich sehe was an HTML-Code "rein" kommt, um diesen dann besser mittels RegEx weiter zu verarbeiten.

Bei mir ist der immer leer. (In den INTERNALS meist zwischen addr und code)

Weißt du was ich meine?


EDIT:
ICH HABS!
Ich habe gerade mal mit CURL experimentiert und nun habe ich das was ich brauche im internen buf. Nun gehts ans Testen mit RegEx :-(

Gruß Torben

Gesendet von iPhone mit Tapatalk

viegener

@Torben80: Ich vermute Du meinst mit Buffer wiederum das Internal "buf"? Ich weiss nicht wofür der im SpritPreisMonitor genutzt wird. Es gibt bestimmte Bedingungen unter denen HTTPUtils diesen "buf" füllt unter anderen Bedingungen wird er geleert oder gar nicht verwendet. Mit anderen Worten ich kenne keine Möglichkeit das über HTTPMOD zu erzwingen.

Ich drehe mich im Kreis...

Frage: Warum reicht ein Reading in dem der gesamte Content enthalten ist nicht? Dieser sollte doch dann genau Deine Anforderung erfüllen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Torben80

@Viegener
Hatte gerade meine voriges Posting editiert.
Ich habe nun zwei Fliegen mit einer Klappe geschlagen.

1. Internal buf befüllt, und...
2. Es steht genau das drin, was (ACHTUNG nun gehts um mein AlarmanlagenProjekt) was ich wissen will.

z.B.
forms : { pcondform1 : { mode : "1", f_arm : "0" }, pcondform2 : { mode : "4", f_arm : "0" }
Wobei das 1 für Anlage scharf steht.

Um deine Frage zu beantworten, du hast natürlich recht! Ein Reading hätte den gleichen Inhalt.
Ich habe mich aber anfangs am SpritPreisMonitor-Tutorial festgebissen, deshalb wollte ich das immer im Internal buf haben.
Ich weiss allerdings den unterschied nicht, zwischen Internal buf und Reading. Werde mich dahingehend aber schlau machen.
Tut mir leid, dass du dich so mit mir rumquälen musst :-)
Ich hoffe du bist nicht böse und schätze es sehr, dass von dir noch Fragen und Tips kommen anstelle von "RTFM"-Aussagen. Jeder hat mal klein angefangen, nicht wahr?

T3mplate

Zitat von: viegener am 21 März 2017, 09:15:12
@Torben80: Ich vermute Du meinst mit Buffer wiederum das Internal "buf"? Ich weiss nicht wofür der im SpritPreisMonitor genutzt wird. Es gibt bestimmte Bedingungen unter denen HTTPUtils diesen "buf" füllt unter anderen Bedingungen wird er geleert oder gar nicht verwendet. Mit anderen Worten ich kenne keine Möglichkeit das über HTTPMOD zu erzwingen.

Ich drehe mich im Kreis...

Frage: Warum reicht ein Reading in dem der gesamte Content enthalten ist nicht? Dieser sollte doch dann genau Deine Anforderung erfüllen

Mir ging es wir Torben. Ich habe mich auch an der Umsetzung des SpritPreisMonitors festgehalten.
Um deine Frage zu beantworten: Es ist vollkommen ausreichend, wenn das in einem reading erscheint.
Wenn ich aber gemäß deiner Anleitung:
attr httpmod reading03Name alles
attr httpmod reading03Regex (.*)

verwende, dann erscheint als Ergebnis nur "HTTP/1.1 200 OK". Ich deute also, dass er nicht über die erste Zeile hinausgeht.

T3mplate

Zitat von: Torben80 am 20 März 2017, 23:08:42
EDIT:
ICH HABS!
Ich habe gerade mal mit CURL experimentiert und nun habe ich das was ich brauche im internen buf. Nun gehts ans Testen mit RegEx :-(

Kannst du auch erklären wie es geht?
Ich habe jetzt zwar meine Regex fertig, aber noch immer keinen buf :(