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.
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
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
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
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 (http://forum.fhem.de/index.php/topic,32866.msg252542.html#msg252542)) schreibe ich in den nächsten Tagen noch und hänge sie dann an.
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
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?
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
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
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?
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
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
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
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.
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
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
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/>"Alpenpanorama" 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 "Zeit im Bild" (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 "Fürstenhofs" 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 & 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 "Fürstenhofs" 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 "Fürstenhofs" 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 "Tom & Jerry" 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 & 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 "Erwachsenenfilm" 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/>"Kuckuck! ruft's aus dem Wald ..." 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 & 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/>"Dein Vater ist ein eiskalter Mörder" - 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
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
Vielen Dank, das war es!
Ronny
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>
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.
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
Hallo Andies,
Im Wiki sollen die meisten Deiner Fragen beantwortet sein.
Insbesondere solltest Du https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_create_a_valid_session_id_that_might_be_necessary lesen.
Im Forum wurde das auch schon oft diskutiert:
https://forum.fhem.de/index.php/topic,68452.0.html
https://forum.fhem.de/index.php/topic,56455.msg628623.html#msg628623
usw.
Die aktuelle Diskussion wäre hier: https://forum.fhem.de/index.php/topic,45176.390.html
Gruss
Stefan
Danke, kurze Nachfrage: Die einzelnen get01, get02, get03-Kommandos werden nicht automatisch nacheinander ausgeführt, das sehe ich richtig - oder?
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
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...
Kann es sein, dass der Speedport ein Session-cookie setzt? Dann muss dieses Cookie systematisch mitgegeben werden.
Dafür
attr enableCookies
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
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
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!
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
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
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
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
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.
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?
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
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?
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
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
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
Interessant. Das hier geht:
attr Speedport reAuthRegex Melden Sie sich an, um Ihren Speedport zu konfigurieren
Ist vielleicht der Regex mit dem Oder | falsch?
Es liegt offensichtlich an der Regex.
Einfacher ist besser ;-)
Klappt jetzt alles?
Gruß
Stefan
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
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>
Genau, md5. Aber du bist auch drin, oder?
Gesendet von iPhone mit Tapatalk Pro
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>
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?
Versuch mal zuert mit dem Attribute decodeAllJason
Wegen Channel18... was nicht in der Antwort zurückkommt kann httpmod auch nicht bewerten...
Via Tapatalk
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 ;-)
Du kannst probieren:
reading01Name TempChannel8
reading01JSON Channel8_temperature
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?
Guck erstmal was ExtractAllJSON ergibt, und mach deine Regex entsprechend.
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".
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.
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?
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
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?
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]*)"}
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.
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
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 ...
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
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
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...
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