FHEM Forum

FHEM - Hardware => FRITZ!Box => Thema gestartet von: drobskind am 05 Januar 2017, 19:07:41

Titel: FRITZBOX neuen Eintrag ins Telefonbuch
Beitrag von: drobskind am 05 Januar 2017, 19:07:41
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 (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 (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 (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 (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.
Titel: Antw:FRITZBOX neuen Eintrag ins Telefonbuch
Beitrag 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
Titel: Antw:FRITZBOX neuen Eintrag ins Telefonbuch
Beitrag von: drobskind am 06 Januar 2017, 09:01:31
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
Titel: Antw:FRITZBOX neuen Eintrag ins Telefonbuch
Beitrag von: KölnSolar am 06 Januar 2017, 09:29:59
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.
Titel: Antw:FRITZBOX neuen Eintrag ins Telefonbuch
Beitrag von: drobskind am 06 Januar 2017, 21:53:01
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 (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

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>'
Titel: Antw:FRITZBOX neuen Eintrag ins Telefonbuch
Beitrag von: wg25 am 15 September 2019, 11:12:59
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