[HTTPMOD] Telekom Hybrid Speedport

Begonnen von Christian Uhlmann, 30 Mai 2016, 09:20:35

Vorheriges Thema - Nächstes Thema

Christian Uhlmann

Hallo zusammen,

ich bin nicht so der HTTP Experte, aber ich würde gerne Daten aus dem Engineer Menü meines Speerports auslesen.
Dazu gibt es momentan 2 Möglichkeiten:

1. kleines Shell-Script, keine Ahnung wo ich das gefunden habe, aber es läuft bei mir:

#!/bin/bash
challengev=$(curl -s -d csrf_token=nulltoken -d showpw=0 -d challengev=null http://speedport.ip/data/Login.json?lang=en | grep -A 1 challengev | tail -1 | awk -F'"' '{print $4}')
encryptpwd=$(perl -e "use Digest::SHA qw(sha256_hex); print sha256_hex('${challengev=}:passwort');")
sessionid=$(curl -s -i -d password=${encryptpwd} http://speedport.ip/data/Login.json?lang=en | grep SessionID | awk -F'=' '{print $2}' | awk -F';' '{print $1}')
echo "$(date +"%Y-%m-%d_%T") SYS.lteinfo RSRP: $(curl -s --cookie "SessionID_R3=${sessionid}" http://speedport.ip/data/lteinfo.json | grep rsrp | awk -F"'" '{print $4}')"
echo "$(date +"%Y-%m-%d_%T") SYS.lteinfo RSRQ: $(curl -s --cookie "SessionID_R3=${sessionid}" http://speedport.ip/data/lteinfo.json | grep rsrq | awk -F"'" '{print $4}')"


Das ist aber umständlich und man muss außerhalb von FHEM noch etwas haben.

2. http://blog.mellenthin.de/archives/2015/04/29/telekom-speedport-hybrid-logging-mit-rrdtool/
Noch nicht getestet aber auch nicht das was ich will

Jetzt zu meiner Frage, kann man das mit HTTPMOD realisieren und was ist dafür zu tun, es gibt ja so viele Möglichkeiten aber ich weiß nicht wie ich genau anfangen soll.


Danke und Grüße

Christian
Host: Debian Buster als VM / XCP-NG
Gateways: DuoFern Stick, CUL433 Revolt, CUL MAX, HMLan, HM-USB 2, LaCrosseGateway
Devices: 12x Rademacher Rollos, 6x TX 29 DT-HT, 10x HM-CC-RT-DN, 14x MAX Fensterkontakte, Diverse HM Aktoren für Licht, Klingel, Gong, Eingangstür, ESPEasy, Sonoff mit Tasmota

Hans Franz

#1
Ich habe es zwar nicht mit HTTPMOD versucht sondern mit den Tools aus dem von dir verlinkten Blog. Ist leider schon einige Zeit her und ich müsste mich wieder einfuchsen. Aber evtl. hilft es dir ja doch.

In eine MyUtils folgende subs:

sub
SpeedportStatus_function {
my $json_text = `node /home/joe/Downloads/l33tport-master/l33tport.js -o json -f Status`;
my $element;   
my @jsonarray = split(/{/,$json_text);
foreach $element (@jsonarray) {
    my @element_array = split(/,/,$element);
    my (undef,$varid) = split(/: /,@element_array[1]);
    my (undef,$varval) = split(/: /,@element_array[2]);
    my ($reading1) =  $varid =~ /([A-Za-z_][A-Za-z0-9_]*)/;
    my ($reading2) =  $varval =~ /([A-Za-z0-9_][A-Za-z0-9_.-]*)/;
    if ($reading1 ne '' && $reading2 ne '') {
        fhem("setreading SpeedportStatus_dummy $reading1 $reading2");
        }
    }
SpeedportLTE_function();   
}

sub
SpeedportLTE_function {
my $json_text =  `node /home/joe/Downloads/l33tport-master/l33tport.js -o json -f lteinfo`;
$json_text =~s/'/"/g;
$json_text =~s/[{: ]\K(\w+):\s/"$1":/g;
print $json_text;
my $data = decode_json($json_text);
my %f = %{$data} ;
foreach my $key (keys(%f)) {
    fhem("setreading SpeedportStatus_dummy $key $f{$key}");
    }
}


Ein dummy mit Namen SpeedportStatus_dummy anlegen.
Die sub mit:
{SpeedportStatus_function()}
ausführen


Internals:
   CFGFN
   NAME       SpeedportStatus_dummy
   NR         135397
   STATE      ???
   TYPE       dummy
   Readings:
     2016-05-30 17:08:30   addphonenumber  Object
     2016-05-30 17:08:30   antenna_mode    Antennal set to external
     2016-05-30 17:08:30   bngscrat        0
     2016-05-30 17:08:30   bonding_status  Online
     2016-05-30 17:08:30   card_status     SIM OK
     2016-05-30 17:08:30   cellid          xx
     2016-05-30 17:08:30   connect         0
     2016-05-30 17:08:30   datetime        30.05.2016
     2016-05-30 17:08:30   device_name     Speedport
     2016-05-30 17:08:30   device_status   Attached
     2016-05-30 17:08:30   dsl_downstream  2298
     2016-05-30 17:08:30   dsl_link_status online
     2016-05-30 17:08:30   dsl_upstream    543
     2016-05-30 17:08:30   firmware_version 050124.02.00.012
     2016-05-30 17:08:30   hsfon_status    0
     2016-05-30 17:08:30   imei            xx
     2016-05-30 17:08:30   imsi            xx
     2016-05-30 17:08:30   lan1_device     1
     2016-05-30 17:08:30   lan2_device     0
     2016-05-30 17:08:30   lan3_device     0
     2016-05-30 17:08:30   lan4_device     0
     2016-05-30 17:08:30   loginstate      1
     2016-05-30 17:08:30   lte_signal      5
     2016-05-30 17:08:30   lte_status      10
     2016-05-30 17:08:30   onlinestatus    online
     2016-05-30 17:08:30   phycellid       410
     2016-05-30 17:08:30   ppp_bnguser     0
     2016-05-30 17:08:30   provis_inet     x03
     2016-05-30 17:08:30   provis_voip     xx3
     2016-05-30 17:08:30   router_state    OK
     2016-05-30 17:08:30   rsrp            -78
     2016-05-30 17:08:30   rsrq            -10
     2016-05-30 17:08:30   serial_number   HFxx
     2016-05-30 17:08:30   service_status  Effective service
     2016-05-30 17:08:30   status          online
     2016-05-30 17:08:30   support_https   0
     2016-05-30 17:08:30   tac             3030
     2016-05-30 17:08:30   title           Speedport
     2016-05-30 17:08:30   use_dect        0
     2016-05-30 17:08:30   use_lte         1
     2016-05-30 17:08:30   use_wlan        1
     2016-05-30 17:08:30   use_wlan_5ghz   1
     2016-05-30 17:08:30   use_wps         0
     2016-05-30 17:08:30   wlan_5ghz_devices 0
     2016-05-30 17:08:30   wlan_5ghz_ssid  WLAN-NW8DFL-5GHz
     2016-05-30 17:08:30   wlan_devices    0
     2016-05-30 17:08:30   wlan_ssid       WLAN-NW8DFL
Attributes:
   room       LTE


Gruß
Hans

Edit:
Wird nicht mehr funktionieren da eine neuere l33tport.js in github.
Der krude Code meinerseits kam wohl, wenn ich mich recht erinnere, durch ein malformed json. Das scheint behoben. Werde, wenn ich Zeit finde, versuchen mich wieder einzuarbeiten.
Habe es aber nicht viel genutzt, da die FritzBox hinter dem Router hängt und die Hauptarbeit verrichtet.
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Hans Franz

#2
Es hat mir keine Ruhe gelassen... :-\
Anbei eine erste 99_myUtilsSpeedport.pm. Büschen quick'n dirty.
Vorgehenweise:
Von hier die zip-Datei downloaden, auspacken und Pfad merken.
In der Datei l33tport.js ip-Adresse und Passwort editieren.
In der 99_myUtilsSpeedport.pm den Pfad($l33tport_path) anpassen. Evtl. auch den Pfad zu node(üblicherweise:/usr/bin/node oder /usr/local/bin/node) ergänzen.
Mit {SpeedportStatus()} ausführen.

Ist aber bei weitem noch nicht fertig. Bisher nur:

  • Status
  • lteinfo
  • Overview
  • Lan
Es gibt noch einige mehr. Siehe hier.
Sind aber jetzt schon reichlich Readings.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

hajo23

Wenn ich
{SpeedportStatus()}
ausführe, bekomme ich
malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/99_myUtilsSpeedport.pm line 40.

ein Test mit
node /home/pi/l33tport-master/l33tport.js -o json -f Status
ist ok.

Gruß,
Hajo

Hans Franz

Hast du die neuste Version von hier?
Ich meine mich zu erinnern, dass ich mit einer alten Version auch fehlerhafte jsons bekam.

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

hajo23

wenn ich in 99_myUtilsSpeedport.pm
/usr/local/bin/node /home/pi/l33tport-master/l33tport.js ...

nehme läuft es  :)

Hans Franz

Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20