FB_CALLMONITOR: Frage zu FB ohne telnet

Begonnen von Ralf W., 23 Januar 2015, 16:12:57

Vorheriges Thema - Nächstes Thema

Ralf W.

Hallo,

ich habe das Erweitungsmodul FB_Callmonitor im Einsatz, Daten werden von einer FB 6360 geholt. Die FB wurde von meinem Kabelanbieter zur Verfügung gestellt und Telnet läßt sich nicht aktivieren. Dadurch habe ich ein kleines Problem mit den Telefonbüchern der FB (2 x FB, 2 x Google). Ich muss mir die Telefonbücher immer von der FB und von Google holen und daraus eine XML-Datei basteln, damit FB-Callmonitor damit arbeiten kann. Das ist unschön.

Ich konnte mich erinnern vor langer Zeit unter Linux eine Anwendung benutzt zu haben, die mir trotz der Telnet-Beschänkung die Anrufe mit Namen angezeigt hat. Die Anwendung heißt jetzt "Roger Router". Gerade noch einmal frisch installiert und siehe da - Journal mit Anrufnamen aus den vier verschiedenen Telefonbüchern wird angezeigt. Bei Anrufen kann das Programm mit einem FB-Telefonbuch umgehen. Ist ein Eintrag vorhanden wird auch bei einem Gespräch der Name und die Rufnummer angezeigt. Das Journal wird erst aktualisiert, wenn das Gespräch beendet wird. Der Quelltext von RR ist in C. Kann ich leider nicht.

Besteht die Möglichkeit FB_Callmonitor so zu ändern, dass das Telefonuch der FB zusätzlich zu "per Datei, Telnet oder direkt lokal" auch nach der RR-Methode eingelesen werden kann?

MfG
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

JoWiemann

Hallo Ralf,

arbeite dran  ;)

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Ralf W.

Veräppeln kann ich mich alleine ...

Gesendet von meinem XT1032 mit Tapatalk

http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

JoWiemann

Wieso veräppeln?!

Es gibt die Möglichkeit das aktive Telefonbuch, also auch Google, wenn aktiv, per HTTPMod und den schon in FBRemote entwickelten Anmeldeprozeduren zu holen.

Vielleicht habe ich ja auch nur RR falsch verstanden.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Ralf W.

Sorry, dann habe ich das falsch interpretiert.

FBremote sagt mir im Moment nichts. Wenn ich wieder Zuhause bin schaue ich es mir an.

Danke für der Hinweis.

MfG

PS: Veräppelt ... gilt als virtuell gelöscht.

Gesendet von meinem Lenovo B6000-H mit Tapatalk

http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

Ralf W.

@JoWiemann

Hallo Jörg,

danke noch einmal. Dein Hinweis auf FBREMOTE hat mich auf den für mich richtigen Weg gebracht. Ich habe mir jetzt ein kleines Skript gebaut, das meine zwei internen und zwei Google-Telefonbücher aus der FB ausliest und verbindet. Das Ergebnis ist dann phonebook.xml. Damit kann FB_CALLMONITOR arbeiten.

Zwischendurch habe ich an mir gezweifelt, da meine Testanrufe vom Handy immer external_name=unknown ergaben. Bis ich dann irgendwann verstanden habe, das Leerzeichen in der Telefonnummer nicht berücksichtigt werden. Habe danach gesucht und folgende Änderung nach Zeile 743 in FB_CALLMONITOR vorgenommen:
$number =~ s/^\+\d\d/0/g; # quick'n'dirty fix in case of international number format.
$number =~ s/\s//g;
$number =~ s/\s//g if($number =~ /@/);

Ich habe leider noch nicht so viel Ahnung von Perl. Das kann man sicherlich eleganter lösen.

Was ist zu tun, damit das dauerhaft geändert wird? Oder reicht die Frage hier?

MfG

http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

JoWiemann

Hallo Ralf,

danke für die Rückmeldung und ich glaube, dass ein paar Leute dein Skript gerne verwenden würden. Wäre also schön, wenn Du es hier posten würdest.

Ich denke, dass sich Markus um die von Dir vorgeschlagene Änderung kümmern wird.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Ralf W.

Na klar. Ist nix dolles. Ich werde es mittels at (FHEM) einmal in der Woche laufen lassen (Rechte beachten). 

Grundlage dafür sind:
http://forum.fhem.de/index.php/topic,22288.0.html  --- FBREMOTE
https://home.debian-hell.org/blog/2013/03/21/konfiguration-der-avm-fritzbox-7390-per-wgetcurl-script-sichern/  --- die letzten vier Zeilen wurden ersetzt
http://stackoverflow.com/questions/9004135/merge-multiple-xml-files-from-command-line  --- xml-merge

#!/bin/bash

# FritzBox credentials
_FBOX="http://192.168.1.1"
_PASSWORD="tumadatmähei"

# get challenge key from FB
_CHALLENGE=$(wget --quiet -O- ${_FBOX}/login.lua | \
grep "^g_challenge" | \
awk -F'"' '{ print $2 }')

# build md5 from challenge key and password
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | \
iconv -f ISO8859-1 -t UTF-16LE | \
md5sum -b | \
awk '{print substr($0,1,32)}')

# assemble challenge key and md5
_RESPONSE=${_CHALLENGE}"-"${_MD5}

# build response data for later use
_POSTDATA="response=${_RESPONSE}&page=&username="

# get sid for later use
_SID=$(wget --quiet -O- --post-data="${_POSTDATA}" "${_FBOX}/login.lua" | \
grep "home.lua?sid=" | \
head -1 | \
awk -F'"' '{ print $6 }' | \
awk -F'=' '{ print $2 }')

### ab hier meine Aenderungen
# get configuration from FB and write to FILE
curl --form "sid=${_SID}" \
--form "PhonebookId=0" \
--form "PhonebookExportName=Telefonbuch" \
--form "PhonebookExport=" \
${_FBOX}/cgi-bin/firmwarecfg >/tmp/pb_fb0.xml

curl --form "sid=${_SID}" \
--form "PhonebookId=1" \
--form "PhonebookExportName=Telefonbuch" \
--form "PhonebookExport=" \
${_FBOX}/cgi-bin/firmwarecfg >/tmp/pb_fb1.xml

curl --form "sid=${_SID}" \
--form "PhonebookId=240" \
--form "PhonebookExportName=Telefonbuch" \
--form "PhonebookExport=" \
${_FBOX}/cgi-bin/firmwarecfg >/tmp/pb_google0.xml

curl --form "sid=${_SID}" \
--form "PhonebookId=241" \
--form "PhonebookExportName=Telefonbuch" \
--form "PhonebookExport=" \
${_FBOX}/cgi-bin/firmwarecfg >/tmp/pb_google1.xml

# phonebook für FB_CALLMONITIOR - Pfade anpassen
./xmlcombine.py /tmp/pb_fb0.xml /tmp/pb_fb1.xml /tmp/pb_google0.xml /tmp/pb_google1.xml >phonebook.xml


Ob die anderen externen Telefonbücher (GMX, usw.) auch über 240, 241, etc. erreichbar sind, kann ich nicht sagen, habe keine. Websuche leider kein Ergebnis. Habe das einfach über eine Schleife herausgefunden.

MfG
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

Markus Bloch

Zitat von: Ralf W. am 27 Januar 2015, 23:27:39
Zwischendurch habe ich an mir gezweifelt, da meine Testanrufe vom Handy immer external_name=unknown ergaben. Bis ich dann irgendwann verstanden habe, das Leerzeichen in der Telefonnummer nicht berücksichtigt werden. Habe danach gesucht und folgende Änderung nach Zeile 743 in FB_CALLMONITOR vorgenommen:
$number =~ s/^\+\d\d/0/g; # quick'n'dirty fix in case of international number format.
$number =~ s/\s//g;
$number =~ s/\s//g if($number =~ /@/);

Ich habe leider noch nicht so viel Ahnung von Perl. Das kann man sicherlich eleganter lösen.

Was ist zu tun, damit das dauerhaft geändert wird? Oder reicht die Frage hier?

MfG

Hallo Ralf,

habe ich gefixt und gibts ab morgen via update.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

JoWiemann

#9
Update: Returnwert hinzugefügt; Erläuternde Grafik
Update II: Fehlerbehandlung implementiert

Hallo,

mit viel Recherche und viel lesen und ausprobieren und Ralfs Hinweisen nun eine Funktion mit der das FritzBox Telefonbuch, bzw. die Telefonbücher, interne und online, ausgelesen werden können.

Die notwendige PhonebookId scheint wohl folgendermaßen von der FritzBox generiert zu werden:

0 == original Telefonbuch der FritzBox
1, 2, ... jedes weitere interne Telefonbuch

240 == das erste online Telefonbuch
241, 242, ... jedes weitere online Telefonbuch

sub FB_Get_PhoneBook()
{
  my $boxaddress = "fritz.box";
  my $phonebookId = 240; # 0,1,... für die internen 240,241,... für die online Telefonbücher
  my $phonebookExpName = "Telefonbuch"; # Scheint keine Rolle zu spielen
  my $boxpasswort = ".....";

  my $user_agent = LWP::UserAgent->new;
  my @Atemp;

  # challenge string holen
  my $http_response = $user_agent->get("http://$boxaddress/login_sid.lua");
  if ($http_response->is_error) {
    Log3 undef, 3, "FB_TestScript -> Fehler bei challenge string holen: $http_response->status_line()";
    return $http_response->status_line(); # $http_response->code() or $http_response->message()
  }

  @Atemp = $http_response->content;
  Log3 undef, 3, "FB_TestScript -> challenge string: @Atemp";

  $http_response->content =~ /<Challenge>(\w+)/i and my $challengeStr = $1;

  # response zur challenge generieren
  my $ch_Pw = "$challengeStr-$boxpasswort";

  $ch_Pw =~ s/(.)/$1 . chr(0)/eg;
  my $md5 = lc(md5_hex($ch_Pw));
  my $challenge_response = "$challengeStr-$md5";

  # Session ID erfragen
  $http_response = $user_agent->get( "http://$boxaddress/login_sid.lua?user=&response=$challenge_response");
  if ($http_response->is_error) {
    Log3 undef, 3, "FB_TestScript -> Fehler bei Session ID erfragen: $http_response->status_line()";
    return $http_response->status_line(); # $http_response->code() or $http_response->message()
  }

  @Atemp = $http_response->content;
  Log3 undef, 3, "FB_TestScript -> Session ID erfragen: @Atemp";

  # Session ID aus XML Daten auslesen
  $http_response->content =~ /<SID>(\w+)/i and my $sid = $1;

  if($sid eq "0000000000000000") {
    Log3 undef, 3, "FB_TestScript -> Fehler bei SID Generierung";
    return "SID konnte nicht erzeugt werden";
  }

  Log3 undef, 3, "FB_TestScript -> SID: $sid";

  $http_response = $user_agent->post("http://$boxaddress/cgi-bin/firmwarecfg",
  Content=>['sid' => $sid, 'PhonebookId' => $phonebookId, 'PhonebookExportName' => $phonebookExpName,
  'PhonebookExport' => '' ], Content_Type => 'multipart/form-data');
  if ($http_response->is_error) {
    Log3 undef, 3, "FB_TestScript -> Fehler bei Telefonbuchexport $phonebookId: $http_response->status_line()";
    return $http_response->status_line(); # $http_response->code() or $http_response->message()
  }

  @Atemp = $http_response->content;
  Log3 undef, 3, "FB_TestScript -> Seite für Telefonbuch $phonebookId geholt ";

  my @FBPhoneBook = $http_response->content;

  my $temp = join('', @FBPhoneBook);

  if($temp =~ /\<phonebooks\>([\s\S]+)\<\/phonebooks\>/) {
    if(trim($1) eq "") {
      Log3 undef, 3, "FB_TestScript -> Kein Telefonbuch $phonebookId definiert: $temp";
      return "Kein Telefonbuch gefunden";
    } else {
      Log3 undef, 3, "FB_TestScript -> Telefonbuch $phonebookId exportiert";
    }
  } else {
    Log3 undef, 3, "FB_TestScript -> Kein Telefonbuch $phonebookId definiert - Fehler bei Seitenabfrage: $temp";
    return "Kein Telefonbuch gefunden - Fehler bei Seitenabfrage";
  }

  Log3 undef, 3, "FB_TestScript -> Fertig";

  return (undef, join('', @FBPhoneBook));
}




Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Ralf W.

Zitat von: Markus Bloch am 28 Januar 2015, 17:40:34
Hallo Ralf,

habe ich gefixt und gibts ab morgen via update.

Viele Grüße

Markus
Danke!

MfG

Gesendet von meinem Lenovo B6000-H mit Tapatalk

http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

Mitch

Hallo Jörg,

das hört sich prima an, Danke!!

Ich wollte jetzt mal umstellen (hab auch eine Kabelbox), dass das Telefonbuch über den Webzugriff geholt wird.
Allerdings kann ich nicht nachvollziehen, wie?
Hier steht es nicht und im Commandref steht auch ncihts darüber?

Vielen Dank für eine kleine Unterstützung.
FHEM im Proxmox Container

JoWiemann

Hallo Mitch,

ist noch nicht im aktuellen FB_CALLMONITOR drin. Ich habe Markus eine Version zum Testen geschickt. Wenn er als Maintainer zufrieden ist, wird es einchecken und damit veröffentlichen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Mitch

Ah, okay, danke.

Brauch ich dann zusätzlich FBREMOTE?
FHEM im Proxmox Container

JoWiemann

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM