SIP --- Für die Anbindung des Voipio an die SIP Welt steht ein entsprechender Container bereit. Diese Container registrieren sich via SIP an der Fritzbox oder Telefonanlage und teilen ihre Betriebszustände über MQTT der Steuerzentrale Node-RED mit. Node-RED kann dann Aktionenaufgrund von Anrufen auslösen. Wie hier zum Beispiel den Buzzer und die LED zu schalten. .. figure:: ./voipio_call.png :align: center Es gibt pro SIP Registrierung einen Container. Dieser Container registriert sich an dem entsprechend konfiguriertem Account. Dazu muss in der ``docker-compose.yml`` Datei entsprechend ein Container konfiguriert werden.: .. literalinclude:: ./voipio_sip_docker_compose.yml Hier wird ein SIP Container gestartet, wenn der lokale MQTT Broker verfügbar ist. Er erhält den externen Port ``5061`` von Docker auf seinen internen SIP Port ``5061`` weiter geleitet. Gleiches mit einem RTP Port ``4001``. Die Konfiguration des Accounts erfolgt über eine JSON Datei, die über Docker Secrets berechtigten Containern zugeteilt wird. Diese JSON Dateien werden bei Installationen über die SD Karte aus ``/boot/voipio_sip_*.json`` erstellt und liegen anschließend unter ``/root/voipio/secrets/``. Hier ein Beispiel einer solchen Grundkonfiguration: .. literalinclude:: ./voipio_sip_config.json Konfigurationsänderungen erfolgen über Node in Node Red. Node Red schreibt diese Änderungen in die entsprechende JSON Config Datei. Ist die entsprechende Datei nicht vorhanden oder beschädigt, wartet der Container kurz und startet neu. Node Red ist für die Benutzung von bis zu 10 SIP Accounts vorkonfiguriert. Verfügbare Port Forwarings können angezeigt werden.:: root@voipio:~/voipio# docker-compose ps Account Topics ^^^^^^^^^^^^^^ SIP Accounts veröffentlichen über ihre MQTT Broker Verbindung Nachrichten über ihre Konfiguration, Log Nachrichten und Status Details. .. literalinclude:: ./voipio-sip-account-topics.txt Beispielsweise abonniert das Voipio Display über seine Verbindung zum MQTT Broker das Topic ``voipio/sip/+/numcalls``. Es erhält durch die Benutzung des Wildcard ``+`` anstatt eines bestimmten Acoounts die Anzahl an derzeitigen laufenden Anrufe aller SIP Accounts und kann sie daher im Display anzeigen. Call Topics ^^^^^^^^^^^ Bei einem Anruf veröffentlicht der SIP Account verschiedene Nachrichten über seine MQTT Verbindung. Dabei erhält jeder Call eine eindeutige UUID, mit der seine MQTT Topics systemweit eindeutig sind. Kontrollkommandos können über das Topic ``voipio/sip//call//cmd`` gesendet werden. Der SIP Account hat das Kontrolltopic nur bis zum Ende des Calls abonniert. .. literalinclude:: ./voipio-sip-calltopics.txt Beispiel einer `JSON` Nachricht unter dem Topic ``voipio/sip/account1/state``: .. literalinclude:: ./voipio-sip-state.json Wenn ein neuer Anruf eingeht, wird eine neue eindeutige Call ID ``6dd9f3e4-55a9-48c8-a67b-ddd405fd723a`` vergeben, unter der der Call im Verlauf bekannt ist: .. literalinclude:: ./voipio-sip-log-mqtt-topics.txt Wärend der Anruf ansteht, kann er mit Kommandos gesteuert werden. Beispielsweise können SIP Respone Codes gesendet werden, um einen Anruf anzunehmen oder weiter zuleiten. Wird ``Node-RED`` auf den MQTT Broker konfiguriert, kann die Voipio Node dort über das Kontrolltopic den Call im zuständigem SIP Container steuern. voipio/sip/account1/call/6dd9f3e4-55a9-48c8-a67b-ddd405fd723a/cmd Wird der Anruf beantwortet oder anderweitig beendet: .. literalinclude:: ./voipio-sip-log-mqtt-topics.txt Konferenz Raum ^^^^^^^^^^^^^^ Über Command Line Optionen des Container kann auch ein Konferenzraum konfiguriert werden. Ein Beispiel einer ``docker-compose.yml``: .. literalinclude:: ./voipio-example-conference.yml Der Container registriert sich via SIP an ``192.168.178.71`` mit dem Usernamen ``voipio_conf`` und Passwort ``voipio_pass``, nimmt eingehende Anrufe mit SIP Resonse Code 200 an und schaltet bis zu ``32`` gleichzeitigen Anrufer zusammen. Um eine höhere Kapazität zu erreichen wäre eine kaskadierende Lösung mit einem zentralen Mix und mehreren Eingangs Räumen denkbar. Dabei würden die Eingangsräume beim Start den Mixer anrufen, der ihr Audio mit anderen mischt. Sie selbst haben ``31`` offene Kanäle. .. note:: PIN, Muten oder weitere Steuerungen der Konferenz sind nicht möglich. Es wird nur Audio gemischt. Ansage / Audiodatei ^^^^^^^^^^^^^^^^^^^ Über Command Line Optionen des Container kann auch ein Konferenzraum konfiguriert werden. Ein Beispiel einer `docker-compose.yml`: .. literalinclude:: ./voipio-example-testannc.yml Der Container registriert sich via SIP an ``192.168.178.71`` mit dem Usernamen ``voipio_annc`` und Passwort ``voipio_pass``, nimmt eingehende Anrufe mit SIP Resonse Code 200 an und spielt das im Container mit gelieferte Testfile ``/sip/default.wav`` für bis zu ``32`` gleichzeitigen Anrufer. Über die Docker Volumes lässt sich jedes WAV dem Container in das Filesystem geben und über die ``docker-compose.yml`` konfigurieren.