himpler.com himpler.com

Anruferkennung mit Node-RED und der FritzBox

3 Min.

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.

Flow zur Anruferkennung mit mehreren Telefonbüchern

Flow zur Anruferkennung mit mehreren Telefonbüchern

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.

Switch Node für die Steuerung des weiteren Flows; Der Vergleich enthält jeweils die Telefonnummer

Switch Node für die Steuerung des weiteren Flows; Der Vergleich enthält jeweils die Telefonnummer

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.

Catch Node zum Abfangen von Fehlern

Catch Node zum Abfangen von Fehlern

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}]

Das könnte dir auch gefallen