Dieser Beitrag wurde seit einem Jahr nicht mehr aktualisiert. Im Internet ist das manchmal eine halbe Ewigkeit. Es kann daher sein, dass die Informationen und Links nicht mehr aktuell sind.
In einem früheren Post habe ich bereits gezeigt, wie sich eine Anruferkennung mit der FritzBox und Node-RED umsetzen lässt. Dabei wurde auf das Standard Telefonbuch zurückgegriffen. Inzwischen benötige ich ein weiteres Telefonbuch in der FritzBox. Jetzt soll sich die Auswahl des Telefonbuchs anhand der vom Anrufer gewählten Rufnummer unterscheiden.
Wer mehrere Rufnummern mit seiner FritzBox nutzt hat eventuell auch mehrere Telefonbücher hinterlegt. Ein Beispiel ist neben einem privaten Anschluss die Nutzung einer weiteren Rufnummer für’s Büro. Um den Namen des Anrufers zu ermitteln habe ich bisher auf das Standardtelefonbuch zurückgegriffen. Für die zweite Rufnummer möchte ich jedoch auf das zweite Telefonbuch zurückgreifen.
Der Flow in Node-RED
Im Flow in Node-RED muss also zunächst unterschieden werden, welche Rufnummer vom Anrufer gewählt wurde. Anschließend muss im richtigen Telefonbuch nach dem Namen des Anrufers gesucht werden.
Für die Unterscheidung der gewählten Rufnummer bietet sich der Switch-Node an. Hier können Bedingungen mit verschiedenen Ausgängen verknüpft werden. Überprüft wird hier der callee
im Payload der eingehenden Nachricht. Je nach Rufnummer wird dann Ausgang 1 oder Ausgang 2 des Switch Nodes angesteuert.
Im Anschluss wird an jeden Ausgang jeweils ein FritzBox Lookup Node angehangen. Im Feld Phonebook wird für das Standardtelefonbuch eine 0
eingetragen. Für das zusätzliche Telefonbuch die 1
. Die Telefonbücher in der FritzBox sind durchnummeriert. Wer weitere Telefonbüchern nutzt, muss die Zahl entsprechend erhöhen.
Im Anschluss läuft der Flow wieder zusammen. Mit einer kleinen Funktion wird die Ausgabe vorbereitet.
// only incoming calls
if (msg.payload.type !== 'INBOUND') return;
var message = '';
if (msg.payload.caller_contacts.length) {
message += msg.payload.caller_contacts[0].person.realName + ' (' + msg.payload.caller + ')';
} else {
message += msg.payload.caller;
}
var title = msg.payload.callee === '1234567' ? 'Büro ruft an' : 'Eingehender Anruf';
return {
payload: {
message: message,
title: title
}
};
Die Funktion erledigt folgende Dinge:
- Es werden nur eingehende Anrufe berücksichtigt.
- Der Text für eine Push-Nachricht wird vorbereitet. Sofern ein Name für die Rufnummer ermittelt werden konnte, wird dieser zusammen mit der Rufnummer ausgegeben. Beispiel Manni Mustermann (01318/1023401). Wurde die Rufnummer nicht gefunden, wird nur die Rufnummer ausgegeben.
- Als Titel der Nachricht wird je nach eingehender Rufnummer entweder Büro ruft an oder Eingehender Anruf ausgegeben.
Jetzt muss das ganze noch als Nachricht an einen Dienst übermittelt werden. Im meinem Fall übernimmt Homeassistant das Senden einer Push-Nachricht an mein Smartphone. Alternativ können hier auch andere Dienste, wie z.B. Pushover, Telegram oder Slack verwendet werden. Gegebenenfalls muss das Format der Nachricht aus der Funktion oben angepasst werden.
Wer den Flow so bereits schon einmal ausgetestet hat, wird auf eine Fehlermeldung gestoßen sein. Dies liegt an einem Fehler im Fritzbox Plugin für Node-RED. Da dieser Fehler nur den Lookup der eigenen Rufnummer betrifft und die Funktionalität nicht beeinflusst, unterdrücken wir diesen einfach mit Hilfe des Catch-Nodes.
Der Node wird so konfiguriert, dass nur Fehler bei den beiden Lookup Nodes abgefangen werden. Dazu wählt man im Dropdown Catch Fehler von ausgewählten Nodes. In der Liste wählt man nun die beiden Telefonbuch Nodes (fritzbox-contact) aus. So werden nur Fehler in den entsprechenden Nodes unterdrückt.
Flow zum Download
Den oben gezeigten Flow gibt es bis auf den abschließenden Benachrichtungsnode hier zum download. Einfach kopieren und über die Import-Funktion in Node-RED einfügen.
[{"id":"d7e07e4d.7a9ad","type":"fritzbox-callmonitor","z":"ed1f6a8c.9a3858","device":"b59ac5a2.9d71f8","name":"","topic":"","x":140,"y":360,"wires":[["d7f25550.8ce4c8"]]},{"id":"30c97a2a.6807ae","type":"fritzbox-contact","z":"ed1f6a8c.9a3858","device":"b59ac5a2.9d71f8","name":"Büro","topic":"","phonebook":"1","ccode":"DE","x":450,"y":400,"wires":[["7d614d6.815a134"]]},{"id":"d7f25550.8ce4c8","type":"switch","z":"ed1f6a8c.9a3858","name":"","property":"payload.callee","propertyType":"msg","rules":[{"t":"eq","v":"123456788","vt":"str"},{"t":"eq","v":"123456789","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":310,"y":360,"wires":[["7591792.7c5a008"],["30c97a2a.6807ae"]]},{"id":"222354c4.3c8cdc","type":"comment","z":"ed1f6a8c.9a3858","name":"Anrufbenachrichtigung","info":"","x":140,"y":314,"wires":[]},{"id":"7591792.7c5a008","type":"fritzbox-contact","z":"ed1f6a8c.9a3858","device":"b59ac5a2.9d71f8","name":"Privat","topic":"","phonebook":"0","ccode":"DE","x":450,"y":360,"wires":[["7d614d6.815a134"]]},{"id":"7d614d6.815a134","type":"function","z":"ed1f6a8c.9a3858","name":"parse response","func":"// only incoming calls\nif (msg.payload.type !== 'INBOUND') return;\n\nvar message = '';\n\nif (msg.payload.caller_contacts.length) {\n message += msg.payload.caller_contacts[0].person.realName + ' (' + msg.payload.caller + ')';\n} else {\n message += msg.payload.caller;\n}\n\nvar title = msg.payload.callee === '123456789' ? 'Büro ruft an' : 'Eingehender Anruf';\n\nreturn {\n payload: {\n message: message,\n title: title\n } \n};","outputs":1,"noerr":0,"x":640,"y":360,"wires":[["47a3f0d8.41d1a8"]]},{"id":"c3fdb746.10cbf8","type":"catch","z":"ed1f6a8c.9a3858","name":"Lookup Fehler","scope":["30c97a2a.6807ae","7591792.7c5a008"],"uncaught":false,"x":330,"y":313,"wires":[[]]},{"id":"b59ac5a2.9d71f8","type":"fritzbox-config","z":"","name":"FritzBox","host":"fritz.box","port":"49000","ssl":false}]