NEWS
Verpasste Anrufe und AB Nachrichten von der FritzBox
-
Servus!
Ich denke das gab es hier bisher nicht, da ich den fritzbox Adapter hierfür ordentlich erweitern musste
Wer will kann sich meine Version des Adapter direkt von GitHub installieren:
https://github.com/Khaos66/ioBroker.fritzbox
Neben der Anrufbeantworter-Funktion (TAM) sind auch kleinere Bugs behoben worden.Ihr habt dann in der fritzbox Instanz einen neuen Haken "Anrufbeantworter auslesen":
Das wiederum sorgt bei einem verpassten Anruf mit Nachricht auf dem AB dafür, dass die Nachricht als WAV Datei heruntergeladen wird und ein Eintrag im Objekt 'fritzbox.0.tam.messagesJSON' entsteht.
Wenn ihr den Telegram Adapter eingerichtet habt, dann kann euch dieses Script Nachrichten vom AB an Telegram weiterleiten. Das schaut dann etwa so aus:
const { existsSync } = require('fs'); const LAST_TAM_DATE_STATE = "lastTamDate"; existsState(LAST_TAM_DATE_STATE, (err, exists) => { if (!exists) { createState(LAST_TAM_DATE_STATE,''); } }) function parseDateTime(input) { var parts = input.match(/(\d+)/g); return new Date(parts[2], parts[1]-1, parts[0], parts[3], parts[4]); } on({id: "fritzbox.0.tam.messagesJSON", change: "ne"}, function(obj) { if (!obj.state.val) { return; } var messages = JSON.parse(obj.state.val); log(`messages: ${JSON.stringify(messages)}`,'debug'); if (messages.length == 0) { return; } // last message var message = messages[messages.length - 1]; log(`message: ${JSON.stringify(message)}`,'debug'); var lastTamDate = parseDateTime(getState(LAST_TAM_DATE_STATE).val); var messageDate = parseDateTime(message.date); if (messageDate <= lastTamDate) { log('skip old message','debug'); return; } if (message.audioFile && existsSync(message.audioFile)) { sendTo('telegram.0', {text: message.audioFile, caption: 'Nachricht', disable_notification: true}); log('Audio message send','debug'); } var msg; if (message.callerName) { msg = `📞 Verpasster Anruf von ${message.callerName} (${message.callerNumber}). Dauer: ${message.duration}`; } else { msg = `📞 Verpasster Anruf von ${message.callerNumber}. Dauer: ${message.duration}`; } log(msg, "info"); sendTo('telegram.0', msg); setState(LAST_TAM_DATE_STATE, message.date, true); });
Und dieses andere Script schickt eine Telegram Nachricht bei verpassten Anrufen ohne Nachricht auf dem AB und schaut so aus:
on("fritzbox.0.cdr.missedJSON", function(obj) { if (!obj.state.val) { return; } var msg; var caller; log(JSON.stringify(obj.state.val), "debug"); var num = obj.state.val.unknownNumber ? 'unbekannter Nummer' : obj.state.val.externalE164; log(`Missed call from ${num}`, "debug"); var phonebookstr = getState("fritzbox.0.phonebook.tableJSON").val; if (phonebookstr && phonebookstr.length>2){ var phonebook = JSON.parse(phonebookstr); log(`Phonebook: ${phonebook}`, "debug"); caller = phonebook.find(x => x.key == obj.state.val.externalNumber); } if (caller) { msg = `📞 Verpasster Anruf von ${caller.value.name} ${caller.value.type} (${num}). Dauer: ${obj.state.val.durationRingSecs}s`; } else { msg = `📞 Verpasster Anruf von ${num}. Dauer: ${obj.state.val.durationRingSecs}s`; } log(msg, "info"); sendTo('telegram.0', msg); });
Wer meine Arbeit schätzt kann sich gerne hier erkenntlich zeigen
PayPal Donate -
@khaos dann mach doch ein PR für den offiziellen Adapter
-
@arteck Ich habe noch einen anderen offen, der zuerst gemergt werden sollte
Habe leider beides auf /main entwickelt... im Nachhinein nicht sehr schlau, aber so ist es nun eben.EDIT: Ich habs jetzt einfach als PR erstellt... mal sehen ob er akzeptiert wird
-
Hallo khaos,
deine Erweiterung des Adapters finde ich sehr gut, und würde sie vermutlich auch einsetzen.
Nur mal aus Interesse meinerseits, warum hast du diese Funktion in den veralteten Adapter eingebaut,
und nicht in den neuen TR-064?
Gruß, Karsten
-
@hydrotec Hi. Ehrlich gesagt bin ich noch ganz neu hier und wusste nicht, dass der Adapter veraltet ist... Dann wundert es mich jetzt auch nicht mehr, dass ich so viel drum herum fixen musste =D
Ich versuche bei Gelegenheit den neuen damit auszustattenWird aber wohl etwas dauern...
-
@khaos Hi, ich hatte vor einiger Zeit mal an einem Skript geschrieben, um die Anrufbeantworterdaten aus der Fritzbox auszulesen, darzustellen und löschen zu können: https://forum.iobroker.net/topic/14288/tr-064-fritzbox-anrufbeantworter/38
Wenn ich deine Erweiterung richtig verstanden habe lädst du nur die letzte Sounddatei vom Anrufbeantworter und machst sie abspielbar. Ist das richtig?
Wäre es auch technisch möglich, eine beliebige Aufnahme herunterzuladen und abzuspielen? -
@feuersturm Hi, der Adapter lädt das TAM (telephone answering maschine / Anrufbeantworter) Protokoll herunter. Dazu gehören auch die WAV Dateien mit den Nachrichten. AVM Docu: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_tam.pdf
Das Script oben reagiert dann nur darauf, dass eine neue Nachricht heruntergeladen wurde.
Ich verstehe nicht ganz, welche anderen Nachrichten du herunterladen willst?
Eine vollständige Liste aller Schnittstellen, die eine Fritzbox liefert findest du hier:
https://avm.de/service/schnittstellen/ -
@khaos Hi, das heißt, wenn mehrere wav Dateie auf der Fritzbox gespeichert sind, würde deine Erweiterug diese auch einzeln in ioBroker speichern und die einzelnen wav Dateien wären für die weitere Verarbeitung in ioBroker verfügbar.
-
Guten Morgen
Shit happens
@khaos sagte in Verpasste Anrufe und AB Nachrichten von der FritzBox:
... Ich versuche bei Gelegenheit den neuen damit auszustatten
Wird aber wohl etwas dauern...
Vorab schon einmal DankeschönIst wirklich eine nützliche Funktion.
Hatte das in meiner vorherigen Automatisationssoftware auch zur Verfügung.Angenehmen Tag noch.
Gruß, Karsten -
@khaos Ich habe hier den normalen fritzbox adapter aus iobroker, und ich habe hier nicht die option AB auslesen, wird der adapter bald offiziell als update kommen, und geht dein script damit dann noch?