FRITZBOX neuen Eintrag ins Telefonbuch

Begonnen von drobskind, 05 Januar 2017, 19:07:41

Vorheriges Thema - Nächstes Thema

drobskind

Guten Abend zusammen,

mittlerweile bin ich recht weit mit meiner FHEM Installation. Es funktioniert schon sehr viel wie ich es mir vorstelle.
Aktuell nutze ich bereits das FB_CALLMONITOR Modul zusammen mit dem HTTPMOD modul um eine Tellowsabfrage zu tätigen.
Das funktioniert auch bereits.

Da wir recht häufig SPAM Anrufe erhalten habe ich begonnen in der Fritzbox alle SPAM Telefonnummern in ein extra Telefonbuch zu speichern.
Dieses Telefonbuch ist in den Rufsperren für ankommende Anrufe gesperrt.
Leider ist es immer recht umständlich die Nummer hinzuzufügen: Einloggen, Anruf suchen, Nummer speichern (eventuell vorher das Telefonbuch wechseln), Name hinzu usw.

Meine Idee war es nun, über einen Befehl aus FHEM heraus, einen neuen Kontakt in diesem Telefonbuch anzulegen.
Wenn ich mir die Doku zur TR 064 Schnittstelle von AVM anschaue scheint das auch möglich zu sein. (SetPhonebookEntry)
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/X_contactSCPD.pdf

Auf einem zweiten RaspberryPi habe ich bereits das Modul FRITZBOX installiert und kann darüber recht zuverlässig die Anwesenheit von meinen IPhones prüfen.
Über dieses Modul lassen sich bereits TR064 Befehle absetzen.
Der Befehl zum auslesen eines Telefonbucheintrags hat bei mir auch funktioniert.
get FritzBox tr064Command X_AVM-DE_OnTel:1 x_contact GetPhonebookEntry NewPhonebookID 1 NewPhonebookEntryID 20

liefert:
Service='X_AVM-DE_OnTel:1'   Control='x_contact'   Action='GetPhonebookEntry'
Parameter1='NewPhonebookID' => '1'
Parameter2='NewPhonebookEntryID' => '20'
----------------------------------------------------------------------
$VAR1 = {
          'GetPhonebookEntryResponse' => {
                                         'NewPhonebookEntryData' => '008985441278930898544127893147741027143'
                                       }
        };


Zur Erklärung, ich speichere die Telefonnummer auch gleich als Namen ab die erste Ziffernfolge ist somit der Name (00898544127893), die zweite dann die eigentliche Nummer (0898544127893). Den Rest kann ich nicht deuten. (147741027143)

Ich habe nun auch schon viel im Internet gesucht. Es scheint, als wenn im Hintergrund auch noch SOAP Telegramme versendet werden und der eigentliche Eintrag als XML übertragen wird. Somit sind meine Tests mit SetPhonebookEntry vermutlich auch alle fehlgeschlagen, da im falschen Format.

Hier ein paar Links:
https://github.com/tbrandt77/janrufmonitor jAnrufmonitor scheint laut Doku auch TR064 zu nutzen um Einträge zu tätigen.
https://www.symcon.de/forum/threads/25745-FritzBox-mit-SOAP-auslesen-und-steuern Fritzbox Werte per TR064 auslesen und ändern. Leider nur einfache dinge, wie on-off. Aber hier erkennt man bereits dass per SOAP XML Telegramme versendet werden.
https://forum.fhem.de/index.php?topic=49262.0 In diesem Thread geht es auch bereits um dieses Thema. Leider ist der Thread bereits vor Monaten eingeschlafen...

Leider fehlt mir die Zeit mich tiefer mit dem Thema zu befassen somit hoffe ich nun auf eure Hilfe oder Tipps.
Ziel: über notify getriggert -> FHEM sendet TR064 Befehlt an Fritzbox mit Telefonnummer und Name -> Fritzbox speichert den Kontakt.

KölnSolar

Ich denke es wäre besser, wenn Du den Post ins Subforum FritzBox verschiebst. Verschieben kannst Du selbst.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

drobskind

Zitat von: KölnSolar am 06 Januar 2017, 08:35:38
Ich denke es wäre besser, wenn Du den Post ins Subforum FritzBox verschiebst. Verschieben kannst Du selbst.
Grüße Markus

Hallo Markus, danke für den Hinweis. Werde ich tun. Ich dachte nur nicht, dass es da hineingehört.
Das Unterforum sah mir eher danach aus, dass es dort um FHEM Installationen AUF einer Fritzbox geht.

Gruß
Drobs

KölnSolar

Da hast Du auch recht mit. Seitdem fhem von AVM nicht mehr unterstützt wird und die firmware der Box sich immer weiter abschottet, ist die Box ja keine sinnvolle Hardwareplattform mehr für fhem. Deshalb sammeln sich hier mittlerweile alle Fragestellungen zur Box. Ist zumindest mein Eindruck.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

drobskind

So ich bin etwas weiter gekommen.  ;D

Sollte ich hier einige Begriffe durcheinander werfen dann gebt mir bitte Bescheid. Ich bin recht Laienhaft unterwegs und versuche es auch so zu verstehen.  ::)

Mit Hilfe des Quelltextes von  ;) https://github.com/querdenker2k/fritzbox-carddav/blob/master/src/main/java/org/czdev/fritzbox/carddav/service/FritzboxUpdater.java#L69
und einem Telefonbuchexport aus meiner Fritzbox konnte ich den XML Telegrammaufbau ermitteln.
SOAP lite (glaub ich) meckert aber wenn im XML der Begriff XML vorkommt. Und auch wegen vieler anderer Dinge. Das führt dann sogar so weit, dass FHEM abstürzt und per sudo service FHEM start wieder geweckt werden muss.

Nach weiterer Recherche habe ich herausgefunden, dass SOAP zwar XML Format nutzt, aber mit gewissen Anpassungen.

Mit folgenden Befehl war ich nun in der Lage aus FHEM heraus über das FRITZBOX Modul einen Telefonbucheintrag in meiner Fritzbox anzulegen.

get FritzBox tr064Command X_AVM-DE_OnTel:1 x_contact SetPhonebookEntry NewPhonebookID 2 NewPhonebookEntryID 0 NewPhonebookEntryData '<Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><contact><category>0</category><person><realName>TESTKONTAKT</realName></person><telephony nid="1"><number type="home" prio="1" id="0">0301234567890</number></telephony></contact>'

Einige XML Tags, welche im Telefonbuch Export enthalten waren konnte ich sogar wegfallen lassen. Dort ist zu Beispiel eine "uniqueid" enthalten. Aber selbst wenn man sie mitsendet, ermittelt meine Fritzbox selber eine. (Sieht man dann wieder in der Telefonbuch Export Datei)

Noch zur Info für andere Experten meines Kenntnisstands...  ;D

  • NewPhonebookID 2: Das ist das 3te Telefonbuch, welches ich in meiner Fritzbox extra für die Tests angelegt habe. Die Fritzbox fängt mit 0 an zu Zählen. Wenn ihr nur ein Telefonbuch habt, ist es somit 0.
  • NewPhonebookEntryID 0: kann immer 0 sein. Die Fritzbox schnappt sich selber die nächste freie ID

Und für mich reicht das jetzt vorerst. Ein wenig Fehlerbehandlung kann ich sicher noch drum rum bauen. Da die Fritzbox auch munter Duplikate anlegt, wenn man den Befehl mehrfach ausführt, wäre es sicher sinnvoll vorher zu prüfen ob der Eintrag bereits existiert.

Ich habe das ganze bei mir jetzt erstmal über ein Notify eingebunden und beim Namen und der Telefonnummer erstmal die $EVENT Variable genutzt.
Der Notify reagiert auf einen Dummy, der als Wert die Telefonnummer gesetzt bekommt. (Geht sicher auch schöner, aber ich verzweifel dann vermutlich wieder an den Escape Sequenzen der Hochkomma und Anführungszeichen in dem SOAP XML.  :-[)

Und nochmal der Lesbarkeit halber der Befehl mit Zeilenumbrüchen
X_AVM-DE_OnTel:1 x_contact SetPhonebookEntry NewPhonebookID 2 NewPhonebookEntryID 0 NewPhonebookEntryData '<Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<contact>
<category>0</category>
<person>
<realName>Test</realName>
</person>
<telephony nid="1">
<number type="home" prio="1" id="0">0099999999</number>
</telephony>
<features doorphone="0" />
<uniqueid>88</uniqueid>
</contact>'

wg25

Um eine neuen Eintrag zum Telefonbuch zu ergänzen, wird SetPhonebookEntryUID benötigt:

get FritzBox tr064Command X_AVM-DE_OnTel:1 x_contact SetPhonebookEntryUID NewPhonebookID 1 NewPhonebookEntryData '<Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><contact><category>0</category><person><realName>Sperr-KONTAKT</realName></person><telephony nid="1"><number type="home" prio="1" id="0">030123456789</number></telephony></contact>'

Mit SetPhonebookEntry wird immer der bestehende mit der angegebenen UID überschrieben.

Gruß Arne