Neue Version von HTTPMOD (mit get Kommando) zum Testen

Begonnen von StefanStrobel, 13 Februar 2015, 22:33:49

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo,

anbei eine neue Version von HTTPMOD zum Testen. Es wäre schön wenn ein paar Leute bestätigen könnten, dass alles funktioniert bevor ich es einchecke.

Neu ist die Möglichkeit Get-Befehle per Attribut zu definieren beziehungsweise weitere Readings von Geräten abzufragen, die dafür eine eigene URL oder spezielle Parameter benötigen oder die für jeden HTTP-Request nur einen Wert als Antwort liefern können.
Beispiel:


attr PM get01Name MyGetValue
attr PM get01URL http://MyDevice/directory/webgui?special=xy?sid=$sid
attr PM getHeader1 Content-Type: application/json
attr PM get01Data {"get" :{"30.1234.value"}}
attr PM get01Poll 1
attr PM get01PollDelay 300


Danach kann man mit

get Device MyGetValue

einen HTTP-Request auslösen, der dann mit den Reading-Namen und Regexes wie bisher in der früheren HTTPMOD-Version geparsed wird. Zusätzliche Namen / Regexes werden dort einfach hinzugefügt.
Bisher gab es eine Log-Meldung auf Level 3 wenn ein Reading nicht gematcht werden konnt. Das habe ich nun geändert, da bei zusätzlichen Reading/Regex Paaren für Gets nicht immer alle matchen können. Das Ändert jedoch nur das Log-Verhalten und nicht die eigentliche Funktion.

Mit get01Poll kann man dafür sorgen, dass das Reading ebenfalls zyklisch abgefragt wird und mit get01PollDelay bestimmt man, dass dies nicht bei jedem Zyklus erfolgt sondern erst wieder wenn mindestens die angegebene Anzahl Sekunden seit dem letzten Lesen dieses Readings vorüber ist.
Effektiv ist das angegebene PollDelay damit immer ein Vielfaches des Intervalls, das man beim Define angegeben hat. Es gibt keinen zusätzlichen internal timer sondern nur eine Prüfung und ggf. ein Überspringen der HTTP-Anfrage.

geringfügig geändert habe ich auch das Handling der Map-Attribute. Dort können Elemente jetzt auch Spaces enthalten. Getrennt wird am : und an Komma mit Space. Ein einzelnes Leerzeichen ist kein Trenner mehr (und war es zumondest in den Beispielen bisher auch nicht).

Gruss
   Stefan

Edit: alte angehängte Datei gelöscht.

Lanhydrock

#1
Hi Stefan,

mal abgesehen davon, dass hier seit einigen Stunden aus unerklärlichen Gründen die HttpUtils_NonBlockingGets keine Antworten mehr erhalten... ;-)

[EDIT: Fehler gefunden, es lag am neu aufgesetzten Mac mini, bei dem wir das selbstsignierte Zertifikat des Siemens Webservers noch nicht akzeptiert hatten - wer im Macumfeld weiss, wie man das für die Perl-Installation macht, bitte kurze PM - daher kam es zum SSL Fehler beim NonBlockingGet der HttpUtils - wir haben uns nun kurzerhand mit SSL_verify_mode => 'SSL_VERIFY_NONE' beholfen...]

VIELEN Dank für die Weiterentwicklung Deines tollen Moduls!

Eine Rückfrage:

Der Siemens Webserver ozw672 braucht (nach der Authentifizierung) je einen Request für einen bestimmten Parameter und liefert dann einen JSON, der immer verhältnismäßig ;-) gleich aufgebaut ist.

Leider aber nur verhältnismäßig, daher bräuchte ich eine Regex und einen Namen des (wirklich zugewiesenen) Readings *pro* GET, da ich das in den Reading[0-9]*Regex sonst nicht auseinander bekomme.

Man kann also anhand der JSON-Response nicht ableiten, welches Reading ankommt.
Man braucht dazu die Request-URL [EDIT: bzw. die Zuordnung von einem GetNum zu einer Regex bei der Zuweisung in das Reading].

Daher habe ich bei meinem Fork auch die Zuweisung in der Sub Read gemacht...

Hilfst Du mir mal kurz, ob ich da was übersehe, ob das mit Deinem Konzept momentan doch auch geht?

Danke sehr.

Bsp., aus dem das vllt deutlicher wird (Annahme: gültige Session ist vorhanden):

Request:
https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=d056ecd8-261e-4eb0-bd44-c8aef123eb34&Id=1960

Response:
{
"Data":
{

"Type": "Numeric",
"Value": "        4.5",
"Unit": "°C"

},
    "Result":
{
"Success": "true"
    }
}


Also brauchen wir:
attr mydevice Get01Regex Value": "([-.0-9 ]*)"
attr mydevice Get01Name tempAussen


Request:
https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=d056ecd8-261e-4eb0-bd44-c8aef123eb34&Id=1915

Response:
{
"Data":
{

"Type": "Numeric",
"Value": "       30.5",
"Unit": "°C"

},
    "Result":
{
"Success": "true"
    }
}


Also brauchen wir:
attr mydevice Get02Regex Value": "([-.0-9 ]*)"
attr mydevice Get02Name tempHeizkreisRuecklauf


Und leider auch:
Request:
https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=d056ecd8-261e-4eb0-bd44-c8aef123eb34&Id=1898

Response:
{
"Data":
{

"Type": "String",
"Value": "Aus",
"Unit": ""

},
    "Result":
{
"Success": "true"
    }
}


Also brauchen wir:
attr mydevice Get03Regex Value": "([a-zA-Zü ]*)"
attr mydevice Get03Name statusKessel
attr mydevice Get03Map 0:Aus/5:Nachlauf aktiv/10:Freigegeben für TWW/20:Freigegeben für HK/40:In Teillastbetrieb für TWW/50:In Teillastbetrieb für HK/90:In Betrieb für Trinkwasser/100:In Betrieb für Heizkreis
- FHEMs in VM @ Mac mini & RPi, fhem2fhem
- Homematic, 1wire, Hue & Lightify & Tradfri & Xiaomi & Oblo via zigbee2mqtt/Conbee II, Rademacher DuoFern, Roto i8 & Hunter Ventile via HM-LC-Sw4-DR
- Interdomo GBK (via Siemens ozw672; dank HTTPMOD, lest Post #33765)
- homebridge(-fhem), Grafana, DBLog

StefanStrobel

Hallo Marcus,

Ich verstehe das Problem mit dem Siemens Webserver. Bisher klappt das so noch nicht. Da muss ich dann doch noch ein get-spezifisches Regex Attribut und ein wenig Drum herum eingebauen. Sollte aber kein Problem sein.
Ich überlege auch ob der Get dann nicht auf die HTTP-Antwort warten und den Wert zurückgeben sollte. Evt. über ein Attribut gesteuert ...

Gruss
    Stefan

StefanStrobel

Hallo,

hier nochmal eine stark erweiterte Version.
Es gibt jetzt für jedes get die folgenden Attribute:

get[0-9]+Name
get[0-9]*URL
get[0-9]*Data.*
get[0-9]*Header.*
get[0-9]+Poll
get[0-9]+PollDelay
get[0-9]*Regex
get[0-9]*Expr
get[0-9]*Map
get[0-9]*Format
get[0-9]*CheckAllReadings


Der Unterscheid zwischen [0-9]+ und [0-9]* ist gewollt. dort wo man die Zahlen auch weglassen kann, kann man ohne Zahlen einen Default für alle gets definieren.

Aus der Doku:
get[0-9]+Name
            Name of a get option and Reading to be retrieved / extracted
get[0-9]*URL
            URL to be requested for the get option. If this option is missing,
            the URL specified during define will be used.
get[0-9]*Data
            optional data to be sent to the device as POST data when the get is executed.
            if this attribute is not specified, an HTTP GET method will be used instead of an HTTP POST
get[0-9]*Header
            optional HTTP Headers to be sent to the device when the get is executed
get[0-9]+Poll
            if set to 1 the get is executed automatically during the normal update cycle
           (after the interval provided in the define command has elapsed)
get[0-9]+PollDelay
            if the value should not be read in each iteration
           (after the interval given to the define command),
           then a minimum delay can be specified with this attribute.
           This has only an effect if the above Poll attribute has also been set.
           Every time the update function is called, it checks if since this get has been read
           the last time, the defined delay has elapsed. If not, then it is skipped this time.
           PollDelay can be specified as seconds or as x[0-9]+ which means a multiple
           of the interval in the define command.
get[0-9]*Regex
           If this attribute is specified, the Regex defined here is used to extract the value from the
           HTTP Response and assign it to a Reading with the name defined in the get[0-9]+Name attribute.
           if this attribute is not specified for an individual Reading but as getRegex, then it applies to
           all get options where no specific Regex is defined.<br>
           If neither a generic getRegex attribute nor a specific get[0-9]+Regex attribute is specified,
           then HTTPMOD tries all Regex / Reading pairs defined in Reading[0-9]+Name and
           Reading[0-9]+Regex attributes and assigns the Readings that match.
get[0-9]*Expr
            this attribute behaves just like Reading[0-9]*Expr but is applied to a get value.
get[0-9]*Map
            this attribute behaves just like Reading[0-9]*Map but is applied to a get value.
get[0-9]*Format
            this attribute behaves just like Reading[0-9]*Format but is applied to a get value.
get[0-9]*CheckAllReadings
            this attribute modifies the bahevior of HTTPMOD when the HTTP Response of a get command is parsed.
            If this attribute is set to 1, then additionally to any matching of get specific regexes
            (get[0-9]*Regex), also all the Regex / Reading pairs defined in Reading[0-9]+Name and
            Reading[0-9]+Regex attributes are checked and if they match, the coresponding Readings are assigned as well.

Ich hoffe das deckt nun auch den Siemens-Webserver elegant ab. Wenn die meisten Readings eine Zahl liefern, würde ich eine entsprechende default-Regex als getRegex setzen und dann nur die Ausnahmen explizit angeben.

Ich habe bei der Gelegenheit die Read-Routine von HTTPMod generell neu strukturiert und etwas optimiert. Dabei können sich leider auch Fehler eingeschlichen haben. Für Testberichte bin ich daher dankbar.

Gruss
     Stefan

Lanhydrock

#4
Hi Stefan,

Weltklasse! Vielen Dank... - sitzt, passt, wackelt und hat Luft, diese Version von HTTPMOD.

[Leute, wisst Ihr eigentlich, was hier für Perlen entwickelt werden? Mann, sind wir froh, dass wir FHEM und dessen Community gefunden haben.]

Mein Fork ist damit überflüssig.

Hier für Interessierte unsere relevanten Definitionen für den Siemens Webserver ozw672:

define ozw672 HTTPMOD https://192.168.178.8/api/auth/login.json?user=test&pwd=test 300
attr ozw672 event-on-change-reading anzahlStartsBrenner,statusKessel,tempAussen,tempAussenGemischt,tempKesselRuecklauf,tempKesselRuecklaufSoll,tempKesselSoll,tempTWW
attr ozw672 get1Name tempAussen
attr ozw672 get1Poll 1
attr ozw672 get1PollDelay 1800
attr ozw672 get1URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1960
attr ozw672 get2Name tempAussenGemischt
attr ozw672 get2Poll 1
attr ozw672 get2PollDelay 1800
attr ozw672 get2URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1964
attr ozw672 get3Name tempTWW
attr ozw672 get3Poll 1
attr ozw672 get3URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1996
attr ozw672 get4Name tempKesselSoll
attr ozw672 get4Poll 1
attr ozw672 get4URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1910
attr ozw672 get5Name tempKesselRuecklauf
attr ozw672 get5Poll 1
attr ozw672 get5URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1915
attr ozw672 get6Name tempKesselRuecklaufSoll
attr ozw672 get6Poll 1
attr ozw672 get6URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1916
attr ozw672 get7Name anzahlStartsBrenner
attr ozw672 get7Poll 1
attr ozw672 get7PollDelay 1800
attr ozw672 get7URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1927
attr ozw672 get8Map Aus:0, Nachlauf aktiv:5, Freigegeben für TWW:10, Freigegeben für HK:20, In Teillastbetrieb für TWW:40, In Teillastbetrieb für HK:50, In Betrieb für Trinkwasser:90, In Betrieb für Heizkreis:100
attr ozw672 get8Name statusKessel
attr ozw672 get8Poll 1
attr ozw672 get8Regex Value": "([a-zA-Zü ]*)"
attr ozw672 get8URL https://192.168.178.8/api/menutree/read_datapoint.json?SessionId=$sid&Id=1898
attr ozw672 getRegex Value": "[ ]*([-.0-9]*)"
attr ozw672 reAuthRegex .*session not valid.*
attr ozw672 sid1IDRegex .*"(.*-.*-.*-[0-9a-z]*).*
attr ozw672 sid1URL https://192.168.178.8/api/auth/login.json?user=test&pwd=test


[EDIT: Obwohl unnötig, so geben wir doch die URL für die Session ID als Definitions-URL des Devices an; das spart zu manchen Zeitpunkten eine Abfrage...]

Eine bessere und einfachere Anleitung, wie man für den ozw672 die Parameter IDs findet, (besser: als hier) schreibe ich in den nächsten Tagen noch und hänge sie dann an.
- FHEMs in VM @ Mac mini & RPi, fhem2fhem
- Homematic, 1wire, Hue & Lightify & Tradfri & Xiaomi & Oblo via zigbee2mqtt/Conbee II, Rademacher DuoFern, Roto i8 & Hunter Ventile via HM-LC-Sw4-DR
- Interdomo GBK (via Siemens ozw672; dank HTTPMOD, lest Post #33765)
- homebridge(-fhem), Grafana, DBLog

Lanhydrock

#5
wie versprochen... alles ohne Dokumentation, hoffentlich klappt das auch bei Euch so... ;-)

How it works:
The HTTPMOD module connects to the webserver via HTTPS request and gets a JSON message with the current value of the defined parameter back.
Siemens implemented a session based authorization, so the module gets a valid session id first, then pulls the parameter from the device with that session id.

The parameter id is crucial for the definiton of the URL to pull it from the server.

Here is how to find it:

(1) Get valid session ID
Open a web browser and connect to your web server with the following URL.
Replace ipaddress, ozw672username and ozw672password in the following URL.

https://ipaddress/api/auth/login.json?user=OZW672USERNAME&pwd=OZW672PASSWORD

Make a note of the session ID that is stated in the JSON.

(2) Get list of menu tree items on top level
Open a web browser and connect to your web server with the following URL.
Replace ipaddress and session ID [step (1)] in the following URL.

https://ipaddress/api/menutree/list.json?SessionId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Make a note of the relevant ID of the menu item, it's the first "Id:" string above the "Text:" string.

(3) Travel thru the tree to the value you are interested in
Open a web browser and connect to your web server with the following URL.
Replace ipaddress, session ID [step (1)] and the menuid [step (2)] in the following URL.

https://ipaddress/api/menutree/list.json?SessionId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&Id=MENUID&Idtype=2

Make a note of the relevant ID of the (sub)menu item, it's the first "Id:" string above the "Text:" string.
Repeat until you arrived at the correct parameter ID.

Example:

https://192.168.178.8/api/auth/login.json?user=test&pwd=test

https://192.168.178.8/api/menutree/list.json?SessionId=4a0a9905-2eb9-4df6-b4d1-cc23c4946af5

{
"MenuItems":
[

{
"Id": "1298",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "106",
"Long": "1 Domostar GBK 25 SH",
"Short": "ZSP 1"
}
},


{
"Id": "2",
"Text": {
"CatId": "1",
"GroupId": "4",
"Id": "106",
"Long": "50 Siemens ozw672.01",
"Short": "Gerät"
}
}

],
"DatapointItems":
[

],
"WidgetItems":
[

],
"Result": {
"Success": "true"
}
}


https://192.168.178.8/api/menutree/list.json?SessionId=4a0a9905-2eb9-4df6-b4d1-cc23c4946af5&Id=1298&Idtype=2

{
"MenuItems":
[

{
"Id": "1299",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "215",
"Long": "Uhrzeit",
"Short": "Uhrzeit"
}
},


{
"Id": "1314",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "311",
"Long": "Zeitschaltprogramm 1",
"Short": "ZSP 1"
}
},


{
"Id": "1323",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "313",
"Long": "Zeitschaltprogramm 3",
"Short": "ZSP 3"
}
},


{
"Id": "1332",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "308",
"Long": "Zeitschaltprogramm 4",
"Short": "ZSP 4"
}
},


{
"Id": "1341",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "327",
"Long": "Zeitschaltprogramm 5",
"Short": "ZSP 5"
}
},


{
"Id": "1350",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "291",
"Long": "Ferienprogramme HK1",
"Short": "Ferienprogramme HK1"
}
},


{
"Id": "1368",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "181",
"Long": "Heizkreis 1",
"Short": "Heizkreis 1"
}
},


{
"Id": "1415",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "295",
"Long": "Trinkwasser",
"Short": "Trinkwasser"
}
},


{
"Id": "1432",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "112",
"Long": "Kessel",
"Short": "Kessel"
}
},


{
"Id": "1477",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "317",
"Long": "Sitherm Pro",
"Short": "Sitherm Pro"
}
},


{
"Id": "1743",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "303",
"Long": "Fehler",
"Short": "Fehler"
}
},


{
"Id": "1833",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "304",
"Long": "Wartung\/Sonderbetrieb",
"Short": "Wartung\/Sonderbetrieb"
}
},


{
"Id": "1905",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "314",
"Long": "Diagnose Erzeuger",
"Short": "Diagnose Erzeuger"
}
},


{
"Id": "1959",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "315",
"Long": "Diagnose Verbraucher",
"Short": "Diagnose Verbraucher"
}
},


{
"Id": "2120",
"Text": {
"CatId": "2",
"GroupId": "4",
"Id": "29",
"Long": "Info",
"Short": "Info"
}
}

],
"DatapointItems":
[

],
"WidgetItems":
[

],
"Result": {
"Success": "true"
}
}


https://192.168.178.8/api/menutree/list.json?SessionId=4a0a9905-2eb9-4df6-b4d1-cc23c4946af5&Id=1959&Idtype=2

{
"MenuItems":
[

],
"DatapointItems":
[

{
"Id": "1960",
"Address": "0x50521",
"WriteAccess": "false",
"Text": {
"CatId": "2",
"GroupId": "2",
"Id": "39",
"Long": "Aussentemperatur",
"Short": "Aussentemperatur"
}
},


{
"Id": "1961",
"Address": "0x5056f",
"WriteAccess": "true",
"Text": {
"CatId": "2",
"GroupId": "2",
"Id": "3731",
"Long": "Aussentemperatur Minimum",
"Short": "Aussentemperatur Min"
}
},


{
"Id": "1962",
"Address": "0x5056e",
"WriteAccess": "true",
"Text": {
"CatId": "2",
"GroupId": "2",
"Id": "3732",
"Long": "Aussentemperatur Maximum",
"Short": "Aussentemperatur Max"
}
}

],
"WidgetItems":
[

],
"Result": {
"Success": "true"
}
}


Aussentemperatur=1960
- FHEMs in VM @ Mac mini & RPi, fhem2fhem
- Homematic, 1wire, Hue & Lightify & Tradfri & Xiaomi & Oblo via zigbee2mqtt/Conbee II, Rademacher DuoFern, Roto i8 & Hunter Ventile via HM-LC-Sw4-DR
- Interdomo GBK (via Siemens ozw672; dank HTTPMOD, lest Post #33765)
- homebridge(-fhem), Grafana, DBLog

Brockmann

Darf ich bei der Gelegenheit eine Frage zu HTTPMOD loswerden?

Ich habe vor einiger Zeit schon versucht, mit diesem Modul einen Webseitencheck zu realisieren, der mich informiert, wenn eine bestimmte Webseite nicht verfügbar ist.
Im Prinzip einfach konfigurierbar, nur war das Problem, dass bei nicht Verfügbarkeit (=RegEx konnte nicht gematcht werden) nur eine Meldung im Log auftauchte. Aber es gab kein Status, Reading o.ä., auf das ich mit einem Notify oder DOIF hätte reagieren können.

Gibt es (inzwischen) eine Möglichkeit, das Nicht-Matchen in FHEM zu erkennen und darauf zu reagieren?
Falls nein, wäre es denkbar, eine solche Option einzubauen, z. B. indem man ähnlich wie bei ReadingsVal ein "defaultvalue" angeben kann, auf welches das Reading gesetzt wird, wenn kein Match möglich war?

Elektrolurch

Hallo,

ich habe das Modul bei meinem TVhelper eingesetzt,dass ist das Projekt, bei dem die Programmvorschau von einer Webseite heruntergeladen wird und per readingsGroup angezeigt wird. Das Teil nutzt httpmod per Intervall, läuft somit also erst einmal alle 24 h. Der TVhelper macht jetzt folgendes: er wertet die Zeiten der Nachfolgesendungen aus und ruft dann die interne Funktion von httpmod zum Laden und Parsen der Seite auf (die, die auch über InternalTimer aufgerufen wird).
Nicht so ganz sauber. Schön wäre es, wenn es so eine

get name update

Aufruf gäbe, der das Abrufen und Parsen der Webseite auch außerhalb des Timers machen würde.

Ich denke, der Einbau ist ein Zweizeiler. Danke.

Elekttrolurch

configDB und Windows befreite Zone!

StefanStrobel

Hallo Elektrolurch,

das sollte sogar jetzt schon ohne Änderung gehen.
einfach ein entsprechendes get per Attribut definieren. Wenn keine eigene Regex für das get angegeben ist, werden automatisch alle Regexes / Readings durchprobiert, die ursprünglich für update definiert wurden.

Beispiel:

define PM HTTPMOD http://192.168.70.90/cgi-bin/webgui.fcgi 60

# get definition für update
attr PM get02Name update
attr PM getHeader1 Content-Type: application/json
attr PM getHeader2 Accept: */*
attr PM get02Data {"get" :["34.4001.value" ,"34.4008.value" ,"34.4033.value"]}

# die Readings / Regexes wie bisher
attr PM reading01Name PH
attr PM reading01Regex 34.4001.value":[ \t]+"([\d\.]+)"
attr PM reading02Name CL
attr PM reading02Regex 34.4008.value":[ \t]+"([\d\.]+)"
attr PM reading03Name TEMP
attr PM reading03Regex 34.4033.value":[ \t]+"([\d\.]+)"


Gruss
   Stefan

wmr72

Hallo Stefan,

ich habe bei mir eine Webseite, die einfach nur eine Zahl zurückliefert, die ich über HTTPMOD abfrage. Ich hatte deswegen als Attribut

attr httpmod Readings1Regex([0-9]\.+)

gesetzt und mich gewundert, dass mein Reading immer 1.0 war. Das liegt daran, dass die Regex auf $buffer losgelassen wird, in dem header und body der Response stehen, und da stand bei mir eben immer ein "HTTP/1.0 200 OK" drin.
Ist es Absicht, dass die Regex auf den Header matcht?

StefanStrobel

Hallo wmr72,

Ja, das mit dem Header ist Absicht. Es können ja auch mal interessant Daten im Header bzw. in Cookies zurück geliefert werden.
Am einfachsten wäre es wenn Du eine geringfügig komplexere Regex verwendest.

Gruss
   Stefan

wmr72

Hi Stefan,

hatte ich mir fast gedacht. Finde ich nicht schön aber erklärbar, ich hab jetzt einfach die einzulesende Webseite angepasst, das ist in meinem Fall die einfachste/übersichtlichste Lösung.

Gruß Wolfgang

StefanStrobel

Hallo,

ich habe die neue Version gerade eingecheckt und das Wiki aktualisiert.
@Brockmann: es gibt jetzt auch ein neues Attribut "showMatched". Wenn das auf 1 steht, erzeugt HTTPMOD ein Reading mit Namen MATCHED_READINGS, das die Namen der gematchten Readings enthält.
Ich hoffe das erfüllt Deine Anforderung.

Gruss   
    Stefan

Brockmann

Zitat von: StefanStrobel am 24 März 2015, 21:38:56
@Brockmann: es gibt jetzt auch ein neues Attribut "showMatched". Wenn das auf 1 steht, erzeugt HTTPMOD ein Reading mit Namen MATCHED_READINGS, das die Namen der gematchten Readings enthält.
Ich hoffe das erfüllt Deine Anforderung.
DANKE!  :)
Ja, damit sollte es klappen.

RoBra81

Hallo,

ich nutze dieses get-Feature, muss aber seit einigen Updates immer wieder eine alte Version zurückspielen, da das get-Feature verschwunden ist - gibt es dafür einen Grund?

Ronny

StefanStrobel

Hallo Ronny,

Das get-Feature sollte drin sein.
Wenn Du 98_HTTPMOD.pm öffnest, was ist denn der letzte Eintrag in der Änderungshistorie?
(Kommentare am Anfang der Datei)

Gruss
    Stefan

RoBra81

Hallo Stefan,

in meiner funktionierenden Version ist der letzte Eintrag

#   2015-02-17  new attributes getXXRegex, Map, Format, Expr, new semantics for default values of these attributes
#               restructured HTTPMOD_Read


Ich habe nochmal die Version aus dem Sourceforge probiert und da ist der letzte Eintrag

#   2015-08-24  corrected bug when handling sidIdRegex for step <> 1


In der Sourceforge-Version habe ich aber, anders als bei meiner alten Version, bei folgender Konfiguration keinen get-Befehl...

[code]Internals:
   BUSY       0
   DEF        http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/-1/free.html 5000000

   GetSeq     0
   HTTPHEADER
   Interval   5000000

   LASTSEND   1440741600.5983
   MainURL    http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/-1/free.html
   NAME       DG.wz.TV.Programm.remote
   NR         85
   STATE      ???
   TRIGGERTIME 1445653845.37057
   TRIGGERTIME_FMT 2015-10-24 04:30:45
   TYPE       HTTPMOD
   addr       http://www.klack.de:80
   buf
   code       200
   data
   displayurl http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/-1/free.html
   header
   host       www.klack.de
   httpheader HTTP/1.1 200 OK

Date: Fri, 28 Aug 2015 05:55:00 GMT

Server: Apache/2.2.22 (Debian)

X-Powered-By: PHP/5.5.17-1~dotdeb.1

Set-Cookie: d2eb32ef92ab9e953aa00bd5b54b2c06=tv9gm7j4og8h641f1l05a3fbp3; path=/

P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"

Cache-Control: no-cache

Pragma: no-cache

Vary: Accept-Encoding

Connection: close

Content-Type: text/html; charset=utf-8
   hu_blocking 0
   hu_filecount 302
   ignoreredirects 0
   loglevel   4
   path       /fernsehprogramm/was-laeuft-gerade/0/-1/free.html
   protocol   http
   redirects  0
   timeout    2
   url        http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/-1/free.html
   QUEUE:
   Readings:
     2015-08-28 07:55:01   3sat            Alpenpanorama
     2015-08-28 07:55:01   3sat_details    Wetterbericht, D 2015<br/>Laufzeit: 90 Minuten<br/><br/>&quot;Alpenpanorama&quot; zeigt über zahlreiche Web- und Panoramakameras täglich Livebilder aus ausgewählten Urlaubsorten.Die Sendung informiert auch über...<br/>
     2015-08-28 07:55:01   3sat_link       http://www.klack.de/tv-programm/fernsehsendung/1505810/alpenpanorama.html
     2015-08-28 07:55:01   3sat_next       ZIB
     2015-08-28 07:55:01   3sat_next_details Nachrichten, A 2015<br/>Laufzeit: 5 Minuten<br/><br/>Die Kurzausgaben der österreichischen Nachrichtensendung &quot;Zeit im Bild&quot; (ZIB) liefern neben klassischen Nachrichten Informationen über Entwicklungen...<br/>
     2015-08-28 07:55:01   3sat_next_link  http://www.klack.de/tv-programm/fernsehsendung/1505811/zib.html
     2015-08-28 07:55:01   3sat_next_time  09:00
     2015-08-28 07:55:01   3sat_time       07:30
     2015-08-28 07:55:01   ARD             ARD-Morgenmagazin
     2015-08-28 07:55:01   ARD_details     Morgenmagazin, D 2015<br/>Laufzeit: 210 Minuten<br/>Original-Titel: Morgenmagazin<br/><br/>Das Erste am Morgen.<br/>
     2015-08-28 07:55:01   ARD_link        http://www.klack.de/tv-programm/fernsehsendung/1505238/ard-morgenmagazin.html
     2015-08-28 07:55:01   ARD_next        Tagesschau
     2015-08-28 07:55:01   ARD_next_details Nachrichten, D 2015<br/>Laufzeit: 5 Minuten<br/><br/>Die Nachrichten der ARD<br/>
     2015-08-28 07:55:01   ARD_next_link   http://www.klack.de/tv-programm/fernsehsendung/1505239/tagesschau.html
     2015-08-28 07:55:01   ARD_next_time   09:00
     2015-08-28 07:55:01   ARD_time        05:30
     2015-08-28 07:55:01   ARTE            Wanderlust!
     2015-08-28 07:55:01   ARTE_details    Dokureihe, D 2015<br/>Laufzeit: 45 Minuten<br/>Original-Titel: Wanderlust<br/><br/>Der Lechweg ist ein alpiner Weg und trotzdem bequem zu wandern. Am Formarinsee beginnt für Bradley Mayhew eine Wanderung in die Kultur und Geschichte...<br/>
     2015-08-28 07:55:01   ARTE_link       http://www.klack.de/tv-programm/fernsehsendung/1506849/wanderlust.html
     2015-08-28 07:55:01   ARTE_next       X:enius - Handwerk - Wie erfinderisch war das Mittelalter?
     2015-08-28 07:55:01   ARTE_next_details Wissensmagazin, D, F 2015<br/>Laufzeit: 25 Minuten<br/><br/>Viele Erfindungen des Mittelalters nutzen wir heute noch: die Uhr, die Brille, den Spiegel oder den Kompass. Sie sind der rasanten Entwicklung des...<br/>
     2015-08-28 07:55:01   ARTE_next_link  http://www.klack.de/tv-programm/fernsehsendung/1506850/x-enius-handwerk-wie-erfinderisch-war-das-mittelalter.html
     2015-08-28 07:55:01   ARTE_next_time  08:30
     2015-08-28 07:55:01   ARTE_time       07:45
     2015-08-28 07:55:01   Bayern          Panoramabilder / Bergwetter
     2015-08-28 07:55:01   Bayern_details  Wetterbericht, D 2015<br/>Laufzeit: 40 Minuten<br/><br/>Schon seit Jahren eröffnen die Panoramabilder aus Bayern, Österreich und Südtirol, begleitet von lokalen und regionalen Wettermeldungen,...<br/>
     2015-08-28 07:55:01   Bayern_link     http://www.klack.de/tv-programm/fernsehsendung/1505847/panoramabilder-bergwetter.html
     2015-08-28 07:55:01   Bayern_next     Tele-Gym
     2015-08-28 07:55:01   Bayern_next_details Gymnastik, D<br/>Laufzeit: 15 Minuten<br/><br/>Unser Ziel ist es, Wege aus dem alltäglichen Stress und der Anspannung zu finden und Schmerzen gar nicht erst aufkommen zu lassen. In unserem...<br/>
     2015-08-28 07:55:01   Bayern_next_link http://www.klack.de/tv-programm/fernsehsendung/1505848/tele-gym.html
     2015-08-28 07:55:01   Bayern_next_time 08:35
     2015-08-28 07:55:01   Bayern_time     07:55
     2015-08-28 07:55:01   DMAX            Infomercial
     2015-08-28 07:55:01   DMAX_details    Werbesendung<br/>Laufzeit: 120 Minuten<br/>
     2015-08-28 07:55:01   DMAX_link       http://www.klack.de/tv-programm/fernsehsendung/1504964/infomercial.html
     2015-08-28 07:55:01   DMAX_next       Die Profit-Profis
     2015-08-28 07:55:01   DMAX_next_details Dokusoap, CDN 2013<br/>Folge: 6<br/>Laufzeit: 30 Minuten<br/>Original-Titel: Thrift Hunters<br/>
     2015-08-28 07:55:01   DMAX_next_link  http://www.klack.de/tv-programm/fernsehsendung/1504965/die-profit-profis.html
     2015-08-28 07:55:01   DMAX_next_time  08:50
     2015-08-28 07:55:01   DMAX_time       06:50
     2015-08-28 07:55:01   Disney          Micky Maus Wunderhaus
     2015-08-28 07:55:01   Disney_details  Animationsserie, USA 2009<br/>Staffel: 2 / Folge: 32<br/>Laufzeit: 30 Minuten<br/>Original-Titel: Mickey Mouse Clubhouse<br/><br/>Goofys Freundin, das Affenmädchen Coco, will eine Kokosnussparty schmeißen. Deshalb fahren unsere Freunde in den Dschungel, um Kokosnüsse zu suchen.<br/>
     2015-08-28 07:55:01   Disney_link     http://www.klack.de/tv-programm/fernsehsendung/1505201/micky-maus-wunderhaus.html
     2015-08-28 07:55:01   Disney_next     Disneys Doc McStuffins, Spielzeugärztin
     2015-08-28 07:55:01   Disney_next_details Animationsserie, USA, IRL 2012<br/>Staffel: 1 / Folge: 19<br/>Laufzeit: 30 Minuten<br/>Regie: Norton Virgien<br/><br/>(a) Doc und ihre Freunde helfen der Opossum-Mutter Penny dabei, einen verlorenen Klettstreifen anzubringen. (b) Doc und ihre Freunde helfen dem Hasen...<br/>
     2015-08-28 07:55:01   Disney_next_link http://www.klack.de/tv-programm/fernsehsendung/1505202/disneys-doc-mcstuffins-spielzeugaerztin.html
     2015-08-28 07:55:01   Disney_next_time 08:10
     2015-08-28 07:55:01   Disney_time     07:40
     2015-08-28 07:55:01   Eins_Plus       Alles Wissen - Das Wissensmagazin
     2015-08-28 07:55:01   Eins_Plus_details Wissensmagazin, D 2015<br/>Laufzeit: 45 Minuten<br/>Original-Titel: Alles Wissen<br/><br/>Eine Leiche wird gefunden. Aber wer ist der Täter? Im Fernsehkrimi ist die Sache klar: Am Ende überführt der Kommissar den Mörder, auch wenn so...<br/>
     2015-08-28 07:55:01   Eins_Plus_link  http://www.klack.de/tv-programm/fernsehsendung/1504303/alles-wissen-das-wissensmagazin.html
     2015-08-28 07:55:01   Eins_Plus_next  W wie Wissen
     2015-08-28 07:55:01   Eins_Plus_next_details Wissensmagazin, D 2015<br/>Laufzeit: 30 Minuten<br/><br/>Kann Wasser zu sauber sein? Ja, wenn es nach den Fischern vom Bodensee geht. Sie machen die gute Wasserqualität für das Schrumpfen ihrer Fischerträge...<br/>
     2015-08-28 07:55:01   Eins_Plus_next_link http://www.klack.de/tv-programm/fernsehsendung/1504304/w-wie-wissen.html
     2015-08-28 07:55:01   Eins_Plus_next_time 08:00
     2015-08-28 07:55:01   Eins_Plus_time  07:15
     2015-08-28 07:55:01   HR              Sturm der Liebe (2287)
     2015-08-28 07:55:01   HR_details      Telenovela, D 2015<br/>Staffel: 1 / Folge: 2287<br/>Laufzeit: 50 Minuten<br/>Original-Titel: Sturm der Liebe<br/>Mit: Magdalena Steinlein, Kai Albrecht, Dirk Galuba, Mona Seefried, Sepp Schauer, Antje Hagen<br/>Regie: Dieter Schlotterbeck<br/><br/>Nach dem Streit zwischen David und Sebastian rät Charlotte Sebastian, nach Wien zu fahren und dort im Namen des &quot;Fürstenhofs&quot; eine Auszeichnung an...<br/>
     2015-08-28 07:55:01   HR_link         http://www.klack.de/tv-programm/fernsehsendung/1504829/sturm-der-liebe-2287.html
     2015-08-28 07:55:01   HR_next         Brisant
     2015-08-28 07:55:01   HR_next_details Boulevardmagazin, D 2015<br/>Laufzeit: 40 Minuten<br/><br/>Träume und Tragödien, menschliche und tierische Schicksale liefern den Stoff für 'Brisant', das tägliche Boulevard-Magazin der ARD. Eine Mischung aus...<br/>
     2015-08-28 07:55:01   HR_next_link    http://www.klack.de/tv-programm/fernsehsendung/1504830/brisant.html
     2015-08-28 07:55:01   HR_next_time    08:30
     2015-08-28 07:55:01   HR_time         07:40
     2015-08-28 08:05:00   Images          delete
     2015-08-28 07:55:01   Kabel_eins      Mord ist ihr Hobby
     2015-08-28 07:55:01   Kabel_eins_details Krimiserie, USA 1986<br/>Staffel: 2 / Folge: 21<br/>Laufzeit: 60 Minuten<br/>Original-Titel: Murder, She Wrote<br/>Mit: Angela Lansbury, Peter Bonerz, Granville Van Dusen, David McCallum, George DiCenzo, Lisa Langlois<br/>Regie: Walter Grauman<br/><br/>Der schrill-bunte Karneval von New Orleans bildet den Hintergrund für Jessica Fletchers neuen Fall: Ihr Cousin Calhoun wird des Mordes an dem...<br/>
     2015-08-28 07:55:01   Kabel_eins_link http://www.klack.de/tv-programm/fernsehsendung/1504784/mord-ist-ihr-hobby.html
     2015-08-28 07:55:01   Kabel_eins_next Navy CIS
     2015-08-28 07:55:01   Kabel_eins_next_details Krimiserie, USA 2005<br/>Staffel: 3 / Folge: 10<br/>Laufzeit: 55 Minuten<br/>Original-Titel: NCIS: Naval Criminal Investigative Service<br/>Mit: Mark Harmon, Michael Weatherly, David McCallum, Pauley Perrette, Jessica Steen, Cote de Pablo<br/>Regie: Brian Kirk, Donald P. Bellisario, Terrence O'Hara<br/><br/>Agent McGee erschießt versehentlich einen Kollegen im Undercover-Einsatz und soll deshalb wegen fahrlässiger Tötung angeklagt werden. Die anderen...<br/>      
     2015-08-28 07:55:01   Kabel_eins_next_link http://www.klack.de/tv-programm/fernsehsendung/1504785/navy-cis.html
     2015-08-28 07:55:01   Kabel_eins_next_time 08:20
     2015-08-28 07:55:01   Kabel_eins_time 07:20
     2015-08-28 07:55:01   KiKa            Sarah &amp; Duck
     2015-08-28 07:55:01   KiKa_details    Animationsserie, GB 2012<br/>Staffel: 2 / Folge: 7<br/>Laufzeit: 10 Minuten<br/>Regie: Tim O'Sullivan<br/><br/>Sarah und Duck sind bei John und Flamingo zum Nachtisch eingeladen. Doch bevor sie ihr japanisches Mochi-Eis essen, zeigt ihnen John erst mal sein...<br/>
     2015-08-28 07:55:01   KiKa_link       http://www.klack.de/tv-programm/fernsehsendung/1505544/sarah-duck.html
     2015-08-28 07:55:01   KiKa_next       Sesamstraße
     2015-08-28 07:55:01   KiKa_next_details Kindersendung, D, USA 2015<br/>Laufzeit: 25 Minuten<br/><br/>Wolle und Pferd verabreden sich zum Spielen. Pferd braucht eine Gedächtnisstütze, damit er die Verabredung nicht vergisst. Also macht Wolle einen...<br/>
     2015-08-28 07:55:01   KiKa_next_link  http://www.klack.de/tv-programm/fernsehsendung/1505545/sesamstrasse.html
     2015-08-28 07:55:01   KiKa_next_time  08:00
     2015-08-28 07:55:01   KiKa_time       07:50
     2015-08-28 07:55:01   MDR             Rote Rosen (2027)
     2015-08-28 07:55:01   MDR_details     Telenovela, D 2015<br/>Staffel: 1 / Folge: 2027<br/>Laufzeit: 50 Minuten<br/>Original-Titel: Rote Rosen<br/>Mit: Anne Moll, Oliver Sauer, Leonie Landa, Anja Franke, Gerry Hungbauer, Brigitte Antonius<br/><br/>Erika lässt sich unwillig auf den therapeutischen Segelflugkurs ein, auch weil sie hofft, Merle und Inge endgültig zu überzeugen, nicht...<br/>
     2015-08-28 07:55:01   MDR_link        http://www.klack.de/tv-programm/fernsehsendung/1505109/rote-rosen-2027.html
     2015-08-28 07:55:01   MDR_next        Sturm der Liebe (2287)
     2015-08-28 07:55:01   MDR_next_details Telenovela, D 2015<br/>Staffel: 1 / Folge: 2287<br/>Laufzeit: 48 Minuten<br/>Original-Titel: Sturm der Liebe<br/>Mit: Magdalena Steinlein, Kai Albrecht, Dirk Galuba, Mona Seefried, Sepp Schauer, Antje Hagen<br/>Regie: Dieter Schlotterbeck<br/><br/>Nach dem Streit zwischen David und Sebastian rät Charlotte Sebastian, nach Wien zu fahren und dort im Namen des &quot;Fürstenhofs&quot; eine Auszeichnung an...<br/>
     2015-08-28 07:55:01   MDR_next_link   http://www.klack.de/tv-programm/fernsehsendung/1505110/sturm-der-liebe-2287.html
     2015-08-28 07:55:01   MDR_next_time   08:10
     2015-08-28 07:55:01   MDR_time        07:20
     2015-08-28 07:55:01   N-TV            Telebörse
     2015-08-28 07:55:01   N-TV_details    Börsenmagazin, D 2015<br/>Laufzeit: 20 Minuten<br/><br/>Das älteste Börsenmagazin im deutschen Fernsehen informiert nach wie vor mit aktuellen Zahlen live vom Frankfurter Parkett.<br/>
     2015-08-28 07:55:01   N-TV_link       http://www.klack.de/tv-programm/fernsehsendung/1504911/teleboerse.html
     2015-08-28 07:55:01   N-TV_next       Nachrichten
     2015-08-28 07:55:01   N-TV_next_details Nachrichten, D 2015<br/>Laufzeit: 10 Minuten<br/>
     2015-08-28 07:55:01   N-TV_next_link  http://www.klack.de/tv-programm/fernsehsendung/1504912/nachrichten.html
     2015-08-28 07:55:01   N-TV_next_time  08:00
     2015-08-28 07:55:01   N-TV_time       07:40
     2015-08-28 07:55:01   N24             N24 Nachrichten - Nachrichten, Wirtschaft und Börse, Sport und Wetter
     2015-08-28 07:55:01   N24_details     Nachrichten, D<br/>Laufzeit: 15 Minuten<br/>Original-Titel: N24 Nachrichten<br/>
     2015-08-28 07:55:01   N24_link        http://www.klack.de/tv-programm/fernsehsendung/1503959/n24-nachrichten-nachrichten-wirtschaft-und-boerse-sport-und-wetter.html
     2015-08-28 07:55:01   N24_next        N24 Nachrichten - Nachrichten, Wirtschaft und Börse, Sport und Wetter
     2015-08-28 07:55:01   N24_next_details Nachrichten, D<br/>Laufzeit: 15 Minuten<br/>Original-Titel: N24 Nachrichten<br/>
     2015-08-28 07:55:01   N24_next_link   http://www.klack.de/tv-programm/fernsehsendung/1503960/n24-nachrichten-nachrichten-wirtschaft-und-boerse-sport-und-wetter.html
     2015-08-28 07:55:01   N24_next_time   08:00
     2015-08-28 07:55:01   N24_time        07:45
     2015-08-28 07:55:01   NDR             Abenteuer Diagnose
     2015-08-28 07:55:01   NDR_details     Reportagereihe, D 2015<br/>Laufzeit: 50 Minuten<br/><br/>Bei der Fahndung nach der rettenden Diagnose geht es in der Medizin manchmal zu wie bei einem Kriminalfall: Es ist die spannende Jagd nach Indizien,...<br/>
     2015-08-28 07:55:01   NDR_link        http://www.klack.de/tv-programm/fernsehsendung/1505354/abenteuer-diagnose.html
     2015-08-28 07:55:01   NDR_next        Sturm der Liebe (2287)
     2015-08-28 07:55:01   NDR_next_details Telenovela, D 2015<br/>Staffel: 1 / Folge: 2287<br/>Laufzeit: 50 Minuten<br/>Original-Titel: Sturm der Liebe<br/>Mit: Magdalena Steinlein, Kai Albrecht, Dirk Galuba, Mona Seefried, Sepp Schauer, Antje Hagen<br/>Regie: Dieter Schlotterbeck<br/><br/>Nach dem Streit zwischen David und Sebastian rät Charlotte Sebastian, nach Wien zu fahren und dort im Namen des &quot;Fürstenhofs&quot; eine Auszeichnung an...<br/>
     2015-08-28 07:55:01   NDR_next_link   http://www.klack.de/tv-programm/fernsehsendung/1505355/sturm-der-liebe-2287.html
     2015-08-28 07:55:01   NDR_next_time   08:10
     2015-08-28 07:55:01   NDR_time        07:20
     2015-08-28 07:55:01   NICK            Oggy und die Kakerlaken
     2015-08-28 07:55:01   NICK_details    Zeichentrickserie, F, CDN, D 1998<br/>Staffel: 1<br/>Laufzeit: 15 Minuten<br/><br/>In der Manier von &quot;Tom &amp; Jerry&quot; machen die drei Kakerlaken Marky, Joey und Dee-Dee dem Kater Oggy das Leben schwer. Immer wieder hecken die drei...<br/>
     2015-08-28 07:55:01   NICK_link       http://www.klack.de/tv-programm/fernsehsendung/1504085/oggy-und-die-kakerlaken.html
     2015-08-28 07:55:01   NICK_next       Winx Club
     2015-08-28 07:55:01   NICK_next_details Zeichentrickserie, I, USA 2014<br/>Staffel: 7<br/>Laufzeit: 20 Minuten<br/><br/>Die junge Bloom beginnt mit ihren Freundinnen Stella, Musa, Tecna und Flora an der Feen-Schule von Alfea zu studieren und sich die Fähigkeiten einer...<br/>
     2015-08-28 07:55:01   NICK_next_link  http://www.klack.de/tv-programm/fernsehsendung/1504086/winx-club.html
     2015-08-28 07:55:01   NICK_next_time  08:00
     2015-08-28 07:55:01   NICK_time       07:45
     2015-08-28 07:55:01   Phoenix         Mohammed - Der Prophet (3/3) - Scharia und Dschihad
     2015-08-28 07:55:01   Phoenix_details Dokureihe, GB 2011<br/>Laufzeit: 45 Minuten<br/>Original-Titel: The Life of Muhammad<br/><br/>Ein Mann, der weder lesen noch schreiben kann, erklärt sich im 7. Jahrhundert selbst zum Propheten Gottes. In den folgenden Jahren wird er Frieden...<br/>
     2015-08-28 07:55:01   Phoenix_link    http://www.klack.de/tv-programm/fernsehsendung/1505294/mohammed-der-prophet-3-3-scharia-und-dschihad.html
     2015-08-28 07:55:01   Phoenix_next    Ich bin nicht Charlie - Die Gefahr aus den Pariser Vorstädten
     2015-08-28 07:55:01   Phoenix_next_details Gesellschaftsportrait, D 2015<br/>Laufzeit: 45 Minuten<br/>Original-Titel: Ich bin nicht Charlie<br/><br/>Wie kommt es, dass sich Jugendliche radikalisieren und zu Mördern im Namen Allahs werden? Die Karikaturisten der französischen Zeitschrift Charlie...<br/>
     2015-08-28 07:55:01   Phoenix_next_link http://www.klack.de/tv-programm/fernsehsendung/1505295/ich-bin-nicht-charlie-die-gefahr-aus-den-pariser-vorstaedten.html
     2015-08-28 07:55:01   Phoenix_next_time 08:15
     2015-08-28 07:55:01   Phoenix_time    07:30
     2015-08-28 07:55:01   Pro7            Mike &amp; Molly
     2015-08-28 07:55:01   Pro7_MAXX       Galileo - Klebe-Eis
     2015-08-28 07:55:01   Pro7_MAXX_details Wissensmagazin, D 2015<br/>Laufzeit: 55 Minuten<br/>Original-Titel: Galileo<br/>
     2015-08-28 07:55:01   Pro7_MAXX_link  http://www.klack.de/tv-programm/fernsehsendung/1516950/galileo-klebe-eis.html
     2015-08-28 07:55:01   Pro7_MAXX_next  Mission Panda-Transport
     2015-08-28 07:55:01   Pro7_MAXX_next_details Tierdoku, GB 2012<br/>Laufzeit: 55 Minuten<br/>Original-Titel: Wild About Pandas<br/><br/>Große Pandabären sind in britischen Zoos heutzutage ein seltener Anblick. Als einziger Zoo darf sich der Edinburgher Zoo in Schottland seit 2011 dem...<br/>
     2015-08-28 07:55:01   Pro7_MAXX_next_link http://www.klack.de/tv-programm/fernsehsendung/1504671/mission-panda-transport.html
     2015-08-28 07:55:01   Pro7_MAXX_next_time 08:25
     2015-08-28 07:55:01   Pro7_MAXX_time  07:30
     2015-08-28 07:55:01   Pro7_details    Sitcom, USA 2014<br/>Laufzeit: 25 Minuten<br/>Mit: Billy Gardell, Melissa McCarthy, Reno Wilson, Katy Mixon, Nyambi Nyambi, Rondi Reed<br/><br/>Molly ist verzweifelt, denn ihr will einfach nichts einfallen, wie ihre Buch weitergehen könnte. Der Verlag erhöht den Druck auf sie und droht sogar...<br/>      
     2015-08-28 07:55:01   Pro7_link       http://www.klack.de/tv-programm/fernsehsendung/1504716/mike-molly.html
     2015-08-28 07:55:01   Pro7_next       How I Met Your Mother
     2015-08-28 07:55:01   Pro7_next_details Sitcom, USA 2007<br/>Staffel: 3 / Folge: 6<br/>Laufzeit: 25 Minuten<br/>Mit: Josh Radnor, Jason Segel, Cobie Smulders, Neil Patrick Harris, Alyson Hannigan, John Cho<br/>Regie: Pamela Fryman<br/><br/>Single Barney hat es sich mal wieder mit einem &quot;Erwachsenenfilm&quot; bequem gemacht und fällt fast um vor Lachen, als er im Abspann liest, dass der...<br/>
     2015-08-28 07:55:01   Pro7_next_link  http://www.klack.de/tv-programm/fernsehsendung/1504719/how-i-met-your-mother.html
     2015-08-28 07:55:01   Pro7_next_time  08:15
     2015-08-28 07:55:01   Pro7_time       07:50
     2015-08-28 07:55:01   RBB             Tiere bis unters Dach (40)
     2015-08-28 07:55:01   RBB_details     Familienserie, D 2014<br/>Staffel: 4 / Folge: 1<br/>Laufzeit: 30 Minuten<br/>Original-Titel: Tiere bis unters Dach<br/>Mit: Jule-Marleen Schuck, Moritz Knapp, Tabea Hug, Floriane Daniel, Heikko Deutschmann, Sanne Schnapp<br/>Regie: Felix Binder<br/><br/>&quot;Kuckuck! ruft's aus dem Wald ...&quot; Der Frühling ist da, und mit ihm Riesensorgen für Nelly: Ihre Mutter Susanne hat ein Top-Job-Angebot aus dem...<br/>
     2015-08-28 07:55:01   RBB_link        http://www.klack.de/tv-programm/fernsehsendung/1504633/tiere-bis-unters-dach-40.html
     2015-08-28 07:55:01   RBB_next        Brandenburg aktuell
     2015-08-28 07:55:01   RBB_next_details Regionalmagazin, D 2015<br/>Laufzeit: 30 Minuten<br/><br/>Die Nachrichtensendung mit dem aktuellen Geschehen aus Politik, Gesellschaft und Kultur für das Land Brandenburg. Die Neuigkeiten im Flächenland...<br/>
     2015-08-28 07:55:01   RBB_next_link   http://www.klack.de/tv-programm/fernsehsendung/1504634/brandenburg-aktuell.html
     2015-08-28 07:55:01   RBB_next_time   08:00
     2015-08-28 07:55:01   RBB_time        07:30
     2015-08-28 07:55:01   RTL             Guten Morgen Deutschland
     2015-08-28 07:55:01   RTL_II          Der Trödeltrupp - Das Geld liegt im Keller
     2015-08-28 07:55:01   RTL_II_details  Dokusoap, D 2013<br/>Folge: 310<br/>Laufzeit: 60 Minuten<br/><br/>Mit dem Kauf des Kartbahn-Grundstücks luden sich Frank und Gabi weit über 100.000 Euro Schulden auf. Leider bleiben die Kunden aus. Die Familie...<br/>
     2015-08-28 07:55:01   RTL_II_link     http://www.klack.de/tv-programm/fernsehsendung/1504459/der-troedeltrupp-das-geld-liegt-im-keller.html
     2015-08-28 07:55:01   RTL_II_next     Frauentausch
     2015-08-28 07:55:01   RTL_II_next_details Dokusoap, D 2009<br/>Folge: 233<br/>Laufzeit: 120 Minuten<br/><br/>Seit zehn Jahren bilden Melanie (30) und Dirk (39) nun schon ein echtes Dream-Team als leidenschaftliche Meerschweincheneltern. Vater Dirk hat schon...<br/>
     2015-08-28 07:55:01   RTL_II_next_link http://www.klack.de/tv-programm/fernsehsendung/1504460/frauentausch.html
     2015-08-28 07:55:01   RTL_II_next_time 08:50
     2015-08-28 07:55:01   RTL_II_time     07:50
     2015-08-28 07:55:01   RTL_NITRO       Law &amp; Order
     2015-08-28 07:55:01   RTL_NITRO_details Krimiserie, USA 1994<br/>Staffel: 5 / Folge: 3<br/>Laufzeit: 50 Minuten<br/>Mit: Christopher Noth, Chris Noth, Jerry Orbach, Jill Hennessy, Sam Waterston, Steven Hill<br/>Regie: Dick Wolf, Don Scardino<br/><br/>Der Japaner Shiunru Hayashi wird in den frühen Morgenstunden in einem New Yorker Hotel erschossen. Zunächst fällt der Verdacht von Briscoe und Logen...<br/>
     2015-08-28 07:55:01   RTL_NITRO_link  http://www.klack.de/tv-programm/fernsehsendung/1504274/law-order.html
     2015-08-28 07:55:01   RTL_NITRO_next  Detektiv Rockford: Anruf genügt
     2015-08-28 07:55:01   RTL_NITRO_next_details Krimi, USA 1975<br/>Staffel: 2 / Folge: 1<br/>Laufzeit: 55 Minuten<br/>Original-Titel: The Rockford Files<br/>Mit: James Garner, Joe Santos, Stuart Margolin, Gretchen Corbett, James Hampton, Noah Beery<br/><br/>Aaron Ironwood wurde von Jim Rockfords Eltern aufgezogen. Inzwischen ist er ein erfolgreicher Unternehmer, der die Hilfe des Detektivs benötigt.<br/>
     2015-08-28 07:55:01   RTL_NITRO_next_link http://www.klack.de/tv-programm/fernsehsendung/1504275/detektiv-rockford-anruf-genuegt.html
     2015-08-28 07:55:01   RTL_NITRO_next_time 08:45
     2015-08-28 07:55:01   RTL_NITRO_time  07:55
     2015-08-28 07:55:01   RTL_details     Nachrichten, D 2015<br/>Laufzeit: 150 Minuten<br/>
     2015-08-28 07:55:01   RTL_link        http://www.klack.de/tv-programm/fernsehsendung/1504429/guten-morgen-deutschland.html
     2015-08-28 07:55:01   RTL_next        Gute Zeiten, schlechte Zeiten
     2015-08-28 07:55:01   RTL_next_details Dailysoap, D 2015<br/>Staffel: 1 / Folge: 5817<br/>Laufzeit: 30 Minuten<br/>Mit: Janina Uhse, Daniel Fehlow, Wolfgang Bahro, Anne Menden, Ulrike Frank, Jörn Schlönvoigt<br/><br/>Als Maren Alexanders Liebeserklärung nicht kaltlässt, ruft Katrin sie energisch zur Räson und beschließt, mit ihr zur Ablenkung auszugehen.<br/>
     2015-08-28 07:55:01   RTL_next_link   http://www.klack.de/tv-programm/fernsehsendung/1504430/gute-zeiten-schlechte-zeiten.html
     2015-08-28 07:55:01   RTL_next_time   08:30
     2015-08-28 07:55:01   RTL_time        06:00
     2015-08-28 07:55:01   SAT.1           Frühstücksfernsehen
     2015-08-28 07:55:01   SAT.1_Gold      Bonanza
     2015-08-28 07:55:01   SAT.1_Gold_details Westernserie, USA 1969<br/>Staffel: 10 / Folge: 25<br/>Laufzeit: 50 Minuten<br/>Mit: Lorne Greene, Dan Blocker, Michael Landon, Beth Brickell, Pernell Roberts, David McLean<br/>Regie: Leon Benson<br/><br/>Joe Cartwright wird vorgeworfen, dass er an einem Überfall auf einen Goldtransport beteiligt ist. Der junge Mann, der zur Sicherung der wertvollen...<br/>
     2015-08-28 07:55:01   SAT.1_Gold_link http://www.klack.de/tv-programm/fernsehsendung/1504754/bonanza.html
     2015-08-28 07:55:01   SAT.1_Gold_next Bonanza
     2015-08-28 07:55:01   SAT.1_Gold_next_details Westernserie, USA 1969<br/>Staffel: 10 / Folge: 26<br/>Laufzeit: 50 Minuten<br/>Mit: Lorne Greene, Dan Blocker, Michael Landon, Will Geer, Pernell Roberts, David Canary<br/>Regie: Leon Benson<br/><br/>Der kleine Ort Butlerville wird von seinem Gründer und Namensgeber Calvin Butler mit harter Hand regiert. Als eine alte Freundin von Candy dort mit...<br/>
     2015-08-28 07:55:01   SAT.1_Gold_next_link http://www.klack.de/tv-programm/fernsehsendung/1504755/bonanza.html
     2015-08-28 07:55:01   SAT.1_Gold_next_time 08:45
     2015-08-28 07:55:01   SAT.1_Gold_time 07:55
     2015-08-28 07:55:01   SAT.1_details   Morgenmagazin, D 2015<br/>Laufzeit: 270 Minuten<br/>Original-Titel: Sat.1-Frühstücksfernsehen<br/>Gäste: Tamme Hanken Kusmagk<br/>
     2015-08-28 07:55:01   SAT.1_link      http://www.klack.de/tv-programm/fernsehsendung/1504802/fruehstuecksfernsehen.html
     2015-08-28 07:55:01   SAT.1_next      Auf Streife
     2015-08-28 07:55:01   SAT.1_next_details Pseudo-Doku-Soap, D 2015<br/>Laufzeit: 60 Minuten<br/><br/>Die Sendereihe dreht sich um Alltagsgeschichten aus dem beruflichen Leben der Gesetzeshüter. Dabei werden Fälle nachgestellt, die sich tatsächlich so...<br/>
     2015-08-28 07:55:01   SAT.1_next_link http://www.klack.de/tv-programm/fernsehsendung/1504803/auf-streife.html
     2015-08-28 07:55:01   SAT.1_next_time 10:00
     2015-08-28 07:55:01   SAT.1_time      05:30
     2015-08-28 07:55:01   SWR_BW          Die Rezeptsucherin
     2015-08-28 07:55:01   SWR_BW_details  Gourmetreportage, D<br/>Laufzeit: 30 Minuten<br/>
     2015-08-28 07:55:01   SWR_BW_link     http://www.klack.de/tv-programm/fernsehsendung/1504405/die-rezeptsucherin.html
     2015-08-28 07:55:01   SWR_BW_next     Eisenbahn-Romantik - Die Transsibirische Eisenbahn - In Chruschtschows Wagen durch Sibirien
     2015-08-28 07:55:01   SWR_BW_next_details Eisenbahnmagazin, D 2006<br/>Laufzeit: 30 Minuten<br/>Original-Titel: Eisenbahn-Romantik<br/><br/>Eine Fahrt auf der Transsibirischen Eisenbahn vom Baikalsee nach Moskau. Entlang am Ufer des größten Trinkwasserspeichers der Welt durch die...<br/>
     2015-08-28 07:55:01   SWR_BW_next_link http://www.klack.de/tv-programm/fernsehsendung/1504404/eisenbahn-romantik-die-transsibirische-eisenbahn-in-chruschtschows-wagen-durch-sibirien.html
     2015-08-28 07:55:01   SWR_BW_next_time 08:20
     2015-08-28 07:55:01   SWR_BW_time     07:50
     2015-08-28 07:55:01   SWR_RP          Die Rezeptsucherin
     2015-08-28 07:55:01   SWR_RP_details  Gourmetreportage, D<br/>Laufzeit: 30 Minuten<br/>
     2015-08-28 07:55:01   SWR_RP_link     http://www.klack.de/tv-programm/fernsehsendung/1504364/die-rezeptsucherin.html
     2015-08-28 07:55:01   SWR_RP_next     Eisenbahn-Romantik - Die Transsibirische Eisenbahn - In Chruschtschows Wagen durch Sibirien
     2015-08-28 07:55:01   SWR_RP_next_details Eisenbahnmagazin, D 2006<br/>Laufzeit: 30 Minuten<br/>Original-Titel: Eisenbahn-Romantik<br/><br/>Eine Fahrt auf der Transsibirischen Eisenbahn vom Baikalsee nach Moskau. Entlang am Ufer des größten Trinkwasserspeichers der Welt durch die...<br/>
     2015-08-28 07:55:01   SWR_RP_next_link http://www.klack.de/tv-programm/fernsehsendung/1504363/eisenbahn-romantik-die-transsibirische-eisenbahn-in-chruschtschows-wagen-durch-sibirien.html
     2015-08-28 07:55:01   SWR_RP_next_time 08:20
     2015-08-28 07:55:01   SWR_RP_time     07:50
     2015-08-28 07:55:01   Super_RTL       Caillou
     2015-08-28 07:55:01   Super_RTL_details Zeichentrickserie, CDN 2010<br/>Staffel: 4 / Folge: 21<br/>Laufzeit: 30 Minuten<br/>Regie: Larry Jacobs<br/><br/>1. Geschichte: Mami, Papi und Oma wollen Opi mit einer Party überraschen. Und damit Opi nichts von den Vorbereitungen mitbekommt, wandert Caillou mit...<br/>
     2015-08-28 07:55:01   Super_RTL_link  http://www.klack.de/tv-programm/fernsehsendung/1504240/caillou.html
     2015-08-28 07:55:01   Super_RTL_next  Dragons - Die Reiter von Berk
     2015-08-28 07:55:01   Super_RTL_next_details Animationsserie, USA 2012<br/>Staffel: 1 / Folge: 7<br/>Laufzeit: 30 Minuten<br/>Original-Titel: Dragons: Riders of Berk<br/>Regie: John Eng<br/><br/>Berk wird von Alvin dem Heimtückischen besetzt. Er ist gekommen um den Drachenbewzinger zu entführen, über den er schon so viel gehört hat.<br/>
     2015-08-28 07:55:01   Super_RTL_next_link http://www.klack.de/tv-programm/fernsehsendung/1504241/dragons-die-reiter-von-berk.html
     2015-08-28 07:55:01   Super_RTL_next_time 08:00
     2015-08-28 07:55:01   Super_RTL_time  07:30
     2015-08-28 07:55:01   TELE_5          Dauerwerbesendung
     2015-08-28 07:55:01   TELE_5_details  Werbesendung, D<br/>Laufzeit: 371 Minuten<br/>
     2015-08-28 07:55:01   TELE_5_link     http://www.klack.de/tv-programm/fernsehsendung/1504496/dauerwerbesendung.html
     2015-08-28 07:55:01   TELE_5_next     Tele 5 Bizarre - Der wirklich andere Video-Snack für zwischendurch
     2015-08-28 07:55:01   TELE_5_next_details Clipshow, D<br/>Laufzeit: 10 Minuten<br/>Original-Titel: TELE 5 Bizarre<br/><br/>Anders ist besser! Ob Kochen mit Bloggerin und Sängerin Murielle Stadelmann, TELE 5-Gym mit Richard Simmons oder Yoga - TELE 5 zeigt zwischendrin...<br/>
     2015-08-28 07:55:01   TELE_5_next_link http://www.klack.de/tv-programm/fernsehsendung/1504497/tele-5-bizarre-der-wirklich-andere-video-snack-fuer-zwischendurch.html
     2015-08-28 07:55:01   TELE_5_next_time 14:05
     2015-08-28 07:55:01   TELE_5_time     07:54
     2015-08-28 07:55:01   VOX             Hilf mir doch!
     2015-08-28 07:55:01   VOX_details     Dokusoap, D<br/>Laufzeit: 65 Minuten<br/><br/>Die Ehe von Stefanie und Andreas Reinertz steht vor dem Aus. Die Leidtragenden sind die drei gemeinsamen Kinder. Vor allem die 16-jährige Caroline...<br/>
     2015-08-28 07:55:01   VOX_link        http://www.klack.de/tv-programm/fernsehsendung/1504411/hilf-mir-doch.html
     2015-08-28 07:55:01   VOX_next        Verklag mich doch!
     2015-08-28 07:55:01   VOX_next_details Pseudo-Doku-Soap, D 2014<br/>Laufzeit: 65 Minuten<br/><br/>&quot;Dein Vater ist ein eiskalter Mörder&quot; - Diese Worte hört die heute 18-jährige Hanna Meißner als Kind zum ersten Mal. Für sie bricht damals eine Welt...<br/>
     2015-08-28 07:55:01   VOX_next_link   http://www.klack.de/tv-programm/fernsehsendung/1503605/verklag-mich-doch.html
     2015-08-28 07:55:01   VOX_next_time   08:05
     2015-08-28 07:55:01   VOX_time        07:00
     2015-08-28 07:55:01   WDR             Un mensaje de Mia - Noticias de Madrid - Folgen 1-9
     2015-08-28 07:55:01   WDR_details     Sprachkurs<br/>Laufzeit: 45 Minuten<br/><br/>Mia lebt in Madrid, Gabriel in Deutschland. Damit Gabriel sich besser vorstellen kann, wie Mias Leben in Madrid aussieht, schickt sie ihm viele...<br/>
     2015-08-28 07:55:01   WDR_link        http://www.klack.de/tv-programm/fernsehsendung/1504514/un-mensaje-de-mia-noticias-de-madrid-folgen-1-9.html
     2015-08-28 07:55:01   WDR_next        Planet Schule: Deutsch mit Socke (1)
     2015-08-28 07:55:01   WDR_next_details Bildungsprogramm, D<br/>Folge: 1<br/>Laufzeit: 15 Minuten<br/>Original-Titel: Deutsch mit Socke<br/><br/>Bei dem ungleichen Duo Esther und Socke geht es meistens turbulent zu, denn: Socke ist frech, rot, sehr dickköpfig - und, wie der Name schon sagt,...<br/>
     2015-08-28 07:55:01   WDR_next_link   http://www.klack.de/tv-programm/fernsehsendung/1504515/planet-schule-deutsch-mit-socke-1.html
     2015-08-28 07:55:01   WDR_next_time   08:05
     2015-08-28 07:55:01   WDR_time        07:20
     2015-08-28 07:55:01   ZDF             Morgenmagazin - Das ARD-Frühstücksfernsehen
     2015-08-28 07:55:01   ZDF_details     Morgenmagazin, D 2015<br/>Laufzeit: 120 Minuten<br/>Original-Titel: Morgenmagazin<br/><br/>Start in den Tag mit Nachrichten, Informationen und Unterhaltung.<br/>
     2015-08-28 07:55:01   ZDF_link        http://www.klack.de/tv-programm/fernsehsendung/1505390/morgenmagazin-das-ard-fruehstuecksfernsehen.html
     2015-08-28 07:55:01   ZDF_next        heute Xpress
     2015-08-28 07:55:01   ZDF_next_details Nachrichten, D 2015<br/>Laufzeit: 5 Minuten<br/>
     2015-08-28 07:55:01   ZDF_next_link   http://www.klack.de/tv-programm/fernsehsendung/1505391/heute-xpress.html
     2015-08-28 07:55:01   ZDF_next_time   09:00
     2015-08-28 07:55:01   ZDF_time        07:00
     2015-08-28 07:55:01   sixx            Full House
     2015-08-28 07:55:01   sixx_details    Sitcom, USA 1992<br/>Staffel: 6 / Folge: 10<br/>Laufzeit: 35 Minuten<br/>Mit: Bob Saget, John Stamos, Dave Coulier, Candace Cameron Bure, Jodie Sweetin, Ashley Olsen<br/>Regie: John Tracy<br/><br/>Stephanie will sich – wie all ihre Freundinnen - Ohrlöcher stechen lassen. Bei Danny beißt sie damit jedoch auf Granit. Stephanie merkt schnell, dass...<br/>
     2015-08-28 07:55:01   sixx_link       http://www.klack.de/tv-programm/fernsehsendung/1505043/full-house.html
     2015-08-28 07:55:01   sixx_next       Emergency Room - Die Notaufnahme
     2015-08-28 07:55:01   sixx_next_details Krankenhausserie, USA 2001<br/>Staffel: 7 / Folge: 10<br/>Laufzeit: 55 Minuten<br/>Original-Titel: ER<br/>Mit: Anthony Edwards, Noah Wyle, Laura Innes, Alex Kingston, Wen Ming-Na, Paul McCrane<br/>Regie: David Nutter<br/><br/>Wegen eines Tumors unterzieht sich Greene in einer New Yorker Spezialklinik einer Gehirnoperation. Obwohl Komplikationen auftreten, behält...<br/>
     2015-08-28 07:55:01   sixx_next_link  http://www.klack.de/tv-programm/fernsehsendung/1503621/emergency-room-die-notaufnahme.html
     2015-08-28 07:55:01   sixx_next_time  08:05
     2015-08-28 07:55:01   sixx_time       07:30
   Request:
     data
     header
     ignoreredirects 0
     retryCount 0
     type       Get1
     url        http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/-1/free.html
   Sslargs:
Attributes:
   disable    1
   event-on-change-reading .*
   event-on-update-reading Images
   get1Name   TVProgramm
   get1URL    http://www.klack.de/fernsehprogramm/was-laeuft-gerade/0/-1/free.html
   reading011Name ARD
   reading011Regex <span class="stationName">ARD<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading012Name ARD_time
   reading012Regex <span class="stationName">ARD<\/span>[\w\W]*?<td class="time">\s*(.*?)\s*<
   reading013Name ARD_details
   reading013Regex <span class="stationName">ARD<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br\/>\s*(.*?)(<img|<\/div)
   reading014Expr "http://www.klack.de".$val
   reading014Name ARD_link
   reading014Regex <span class="stationName">ARD<\/span>[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading015Name ARD_image
   reading015Regex <span class="stationName">ARD<\/span>[\w\W]*?<td class="image left">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="ARD:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading016Name ARD_next
   reading016Regex <span class="stationName">ARD<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading017Name ARD_next_time
   reading017Regex <span class="stationName">ARD<\/span>[\w\W]*?<td class="time[\w\W]*?Row">\s*(.*?)\s*<div
   reading018Name ARD_next_details
   reading018Regex <span class="stationName">ARD<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br/>\s*(.*?)(<img|<\/div)
   reading019Expr "http://www.klack.de".$val
   reading019Name ARD_next_link
   reading019Regex <span class="stationName">ARD<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading020Name ARD_next_image
   reading020Regex <span class="stationName">ARD<\/span>[\w\W]*?<td class="image">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="ARD:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading021Name ZDF
   reading021Regex <span class="stationName">ZDF<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading022Name ZDF_time
   reading022Regex <span class="stationName">ZDF<\/span>[\w\W]*?<td class="time">\s*(.*?)\s*<
   reading023Name ZDF_details
   reading023Regex <span class="stationName">ZDF<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br\/>\s*(.*?)(<img|<\/div)
   reading024Expr "http://www.klack.de".$val
   reading024Name ZDF_link
   reading024Regex <span class="stationName">ZDF<\/span>[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading025Name ZDF_image
   reading025Regex <span class="stationName">ZDF<\/span>[\w\W]*?<td class="image left">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="ZDF:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading026Name ZDF_next
   reading026Regex <span class="stationName">ZDF<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading027Name ZDF_next_time
   reading027Regex <span class="stationName">ZDF<\/span>[\w\W]*?<td class="time[\w\W]*?Row">\s*(.*?)\s*<div
   reading028Name ZDF_next_details
   reading028Regex <span class="stationName">ZDF<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br/>\s*(.*?)(<img|<\/div)
   reading029Expr "http://www.klack.de".$val
   reading029Name ZDF_next_link
   reading029Regex <span class="stationName">ZDF<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading030Name ZDF_next_image
   reading030Regex <span class="stationName">ZDF<\/span>[\w\W]*?<td class="image">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="ZDF:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading031Name MDR
   reading031Regex <span class="stationName">MDR<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading032Name MDR_time
   reading032Regex <span class="stationName">MDR<\/span>[\w\W]*?<td class="time">\s*(.*?)\s*<
   reading033Name MDR_details
   reading033Regex <span class="stationName">MDR<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br\/>\s*(.*?)(<img|<\/div)
   reading034Expr "http://www.klack.de".$val
   reading034Name MDR_link
   reading034Regex <span class="stationName">MDR<\/span>[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading035Name MDR_image
   reading035Regex <span class="stationName">MDR<\/span>[\w\W]*?<td class="image left">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="MDR:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading036Name MDR_next
   reading036Regex <span class="stationName">MDR<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading037Name MDR_next_time
   reading037Regex <span class="stationName">MDR<\/span>[\w\W]*?<td class="time[\w\W]*?Row">\s*(.*?)\s*<div
   reading038Name MDR_next_details
   reading038Regex <span class="stationName">MDR<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br/>\s*(.*?)(<img|<\/div)
   reading039Expr "http://www.klack.de".$val
   reading039Name MDR_next_link
   reading039Regex <span class="stationName">MDR<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading040Name MDR_next_image
   reading040Regex <span class="stationName">MDR<\/span>[\w\W]*?<td class="image">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="MDR:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading041Name SAT.1
   reading041Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading042Name SAT.1_time
   reading042Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<td class="time">\s*(.*?)\s*<
   reading043Name SAT.1_details
   reading043Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br\/>\s*(.*?)(<img|<\/div)
   reading044Expr "http://www.klack.de".$val
   reading044Name SAT.1_link
   reading044Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading045Name SAT.1_image
   reading045Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<td class="image left">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="SAT.1:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading046Name SAT.1_next
   reading046Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading047Name SAT.1_next_time
   reading047Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<td class="time[\w\W]*?Row">\s*(.*?)\s*<div
   reading048Name SAT.1_next_details
   reading048Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br/>\s*(.*?)(<img|<\/div)
   reading049Expr "http://www.klack.de".$val
   reading049Name SAT.1_next_link
   reading049Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading050Name SAT.1_next_image
   reading050Regex <span class="stationName">SAT.1<\/span>[\w\W]*?<td class="image">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="SAT.1:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading051Name RTL
   reading051Regex <span class="stationName">RTL<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading052Name RTL_time
   reading052Regex <span class="stationName">RTL<\/span>[\w\W]*?<td class="time">\s*(.*?)\s*<
   reading053Name RTL_details
   reading053Regex <span class="stationName">RTL<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br\/>\s*(.*?)(<img|<\/div)
   reading054Expr "http://www.klack.de".$val
   reading054Name RTL_link
   reading054Regex <span class="stationName">RTL<\/span>[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading055Name RTL_image
   reading055Regex <span class="stationName">RTL<\/span>[\w\W]*?<td class="image left">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="RTL:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading056Name RTL_next
   reading056Regex <span class="stationName">RTL<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading057Name RTL_next_time
   reading057Regex <span class="stationName">RTL<\/span>[\w\W]*?<td class="time[\w\W]*?Row">\s*(.*?)\s*<div
   reading058Name RTL_next_details
   reading058Regex <span class="stationName">RTL<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br/>\s*(.*?)(<img|<\/div)
   reading059Expr "http://www.klack.de".$val
   reading059Name RTL_next_link
   reading059Regex <span class="stationName">RTL<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading060Name RTL_next_image
   reading060Regex <span class="stationName">RTL<\/span>[\w\W]*?<td class="image">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="RTL:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading061Name RTL_II
   reading061Regex <span class="stationName">RTL II<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading062Name RTL_II_time
   reading062Regex <span class="stationName">RTL II<\/span>[\w\W]*?<td class="time">\s*(.*?)\s*<
   reading063Name RTL_II_details
   reading063Regex <span class="stationName">RTL II<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br\/>\s*(.*?)(<img|<\/div)
   reading064Expr "http://www.klack.de".$val
   reading064Name RTL_II_link
   reading064Regex <span class="stationName">RTL II<\/span>[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading065Name RTL_II_image
   reading065Regex <span class="stationName">RTL II<\/span>[\w\W]*?<td class="image left">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="RTL II:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading066Name RTL_II_next
   reading066Regex <span class="stationName">RTL II<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading067Name RTL_II_next_time
   reading067Regex <span class="stationName">RTL II<\/span>[\w\W]*?<td class="time[\w\W]*?Row">\s*(.*?)\s*<div
   reading068Name RTL_II_next_details
   reading068Regex <span class="stationName">RTL II<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br/>\s*(.*?)(<img|<\/div)
   reading069Expr "http://www.klack.de".$val
   reading069Name RTL_II_next_link
   reading069Regex <span class="stationName">RTL II<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading070Name RTL_II_next_image
   reading070Regex <span class="stationName">RTL II<\/span>[\w\W]*?<td class="image">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="RTL II:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading071Name Pro7
   reading071Regex <span class="stationName">Pro7<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading072Name Pro7_time
   reading072Regex <span class="stationName">Pro7<\/span>[\w\W]*?<td class="time">\s*(.*?)\s*<
   reading073Name Pro7_details
   reading073Regex <span class="stationName">Pro7<\/span>[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br\/>\s*(.*?)(<img|<\/div)
   reading074Expr "http://www.klack.de".$val
   reading074Name Pro7_link
   reading074Regex <span class="stationName">Pro7<\/span>[\w\W]*?<div class="content">\s*<a\s*href="(.*?)"
   reading075Name Pro7_image
   reading075Regex <span class="stationName">Pro7<\/span>[\w\W]*?<td class="image left">\s*<a\s*href="\/[\w\d\/\.\-]*?"\s*title="Pro7:[^<]*?<img\s*class="epgImage" src="(.*?)"
   reading076Name Pro7_next
   reading076Regex <span class="stationName">Pro7<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>\s*(.*?)\s*<\/a>
   reading077Name Pro7_next_time
   reading077Regex <span class="stationName">Pro7<\/span>[\w\W]*?<td class="time[\w\W]*?Row">\s*(.*?)\s*<div
   reading078Name Pro7_next_details
   reading078Regex <span class="stationName">Pro7<\/span>[\w\W]*?<td class="time[\w\W]*?Row">[\w\W]*?<div[\w\W]*?<div class="content">\s*<a[\w\W]*?>[\w\W]*?<\/a>\s*<br/>\s*(.*?)(<img|<\/div)
   reading079Expr "http://www.klack.de".$val
   reading079Name Pro7_nex

StefanStrobel

Hallo Ronny,

Du hast das disable Attribut auf 1 gesetzt. Damit sind alle Abfrage-Funktionen deaktiviert. Der get-Befehl ist vorhanden und wenn Du ihn ausführst sollte im Log (Level 5) die Meldung kommen: get called with TVProgramm but device is disabled.

Es kann sein, dass ich in einer frühen Version das disable-Attribut noch nicht für alle Funktionen implementiert hatte.
Wenn Du nur keine automatischen Updates machen möchtest, kannst Du einfach beim Define als Intervall 0 angeben.
Oder Du Kannst Das Attribut enableControlSet setzen und dann hast Du einen Set für start, stop, reread etc.

Gruss
    Stefan

RoBra81


andies

#19
Hallo Stefan, ich weiß nicht, ob das der richtige Thread zum Fragestellen ist; ich versuche es trotzdem. Ich möchte gern meinen Speedport 724V mit FHEM auslesen (bisher mache ich das extern mit python, siehe https://forum.fhem.de/index.php/topic,65636.0.html). Das ruft ja gerade nach HTTPMOD. Ich weiß, dass der Ablauf wie folgt ist:

  • Man loggt sich auf http://192.168.2.1/data/Login.json ein und verwendet dabei als Passwort den md5hash (den ich mir aber händisch erzeugt habe, also nicht in FHEM)
  • Dann liefert der Speedport den _httoken zurück, der in Zukunft in allen Webseiten gebraucht wird.
Ich scheitere anscheinend schon an dem ersten Schritt und kann den nicht interpretieren. Ich habe folgendes
Internals:
   BUSY       0
   CFGFN
   CHANGED
   DEF        none 0
   Interval   0
   LASTSEND   1494671337.23623
   MainURL
   ModuleVersion 3.3.9 - 23.3.2017
   NAME       Speedport
   NR         10358
   STATE      ???
   TRIGGERTIME 0
   TRIGGERTIME_FMT
   TYPE       HTTPMOD
   addr       http://192.168.2.1:80
   buf        HTTP/1.1 200 OK

Server: Apache

Pragma: no-cache

Cache-Control: max-age=0, must-revalidate

Connection: close

Content-type: application/javascript

Pragma: no-cache

Cache-Control: no-cache

Expires: -1



[{"vartype":"status","varid":"status","varvalue":"ok"}]
   code       200
   conn
   data       {"password" : "HuuupsXXXXXX"}
   displayurl http://192.168.2.1/data/Login.json
   header     Content-Type: application/json
   host       192.168.2.1
   httpheader HTTP/1.1 200 OK

Server: Apache

Pragma: no-cache

Cache-Control: max-age=0, must-revalidate

Connection: close

Content-type: application/javascript

Pragma: no-cache

Cache-Control: no-cache

Expires: -1
   httpversion 1.0
   hu_blocking 0
   hu_filecount 1
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /data/Login.json
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.2.1/data/Login.json
   value      0
   QUEUE:
   Readings:
   Request:
     data       {"password" : "HuuuupsXXXXXXX"}
     header     Content-Type: application/json
     ignoreredirects 0
     retryCount 0
     type       get01
     url        http://192.168.2.1/data/Login.json
     value      0
   Sslargs:
Attributes:
   get01Data  {"password" : "HuuupsXXXXXXXXX"}
   get01Header Content-Type: application/json
   get01Name  Login
   get01Regex _httoken = (\d*)
   get01URL   http://192.168.2.1/data/Login.json
   group      Speedport
   room       System
   userattr   get01Data get01Header get01Name get01Regex get01URL
   verbose    5

und der Logfile liefert
2017.05.13 12:25:42 3: Speedport: URL is none, periodic updates will be limited to explicit GetXXPoll attribues (if defined)
2017.05.13 12:25:42 3: Speedport: interval is 0, no periodic updates will done.
2017.05.13 12:25:42 3: Speedport: Defined without URL
2017.05.13 12:28:57 5: Speedport: get called with Login
2017.05.13 12:28:57 5: Speedport: get found option Login in attribute get01Name
2017.05.13 12:28:57 4: Speedport: get will now request Login, no optional value
2017.05.13 12:28:57 4: Speedport: AddToQueue adds get01, initial queue len: 0
2017.05.13 12:28:57 5: Speedport: AddToQueue adds type get01 to URL http://192.168.2.1/data/Login.json, data {"password" : "Aha_aha_ah_XXXXXXXXX"}, header Content-Type: application/json, retry 0
2017.05.13 12:28:57 5: Speedport: HandleSendQueue called, qlen = 1
2017.05.13 12:28:57 4: Speedport: HandleSendQueue sends request type get01 to URL http://192.168.2.1/data/Login.json,
data: {"password" : "und_da_ist_er_wieder_XXXXXXXX"},
header: Content-Type: application/json,
timeout 2
2017.05.13 12:28:57 4: HttpUtils url=http://192.168.2.1/data/Login.json
2017.05.13 12:28:57 5: HttpUtils request header:
POST /data/Login.json HTTP/1.0
Host: 192.168.2.1
User-Agent: fhem
Content-Type: application/json
Content-Length: 49

2017.05.13 12:28:57 4: http://192.168.2.1/data/Login.json: HTTP response code 200
2017.05.13 12:28:57 4: HttpUtils http://192.168.2.1/data/Login.json: Got data, length: 55
2017.05.13 12:28:57 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.13 12:28:57 4: Speedport: Read callback: request type was get01 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1,
Body: [{"vartype":"status","varid":"status","varvalue":"ok"}]
2017.05.13 12:28:57 5: Speedport: ExtractSid called, context get, num 01
2017.05.13 12:28:57 4: Speedport: CheckAuth decided no authentication required
2017.05.13 12:28:57 5: Speedport: ExtractReading Login with regex /_httoken = (\d*)/...
2017.05.13 12:28:57 5: Speedport: ExtractReading Login did not match
2017.05.13 12:28:57 5: Speedport: UpdateReadingList created list of reading.* nums to parse during getUpdate as
2017.05.13 12:28:57 3: Speedport: Read response to get01 didn't match any Reading
2017.05.13 12:28:57 5: Speedport: HandleSendQueue called, qlen = 0

Dem entnehme ich, dass er das token nicht lesen kann. Ist das richtig? Ist also eventuell der Seitenaufruf falsch?

<EDIT> Inzwischen weiß ich, was schief läuft. Der Login geht über '/data/Login.json', der token muss aber aus '/html/content/overview/index.html?lang=de' ausgelesen werden. Das geht dann wohl über 02name, oder? Probiere ich gleich mal aus...</EDIT>

<EDIT2> Klappt nicht. Er scheint auch nicht das richtige regex zu lesen (auch nach Neustart von FHEM nicht):
Speedport: Read starts parsing response to get01 with defined readings:
2017.05.13 13:03:59 3: Speedport: Read response to get01 didn't match any Reading

Es muss doch get02 sein. get01regex gibt es gar nicht mehr,

get01Header Content-Type: application/json
get01Name Login
get01URL http://192.168.2.1/data/Login.json
get02Header Content-Type: text/html
get02Name TokenAuslesen
get02Regex _httoken = (\d*)
get02URL http://192.168.2.1/html/content/overview/index.html?lang=de
<EDIT2>
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Also ich merke, ich habe so ganz grundsätzliche Fragen zu dem Modul. Wenn ich dort mehrere gets definiere, get01... bis get03... - werden die dann nacheinander ausgeführt? Wenn ja, wieso gibt es dann in dem Modul noch den Befehl get <get02Name>, wenn das doch bei get01URL mit abgefrühstückt wird? Wenn nein, wozu gibt es dann delay?

Weiter verstehe ich das mit dem Replacement nicht. Das wird Regex-gesteuert. Also habe ich in einer URL eingetragen %%token%% und hoffe, dass dieser Ausdruck durch den richtigen Token gesetzt wird. Der wiederum steht in einem Reading. Ich dachte immer, das kriege ich jetzt so hin
replacement01Mode text
replacement01Regex %%token%%
get01Replacement01Value ReadingsVal($name, "Token", "0")

mir wird aber nur ein leerer String übergeben. Ich vermute, weil die Abfolge der URLs (siehe mein erstes Problem) nicht oder nicht richtig eingehalten wird.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zudem habe ich ein Problem mit dem Speedport, das gibt keine Daten zurück; ich muss also nachforschen:
2017.05.13 20:58:03 5: HttpUtils request header:
GET /data/PhoneCalls.json?lang=de&_tn=558303753 HTTP/1.0 ##[<== Das, dachte ich, würde reichen. Tut es aber nicht.
Host: 192.168.2.1
User-Agent: fhem
Content-Type: application/json
Referer: http://192.168.2.1/html/content/overview/index.html?lang=de
Content-Length: 0

2017.05.13 20:58:03 4: http://192.168.2.1/data/PhoneCalls.json?lang=de&_tn=558303753: HTTP response code 302
2017.05.13 20:58:03 4: HttpUtils http://192.168.2.1/data/PhoneCalls.json?lang=de&_tn=558303753: Redirect to http://192.168.2.1:80/html/login/index.html
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel


andies

Danke, kurze Nachfrage: Die einzelnen get01, get02, get03-Kommandos werden nicht automatisch nacheinander ausgeführt, das sehe ich richtig - oder?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel

Hallo andies,

Die per get definierten Requests werden entweder mit einem Get-Befehl getriggert oder automatisch nach der Haupt-URL wenn getXXPoll auf 1 gesetzt wurde.
Steht im Wiki eigentlich ausführlich beschrieben:
https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_define_a_get_and_request_additional_data_with_its_own_request_from_a_device

Für das Login / Erzeugen von Sessions oder Tokens solltest Du die sid-Attribute verwenden. Dazu sind sie da. Die werden automatisch der Reihe nach ausgelöst wenn eine neue Anmeldung nötig ist (ReAuthRegex)

Gruß
     Stefan

andies

#25
Hallo Stefan,

vielleicht kannst Du mir nochmal helfen. Ich kriege es nicht hin. Ich habe eine Login-Prozedur beim furchtbaren Speedport, die ich inzwischen relativ gut nachgebaut habe, siehe folgender Code (mit Burp)
##########################################################################
## HIER GEHT ES LOS
##########################################################################
GET /html/login/index.html?lang=de HTTP/1.1
Host: speedport.ip
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://speedport.ip/html/content/overview/index.html?lang=de
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: lang=de
Connection: close
##########################################################################
#Der response liefert einen "_httoken = (\d+)", der ausgelesen werden muss
##########################################################################
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12869

usw (hier steht dann der _httoken)

##########################################################################
# erneut GET, das aber anscheinend unnötig ist, denn andere Programme zum Auslesen verwenden es nicht
##########################################################################
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1

[{"vartype":"value","varid":"device_name","varvalue":"Speedport W 724V"},{"vartype":"value","varid":"factorydefault","varvalue":"1"},{"vartype":"value","varid":"rebooting","varvalue":"0"},{"vartype":"value","varid":"router_state","varvalue":"OK"},{"vartype":"value","varid":"bngscrat","varvalue":"0"},{"vartype":"value","varid":"acsreach","varvalue":"0"},{"vartype":"value","varid":"provis_inet","varvalue":"004"},{"vartype":"value","varid":"provis_voip","varvalue":"004"},{"vartype":"value","varid":"save_fails","varvalue":"0"},{"vartype":"status","varid":"onlinestatus","varvalue":"online"},{"vartype":"value","varid":"days_online","varvalue":"31"},{"vartype":"value","varid":"time_online","varvalue":"01:19:27"},{"vartype":"value","varid":"user_disconnect_ppp","varvalue":"0"},{"vartype":"option","varid":"dualstack","varvalue":"1"},{"vartype":"option","varid":"always_online","varvalue":"1"},{"vartype":"page_title","varid":"title","varvalue":"Speedport W 724V - Konfigurationsprogramm"},{"vartype":"status","varid":"loginstate","varvalue":"0"},{"vartype":"value","varid":"pwd_changed","varvalue":"0"},{"vartype":"value","varid":"domain_name","varvalue":"Speedport_W_724V_01011603_05_020"},{"vartype":"option","varid":"askAssist","varvalue":"0"},{"vartype":"option","varid":"internetFinished","varvalue":"1"},{"vartype":"option","varid":"phoneFinished","varvalue":"1"},{"vartype":"option","varid":"wlanFinished","varvalue":"1"},{"vartype":"status","varid":"login","varvalue":"false"}]

##########################################################################
# erneut GET, das auch anscheinend unnötig ist, denn andere Programme zum Auslesen verwenden es nicht
##########################################################################
GET /html/login/index.html HTTP/1.1
Host: speedport.ip
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: image/webp,image/*,*/*;q=0.8
Referer: http://speedport.ip/html/login/index.html?lang=de
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: lang=de
Connection: close

##########################################################################
# jetzt ein POST, bei dem der _httoken genutzt werden muss
##########################################################################
POST /data/Login.json HTTP/1.1
Host: speedport.ip
Content-Length: 69
Accept: application/json, text/javascript, */*
Origin: http://speedport.ip
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://speedport.ip/html/login/index.html?lang=de
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: lang=de
Connection: close

password=zeigeichheutemalnicht&showpw=0&httoken=1744034713 # <== HIER MUSS DER TOKEN STEHEN
##########################################################################
und danach ist man drin


Mir gelingt es nicht, diese Schrittfolge in HTTPMOD nachzubauen. Was ich derzeit habe, ist folgendes

Internals:
   BUSY       0
   CHANGED
   DEF        none 0
   Interval   0
   LASTSEND   1495400683.33828
   MainURL
   ModuleVersion 3.3.11 - 8.5.2017
   NAME       Speedport
   NR         149
   ReplacementEnabled 1
   STATE      ???
   TRIGGERTIME 0
   TRIGGERTIME_FMT
   TYPE       HTTPMOD
   addr       http://speedport.ip:80
   buf        HTTP/1.1 200 OK

Server: Apache

Pragma: no-cache

Cache-Control: max-age=0, must-revalidate

Connection: close

Content-type: application/javascript

Pragma: no-cache

Cache-Control: no-cache

Expires: -1



[{"vartype":"status","varid":"status","varvalue":"ok"}]
   code       200
   conn
   data       {"password" : "schonwiederdaspasswortalsonein", "showpw": "0", "httoken": "1685020049"}
   displayurl http://speedport.ip/data/Login.json
   header     Content-Type: text/html

Content-Type: application/json

Referer: http://speedport.ip/html/login/index.html?lang=de
   host       speedport.ip
   httpheader HTTP/1.1 200 OK

Server: Apache

Pragma: no-cache

Cache-Control: max-age=0, must-revalidate

Connection: close

Content-type: application/javascript

Pragma: no-cache

Cache-Control: no-cache

Expires: -1
   httpversion 1.0
   hu_blocking 0
   hu_filecount 37
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /data/Login.json
   protocol   http
   redirects  0
   timeout    2
   url        http://speedport.ip/data/Login.json
   value      0
   QUEUE:
   Readings:
     2017-05-13 18:49:51   Login           HTTP/1.1 200 OK
     2017-05-13 20:44:13   Telefonliste    HTTP/1.1 200 OK
     2017-05-21 23:03:24   Token           1685020049
   Request:
     data       password=uupsdashaetteichfastvergessen&showpw=0&httoken=%%token%%
     header     Content-Type: text/html

Content-Type: application/json

Referer: http://speedport.ip/html/login/index.html?lang=de
     ignoreredirects 0
     retryCount 0
     type       get02
     url        http://speedport.ip/data/Login.json
     value      0
   Defptr:
     Readingbase:
       Token      get
     Readingnum:
       Token      01
     Readingoutdated:
     Requestreadings:
       Get01:
         Token      get 01
   Sslargs:
Attributes:
   get01Header Content-Type: text/html
   get01Name  Token
   get01Regex _httoken = (\d*)
   get01URL   http://speedport.ip/html/login/index.html?lang=de
   get02Data  password=neindaszeigeichimmernochnicht&showpw=0&httoken=%%token
   get02Header1 Content-Type: application/json
   get02Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
   get02Name  Login
   get02Replacement01Value Token
   get02URL   http://speedport.ip/data/Login.json
   get03Header1 Content-Type: application/json
   get03Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
   get03Name  Telefonliste
   get03Replacement01Value Token
   get03URL   http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=%%token%%
   group      Speedport
   replacement01Mode reading
   replacement01Regex %%token%%
   room       System
   userattr   get01Data get01Header get01Name get01Regex get01Replacement01Value get01URL get02Data get02Header1 get02Header2 get02Name get02Regex get02Replacement01Value get02URL get03Header get03Header1 get03Header2 get03Name get03Regex get03Replacement01Value get03URL replacement01Mode:reading,internal,text,expression,key replacement01Regex
   verbose    4


Was mache ich falsch? Wenn ich "get Token" und danach "get Login" aufrufe, wird auf die Ausgangsseite umgeleitet, weil irgendwas nicht stimmt.

<EDIT> Ich habe es anscheinend geschafft (und ich werde die unten stehenden Einträge daher löschen). Die Fehler, die ich gemacht habe, waren die folgenden:

  • Ich habe das richtige Format der Daten nicht eingegeben. Ich hatte JSON gelesen und dachte, ich müsste die Daten auch im Format JSON übergeben.
    Mit Burp habe ich aber erkannt, dass statt dessen die Daten in einer Zeile mit & und = eingegeben werden. Nachdem ich get02Data entsprechend richtig beschrieben hatte. klappte alles.
  • Ich hatte im Eifer des Gefechtes verschiedene Header definiert und nicht entsprechend gesäubert.
Trotz alledem ist das für jemanden, der sich wenig auskennt, eine ziemliche Herausforderung. Ich würde mir da eine gute Einleitung wünschen und habe, nachdem ich zwei Zeilen im Wiki geschrieben habe, gesehen, was für eine enorme Herausforderung das ist. Für einen Anfänger wäre so etwas wie eine knappe Einführung gut: Wann verwendet man set, wann get und wann reichen einfache Attribute? Im Wiki ist das am Anfang so, dass auf die advanced Konfiguration verwiesen wird, die dann aber wieder sehr herausfordernd ist.

Inwieweit darf man denn den (an sich sehr umfangreichen und für die Komplexität des Moduls schon sehr aussagekräftigen) Wiki-Eintrag beeinflussen und könnte man eine erweiterte Darstellung diskutieren? Wenn auf der anderen Seite da nur zehn Leute mit ihren exotischen Speedports "meckern", also dann kann man das auch lassen. Selber Schuld, wer wie ich ein Speedport verwendet... 
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

Kann es sein, dass der Speedport ein Session-cookie setzt? Dann muss dieses Cookie systematisch mitgegeben werden.
Dafür
attr enableCookies
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

#27
Zitat von: StefanStrobel am 17 Mai 2017, 20:22:34
Für das Login / Erzeugen von Sessions oder Tokens solltest Du die sid-Attribute verwenden. Dazu sind sie da. Die werden automatisch der Reihe nach ausgelöst wenn eine neue Anmeldung nötig ist (ReAuthRegex)
Bin dabei das umzuschreiben (bisher hatte ich drei einzelne gets, die nacheinander aufgerufen werden). Das gibt es aber noch Probleme:
defmod Speedport HTTPMOD none 0
attr Speedport userattr sid1Data sid1Header sid1Name sid1Regex sid1URL sid2Data sid2Header1 sid2Header2 sid2URL sid3Header sid3Header1 sid3Header2 sid3URL
attr Speedport enableCookies 1
attr Speedport sid1URL http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid1Header Content-Type: text/html
attr Speedport sid1Regex _httoken = (\d*)
attr Speedport sid2URL http://speedport.ip/data/Login.json
attr Speedport sid2Header1 Content-Type: application/json
attr Speedport sid2Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2Data password=strenggeheim&showpw=0&httoken=$sid
attr Speedport get1URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
attr Speedport get1Header1 Content-Type: application/json
attr Speedport get1Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport get1Name Telefonliste
attr reAuthRegex .*\[\].*

Wenn ich jetzt get Telefonliste ausführe, wird erkannt, dass man authentifizieren muss und es wird auch im ersten Schritt erfolgreich authentifiziert, dann aber geht das irgendwie in die Hose:

2017.05.22 21:14:53 4: http://speedport.ip/data/Login.json: HTTP response code 200
2017.05.22 21:14:53 4: HttpUtils http://speedport.ip/data/Login.json: Got data, length: 692
2017.05.22 21:14:53 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:14:53 4: Speedport: Read callback: request type was auth2 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1,
Body: [{"vartype":"status","varid":"status","varvalue":"ok"},{"vartype":"status","varid":"login","varvalue":"success"},{"vartype":"value","varid":"router_state","varvalue":"OK"},{"vartype":"value","varid":"bngscrat","varvalue":"0"},{"vartype":"value","varid":"acsreach","varvalue":"0"},{"vartype":"value","varid":"provis_inet","varvalue":"004"},{"vartype":"value","varid":"provis_voip","varvalue":"004"},{"vartype":"value","varid":"save_fails","varvalue":"0"},{"vartype":"option","varid":"askAssist","varvalue":"0"},{"vartype":"option","varid":"internetFinished","varvalue":"1"},{"vartype":"option","varid":"phoneFinished","varvalue":"1"},{"vartype":"option","varid":"wlanFinished","varvalue":"1"}]
#
# dass login success oben zeigt, dass der login erfolgreich war!  <============
#
2017.05.22 21:14:53 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:14:53 5: Speedport: Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:14:53 4: Speedport: Cookie: aDuPtHhDA802a79adb60 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:14:53 5: Speedport: Set-Cookie: aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU; Path=/; HttpOnly
2017.05.22 21:14:53 4: Speedport: Cookie: aDuPtHhDA802a7aad814 Wert O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU Rest Path=/; HttpOnly
2017.05.22 21:14:53 5: Speedport: ExtractSid called, context sid, num 2
2017.05.22 21:14:54 5: Speedport: HandleSendQueue called, qlen = 1
2017.05.22 21:14:54 5: Speedport: HandleSendQueue is adding Cookies: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
2017.05.22 21:14:54 4: Speedport: HandleSendQueue sends request type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, No Data,
header: Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU,
timeout 2
2017.05.22 21:14:54 4: HttpUtils url=http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
2017.05.22 21:14:54 5: HttpUtils request header:
GET /data/PhoneCalls.json?_lang=de&_tn=$sid HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
Content-Length: 0

2017.05.22 21:14:54 4: http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: HTTP response code 200
2017.05.22 21:14:54 4: HttpUtils http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: Got data, length: 2
2017.05.22 21:14:54 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:14:54 4: Speedport: Read callback: request type was get1 retry 1,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1,
Body: [] # <==== und hier sind jetzt keine Daten mehr!!
2017.05.22 21:14:54 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:14:54 5: Speedport: Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:14:54 4: Speedport: Cookie: aDuPtHhDA802a79adb60 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:14:54 5: Speedport: ExtractSid called, context get, num 1
2017.05.22 21:14:54 5: Speedport: CheckAuth is checking buffer with ReAuthRegex .*\[\].*
2017.05.22 21:14:54 4: Speedport: CheckAuth decided new authentication required
2017.05.22 21:14:54 4: Speedport: Authentication still required but no retries left - did last authentication fail?
2017.05.22 21:14:54 5: Speedport: ExtractReading for context get, num 1 - no individual parse definition
2017.05.22 21:14:54 5: Speedport: Read starts parsing response to get1 with defined readings:
2017.05.22 21:14:54 3: Speedport: Read response to get1 didn't match any Reading
2017.05.22 21:14:54 5: Speedport: HandleSendQueue called, qlen = 0
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel

Hallo Andies,

Wenn der Request für get1 gesendet wird steht noch $sid drin. Das wird offenbar nicht durch das Token ersetzt. Leider enthält Dein Log-Auszug nicht den Teil, in dem das Token extrahiert werden müsste ...

Gruß
    Stefan

andies

Ich habe mal den ganzen Log kopiert, der ist nur riesig...
2017.05.22 21:23:52 5: Speedport: get called with Telefonliste
2017.05.22 21:23:52 5: Speedport: get found option Telefonliste in attribute get1Name
2017.05.22 21:23:52 4: Speedport: get will now request Telefonliste, no optional value
2017.05.22 21:23:52 4: Speedport: AddToQueue adds get1, initial queue len: 0
2017.05.22 21:23:52 5: Speedport: AddToQueue adds type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, no data, header Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de, retry 0
2017.05.22 21:23:52 5: Speedport: HandleSendQueue called, qlen = 1
2017.05.22 21:23:52 5: Speedport: HandleSendQueue is adding Cookies: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
2017.05.22 21:23:52 4: Speedport: HandleSendQueue sends request type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, No Data,
header: Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU,
timeout 2
2017.05.22 21:23:52 4: HttpUtils url=http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
2017.05.22 21:23:52 5: HttpUtils request header:
GET /data/PhoneCalls.json?_lang=de&_tn=$sid HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
Content-Length: 0

2017.05.22 21:23:52 4: http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: HTTP response code 200
2017.05.22 21:23:52 4: HttpUtils http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: Got data, length: 2
2017.05.22 21:23:52 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:23:52 4: Speedport: Read callback: request type was get1 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1,
Body: []
2017.05.22 21:23:52 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:23:52 5: Speedport: Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:52 4: Speedport: Cookie: aDuPtHhDA802a79adb60 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:52 5: Speedport: ExtractSid called, context get, num 1
2017.05.22 21:23:52 5: Speedport: CheckAuth is checking buffer with ReAuthRegex .*\[\].*
2017.05.22 21:23:52 4: Speedport: CheckAuth decided new authentication required
2017.05.22 21:23:52 4: Speedport: Auth called with Steps: 1 2
2017.05.22 21:23:52 4: Speedport: AddToQueue adds auth2, initial queue len: 0, prio
2017.05.22 21:23:52 5: Speedport: AddToQueue prepends type auth2 to URL http://speedport.ip/data/Login.json, data password=XXXXXXXXXXXXXXXXXXXXXXXXXXXX&showpw=0&httoken=$sid, header Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de, retry 0
2017.05.22 21:23:52 4: Speedport: AddToQueue adds auth1, initial queue len: 1, prio
2017.05.22 21:23:52 5: Speedport: AddToQueue prepends type auth1 to URL http://speedport.ip/html/login/index.html?lang=de, no data, header Content-Type: text/html, retry 0
2017.05.22 21:23:52 5: Speedport: HandleSendQueue called, qlen = 2
2017.05.22 21:23:52 5: Speedport: HandleSendQueue - minSendDelay not over, rescheduling
2017.05.22 21:23:52 4: Speedport: AddToQueue adds get1, initial queue len: 2
2017.05.22 21:23:52 5: Speedport: AddToQueue adds type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, no data, header Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de, retry 1
2017.05.22 21:23:52 5: Speedport: HandleSendQueue called, qlen = 3
2017.05.22 21:23:52 5: Speedport: HandleSendQueue - minSendDelay not over, rescheduling
2017.05.22 21:23:52 4: Speedport: CheckAuth requeued request get1 after auth, retryCount 0 ...
2017.05.22 21:23:53 5: Speedport: HandleSendQueue called, qlen = 3
2017.05.22 21:23:53 5: Speedport: HandleSendQueue is adding Cookies: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
2017.05.22 21:23:53 4: Speedport: HandleSendQueue sends request type auth1 to URL http://speedport.ip/html/login/index.html?lang=de, No Data,
header: Content-Type: text/html
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU,
timeout 2
2017.05.22 21:23:53 4: HttpUtils url=http://speedport.ip/html/login/index.html?lang=de
2017.05.22 21:23:53 5: HttpUtils request header:
GET /html/login/index.html?lang=de HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: text/html
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
Content-Length: 0

2017.05.22 21:23:53 4: http://speedport.ip/html/login/index.html?lang=de: HTTP response code 200
2017.05.22 21:23:53 4: HttpUtils http://speedport.ip/html/login/index.html?lang=de: Got data, length: 12868
2017.05.22 21:23:53 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12868
2017.05.22 21:23:53 4: Speedport: Read callback: request type was auth1 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12868,
Body: <!DOCTYPE html PUBLIC "../../xhtml1-transitional-translate.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:i18n="../">

<head>
  <title>Speedport Konfigurationsprogramm</title>

  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

  <meta name="author" content="DTAG J.Huber">

 
  <script type="text/javascript">
    /* <![CDATA[ */
    var rootRelative = '../';
    var JSONSource   = '../../data/Login.json';
    /* ]]> */
  </script>

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
<script type="text/javascript" src="../../lang/de.js"></script>
<script type="text/javascript" src="../../lang/err_de.js"></script>
<script type="text/javascript">
var _httoken = 962447134;
</script>


  <link rel="stylesheet" type="text/css" href="../../css/reset-fonts-grids.css" />
  <link rel="stylesheet" type="text/css" href="../../css/xstyle.css" />
  <link rel="stylesheet" type="text/css" href="../../css/tcombox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/branding.css" />
  <link rel="stylesheet" type="text/css" href="../../css/mainnav.css" />
  <link rel="stylesheet" type="text/css" href="../../css/subnav.css" />
  <link rel="stylesheet" type="text/css" href="../../css/securestatus.css" />
  <link rel="stylesheet" type="text/css" href="../../css/content.css" />
  <link rel="stylesheet" type="text/css" href="../../css/assistent.css" />
  <link rel="stylesheet" type="text/css" href="../../css/buttons.css" />
  <link rel="stylesheet" type="text/css" href="../../css/checkbox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/overview.css" />
  <link rel="stylesheet" type="text/css" href="../../css/formular.css" />
  <link rel="stylesheet" type="text/css" href="../../css/jquery.selectbox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/flyout.css" />
  <link rel="stylesheet" type="text/css" href="../../css/scrollbars.css" />
  <link rel="stylesheet" type="text/css" href="../../css/progressbar.css" />

  <!--[if gt IE 8]>
    <link rel="stylesheet" type="text/css" href="../../css/ie9specific.css" />
  <![endif]-->
  <!--[if lte IE 8]>
    <link rel="stylesheet" type="text/css" href="../../css/ie8specific.css" />
  <![endif]-->
  <!--[if lte IE 6]>
    <link rel="stylesheet" type="text/css" href="../../css/ie6specific.css" />
  <![endif]-->


  <script type="text/javascript" src="../../js/jquery-1.3.2.min1.js"></script>

  <script type="text/javascript" src="../../js/global.js"></script>
  <script type="text/javascript" src="../../js/external.libs.js"></script>
  <script type="text/javascript" src="../../js/jquery.logging.js"></script>
  <script type="text/javascript" src="../../js/jquery.i18n.js"></script>
  <script type="text/javascript" src="../../js/jquery.templateforms.js"></script>
  <script type="text/javascript" src="../../js/jquery-change.js"></script>
  <script type="text/javascript" src="../../js/jquery-addons.js"></script>

  <script type="text/javascript" src="../../js/jsonvariables.js"></script>

  <script type="text/javascript" src="../../js/md5.js"></script>


  <script type="text/javascript" src="../../js/pages/login.js"></script>


</head>

<body>
  <div id="container">
    <div id="brandingarea">

     
      <div id="brandingimage">
        <img src="../../images/icons/logo.png" alt="Deutsche Telekom" />
      </div>
      <div id="brandinglinks" class="keepfont">
        <div id="metalinks" class="keepfont">
          <ul class="keepfont">
            <li class="keepfont"><a class="keepfont" href="#" id="scale_down" style="font-size: 0.8em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="#" id="scale_up" style="font-size: 1.2em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=de">Deutsch</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=en">English</a></li>
            <li class="keepfont" id="ccenterlink"><a href="customerCareCenter" class="getLink" target="_blank" i18n:id="key_customerCenter">Kundencenter</a></li>
            <li class="keepfont" id="netmanlink"><a href="netManager" class="getLink" target="_blank" i18n:id="key_netManager">PC-Software</a></li>
            <li class="keepfont" id="logoutlink"><a class="keepfont" href="#" i18n:id="logout">Logout</a></li>
          </ul>
        </div>
      </div>
     

    </div>

    <div id="navigationarea">

     
      <div class="mainnav_left" id="mn_00">
         
      </div>
      <div class="mainnav_blank" id="mn_01">
         
      </div>
      <div>
        <a href="../manual/index.html?open=chp_manual" target="ba_win_SPW724V" class="mainnav_right" id="mn_07">

          <img src="../../images/icons/manual_30x30.png" width="30" height="30" title="Hilfe"/>

          <span i18n:id="category_manual">Hilfe</span>
        </a>
      </div>
     

    </div>

    <div id="maincontentarea">

      <div id="subnavigation" style="float:left;">

       
        <ul>
          <li>
            <a href="index.html" id="login_page">
              <span class="subnav"  i18n:id="nav_login">Speedport Login</span>
              <span class="tooltip" i18n:id="nav_login_tooltip" style="display: none;">Melden Sie sich an, um Ihren Speedport zu konfigurieren.</span>
            </a>
          </li>
          <li>
            <a href="status.html">
              <span class="subnav"  i18n:id="nav_status">Status-Informationen</span>
              <span class="tooltip" i18n:id="nav_status_tooltip" style="display: none;">Die wichtigsten Status-Informationen auf einen Blick.</span>
            </a>
          </li>
        </ul>
       

      </div>

      <div id="contentform">
          <div class="form-internal">
              <address style="display: none;">
                  <span class="form-action">../../data/Login.json</span>
                  <span class="form-destination"></span>
              </address>
              <div id="contentcontainer">
                  <div class="ccoben"> </div>
                  <div class="ccmitte showcont">
                      <div id="containercontent">
                          <div style="min-height: 373px;">
<div>
    <h1 i18n:id="login_caption">Login zur Einrichtung Ihres Speedport</h1>
   
    <div class="c1c" id="show_jshinw">
      <span class="warnmessage" i18n:id="login_jshinweis">
        Bitte aktivieren Sie Javascript in Ihrem Internet-Browser!
      </span>
    </div>
   
    <div id="pwd_org">
      <div class="c1c">
        <span i18n:id="login_content_1">Bitte geben Sie das Gerätepasswort ein. Sie finden es auf der Rückseite Ihres Speedport.</span>
      </div>
      <div class="c1c helpme" id="showpw">
        <a href="#" i18n:id="helpme_show_pic">Abbildung anzeigen</a>
      </div>
      <div id="helpme_showpw">
        <img src="../../images/visualizations/speedport_back.jpg" alt="Speedport back" width="436" height="121" style="display: block"/>
      </div>
    </div>
    <div id="pwd_chg" style="display: none;">
      <div class="c1c">
        <span i18n:id="login_content_2">Bitte geben Sie Ihr Gerätepasswort ein.</span><br/>
      </div>
      <div class="c1c helpme" id="lostpw">
        <a href="#" i18n:id="helpme_lost_pwd">Gerätepasswort vergessen?</a>
      </div>
      <div id="helpme_lostpw">
        <span i18n:id="helpme_lost_pwd_1">Wenn Sie ein geändertes Gerätepasswort vergessen haben, müssen Sie den Speedport in die Werkseinstellungen zurücksetzen.</span><br/>
        <span class="warnLabel" style="color: #000000; margin-top: 5px; background-position: 0;" i18n:id="helpme_lost_pwd_2">Durch diese Aktion gehen alle persönlichen Einstellungen verloren.</span><br/>
        <span i18n:id="helpme_lost_pwd_3" style="font-weight: bold;">So setzen Sie den Speedport in die Werkseinstellungen zurück:</span>
        <ul>
          <li style="margin-top: 5px;" i18n:id="helpme_lost_pwd_4">Drücken Sie ca. 5 Sekunden mit einem dünnen Gegenstand in die kleine, mit ?�Reset??bezeichnete ?ffnung auf der Rückseite des Speedport.</li>
          <li style="margin-top: 5px;" i18n:id="helpme_lost_pwd_5">Geben Sie bei der nächsten Passwortabfrage das Gerätepasswort ein, das auf der Rückseite des Speedport steht.</li>
        </ul>
      </div>
    </div>
   
    <div class="c2c" style="display: none;" id="invalid_router_password">
        <div class="right">
            <span class="validationLabel" i18n:id="login_pwdhinweis">Geben Sie Ihr Gerätepasswort ein!</span>
        </div>
    </div>

    <div class="c2c" style="display: none;" id="invalid_shaddowed_router_password">
        <div class="right">
            <span class="validationLabel" i18n:id="login_pwdhinweis">Geben Sie Ihr Gerätepasswort ein!</span>
        </div>
    </div>
    <div class="c2c" style="display: none;" id="invalid_internal_error">
        <div class="right">
            <span class="validationLabel" id="inter_err_msg"></span>
        </div>
    </div>

    <div id="show_inppwd" style="display: none;">
      <div class="c2c">
          <div class="left" i18n:id="login_pwd_label">
              Gerätepasswort:
          </div>
          <div class="right">
              <input type="password" id="router_password" name="password" class="{validate:{required:true,minlength:1,maxlength:12,errorlabel:'[id^=invalid_router_password]'}}"/>
          </div>
      </div>
      <div class="c2c" >
          <div class="right">
              <input type="checkbox"
              id="showpw_router_password" name="showpw"/><label
              for="showpw_router_password" i18n:id="display_chars">Zeichen anzeigen</label>
          </div>
      </div>
    </div>
   
    <div class="c1c" id="invalid_doublelogin" style="display: none;">
        <span class="warnmessage">
            <span i18n:id="error_message_doublelogin_1">Das Konfigurationsprogramm wird bereits von einem Benutzer des Computers mit der IP-Adresse</span>
            <span id="login_other_ip">0.0.0.0</span>
            <span i18n:id="error_message_doublelogin_2">verwendet. Es können nicht mehrere Computer gleichzeitig auf das Konfigurationsprogramm zugreifen.</span>
        </span>
    </div>
   
    <div class="c1c" id="invalid_login" style="display: none;">
        <span class="warnmessage" i18n:id="error_message_login">
            Login fehlgeschlagen. Sie haben ein falsches Gerätepasswort eingegeben.
            Bitte versuchen Sie es erneut und achten Sie auf die korrekte Schreibweise.
        </span>
    </div>
   
    <div class="c1c" id="login_locked" style="display: none;">
      <span class="warnmessage">
        <span i18n:id="login_locked_1">Der Login ist für</span>
        <span id="login_disabled_seconds">0</span>
        <span i18n:id="login_locked_2">Sekunden gesperrt.</span>
      </span>
    </div>
   
</div>
<div id="is_login_page"></div>

                          </div>
                      </div>
                      <div style="clear: both;"></div>
                  </div>
                  <div class="ccmitte" id="footercontent" style="display: block;">
                      <div class="footerborder"></div>
                      <div id="fooooter">
                          <div class="buttongroup">
<button id="loginbutton" type="submit" name="action" class="submitBtnActive" style="display: none;" i18n:id="btn_login">Login</button>
</div>
                      </div>
                  </div>
                  <div  class="ccunten"> </div>
              </div>
          </div>
      </div>
     
      <script type="text/javascript">
      /* <![CDATA[ */
      (function($){
          $(document).ready(function() {
             
              $(".form-internal").each(function() {
                  var theForm = $(this).templateForm({doNotCreate:true});
                  if (theForm !== undefined) {
                      theForm.requiredCheck(true);
                  }
              });
          });
      }(jQuery));
     
      /* ]]> */
      </script>

    </div>

  </div>

  <div id="wheelpane" style="display: block; display: none; z-index: 600000;">
    <span class="wheel"></span>
  </div>

  <div id="internalStylingArea" style="position: absolute; left: -9999px; top: -999px;">
    <div>
      <span i18n:id="scale_down_font" id="scale_down_font">Zum Verkleinern bitte Tastenkombination Strg- benutzen.</span>
      <span i18n:id="scale_up_font" id="scale_up_font">Zum Vergrö?ern bitte Tastenkombination Strg+ benutzen.</span>
    </div>
  </div>

</body>

</html>
2017.05.22 21:23:53 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12868
2017.05.22 21:23:53 5: Speedport: ExtractSid called, context sid, num 1
2017.05.22 21:23:54 5: Speedport: HandleSendQueue called, qlen = 2
2017.05.22 21:23:54 5: Speedport: HandleSendQueue is adding Cookies: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
2017.05.22 21:23:54 4: Speedport: HandleSendQueue sends request type auth2 to URL http://speedport.ip/data/Login.json,
data: password=XXXXXXXXXXXXXXXXXXXXXXXXXXXX&showpw=0&httoken=$sid,
header: Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU,
timeout 2
2017.05.22 21:23:54 4: HttpUtils url=http://speedport.ip/data/Login.json
2017.05.22 21:23:54 5: HttpUtils request header:
POST /data/Login.json HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=O7cQP_cBm0BPh4TPyy9FCAwetqYXkCpXgrNUlQ7xwfl59esU3PAcyU
Content-Length: 63

2017.05.22 21:23:54 4: http://speedport.ip/data/Login.json: HTTP response code 200
2017.05.22 21:23:54 4: HttpUtils http://speedport.ip/data/Login.json: Got data, length: 692
2017.05.22 21:23:54 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7b31876=0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:23:54 4: Speedport: Read callback: request type was auth2 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7b31876=0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1,
Body: [{"vartype":"status","varid":"status","varvalue":"ok"},{"vartype":"status","varid":"login","varvalue":"success"},{"vartype":"value","varid":"router_state","varvalue":"OK"},{"vartype":"value","varid":"bngscrat","varvalue":"0"},{"vartype":"value","varid":"acsreach","varvalue":"0"},{"vartype":"value","varid":"provis_inet","varvalue":"004"},{"vartype":"value","varid":"provis_voip","varvalue":"004"},{"vartype":"value","varid":"save_fails","varvalue":"0"},{"vartype":"option","varid":"askAssist","varvalue":"0"},{"vartype":"option","varid":"internetFinished","varvalue":"1"},{"vartype":"option","varid":"phoneFinished","varvalue":"1"},{"vartype":"option","varid":"wlanFinished","varvalue":"1"}]
2017.05.22 21:23:54 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7b31876=0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:23:54 5: Speedport: Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:54 4: Speedport: Cookie: aDuPtHhDA802a79adb60 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:54 5: Speedport: Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:54 4: Speedport: Cookie: aDuPtHhDA802a7aad814 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:54 5: Speedport: Set-Cookie: aDuPtHhDA802a7b31876=0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix; Path=/; HttpOnly
2017.05.22 21:23:54 4: Speedport: Cookie: aDuPtHhDA802a7b31876 Wert 0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix Rest Path=/; HttpOnly
2017.05.22 21:23:54 5: Speedport: ExtractSid called, context sid, num 2
2017.05.22 21:23:55 5: Speedport: HandleSendQueue called, qlen = 1
2017.05.22 21:23:55 5: Speedport: HandleSendQueue is adding Cookies: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=deleted; aDuPtHhDA802a7b31876=0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix
2017.05.22 21:23:55 4: Speedport: HandleSendQueue sends request type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, No Data,
header: Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=deleted; aDuPtHhDA802a7b31876=0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix,
timeout 2
2017.05.22 21:23:55 4: HttpUtils url=http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
2017.05.22 21:23:55 5: HttpUtils request header:
GET /data/PhoneCalls.json?_lang=de&_tn=$sid HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Cookie: aDuPtHhDA802a79adb60=deleted; aDuPtHhDA802a7aad814=deleted; aDuPtHhDA802a7b31876=0zC4I_a4BK0AYFbIsnhzU3zaFTEN7lQbA35rv5JVop6mT7_kIaAE3XEfQqSw2Ix
Content-Length: 0

2017.05.22 21:23:55 4: http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: HTTP response code 200
2017.05.22 21:23:55 4: HttpUtils http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: Got data, length: 2
2017.05.22 21:23:55 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:23:55 4: Speedport: Read callback: request type was get1 retry 1,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1,
Body: []
2017.05.22 21:23:55 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.22 21:23:55 5: Speedport: Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:55 4: Speedport: Cookie: aDuPtHhDA802a79adb60 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:55 5: Speedport: Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:55 4: Speedport: Cookie: aDuPtHhDA802a7aad814 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.22 21:23:55 5: Speedport: ExtractSid called, context get, num 1
2017.05.22 21:23:55 5: Speedport: CheckAuth is checking buffer with ReAuthRegex .*\[\].*
2017.05.22 21:23:55 4: Speedport: CheckAuth decided new authentication required
2017.05.22 21:23:55 4: Speedport: Authentication still required but no retries left - did last authentication fail?
2017.05.22 21:23:55 5: Speedport: ExtractReading for context get, num 1 - no individual parse definition
2017.05.22 21:23:55 5: Speedport: Read starts parsing response to get1 with defined readings:
2017.05.22 21:23:55 3: Speedport: Read response to get1 didn't match any Reading
2017.05.22 21:23:55 5: Speedport: HandleSendQueue called, qlen = 0


Das blöde Speedport reagiert bei Falscheingaben mit mehreren Seitenwechseln, bis man am Ende dann bei der Login-Aufforderung anlangt. Das scheint das Problem zu sein.

Danke für die Hilfe!
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel

Hallo Andies,

Ich vermute Du hast das userattr-Attribut von Hand eingetippt oder?
HTTPMOD erzeugt userattr selbst um Fhemweb das Editieren von Wildcard-Attributen zu ermöglichen.
Wenn Du das manuell eintippst, ist das nicht nur überflüssig sondern verhindert die Fehlerpüfung bei falschen Attributen.
In Deinem Fall gibt es kein sid1Regex.
Was Du eingeben wolltest war sid1IdRegex.

Gruß
     Stefan

andies

Stimmt, war von Hand eingegeben. Danke!

Es gibt ein neues Problem  >:( ch weiß jetzt, dass ich den AuthReges anders schreiben muss:

attr Speedport reAuthRegex .*\[\].*|Bitte geben Sie das Gerätepasswort ein

und dann erscheint wirklich in dem Logfile die Angabe, die ich haben will. Blöderweise hängt das aber FHEM auf ("Bad Gateway"), ich musste es neu starten. Liegt das an HTTPMOD:

{"vartype":"value","varid":"missedcalls_who","varvalue":"0XXXXXX"}]}]  <=== DAS SIND NOCH DIE ANGABEN
2017.05.23 06:39:10 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Set-Cookie: aDuPtHhDA802a7b31876=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.23 06:39:10 5: Speedport: Set-Cookie: aDuPtHhDA802a79adb60=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.23 06:39:10 4: Speedport: Cookie: aDuPtHhDA802a79adb60 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.23 06:39:10 5: Speedport: Set-Cookie: aDuPtHhDA802a7aad814=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.23 06:39:10 4: Speedport: Cookie: aDuPtHhDA802a7aad814 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.23 06:39:10 5: Speedport: Set-Cookie: aDuPtHhDA802a7b31876=deleted; Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.23 06:39:10 4: Speedport: Cookie: aDuPtHhDA802a7b31876 Wert deleted Rest Path=/; Expires=Thu, 30 Aug 2012 03:17:38 GMT; HttpOnly
2017.05.23 06:39:10 5: Speedport: ExtractSid called, context get, num 1
2017.05.23 06:39:10 5: Speedport: CheckAuth is checking buffer with ReAuthRegex .*\[\].*|Bitte geben Sie das Gerätepasswort ein.
2017.05.23 06:41:58 1: Including fhem.cfg
2017.05.23 06:41:58 1: telnetPort: Can't open server port at 7072: Die Adresse wird bereits verwendet. Exiting.
2017.05.23 06:42:46 4: Speedport: CheckAuth decided no authentication required
2017.05.23 06:42:46 5: Speedport: ExtractReading for context get, num 1 - no individual parse definition
2017.05.23 06:42:46 5: Speedport: Read starts parsing response to get1 with defined readings:
2017.05.23 06:42:46 3: Speedport: Read response to get1 didn't match any Reading
2017.05.23 06:42:46 5: Speedport: HandleSendQueue called, qlen = 0
2017.05.23 06:42:46 0: Server shutdown
2017.05.23 06:42:46 1: BlockingInformParent (BlockingStart): Can't connect to localhost:7072: IO::Socket::INET: connect: Verbindungsaufbau abgelehnt
2017.05.23 06:42:46 1: BlockingInformParent (SYSMON_blockingFinish): Can't connect to localhost:7072: IO::Socket::INET: connect: Verbindungsaufbau abgelehnt
2017.05.23 06:43:29 1: Including fhem.cfg  <=== ab hier Neustart



FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

#32
hmmm da ist anscheinend schon gegen 06:41 etwas komisches  passiert:

2017.05.23 06:41:58 1: Including fhem.cfg
2017.05.23 06:41:58 1: telnetPort: Can't open server port at 7072: Die Adresse wird bereits verwendet. Exiting


Wie ob eine 2. Instanz von fhem gestartet hätte.

Ich würde einfach fhem sauber stoppen, dann mit ps aux | grep fhem prüfen, dass kein fhem Prozess mehr läuft, und dann fhem wieder starten... und nochmal probieren.

EDIT: und schau mal vielleicht in den Systemlogs
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Das war ich selbst. Nachdem sich FHEM aufgehangen hatte, habe ich händisch die cfg zurückgesetzt, das war exakt zu der Zeit.


Gesendet von iPhone mit Tapatalk Pro
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

#34
Ich gebe auf, ich schaffe das leider nicht. Ich schreibe mal auf, wie weit ich kam und was ich kapiert habe und warum ich aufgegeben habe, vielleicht hat ja jemand anders Lust weiterzumachen. Wobei vermutlich nicht so viele mit einem Speedport arbeiten werden...

Im ersten Versuch habe ich drei get-Befehle mit HTTPMOD definiert, die nacheinander aufgerufen werden müssen. Das klappt soweit. Der erste get01-Befehl ruft die Hauptseite auf und liest das httoken aus, das man braucht. Der zweite sendet per POST die Login-Daten und den token (bei dem neueren Speedport 9XX muss man, das habe ich im Netz gelesen, noch ein challengev oder so ähnlich mitsenden, außerdem heißt der Token crsf_token,  http://blog.mellenthin.de/archives/2015/04/29/telekom-speedport-hybrid-logging-mit-rrdtool/comment-page-1/). Der dritte get03 ruft per GET die Daten ab. Da das token in der URL stehen muss, aber am Anfang ja nicht bekannt ist, muss es dynamisch ersetzt werden. Das geschieht durch ReplacementValue:
defmod Speedport HTTPMOD none 0
attr Speedport userattr get01Data get01Header get01Name get01Regex get01Replacement01Value get01URL get02Data get02Header1 get02Header2 get02Name get02Regex get02Replacement01Value get02URL get03Header get03Header1 get03Header2 get03Name get03Regex get03Replacement01Value get03URL replacement01Mode:reading,internal,text,expression,key replacement01Regex
attr Speedport enableCookies 1
attr Speedport get01Header Content-Type: text/html
attr Speedport get01Name 1_Token_holen
attr Speedport get01Regex _httoken = (\d*)
attr Speedport get01URL http://speedport.ip/html/login/index.html?lang=de
attr Speedport get02Data password=XXXXXXXXXXXXX&showpw=0&httoken=%%token%%
attr Speedport get02Header1 Content-Type: application/json
attr Speedport get02Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport get02Name 2_Login_durchfuehren
attr Speedport get02Replacement01Value 1_Token_holen
attr Speedport get02URL http://speedport.ip/data/Login.json
attr Speedport get03Header1 Content-Type: application/json
attr Speedport get03Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport get03Name 3_Daten_holen
attr Speedport get03Replacement01Value 1_Token_holen
attr Speedport get03URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=%%token%%
attr Speedport replacement01Mode reading
attr Speedport replacement01Regex %%token%%


Nun ist diese Befehlsfolge deshalb ungeschickt, weil HTTPMOD die Möglichkeit vorsieht zu erkennen, dass man sich einloggen muss. Dazu dienen die sid-Befehle. Genau da bin ich gescheitert. Zuerst mal der Code:
defmod Speedport HTTPMOD none 0
attr Speedport userattr sid1Data sid1Header sid1Name sid1IdRegex sid1URL sid2Data sid2Header1 sid2Header2 sid2URL get1Header1 get1Header2 get1URL get1Name
attr Speedport enableCookies 1
attr Speedport sid1URL http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid1Header Content-Type: text/html
attr Speedport sid1IdRegex _httoken = (\d*)
attr Speedport sid2URL http://speedport.ip/data/Login.json
attr Speedport sid2Header1 Content-Type: application/json
attr Speedport sid2Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2Data password=XXXXXXXXXXXXXXXXX&showpw=0&httoken=$sid
attr Speedport get1URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
attr Speedport get1Header1 Content-Type: application/json
attr Speedport get1Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport get1Name Telefonliste

Hier gibt es nur einen get1-Befehl, mit dem direkt die Daten geholt werden sollen (ein GET). In dem Befehl muss aber erkannt werden, dass eine Authentifikation notwendig ist. MW geht das mit
attr Speedport reAuthRegx .*\[\].*|.*Bitte geben Sie das Ger.tepasswort ein.*
weil in den nächsten Seiten geprüft wird, welche Regex da auftauchen. Hier beginnen die (für mich unlösbaren) Probleme. Der Speedport sendet nicht eine, sondern mehrere Seiten zurück. Die erste enthält JSON und konkret Body: [], danach kommen weitere Seiten mit der Gerätepasswort-Aufforderung. Den Umlaut habe ich schon entfernt, aber es geht nicht. Ich konnte erkennen, dass der Login nicht ausgeführt wird - jedenfalls kommt man nicht weiter, sondern soll ständig das Passwort eingeben. Aber wie ich das in den Griff bekommen kann, blieb mir leider verschlossen. Auch Burp hat nicht weitergeholfen.

Sollte das Einloggen gehen, würden dann die sid-Befehle 1 bis 2 abgearbeitet, die genau das machen, was oben händisch passierte. Und dann würde danach get1 durchgeführt.

Da ich einen python-Code habe, der funktioniert und für mich leichter administrierbar ist, mache ich jetzt mal Schluss. Schade eigentlich, denn HTTPMOD ist ein tolles Tool.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

Ein Ding irritiert mich: in deinem Python Script werden zwei unterschiedliche httokens geholt. Das erste beim ersten Get wird dann beim Post Login.json benutzt. Aber dann holst Du einen 2. beim Get overview/index.html, das Du dann beim Get PhonecallList nutzt.

Sind die unterschiedlich?

Nebenfrage: welcher Typ von 724V ist es?

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

StefanStrobel

Hallo Andies,

Du verwendest immer noch das Attribut sid1Regex. Das existiert nicht und Du bekommst nur deshalb keine Fehlermeldung weil Du es von Hand als userattr definiert hast.
Die Regex zum Extrahieren der Session ID bei den sid-Attribute muss mit sid1IdRegex angegeben werden. Sonst hat $sid keinen Inhalt und wird entsprechend stehen gelassen ...

Gruß
    Stefan

andies

Zitat von: amenomade am 25 Mai 2017, 18:02:30
Ein Ding irritiert mich: in deinem Python Script werden zwei unterschiedliche httokens geholt. Das erste beim ersten Get wird dann beim Post Login.json benutzt. Aber dann holst Du einen 2. beim Get overview/index.html, das Du dann beim Get PhonecallList nutzt.

Sind die unterschiedlich?

Nebenfrage: welcher Typ von 724V ist es?
Sorry für die lange Wartezeit, ich war mehrere Tage unterwegs. Zu den Fragen:

  • Ehrlich gesagt verstehe ich das Python-Skript nicht wirklich, das ist ja nicht von mir. Meines Wissens muss immer das erste Token übergeben werden, sonst wirft die Software einen heraus. Ich dachte, dass auch dieses erste Token beim 2. Get benutzt wird. 
  • Ich habe, glaube ich, den Typ, der nicht gefritzt werden kann. Ist das Typ C?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: StefanStrobel am 26 Mai 2017, 14:48:29
Du verwendest immer noch das Attribut sid1Regex. Das existiert nicht
Stimmt, das hattest Du schon mal geschrieben. Ich habe zwischendurch anscheinend eine alte Kopie genommen, in der das noch stand. Ich werde das oben editieren. Anscheinend mache ich jetzt einen neuen Fehler, denn ich kriege etwas anderes heraus. Hier das Listing
Internals:
   BUSY       0
   CFGFN
   CHANGED
   DEF        none 0
   HTTPCookies
   Interval   0
   LASTSEND   1496078532.72929
   MainURL
   ModuleVersion 3.3.11 - 8.5.2017
   NAME       Speedport
   NR         12845
   STATE      ???
   TRIGGERTIME 0
   TRIGGERTIME_FMT
   TYPE       HTTPMOD
   addr       http://speedport.ip:80
   buf
   code       200
   conn
   data
   displayurl http://speedport.ip:80/html/login/index.html
   header     Content-Type: application/json

Referer: http://speedport.ip/html/login/index.html?lang=de
   host       speedport.ip
   httpheader HTTP/1.1 200 OK

Server: Apache

Pragma: no-cache

Cache-Control: max-age=0, must-revalidate

Connection: close

Content-type: text/html

Content-length: 12869
   httpversion 1.0
   hu_blocking 0
   hu_filecount 8
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /html/login/index.html
   protocol   http
   redirects  1
   timeout    2
   url        http://speedport.ip:80/html/login/index.html
   value      0
   Httpcookiehash:
   QUEUE:
   Readings:
   Request:
     data
     header     Content-Type: application/json

Referer: http://speedport.ip/html/login/index.html?lang=de
     ignoreredirects 0
     retryCount 0
     type       get1
     url        http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
     value      0
   Sslargs:
Attributes:
   enableCookies 1
   get1Header1 Content-Type: application/json
   get1Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
   get1Name   Telefonliste
   get1URL    http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
   reAuthRegex .*\[\].*|.*Bitte geben Sie das Ger.tepasswort ein.*
   sid1Header Content-Type: text/html
   sid1IdRegex _httoken = (\d*)
   sid1URL    http://speedport.ip/html/login/index.html?lang=de
   sid2Data   password=XXXXXXXXXX&showpw=0&httoken=$sid
   sid2Header1 Content-Type: application/json
   sid2Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
   sid2URL    http://speedport.ip/data/Login.json
   userattr   get1Header1 get1Header2 get1Name get1URL sid1Data sid1Header sid1IdRegex sid1Name sid1URL sid2Data sid2Header1 sid2Header2 sid2URL
   verbose    5

und der Logfile liefert

2017.05.29 19:25:40 5: Speedport: get called with Telefonliste
2017.05.29 19:25:40 5: Speedport: get found option Telefonliste in attribute get1Name
2017.05.29 19:25:40 4: Speedport: get will now request Telefonliste, no optional value
2017.05.29 19:25:40 4: Speedport: AddToQueue adds get1, initial queue len: 0
2017.05.29 19:25:40 5: Speedport: AddToQueue adds type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, no data, header Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de, retry 0
2017.05.29 19:25:40 5: Speedport: HandleSendQueue called, qlen = 1
2017.05.29 19:25:40 4: Speedport: HandleSendQueue sends request type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, No Data,
header: Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de,
timeout 2
2017.05.29 19:25:40 4: HttpUtils url=http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
2017.05.29 19:25:40 5: HttpUtils request header:
GET /data/PhoneCalls.json?_lang=de&_tn=$sid HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Content-Length: 0

2017.05.29 19:25:40 4: http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: HTTP response code 302
2017.05.29 19:25:40 4: HttpUtils http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: Redirect to http://speedport.ip:80/html/login/index.html
2017.05.29 19:25:40 4: HttpUtils url=http://speedport.ip:80/html/login/index.html
2017.05.29 19:25:40 5: HttpUtils request header:
GET /html/login/index.html HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Content-Length: 0

2017.05.29 19:25:40 4: http://speedport.ip:80/html/login/index.html: HTTP response code 200
2017.05.29 19:25:40 4: HttpUtils http://speedport.ip:80/html/login/index.html: Got data, length: 12869
2017.05.29 19:25:40 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12869
2017.05.29 19:25:40 4: Speedport: Read callback: request type was get1 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12869,
Body: <!DOCTYPE html PUBLIC "../../xhtml1-transitional-translate.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:i18n="../">

<head>
  <title>Speedport Konfigurationsprogramm</title>

  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

  <meta name="author" content="DTAG J.Huber">

 
  <script type="text/javascript">
    /* <![CDATA[ */
    var rootRelative = '../';
    var JSONSource   = '../../data/Login.json';
    /* ]]> */
  </script>

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
<script type="text/javascript" src="../../lang/de.js"></script>
<script type="text/javascript" src="../../lang/err_de.js"></script>
<script type="text/javascript">
var _httoken = 1487763040;
</script>


  <link rel="stylesheet" type="text/css" href="../../css/reset-fonts-grids.css" />
  <link rel="stylesheet" type="text/css" href="../../css/xstyle.css" />
  <link rel="stylesheet" type="text/css" href="../../css/tcombox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/branding.css" />
  <link rel="stylesheet" type="text/css" href="../../css/mainnav.css" />
  <link rel="stylesheet" type="text/css" href="../../css/subnav.css" />
  <link rel="stylesheet" type="text/css" href="../../css/securestatus.css" />
  <link rel="stylesheet" type="text/css" href="../../css/content.css" />
  <link rel="stylesheet" type="text/css" href="../../css/assistent.css" />
  <link rel="stylesheet" type="text/css" href="../../css/buttons.css" />
  <link rel="stylesheet" type="text/css" href="../../css/checkbox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/overview.css" />
  <link rel="stylesheet" type="text/css" href="../../css/formular.css" />
  <link rel="stylesheet" type="text/css" href="../../css/jquery.selectbox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/flyout.css" />
  <link rel="stylesheet" type="text/css" href="../../css/scrollbars.css" />
  <link rel="stylesheet" type="text/css" href="../../css/progressbar.css" />

  <!--[if gt IE 8]>
    <link rel="stylesheet" type="text/css" href="../../css/ie9specific.css" />
  <![endif]-->
  <!--[if lte IE 8]>
    <link rel="stylesheet" type="text/css" href="../../css/ie8specific.css" />
  <![endif]-->
  <!--[if lte IE 6]>
    <link rel="stylesheet" type="text/css" href="../../css/ie6specific.css" />
  <![endif]-->


  <script type="text/javascript" src="../../js/jquery-1.3.2.min1.js"></script>

  <script type="text/javascript" src="../../js/global.js"></script>
  <script type="text/javascript" src="../../js/external.libs.js"></script>
  <script type="text/javascript" src="../../js/jquery.logging.js"></script>
  <script type="text/javascript" src="../../js/jquery.i18n.js"></script>
  <script type="text/javascript" src="../../js/jquery.templateforms.js"></script>
  <script type="text/javascript" src="../../js/jquery-change.js"></script>
  <script type="text/javascript" src="../../js/jquery-addons.js"></script>

  <script type="text/javascript" src="../../js/jsonvariables.js"></script>

  <script type="text/javascript" src="../../js/md5.js"></script>


  <script type="text/javascript" src="../../js/pages/login.js"></script>


</head>

<body>
  <div id="container">
    <div id="brandingarea">

     
      <div id="brandingimage">
        <img src="../../images/icons/logo.png" alt="Deutsche Telekom" />
      </div>
      <div id="brandinglinks" class="keepfont">
        <div id="metalinks" class="keepfont">
          <ul class="keepfont">
            <li class="keepfont"><a class="keepfont" href="#" id="scale_down" style="font-size: 0.8em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="#" id="scale_up" style="font-size: 1.2em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=de">Deutsch</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=en">English</a></li>
            <li class="keepfont" id="ccenterlink"><a href="customerCareCenter" class="getLink" target="_blank" i18n:id="key_customerCenter">Kundencenter</a></li>
            <li class="keepfont" id="netmanlink"><a href="netManager" class="getLink" target="_blank" i18n:id="key_netManager">PC-Software</a></li>
            <li class="keepfont" id="logoutlink"><a class="keepfont" href="#" i18n:id="logout">Logout</a></li>
          </ul>
        </div>
      </div>
     

    </div>

    <div id="navigationarea">

     
      <div class="mainnav_left" id="mn_00">
         
      </div>
      <div class="mainnav_blank" id="mn_01">
         
      </div>
      <div>
        <a href="../manual/index.html?open=chp_manual" target="ba_win_SPW724V" class="mainnav_right" id="mn_07">

          <img src="../../images/icons/manual_30x30.png" width="30" height="30" title="Hilfe"/>

          <span i18n:id="category_manual">Hilfe</span>
        </a>
      </div>
     

    </div>

    <div id="maincontentarea">

      <div id="subnavigation" style="float:left;">

       
        <ul>
          <li>
            <a href="index.html" id="login_page">
              <span class="subnav"  i18n:id="nav_login">Speedport Login</span>
              <span class="tooltip" i18n:id="nav_login_tooltip" style="display: none;">Melden Sie sich an, um Ihren Speedport zu konfigurieren.</span>
            </a>
          </li>
          <li>
            <a href="status.html">
              <span class="subnav"  i18n:id="nav_status">Status-Informationen</span>
              <span class="tooltip" i18n:id="nav_status_tooltip" style="display: none;">Die wichtigsten Status-Informationen auf einen Blick.</span>
            </a>
          </li>
        </ul>
       

      </div>

      <div id="contentform">
          <div class="form-internal">
              <address style="display: none;">
                  <span class="form-action">../../data/Login.json</span>
                  <span class="form-destination"></span>
              </address>
              <div id="contentcontainer">
                  <div class="ccoben"> </div>
                  <div class="ccmitte showcont">
                      <div id="containercontent">
                          <div style="min-height: 373px;">
<div>
    <h1 i18n:id="login_caption">Login zur Einrichtung Ihres Speedport</h1>
   
    <div class="c1c" id="show_jshinw">
      <span class="warnmessage" i18n:id="login_jshinweis">
        Bitte aktivieren Sie Javascript in Ihrem Internet-Browser!
      </span>
    </div>
   
    <div id="pwd_org">
      <div class="c1c">
        <span i18n:id="login_content_1">Bitte geben Sie das Gerätepasswort ein. Sie finden es auf der Rückseite Ihres Speedport.</span>
      </div>
      <div class="c1c helpme" id="showpw">
        <a href="#" i18n:id="helpme_show_pic">Abbildung anzeigen</a>
      </div>
      <div id="helpme_showpw">
        <img src="../../images/visualizations/speedport_back.jpg" alt="Speedport back" width="436" height="121" style="display: block"/>
      </div>
    </div>
    <div id="pwd_chg" style="display: none;">
      <div class="c1c">
        <span i18n:id="login_content_2">Bitte geben Sie Ihr Gerätepasswort ein.</span><br/>
      </div>
      <div class="c1c helpme" id="lostpw">
        <a href="#" i18n:id="helpme_lost_pwd">Gerätepasswort vergessen?</a>
      </div>
      <div id="helpme_lostpw">
        <span i18n:id="helpme_lost_pwd_1">Wenn Sie ein geändertes Gerätepasswort vergessen haben, müssen Sie den Speedport in die Werkseinstellungen zurücksetzen.</span><br/>
        <span class="warnLabel" style="color: #000000; margin-top: 5px; background-position: 0;" i18n:id="helpme_lost_pwd_2">Durch diese Aktion gehen alle persönlichen Einstellungen verloren.</span><br/>
        <span i18n:id="helpme_lost_pwd_3" style="font-weight: bold;">So setzen Sie den Speedport in die Werkseinstellungen zurück:</span>
        <ul>
          <li style="margin-top: 5px;" i18n:id="helpme_lost_pwd_4">Drücken Sie ca. 5 Sekunden mit einem dünnen Gegenstand in die kleine, mit ?�Reset??bezeichnete ?ffnung auf der Rückseite des Speedport.</li>
          <li style="margin-top: 5px;" i18n:id="helpme_lost_pwd_5">Geben Sie bei der nächsten Passwortabfrage das Gerätepasswort ein, das auf der Rückseite des Speedport steht.</li>
        </ul>
      </div>
    </div>
   
    <div class="c2c" style="display: none;" id="invalid_router_password">
        <div class="right">
            <span class="validationLabel" i18n:id="login_pwdhinweis">Geben Sie Ihr Gerätepasswort ein!</span>
        </div>
    </div>

    <div class="c2c" style="display: none;" id="invalid_shaddowed_router_password">
        <div class="right">
            <span class="validationLabel" i18n:id="login_pwdhinweis">Geben Sie Ihr Gerätepasswort ein!</span>
        </div>
    </div>
    <div class="c2c" style="display: none;" id="invalid_internal_error">
        <div class="right">
            <span class="validationLabel" id="inter_err_msg"></span>
        </div>
    </div>

    <div id="show_inppwd" style="display: none;">
      <div class="c2c">
          <div class="left" i18n:id="login_pwd_label">
              Gerätepasswort:
          </div>
          <div class="right">
              <input type="password" id="router_password" name="password" class="{validate:{required:true,minlength:1,maxlength:12,errorlabel:'[id^=invalid_router_password]'}}"/>
          </div>
      </div>
      <div class="c2c" >
          <div class="right">
              <input type="checkbox"
              id="showpw_router_password" name="showpw"/><label
              for="showpw_router_password" i18n:id="display_chars">Zeichen anzeigen</label>
          </div>
      </div>
    </div>
   
    <div class="c1c" id="invalid_doublelogin" style="display: none;">
        <span class="warnmessage">
            <span i18n:id="error_message_doublelogin_1">Das Konfigurationsprogramm wird bereits von einem Benutzer des Computers mit der IP-Adresse</span>
            <span id="login_other_ip">0.0.0.0</span>
            <span i18n:id="error_message_doublelogin_2">verwendet. Es können nicht mehrere Computer gleichzeitig auf das Konfigurationsprogramm zugreifen.</span>
        </span>
    </div>
   
    <div class="c1c" id="invalid_login" style="display: none;">
        <span class="warnmessage" i18n:id="error_message_login">
            Login fehlgeschlagen. Sie haben ein falsches Gerätepasswort eingegeben.
            Bitte versuchen Sie es erneut und achten Sie auf die korrekte Schreibweise.
        </span>
    </div>
   
    <div class="c1c" id="login_locked" style="display: none;">
      <span class="warnmessage">
        <span i18n:id="login_locked_1">Der Login ist für</span>
        <span id="login_disabled_seconds">0</span>
        <span i18n:id="login_locked_2">Sekunden gesperrt.</span>
      </span>
    </div>
   
</div>
<div id="is_login_page"></div>

                          </div>
                      </div>
                      <div style="clear: both;"></div>
                  </div>
                  <div class="ccmitte" id="footercontent" style="display: block;">
                      <div class="footerborder"></div>
                      <div id="fooooter">
                          <div class="buttongroup">
<button id="loginbutton" type="submit" name="action" class="submitBtnActive" style="display: none;" i18n:id="btn_login">Login</button>
</div>
                      </div>
                  </div>
                  <div  class="ccunten"> </div>
              </div>
          </div>
      </div>
     
      <script type="text/javascript">
      /* <![CDATA[ */
      (function($){
          $(document).ready(function() {
             
              $(".form-internal").each(function() {
                  var theForm = $(this).templateForm({doNotCreate:true});
                  if (theForm !== undefined) {
                      theForm.requiredCheck(true);
                  }
              });
          });
      }(jQuery));
     
      /* ]]> */
      </script>

    </div>

  </div>

  <div id="wheelpane" style="display: block; display: none; z-index: 600000;">
    <span class="wheel"></span>
  </div>

  <div id="internalStylingArea" style="position: absolute; left: -9999px; top: -999px;">
    <div>
      <span i18n:id="scale_down_font" id="scale_down_font">Zum Verkleinern bitte Tastenkombination Strg- benutzen.</span>
      <span i18n:id="scale_up_font" id="scale_up_font">Zum Vergrö?ern bitte Tastenkombination Strg+ benutzen.</span>
    </div>
  </div>

</body>

</html>
2017.05.29 19:25:40 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12869
2017.05.29 19:25:40 5: Speedport: ExtractSid called, context get, num 1
2017.05.29 19:25:40 5: Speedport: CheckAuth is checking buffer with ReAuthRegex .*\[\].*|.*Bitte geben Sie das Ger.tepasswort ein.*
2017.05.29 19:25:40 4: Speedport: CheckAuth decided no authentication required
2017.05.29 19:25:40 5: Speedport: ExtractReading for context get, num 1 - no individual parse definition
2017.05.29 19:25:40 5: Speedport: Read starts parsing response to get1 with defined readings:
2017.05.29 19:25:40 3: Speedport: Read response to get1 didn't match any Reading
2017.05.29 19:25:40 5: Speedport: HandleSendQueue called, qlen = 0
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel

Ich interpretiere den Anfang des Logs so, dass Deine ReAuthRegex falsch ist.
Im Text der Seite steht "Bitte geben Sie Ihr Gerätepasswort ein".
Du suchst aber nach "Bitte geben Sie das Gerätepasswort ein".

HTTPMOD meint deshalb dass keine Authentisierung nötig ist.

Gruß
     Stefan

andies

Was für ein ärgerlicher Fehler, danke. Ich habe jetzt den Text aus der Seite kopiert (in einem Fall fehlte auch das Bitte, also habe ich darauf verzichtet) und nur den Umlaut durch einen Punkt ersetzt
reAuthRegex .*\[\].*|.*Geben Sie Ihr Ger.tepasswort ein.*
aber es klappt immer noch nicht:
2017.05.29 21:10:58 5: Speedport: get called with Telefonliste
2017.05.29 21:10:58 5: Speedport: get found option Telefonliste in attribute get1Name
2017.05.29 21:10:58 4: Speedport: get will now request Telefonliste, no optional value
2017.05.29 21:10:58 4: Speedport: AddToQueue adds get1, initial queue len: 0
2017.05.29 21:10:58 5: Speedport: AddToQueue adds type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, no data, header Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de, retry 0
2017.05.29 21:10:58 5: Speedport: HandleSendQueue called, qlen = 1
2017.05.29 21:10:58 4: Speedport: HandleSendQueue sends request type get1 to URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid, No Data,
header: Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de,
timeout 2
2017.05.29 21:10:58 4: HttpUtils url=http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
2017.05.29 21:10:58 5: HttpUtils request header:
GET /data/PhoneCalls.json?_lang=de&_tn=$sid HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Content-Length: 0

2017.05.29 21:10:58 4: http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: HTTP response code 302
2017.05.29 21:10:58 4: HttpUtils http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid: Redirect to http://speedport.ip:80/html/login/index.html
2017.05.29 21:10:58 4: HttpUtils url=http://speedport.ip:80/html/login/index.html
2017.05.29 21:10:58 5: HttpUtils request header:
GET /html/login/index.html HTTP/1.0
Host: speedport.ip
User-Agent: fhem
Content-Type: application/json
Referer: http://speedport.ip/html/login/index.html?lang=de
Content-Length: 0

2017.05.29 21:10:58 4: http://speedport.ip:80/html/login/index.html: HTTP response code 200
2017.05.29 21:10:58 4: HttpUtils http://speedport.ip:80/html/login/index.html: Got data, length: 12868
2017.05.29 21:10:58 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12868
2017.05.29 21:10:58 4: Speedport: Read callback: request type was get1 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12868,
Body: <!DOCTYPE html PUBLIC "../../xhtml1-transitional-translate.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:i18n="../">

<head>
  <title>Speedport Konfigurationsprogramm</title>

  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

  <meta name="author" content="DTAG J.Huber">

 
  <script type="text/javascript">
    /* <![CDATA[ */
    var rootRelative = '../';
    var JSONSource   = '../../data/Login.json';
    /* ]]> */
  </script>

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
<script type="text/javascript" src="../../lang/de.js"></script>
<script type="text/javascript" src="../../lang/err_de.js"></script>
<script type="text/javascript">
var _httoken = 118025192;
</script>


  <link rel="stylesheet" type="text/css" href="../../css/reset-fonts-grids.css" />
  <link rel="stylesheet" type="text/css" href="../../css/xstyle.css" />
  <link rel="stylesheet" type="text/css" href="../../css/tcombox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/branding.css" />
  <link rel="stylesheet" type="text/css" href="../../css/mainnav.css" />
  <link rel="stylesheet" type="text/css" href="../../css/subnav.css" />
  <link rel="stylesheet" type="text/css" href="../../css/securestatus.css" />
  <link rel="stylesheet" type="text/css" href="../../css/content.css" />
  <link rel="stylesheet" type="text/css" href="../../css/assistent.css" />
  <link rel="stylesheet" type="text/css" href="../../css/buttons.css" />
  <link rel="stylesheet" type="text/css" href="../../css/checkbox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/overview.css" />
  <link rel="stylesheet" type="text/css" href="../../css/formular.css" />
  <link rel="stylesheet" type="text/css" href="../../css/jquery.selectbox.css" />
  <link rel="stylesheet" type="text/css" href="../../css/flyout.css" />
  <link rel="stylesheet" type="text/css" href="../../css/scrollbars.css" />
  <link rel="stylesheet" type="text/css" href="../../css/progressbar.css" />

  <!--[if gt IE 8]>
    <link rel="stylesheet" type="text/css" href="../../css/ie9specific.css" />
  <![endif]-->
  <!--[if lte IE 8]>
    <link rel="stylesheet" type="text/css" href="../../css/ie8specific.css" />
  <![endif]-->
  <!--[if lte IE 6]>
    <link rel="stylesheet" type="text/css" href="../../css/ie6specific.css" />
  <![endif]-->


  <script type="text/javascript" src="../../js/jquery-1.3.2.min1.js"></script>

  <script type="text/javascript" src="../../js/global.js"></script>
  <script type="text/javascript" src="../../js/external.libs.js"></script>
  <script type="text/javascript" src="../../js/jquery.logging.js"></script>
  <script type="text/javascript" src="../../js/jquery.i18n.js"></script>
  <script type="text/javascript" src="../../js/jquery.templateforms.js"></script>
  <script type="text/javascript" src="../../js/jquery-change.js"></script>
  <script type="text/javascript" src="../../js/jquery-addons.js"></script>

  <script type="text/javascript" src="../../js/jsonvariables.js"></script>

  <script type="text/javascript" src="../../js/md5.js"></script>


  <script type="text/javascript" src="../../js/pages/login.js"></script>


</head>

<body>
  <div id="container">
    <div id="brandingarea">

     
      <div id="brandingimage">
        <img src="../../images/icons/logo.png" alt="Deutsche Telekom" />
      </div>
      <div id="brandinglinks" class="keepfont">
        <div id="metalinks" class="keepfont">
          <ul class="keepfont">
            <li class="keepfont"><a class="keepfont" href="#" id="scale_down" style="font-size: 0.8em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="#" id="scale_up" style="font-size: 1.2em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=de">Deutsch</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=en">English</a></li>
            <li class="keepfont" id="ccenterlink"><a href="customerCareCenter" class="getLink" target="_blank" i18n:id="key_customerCenter">Kundencenter</a></li>
            <li class="keepfont" id="netmanlink"><a href="netManager" class="getLink" target="_blank" i18n:id="key_netManager">PC-Software</a></li>
            <li class="keepfont" id="logoutlink"><a class="keepfont" href="#" i18n:id="logout">Logout</a></li>
          </ul>
        </div>
      </div>
     

    </div>

    <div id="navigationarea">

     
      <div class="mainnav_left" id="mn_00">
         
      </div>
      <div class="mainnav_blank" id="mn_01">
         
      </div>
      <div>
        <a href="../manual/index.html?open=chp_manual" target="ba_win_SPW724V" class="mainnav_right" id="mn_07">

          <img src="../../images/icons/manual_30x30.png" width="30" height="30" title="Hilfe"/>

          <span i18n:id="category_manual">Hilfe</span>
        </a>
      </div>
     

    </div>

    <div id="maincontentarea">

      <div id="subnavigation" style="float:left;">

       
        <ul>
          <li>
            <a href="index.html" id="login_page">
              <span class="subnav"  i18n:id="nav_login">Speedport Login</span>
              <span class="tooltip" i18n:id="nav_login_tooltip" style="display: none;">Melden Sie sich an, um Ihren Speedport zu konfigurieren.</span>
            </a>
          </li>
          <li>
            <a href="status.html">
              <span class="subnav"  i18n:id="nav_status">Status-Informationen</span>
              <span class="tooltip" i18n:id="nav_status_tooltip" style="display: none;">Die wichtigsten Status-Informationen auf einen Blick.</span>
            </a>
          </li>
        </ul>
       

      </div>

      <div id="contentform">
          <div class="form-internal">
              <address style="display: none;">
                  <span class="form-action">../../data/Login.json</span>
                  <span class="form-destination"></span>
              </address>
              <div id="contentcontainer">
                  <div class="ccoben"> </div>
                  <div class="ccmitte showcont">
                      <div id="containercontent">
                          <div style="min-height: 373px;">
<div>
    <h1 i18n:id="login_caption">Login zur Einrichtung Ihres Speedport</h1>
   
    <div class="c1c" id="show_jshinw">
      <span class="warnmessage" i18n:id="login_jshinweis">
        Bitte aktivieren Sie Javascript in Ihrem Internet-Browser!
      </span>
    </div>
   
    <div id="pwd_org">
      <div class="c1c">
        <span i18n:id="login_content_1">Bitte geben Sie das Gerätepasswort ein. Sie finden es auf der Rückseite Ihres Speedport.</span>
      </div>
      <div class="c1c helpme" id="showpw">
        <a href="#" i18n:id="helpme_show_pic">Abbildung anzeigen</a>
      </div>
      <div id="helpme_showpw">
        <img src="../../images/visualizations/speedport_back.jpg" alt="Speedport back" width="436" height="121" style="display: block"/>
      </div>
    </div>
    <div id="pwd_chg" style="display: none;">
      <div class="c1c">
        <span i18n:id="login_content_2">Bitte geben Sie Ihr Gerätepasswort ein.</span><br/>
      </div>
      <div class="c1c helpme" id="lostpw">
        <a href="#" i18n:id="helpme_lost_pwd">Gerätepasswort vergessen?</a>
      </div>
      <div id="helpme_lostpw">
        <span i18n:id="helpme_lost_pwd_1">Wenn Sie ein geändertes Gerätepasswort vergessen haben, müssen Sie den Speedport in die Werkseinstellungen zurücksetzen.</span><br/>
        <span class="warnLabel" style="color: #000000; margin-top: 5px; background-position: 0;" i18n:id="helpme_lost_pwd_2">Durch diese Aktion gehen alle persönlichen Einstellungen verloren.</span><br/>
        <span i18n:id="helpme_lost_pwd_3" style="font-weight: bold;">So setzen Sie den Speedport in die Werkseinstellungen zurück:</span>
        <ul>
          <li style="margin-top: 5px;" i18n:id="helpme_lost_pwd_4">Drücken Sie ca. 5 Sekunden mit einem dünnen Gegenstand in die kleine, mit ?�Reset??bezeichnete ?ffnung auf der Rückseite des Speedport.</li>
          <li style="margin-top: 5px;" i18n:id="helpme_lost_pwd_5">Geben Sie bei der nächsten Passwortabfrage das Gerätepasswort ein, das auf der Rückseite des Speedport steht.</li>
        </ul>
      </div>
    </div>
   
    <div class="c2c" style="display: none;" id="invalid_router_password">
        <div class="right">
            <span class="validationLabel" i18n:id="login_pwdhinweis">Geben Sie Ihr Gerätepasswort ein!</span>
        </div>
    </div>

    <div class="c2c" style="display: none;" id="invalid_shaddowed_router_password">
        <div class="right">
            <span class="validationLabel" i18n:id="login_pwdhinweis">Geben Sie Ihr Gerätepasswort ein!</span>
        </div>
    </div>
    <div class="c2c" style="display: none;" id="invalid_internal_error">
        <div class="right">
            <span class="validationLabel" id="inter_err_msg"></span>
        </div>
    </div>

    <div id="show_inppwd" style="display: none;">
      <div class="c2c">
          <div class="left" i18n:id="login_pwd_label">
              Gerätepasswort:
          </div>
          <div class="right">
              <input type="password" id="router_password" name="password" class="{validate:{required:true,minlength:1,maxlength:12,errorlabel:'[id^=invalid_router_password]'}}"/>
          </div>
      </div>
      <div class="c2c" >
          <div class="right">
              <input type="checkbox"
              id="showpw_router_password" name="showpw"/><label
              for="showpw_router_password" i18n:id="display_chars">Zeichen anzeigen</label>
          </div>
      </div>
    </div>
   
    <div class="c1c" id="invalid_doublelogin" style="display: none;">
        <span class="warnmessage">
            <span i18n:id="error_message_doublelogin_1">Das Konfigurationsprogramm wird bereits von einem Benutzer des Computers mit der IP-Adresse</span>
            <span id="login_other_ip">0.0.0.0</span>
            <span i18n:id="error_message_doublelogin_2">verwendet. Es können nicht mehrere Computer gleichzeitig auf das Konfigurationsprogramm zugreifen.</span>
        </span>
    </div>
   
    <div class="c1c" id="invalid_login" style="display: none;">
        <span class="warnmessage" i18n:id="error_message_login">
            Login fehlgeschlagen. Sie haben ein falsches Gerätepasswort eingegeben.
            Bitte versuchen Sie es erneut und achten Sie auf die korrekte Schreibweise.
        </span>
    </div>
   
    <div class="c1c" id="login_locked" style="display: none;">
      <span class="warnmessage">
        <span i18n:id="login_locked_1">Der Login ist für</span>
        <span id="login_disabled_seconds">0</span>
        <span i18n:id="login_locked_2">Sekunden gesperrt.</span>
      </span>
    </div>
   
</div>
<div id="is_login_page"></div>

                          </div>
                      </div>
                      <div style="clear: both;"></div>
                  </div>
                  <div class="ccmitte" id="footercontent" style="display: block;">
                      <div class="footerborder"></div>
                      <div id="fooooter">
                          <div class="buttongroup">
<button id="loginbutton" type="submit" name="action" class="submitBtnActive" style="display: none;" i18n:id="btn_login">Login</button>
</div>
                      </div>
                  </div>
                  <div  class="ccunten"> </div>
              </div>
          </div>
      </div>
     
      <script type="text/javascript">
      /* <![CDATA[ */
      (function($){
          $(document).ready(function() {
             
              $(".form-internal").each(function() {
                  var theForm = $(this).templateForm({doNotCreate:true});
                  if (theForm !== undefined) {
                      theForm.requiredCheck(true);
                  }
              });
          });
      }(jQuery));
     
      /* ]]> */
      </script>

    </div>

  </div>

  <div id="wheelpane" style="display: block; display: none; z-index: 600000;">
    <span class="wheel"></span>
  </div>

  <div id="internalStylingArea" style="position: absolute; left: -9999px; top: -999px;">
    <div>
      <span i18n:id="scale_down_font" id="scale_down_font">Zum Verkleinern bitte Tastenkombination Strg- benutzen.</span>
      <span i18n:id="scale_up_font" id="scale_up_font">Zum Vergrö?ern bitte Tastenkombination Strg+ benutzen.</span>
    </div>
  </div>

</body>

</html>
2017.05.29 21:10:58 5: Speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12868
2017.05.29 21:10:58 5: Speedport: ExtractSid called, context get, num 1
2017.05.29 21:10:58 5: Speedport: CheckAuth is checking buffer with ReAuthRegex .*\[\].*|.*Geben Sie Ihr Ger.tepasswort ein.*
2017.05.29 21:10:58 4: Speedport: CheckAuth decided no authentication required
2017.05.29 21:10:58 5: Speedport: ExtractReading for context get, num 1 - no individual parse definition
2017.05.29 21:10:58 5: Speedport: Read starts parsing response to get1 with defined readings:
2017.05.29 21:10:58 3: Speedport: Read response to get1 didn't match any Reading
2017.05.29 21:10:58 5: Speedport: HandleSendQueue called, qlen = 0
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Interessant. Das hier geht:
attr Speedport reAuthRegex Melden Sie sich an, um Ihren Speedport zu konfigurieren
Ist vielleicht der Regex mit dem Oder | falsch?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel

Es liegt offensichtlich an der Regex.
Einfacher ist besser ;-)

Klappt jetzt alles?

Gruß
   Stefan

andies

Bisher sieht es gut aus. Jedenfalls mache ich nun doch weiter, obwohl ich ja die Flinte ins Korn werfen wollte...


Gesendet von iPhone mit Tapatalk Pro
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

#44
Hab es geschaft (extra für dich mein Speedport aus dem Schrank geholt ;) ).
Allerdings ist es ein bisschen kompliziert... Das Problem ist: du bist in einer Schleife auf der Loginpage.

Was setzt Du für ein Passwort in password=XXXXXXXXXXXXXXXXX&showpw=0&httoken=$sid ?
Ich weiss nicht, was es ist, aber es ist weder das Passwort in Klartext, noch uuencode noch base64encode von dem. Ich habe das aus einer Proxylog gelesen. Ich weiss nicht, wie er das kalkuliert hat.

*** EDIT: gefunden. Das ist ein md5 Hash des Passworts *****

Damit habe ich mein HTTPMOD so gebaut:
defmod speedport HTTPMOD http://192.168.178.200/html/content/phone/phone_call_list.html 300
attr speedport userattr get1Name get1URL sid1IdRegex sid1URL sid2Data sid2URL sidURL
attr speedport enableCookies 1
attr speedport get1Name Telefonliste
attr speedport get1URL http://192.168.178.200/data/PhoneCalls.json?_lang=de&_tn=$sid
attr speedport reAuthRegex div id=\"pwd_org\"
attr speedport sid1IdRegex _httoken = (\d*)
attr speedport sid1URL http://192.168.178.200/html/login/index.html?lang=de
attr speedport sid2Data password=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&showpw=0&httoken=$sid
attr speedport sid2URL http://192.168.178.200/data/Login.json
attr speedport verbose 5


In der Log bekomme ich:
2017.05.29 21:48:41 4: speedport: GetUpdate called (update)
2017.05.29 21:48:41 4: speedport: update timer modified: will call GetUpdate in 300.0 seconds at 2017-05-29 21:53:41
2017.05.29 21:48:41 4: speedport: AddToQueue adds update, initial queue len: 0
2017.05.29 21:48:41 5: speedport: AddToQueue adds type update to URL http://192.168.178.200/html/content/phone/phone_call_list.html, no data, no headers, retry 0
2017.05.29 21:48:41 5: speedport: HandleSendQueue called, qlen = 1
2017.05.29 21:48:41 4: speedport: HandleSendQueue sends request type update to URL http://192.168.178.200/html/content/phone/phone_call_list.html, No Data, No Header,
timeout 2
2017.05.29 21:48:41 4: HttpUtils url=http://192.168.178.200/html/content/phone/phone_call_list.html
2017.05.29 21:48:41 5: HttpUtils request header:
GET /html/content/phone/phone_call_list.html HTTP/1.0
Host: 192.168.178.200
User-Agent: fhem
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

2017.05.29 21:48:41 4: http://192.168.178.200/html/content/phone/phone_call_list.html: HTTP response code 302
2017.05.29 21:48:41 4: HttpUtils http://192.168.178.200/html/content/phone/phone_call_list.html: Redirect to http://192.168.178.200:80/html/login/index.html
2017.05.29 21:48:41 4: HttpUtils url=http://192.168.178.200:80/html/login/index.html
2017.05.29 21:48:41 5: HttpUtils request header:
GET /html/login/index.html HTTP/1.0
Host: 192.168.178.200
User-Agent: fhem
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

2017.05.29 21:48:41 4: http://192.168.178.200:80/html/login/index.html: HTTP response code 200
2017.05.29 21:48:41 4: HttpUtils http://192.168.178.200:80/html/login/index.html: Got data, length: 12869
2017.05.29 21:48:41 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
(...)
(...) die erste Seite: login page nach redirect 302
(...)

2017.05.29 21:48:41 5: speedport: ExtractSid called, context reading, num
2017.05.29 21:48:41 5: speedport: CheckAuth is checking buffer with ReAuthRegex div id=\"pwd_org\"
2017.05.29 21:48:41 4: speedport: CheckAuth decided new authentication required
2017.05.29 21:48:41 4: speedport: Auth called with Steps: 1 2
2017.05.29 21:48:41 4: speedport: AddToQueue adds auth2, initial queue len: 0, prio
2017.05.29 21:48:41 5: speedport: AddToQueue prepends type auth2 to URL http://192.168.178.200/data/Login.json, data password=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&showpw=0&httoken=$sid, no headers, retry 0
2017.05.29 21:48:41 4: speedport: AddToQueue adds auth1, initial queue len: 1, prio
2017.05.29 21:48:41 5: speedport: AddToQueue prepends type auth1 to URL http://192.168.178.200/html/login/index.html?lang=de, no data, no headers, retry 0
2017.05.29 21:48:41 5: speedport: HandleSendQueue called, qlen = 2
2017.05.29 21:48:41 5: speedport: HandleSendQueue - minSendDelay not over, rescheduling
2017.05.29 21:48:41 4: speedport: AddToQueue adds update, initial queue len: 2
2017.05.29 21:48:41 5: speedport: AddToQueue adds type update to URL http://192.168.178.200/html/content/phone/phone_call_list.html, no data, no headers, retry 1
2017.05.29 21:48:41 5: speedport: HandleSendQueue called, qlen = 3
2017.05.29 21:48:41 5: speedport: HandleSendQueue - minSendDelay not over, rescheduling
2017.05.29 21:48:41 4: speedport: CheckAuth requeued request update after auth, retryCount 0 ...
2017.05.29 21:48:42 5: speedport: HandleSendQueue called, qlen = 3
2017.05.29 21:48:42 4: speedport: HandleSendQueue sends request type auth1 to URL http://192.168.178.200/html/login/index.html?lang=de, No Data, No Header,
timeout 2
2017.05.29 21:48:42 4: HttpUtils url=http://192.168.178.200/html/login/index.html?lang=de
2017.05.29 21:48:42 5: HttpUtils request header:
GET /html/login/index.html?lang=de HTTP/1.0
Host: 192.168.178.200
User-Agent: fhem
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

2017.05.29 21:48:42 4: http://192.168.178.200/html/login/index.html?lang=de: HTTP response code 200
2017.05.29 21:48:42 4: HttpUtils http://192.168.178.200/html/login/index.html?lang=de: Got data, length: 12869
2017.05.29 21:48:42 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
(...)
(...) noch eine Seite
(...)

2017.05.29 21:48:42 5: speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 12869
2017.05.29 21:48:42 5: speedport: ExtractSid called, context sid, num 1
2017.05.29 21:48:42 4: speedport: ExtractSid set sid to 1433617366
2017.05.29 21:48:43 5: speedport: HandleSendQueue called, qlen = 2
2017.05.29 21:48:43 4: speedport: HandleSendQueue sends request type auth2 to URL http://192.168.178.200/data/Login.json,
data: password=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&showpw=0&httoken=1433617366, No Header,
timeout 2
2017.05.29 21:48:43 4: HttpUtils url=http://192.168.178.200/data/Login.json
2017.05.29 21:48:43 5: HttpUtils request header:
POST /data/Login.json HTTP/1.0
Host: 192.168.178.200
User-Agent: fhem
Content-Length: 69
Content-Type: application/x-www-form-urlencoded

2017.05.29 21:48:43 4: http://192.168.178.200/data/Login.json: HTTP response code 200
2017.05.29 21:48:43 4: HttpUtils http://192.168.178.200/data/Login.json: Got data, length: 692
2017.05.29 21:48:43 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHh_DA802=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.29 21:48:43 4: speedport: Read callback: request type was auth2 retry 0,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHh_DA802=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1,
Body: [{"vartype":"status","varid":"status","varvalue":"ok"},{"vartype":"status","varid":"login","varvalue":"success"},{"vartype":"value","varid":"router_state","varvalue":"OK"},{"vartype":"value","varid":"bngscrat","varvalue":"0"},{"vartype":"value","varid":"acsreach","varvalue":"0"},{"vartype":"value","varid":"provis_inet","varvalue":"000"},{"vartype":"value","varid":"provis_voip","varvalue":"000"},{"vartype":"value","varid":"save_fails","varvalue":"0"},{"vartype":"option","varid":"askAssist","varvalue":"0"},{"vartype":"option","varid":"internetFinished","varvalue":"0"},{"vartype":"option","varid":"phoneFinished","varvalue":"0"},{"vartype":"option","varid":"wlanFinished","varvalue":"0
(...)
(...) login success!!!!!!!!!!!!!
(...)
(...) jetzt mein get01

2017.05.29 21:48:43 5: speedport: looking for Cookies in HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Set-Cookie: aDuPtHh_DA802=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Path=/; HttpOnly
Connection: close
Content-type: application/javascript
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
2017.05.29 21:48:43 5: speedport: Set-Cookie: aDuPtHh_DA802=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; Path=/; HttpOnly
2017.05.29 21:48:43 4: speedport: Cookie: aDuPtHh_DA802 Wert xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Rest Path=/; HttpOnly
2017.05.29 21:48:43 5: speedport: ExtractSid called, context sid, num 2
2017.05.29 21:48:44 5: speedport: HandleSendQueue called, qlen = 1
2017.05.29 21:48:44 5: speedport: HandleSendQueue is adding Cookies: aDuPtHh_DA802=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2017.05.29 21:48:44 4: speedport: HandleSendQueue sends request type update to URL http://192.168.178.200/html/content/phone/phone_call_list.html, No Data,
header: Cookie: aDuPtHh_DA802=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
timeout 2
2017.05.29 21:48:44 4: HttpUtils url=http://192.168.178.200/html/content/phone/phone_call_list.html
2017.05.29 21:48:44 5: HttpUtils request header:
GET /html/content/phone/phone_call_list.html HTTP/1.0
Host: 192.168.178.200
User-Agent: fhem
Cookie: aDuPtHh_DA802=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Content-Length: 0
Content-Type: application/x-www-form-urlencoded

2017.05.29 21:48:44 4: http://192.168.178.200/html/content/phone/phone_call_list.html: HTTP response code 200
2017.05.29 21:48:44 4: HttpUtils http://192.168.178.200/html/content/phone/phone_call_list.html: Got data, length: 23532
2017.05.29 21:48:44 5: HttpUtils response header:
HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 23532
2017.05.29 21:48:44 4: speedport: Read callback: request type was update retry 1,
Header: HTTP/1.1 200 OK
Server: Apache
Pragma: no-cache
Cache-Control: max-age=0, must-revalidate
Connection: close
Content-type: text/html
Content-length: 23532,
Body: <!DOCTYPE html PUBLIC "../../../xhtml1-transitional-translate.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:i18n="../../">

<head>
  <title>Speedport Konfigurationsprogramm</title>

  <meta http-equiv="content-type" content="text/html; charset=utf-8" />

  <meta name="author" content="DTAG J.Huber">

 
  <script type="text/javascript">
    /* <![CDATA[ */
    var rootRelative = '../../';
    var JSONSource   = '../../../data/PhoneCalls.json';
    /* ]]> */
  </script>

<meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />
<script type="text/javascript" src="../../../lang/de.js"></script>
<script type="text/javascript" src="../../../lang/err_de.js"></script>
<script type="text/javascript">
var _httoken = 349066697;
</script>


  <link rel="stylesheet" type="text/css" href="../../../css/reset-fonts-grids.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/xstyle.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/tcombox.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/branding.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/mainnav.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/subnav.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/securestatus.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/content.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/assistent.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/buttons.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/checkbox.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/overview.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/formular.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/jquery.selectbox.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/flyout.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/scrollbars.css" />
  <link rel="stylesheet" type="text/css" href="../../../css/progressbar.css" />

  <!--[if gt IE 8]>
    <link rel="stylesheet" type="text/css" href="../../../css/ie9specific.css" />
  <![endif]-->
  <!--[if lte IE 8]>
    <link rel="stylesheet" type="text/css" href="../../../css/ie8specific.css" />
  <![endif]-->
  <!--[if lte IE 6]>
    <link rel="stylesheet" type="text/css" href="../../../css/ie6specific.css" />
  <![endif]-->


  <script type="text/javascript" src="../../../js/jquery-1.3.2.min1.js"></script>

  <script type="text/javascript" src="../../../js/global.js"></script>
  <script type="text/javascript" src="../../../js/external.libs.js"></script>
  <script type="text/javascript" src="../../../js/jquery.logging.js"></script>
  <script type="text/javascript" src="../../../js/jquery.i18n.js"></script>
  <script type="text/javascript" src="../../../js/jquery.templateforms.js"></script>
  <script type="text/javascript" src="../../../js/jquery-change.js"></script>
  <script type="text/javascript" src="../../../js/jquery-addons.js"></script>
  <script type="text/javascript" src="../../../js/jsonparsedata.js"></script>
  <script type="text/javascript" src="../../../js/jsonvariables.js"></script>

  <script type="text/javascript" src="../../../js/pages/phone/phone_calllist.js"></script>


</head>

<body>
  <div id="container">
    <div id="brandingarea">

     
      <div id="brandingimage">
        <img src="../../../images/icons/logo.png" alt="Deutsche Telekom" />
      </div>
      <div id="brandinglinks" class="keepfont">
        <div id="metalinks" class="keepfont">
          <ul class="keepfont">
            <li class="keepfont"><a class="keepfont" href="#" id="scale_down" style="font-size: 0.8em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="#" id="scale_up" style="font-size: 1.2em;">A</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=de">Deutsch</a></li>
            <li class="keepfont"><a class="keepfont" href="?lang=en">English</a></li>
            <li class="keepfont" id="ccenterlink"><a href="customerCareCenter" class="getLink" target="_blank" i18n:id="key_customerCenter">Kundencenter</a></li>
            <li class="keepfont" id="netmanlink"><a href="netManager" class="getLink" target="_blank" i18n:id="key_netManager">PC-Software</a></li>
            <li class="keepfont" id="logoutlink"><a class="keepfont" href="#" i18n:id="logout">Logout</a></li>
          </ul>
        </div>
      </div>
     

    </div>

    <div id="navigationarea">

     
      <div class="mainnav_left" id="mn_00">
        <span></span>
      </div>
      <div>
        <a href="../../content/overview/index.html" class="mainnav_middle" id="mn_01">

          <img src="../../../images/icons/home_30x30.png" width="30" height="30" title="Uebersicht"/>

          <span i18n:id="category_overview">Übersicht</span>
        </a>
      </div>
      <div>
        <a href="../../content/internet/connection.html" class="mainnav_middle" id="mn_02">

          <img src="../../../images/icons/internet_30x30.png" width="30" height="30" title="Internet"/>

          <span i18n:id="category_internet">Internet</span>
        </a>
      </div>
      <div>
        <a href="../../content/phone/phone_internet.html" class="mainnav_middle_active" id="mn_03">

          <img src="../../../images/icons/phone_30x30.png" width="30" height="30" title="Telefonie"/>

          <span i18n:id="category_phone">Telefonie</span>
        </a>
      </div>
      <div>
        <a href="../../content/network/wlan_basic.html" class="mainnav_middle" id="mn_04">

          <img src="../../../images/icons/lan_30x30.png" width="30" height="30" title="Heimnetzwerk"/>

          <span i18n:id="category_lan">Heimnetzwerk</span>
        </a>
      </div>
      <div class="mainnav_middle" id="mn_05">
         
      </div>
      <div>
        <a href="../../content/config/change_password.html" class="mainnav_middle" id="mn_06">

          <img src="../../../images/icons/settings_30x30.png" width="30" height="30" title="Einstellungen"/>

          <span i18n:id="category_router">Einstellungen</span>
        </a>
      </div>
      <div>
        <a href="../../manual/index.html?lang=de" target="ba_win_spw724v" class="mainnav_right" id="mn_07">

          <img src="../../../images/icons/manual_30x30.png" width="30" height="30" title="Handbuch"/>

          <span i18n:id="category_manual">Handbuch</span>
        </a>
      </div>
     

    </div>

    <div id="maincontentarea">

     
      <div id="subnavigation">

       
        <ul>
          <li>
            <a href="phone_internet.html">
              <span class="subnav"  i18n:id="nav_phone_internet">Internet Telefonie</span>
              <span class="tooltip" i18n:id="nav_phone_internet_tooltip" style="display: none;">Geben Sie die Zugangsdaten für die Internet-Telefonie ein und nehmen Sie weitere Einstellungen vor.</span>
            </a>
          </li>
          <li>
            <a href="phone_number.html">
              <span class="subnav"  i18n:id="nav_phone_deviations">Rufnummernzuordnung</span>
              <span class="tooltip" i18n:id="nav_phone_deviations_tooltip" style="display: none;">Legen Sie fest, welche Telefone bei welchen Rufnummern klingeln sollen und welche Rufnummer die Telefone bei abgehenden Anrufen verwenden.</span>
            </a>
          </li>
          <li>
            <a href="phone_analog.html">
              <span class="subnav"  i18n:id="nav_phone_plugs">Telefonbuchsen</span>
              <span class="tooltip" i18n:id="nav_phone_plugs_tooltip" style="display: none;">Verwalten Sie die an den Telefonbuchsen (TAE) des Routers angeschlossenen Geräte und wählen Sie Optionen wie Anklopfen oder Rufnummer unterdrücken.</span>
            </a>
          </li>
          <li>
            <a href="phone_dect.html">
              <span class="subnav"  i18n:id="nav_phone_dect">DECT-Basisstation</span>
              <span class="tooltip" i18n:id="nav_phone_dect_tooltip" style="display: none;">Ändern Sie die PIN der DECT-Basisstation oder verwalten Sie angemeldete DECT-Mobilteile.</span>
            </a>
          </li>
          <li>
            <a href="phone_lineset.html">
              <span class="subnav"  i18n:id="nav_phone_lineset">Einstellung Rufnummern</span>
              <span class="tooltip" i18n:id="nav_phone_lineset_tooltip" style="display: none;">Treffen Sie hier weitere Einstellungen zu Ihren Rufnummern.</span>
            </a>
          </li>
          <li>
            <a href="phone_call_list.html">
              <span class="subnav"  i18n:id="nav_phone_list">Anrufliste</span>
              <span class="tooltip" i18n:id="nav_phone_list_tooltip" style="display: none;">Sehen Sie verpasste und geführte Telefonanrufe an.</span>
            </a>
          </li>
        </ul>
       

      </div>

      <div id="contentform">
        <div id="contentcontainer" class="zfix">
          <div class="ccoben"> </div>
          <div class="ccmitte showcont">
            <div id="containercontent" class="zfix">

<h1 i18n:id="phone_list_caption">Anrufliste</h1>
<div class="c1c">
<span>
<span i18n:id="phone_list_missedCall_info_zeroCalls" style="display: none;" id="missed_0">Sie haben keine verpassten Anrufe.</span>
<span i18n:id="phone_list_missedCall_info_oneCall" style="display: none;" id="missed_1">Sie haben einen verpassten Anruf.</span>
<span  id="missed_2" style="display: none;">
<span i18n:id="phone_list_missedCall_info_xCalls_1">Sie haben</span> <span id="numbermissed">$NUMBER</span> <span i18n:id="phone_list_missedCall_info_xCalls_2">verpasste Anrufe.</span>
</span>
</span>
</div>

<div class="unfold">
<h2 i18n:id="expArea_missedCalls">Verpasste Anrufe</h2>
<div>
<div class="c1c headline" style="padding-left: 18px; width: 420px;">
<div class="frac4" style="width: 20%;">
<span class="sortable {sort:{template:'addmissedcalls', keys:['date', 'time', 'who'], defaultOrder:'down'}}" i18n:id="phone_list_col1">Datum</span>
</div>
<div class="frac4" style="width: 20%;">
<span class="sortable {sort:{template:'addmissedcalls', keys:['time', 'date', 'who'], defaultOrder:'down'}}" i18n:id="phone_list_col2">Uhrzeit</span>
</div>
<div class="frac2" style="width: 60%;">
<span class="sortable {sort:{template:'addmissedcalls', keys:['who'], defaultOrder:'down'}}" i18n:id="phone_list_col3">Rufnummer/Name</span>
</div>
</div>
<div class="c1c">
    <div class="scroll-pane"  style="height: 110px;">
    <span id="noentry_default_template_addmissedcalls" class="infoLabel bold" style="margin-left: 5px; line-height: 15px;" i18n:id="template_main_infoLabel">Keine Einträge vorhanden</span>
                <p id="template_addmissedcalls" style="clear:both; display:none; line-height: 15px; ">
                  <span class="frac4 sort_date" id="var_missedcalls_date" style="width: 20%;">$DATE</span>
                  <span class="frac4 sort_time" id="var_missedcalls_time" style="width: 20%;">$TIME</span>
                  <span class="frac2 sort_who" id="var_missedcalls_who" style="width: 60%;">$WHO</span>
                </p>
    </div>
        </div>
        <div class="c2c">
          <div class="left">
            <form action="../../../data/ExportMissedCalls.json" method="get">

<script type="text/javascript">
addTokenField();
</script>

              <div class="buttongroup" style="padding:0px">
                <button type="submit" i18n:id="btn_exportList">Liste exportieren</button>
              </div>
            </form>
          </div>
          <div class="right">
            <div class="buttongroup" style="float: right;">
              <button id="clear_missedcalls" type="button" i18n:id="btn_deleteList">Liste löschen</button>
            </div>
          </div>
        </div>
</div>
</div>


<div class="unfold">
<h2 i18n:id="expArea_receivedCalls">Angenommene Anrufe</h2>
<div>
<div class="c1c headline" style="padding-left: 18px; width: 420px;">
<div class="frac4" style="width: 20%;">
<span class="sortable {sort:{template:'addtakencalls', keys:['date', 'time', 'who'], defaultOrder:'down'}}" i18n:id="phone_list_col1">Datum</span>
</div>
<div class="frac4" style="width: 20%;">
<span class="sortable {sort:{template:'addtakencalls', keys:['time', 'date', 'who'], defaultOrder:'down'}}" i18n:id="phone_list_col2">Uhrzeit</span>
</div>
<div class="frac4" style="width: 45%;">
<span class="sortable {sort:{template:'addtakencalls', keys:['who'], defaultOrder:'down'}}" i18n:id="phone_list_col3">Nummer/Name</span>
</div>
<div class="frac4" style="width: 15%;">
<span class="sortable {sort:{template:'addtakencalls', keys:['duration'], defaultOrder:'down'}}" i18n:id="phone_list_col4">Dauer</span>
</div>
</div>
<div class="c1c">
    <div class="scroll-pane" style="height: 110px;">
    <span id="noentry_default_template_addtakencalls" class="infoLabel bold" style="margin-left: 5px;" i18n:id="template_main_infoLabel">Keine Einträge vorhanden</span>
                <p id="template_addtakencalls" style="clear:both;display:none;">
                    <span class="frac4 sort_date" id="var_takencalls_date" style="width: 20%;">$DATE</span>
                    <span class="frac4 sort_time" id="var_takencalls_time" style="width: 20%;">$TIME</span>


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Genau, md5. Aber du bist auch drin, oder?


Gesendet von iPhone mit Tapatalk Pro
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

Ja, ich bin drin, guck am Ende:
Zitat<div class="unfold">
   <h2 i18n:id="expArea_receivedCalls">Angenommene Anrufe</h2>
   <div>
      <div class="c1c headline" style="padding-left: 18px; width: 420px;">
         <div class="frac4" style="width: 20%;">
            <span class="sortable {sort:{template:'addtakencalls', keys:['date', 'time', 'who'], defaultOrder:'down'}}" i18n:id="phone_list_col1">Datum</span>
         </div>
         <div class="frac4" style="width: 20%;">
            <span class="sortable {sort:{template:'addtakencalls', keys:['time', 'date', 'who'], defaultOrder:'down'}}" i18n:id="phone_list_col2">Uhrzeit</span>
         </div>
         <div class="frac4" style="width: 45%;">
            <span class="sortable {sort:{template:'addtakencalls', keys:['who'], defaultOrder:'down'}}" i18n:id="phone_list_col3">Nummer/Name</span>
         </div>
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

huhu

HTTP/1.1 200 OK Connection: close Content-Type: application/json Cache-Control: no-cache { "os selected": { "inside": "0", "outside": "8" }, "internal": { "temperature": "21.2" }, "channel1": { "temperature": "", "humidity": "" }, "channel2": { "temperature": "", "humidity": "" }, "channel3": { "temperature": "", "humidity": "" }, "channel4": { "temperature": "", "humidity": "" }, "channel5": { "temperature": "", "humidity": "" }, "channel6": { "temperature": "", "humidity": "" }, "channel7": { "temperature": "", "humidity": "" }, "channel8": { "temperature": "21.6", "humidity": "0" }, "channel9": { "temperature": "", "humidity": "" }, "channel10": { "temperature": "", "humidity": "" }, "owm": { "temperature": "18.0", "humidity": "72", "wind": "7.2", "rain": "0.0", "weather id": "801" } }

Hallo zusammen,
kann mir jemand unter die Arme greifen? Versuche über HTTPMOD ein json File auszulesen. Der o.g. Code ist die Ausgabe im Buf. Ich benötige eigentlich channel18, der mir aber dort nicht angezeigt wird?

Was muss ich alles angeben, um zb. die Temperatur von Channel8 in einem Reading angezeigt zu bekommen?

amenomade

#48
Versuch mal zuert mit dem Attribute decodeAllJason

Wegen Channel18... was nicht in der Antwort zurückkommt kann httpmod auch nicht bewerten...

Via Tapatalk
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

huhu

Danke, imit ExtractAllJSON bekomme ich alle Werte als Reading angezeigt, damit komme ich erstmal zurecht.
Dennoch bin ich natürlich an einem exakten Wert interessiert ;-)

amenomade

Du kannst probieren:
reading01Name TempChannel8
reading01JSON Channel8_temperature
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Kann ich nochmal Hilfe beim Parsen eines JSON bekommen? Das Speedport gibt eine unendliche lange JSON aus, die sieht so aus:

[
  {
    "vartype": "value",
    "varid": "device_name",
    "varvalue": "Speedport W 724V"
  },
... ##hier steht jetzt eine Menge, mich interessieren diese Werte ab jetzt
  {
    "vartype": "template",
    "varid": "adddialedcalls",
    "varvalue": [
      {
        "vartype": "value",
        "varid": "id",
        "varvalue": "0"
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_date",
        "varvalue": "30.05.2017"
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_time",
        "varvalue": "15:52:32"
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_who",
        "varvalue": "0815" ## <== diese Nummer möchte ich haben, zusammen mit der duration und dem Datum
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_duration",
        "varvalue": "722"
      }
    ]
  },
  {
    "vartype": "template",
    "varid": "adddialedcalls",
    "varvalue": [
      {
        "vartype": "value",
        "varid": "id",
        "varvalue": "1"
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_date",
        "varvalue": "30.05.2017"
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_time",
        "varvalue": "15:30:47"
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_who",
        "varvalue": "0816"  ## <== hier die zweite Nummer
      },
      {
        "vartype": "value",
        "varid": "dialedcalls_duration",
        "varvalue": "1294"
      }
    ]
  },
... und so geht das jetzt über 132 mal weiter ...

Wie extrahiert man dieses Monstrum?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

Guck erstmal was ExtractAllJSON ergibt, und mach deine Regex entsprechend.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Sorry, habe ich vergessen zu schreiben. Das Problem ist, dass dann ein vergleichbares Monstrum entsteht:

100_varid adddialedcalls                     2017-05-31 18:57:31
100_vartype template                        2017-05-31 18:57:31
100_varvalue_01_varid id                  2017-05-31 18:57:31
100_varvalue_01_vartype value         2017-05-31 18:57:31
100_varvalue_01_varvalue 80           2017-05-31 18:57:31
100_varvalue_02_varid dialedcalls_date 2017-05-31 18:57:31
100_varvalue_02_vartype value          2017-05-31 18:57:31
100_varvalue_02_varvalue 02.05.2017 2017-05-31 18:57:31
100_varvalue_03_varid dialedcalls_time 2017-05-31 18:57:31
100_varvalue_03_vartype value        2017-05-31 18:57:31
100_varvalue_03_varvalue 15:21:11 2017-05-31 18:57:31
100_varvalue_04_varid dialedcalls_who 2017-05-31 18:57:31
100_varvalue_04_vartype value        2017-05-31 18:57:31
100_varvalue_04_varvalue 0815       2017-05-31 18:57:31
100_varvalue_05_varid dialedcalls_duration 2017-05-31 18:57:31
100_varvalue_05_vartype value       2017-05-31 18:57:31
100_varvalue_05_varvalue 496        2017-05-31 18:57:31
101_varid adddialedcalls                  2017-05-31 18:57:31

und die erste Zahl, hier 100 bzw 101, scheint nicht stabil zu sein. Jedenfalls weiß ich nicht, ob das nicht auch 70 oder so sein könnte. Stabil ist nur "dialedcalls".
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Zitat von: amenomade am 31 Mai 2017, 19:32:34
Guck erstmal was ExtractAllJSON ergibt, und mach deine Regex entsprechend.
Also was ich tun könnte, ist die klassische Regex nehmen. Denn die Einträge sehen im Grunde alle so aus:

{"vartype":"value","varid":"id","varvalue":"0"},
{"vartype":"value","varid":"takencalls_date","varvalue":"31.05.2017"},
{"vartype":"value","varid":"takencalls_time","varvalue":"21:15:56"},
{"vartype":"value","varid":"takencalls_who","varvalue":"Unbekannt"},
{"vartype":"value","varid":"takencalls_duration","varvalue":"2887"}

Die erste Zahl, die 0, die läuft dann von 0 (letzter Anruf) bis 140 (allererster Anruf vor X Tagen) oder was auch immer und dann kann ich den Tag, die Uhrzeit, die Nummer und die Dauer (in Sekunden) abfragen. Da aber der Response eine "reine" JSON ist, wollte ich eigentlich auch get01JSON verwenden und gerade nicht get01Regex. Aber das dürfte sehr kompliziert werden.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Also, ich habe jetzt eine Lösung mit "klassischen" Regex. Klappt an sich, nur ist das mächtig umständlich. Die angenommenen und die herausgehenden Anrufe haben eine duration in dem JSON, die verpassten sinnvollerweise nicht. Damit gelingt es mir nur mit zwei verschiedenen Regex, die Daten zu erfassen  - einmal regex für angenommene/ausgehende, nämlich so

attr Speedport get1Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"([a-z]*)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"(\d*)"}

und einmal für die verpassten Anrufe
attr Speedport get2Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"(missedcalls)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"}

Was mich daran stört ist, dass ich nun für beide Regex jeweils eine eigene Login-Prozedur definieren müsste und beide mit einem eigenen get-Befehl aufgerufen müssten! Meine Idee, es so zu definieren
attr Speedport get1CheckAllReadings 1
führt nicht dazu, dass mit dem Aufruf von get1 auch gleichzeitig get2 abgeholt wird. Ich dachte, das würde das Attribut leisten?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel

Hallo,

checkAllReadings führt dazu, dass alle Readings ausgewertet werden, die mit readingXYName bzw. readingXYRegex etc. definiert sind.

Alternativ kann man eine Regex auch mit mehreren capture groups definieren und so aus einer Regex mehrere Readings erzeugen.

Eine Login-Sequenz gilt nicht nur für ein einzelnes get sondern für alle Abfragen innerhalb des HTTPMOD-Geräts. Sie wir ausgelöst wenn die reAuthRegex matcht und mit den sid-Attributen definiert.

Gruss
   Stefan

andies

Zitat von: StefanStrobel am 02 Juni 2017, 20:03:02
checkAllReadings führt dazu, dass alle Readings ausgewertet werden, die mit readingXYName bzw. readingXYRegex etc. definiert sind.
Das klappt bei mir nicht. Ich habe es so definiert
defmod Speedport HTTPMOD none 0
attr Speedport userattr CheckAllReadings:0,1 get1AutoNumLen get1Header1 get1Header2 get1JSON get1Name get1RegOpt get1Regex get1URL get2Name get2Regex sid1Data sid1Header sid1IdRegex sid1Name sid1URL sid2Data sid2Header1 sid2Header2 sid2URL
attr Speedport CheckAllReadings 1
attr Speedport enableCookies 1
attr Speedport extractAllJSON 0
attr Speedport get1AutoNumLen 2
attr Speedport get1Header1 Content-Type: application/json
attr Speedport get1Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport get1Name Telefonliste
attr Speedport get1RegOpt g
attr Speedport get1Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"([a-z]*)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"(\d*)"}
attr Speedport get1URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
attr Speedport get2Name Anrufeverpasst
attr Speedport get2Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"(missedcalls)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"}
attr Speedport reAuthRegex Melden Sie sich an, um Ihren Speedport zu konfigurieren
attr Speedport removeBuf 1
attr Speedport room System
attr Speedport sid1Header Content-Type: text/html
attr Speedport sid1IdRegex _httoken = (\d*)
attr Speedport sid1URL http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2Data password=XXXXXXXXXXXXXXXXXXXX&showpw=0&httoken=$sid
attr Speedport sid2Header1 Content-Type: application/json
attr Speedport sid2Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2URL http://speedport.ip/data/Login.json

und Telefonliste wird angelegt, aber Anrufeverpasst nicht. Beide Regex sind in Ordnung - die habe ich jeweils bei get1regex eingesetzt und dann jeweils die angenommenen bzw die verpassten Anrufe erhalten. Aber in verschiedenen get1 und get2 geht es, trotz CheckAllReadings, bei mir nicht. Wo ist da der Fehler?

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

amenomade

Zitat von: CommandRef(get|set)[0-9]*URL
URL to be requested for the get or set command. If this option is missing, the URL specified during define will be used.

defmod Speedport HTTPMOD none 0
...
attr Speedport get2Name Anrufeverpasst
attr Speedport get2Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"(missedcalls)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"}

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Danke! Ich habe jetzt
attr Speedport get2URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
hinzugefügt, das gab aber kein anderes Ergebnis. Die Readings beinhalten nicht die verpassten Anrufe. Der Logfile sagt auch nix:

2017.06.03 11:10:18 5: Speedport: ExtractReading Telefonliste with regex /\[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"([a-z]*)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"(\d*)"}/g ...
2017.06.03 11:10:18 5: Speedport: 60 capture group(s), matchlist =
...
2017.06.03 11:10:18 4: Speedport: ExtractReading for get1-59 sets Telefonliste-59 to 0173XXXXXX
2017.06.03 11:10:18 4: Speedport: ExtractReading for get1-60 sets Telefonliste-60 to 134
2017.06.03 11:10:18 4: Speedport: Read response to get1 matched Reading(s) Telefonliste-01 Telefonliste-02 Telefonliste-03 Telefonliste-04...

und get2 fehlt.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

StefanStrobel

Hallo Andies,

attr Speedport CheckAllReadings 1


ist kein von HTTPMOD unterstütztes gültiges Attribut.
Das hast Du Dir wieder selbst mit userattr definiert.
Bitte lösche doch das ganze userattr und leg es nie wieder manuell an, dann sparst Du Dir viel Arbeit / Ärger.

Aus der Doku:
Zitat
get[0-9]*CheckAllReadings
this attribute modifies the behavior of HTTPMOD when the HTTP Response of a get command is parsed.
If this attribute is set to 1, then additionally to the matching of get specific regexes (get[0-9]*Regex), XPath or JSON also all the reading names and parse definitions defined in Reading[0-9]+Name and Reading[0-9]+Regex, XPath or JSON attributes are checked and if they match, the coresponding Readings are assigned as well.
This is automatically done if a get or set command is defined without its own parse attributes.

wenn also get1CheckAllReadings auf 1 steht, wird NICHT get2Regex ausgewertet sondern reading1Name, reading1Regex, reading2Name, reading2Regex, ...

Gruss
   Stefan

andies

#61
Danke, jetzt hat alles geklappt. Ich habe endlich die Lösung.

Ich würde das jetzt mal im Wiki beschreiben, oder gibt es da besondere Schreibrechte (wie in der Einleitung)? Ich habe natürlich die commandref gelesen, aber - wie man an diesem Thread sieht - nur Teile davon verstanden. Ich vermute mal, wenn man das Beispiel ausführlich erläutert, verstehen andere auch mehr und trauen sich an diese eierlegende Wollmilchsau heran. Denn das Modul ist wirklich super. Aber es ist aufwendig und komplex, es einzurichten.

PS Das hier funktioniert jetzt:

defmod Speedport HTTPMOD none 0
attr Speedport userattr get1Header1 get1Header2 get1Name get1URL reading1AutoNumLen reading1Name reading1RegOpt reading1Regex reading1RecombineExpr reading2AutoNumLen reading2Name reading2RegOpt reading2RecombineExpr reading2Regex sid1Header sid1IdRegex sid1URL sid2Data sid2Header1 sid2Header2 sid2URL
attr Speedport enableCookies 1
attr Speedport extractAllJSON 0
attr Speedport get1Header1 Content-Type: application/json
attr Speedport get1Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport get1Name Telefonanrufe
attr Speedport get1URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
attr Speedport reAuthRegex Melden Sie sich an, um Ihren Speedport zu konfigurieren
attr Speedport reading1AutoNumLen 2
attr Speedport reading1Name Telefonliste
attr Speedport reading1RecombineExpr join " ", @matchlist
attr Speedport reading1RegOpt g
attr Speedport reading1Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"([a-z]*)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"(\d*)"}
attr Speedport reading2AutoNumLen 2
attr Speedport reading2Name Anrufeverpasst
attr Speedport reading2RegOpt g
attr Speedport reading2RecombineExpr join " ", @matchlist
attr Speedport reading2Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"(missedcalls)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"}
attr Speedport removeBuf 1
attr Speedport sid1Header Content-Type: text/html
attr Speedport sid1IdRegex _httoken = (\d*)
attr Speedport sid1URL http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2Data password=XXXXXXXXXXXXXXXXXXXX&showpw=0&httoken=$sid
attr Speedport sid2Header1 Content-Type: application/json
attr Speedport sid2Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2URL http://speedport.ip/data/Login.json

und die Ausgaben sehen dann so aus:

setstate Speedport 2017-06-03 21:54:54 Anrufeverpasst missedcalls 02.06.2017 17:36:45 Unbekannt
...
setstate Speedport 2017-06-03 21:54:54 Telefonliste dialedcalls 03.06.2017 19:44:48 0163XXXXX 50 ...  takencalls 02.06.2017 13:41:46 0163XXXXX 38 ...
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

clumsy

Hallo, kurze Frage an Stefan: macht das Sinn, dass das HTTPMOD Modul Readings mit Leerzeichen drin generiert, z.b.wenn ebi einem extractAllJSON JSON Objekte kommen, welche Leerzeichen im Namen haben...

Diese Readings sind dann kaum mehr zu verarbeiten, da ja (meistens) Leerzeichen als trenner verwednet werden...

vielen Dank schonmal für eine kurze erklärung ;)

STefan

StefanStrobel

Hallo clumsy,

das macht keinen Sinn. Die Funktion, in der die Readings aus den JSON-Objekten erzeugt wird, sollte vor dem readingsBulkUpdate ein makeReadingName aufrufen.
Ich habe jetzt nur das Problem, dass eine Korrektur eventuell bei einigen Leuten dazu führt dass es nicht mehr so wie vorher funktioniert...

Gruss
   Stefan

clumsy

Hallo
Klar, verstehe ich... Wobei die meisten welche im json Namen mit Leerzeichen verwenden sowieso Probleme haben dürften...

Vielleicht in einer zukünftgeni Version mal...

Danke trotzdem für die prompte Antwort!

STefan

Evtl kannst ja auch für die die es brauchen hier ein patch veröffentlichen...

StefanStrobel

Hallo clumsy,

ich habe eine neue Version gepostet: https://forum.fhem.de/index.php/topic,45176.0.html.
Dieser Thread hier ist eigentlich alt und ich schließe ihn mit Verweis auf den neueren :-)

Gruss
   Stefan