DIY Ruftaste. Raspberry Pi, MajorDoMo, Freeswitch und Linphonec

Vor einiger Zeit musste ich nach einer Krankheit mit einer Person kommunizieren, die das Telefon nicht benutzen konnte. Es wurde ein einfaches Anrufgerät benötigt, ein Sprachanruf wurde auf Knopfdruck getätigt. Die Notwendigkeit verschwand jedoch, nachdem man das Krankenhaus selbst besucht und die Patienten angesehen hatte, wurde angenommen, dass eine solche Lösung nützlich sein könnte.
Jetzt sehe ich den persönlichen Gebrauch dieses Geräts als SIP-Türklingel.

Vielleicht mit kleinen Änderungen die Kombination von VoIP-Telefonie mit einem Hausautomationssystem. Als Nutzungsoptionen - SIP-Türklingel, Gegensprechanlage, Sprachkommunikationssystem (Kundenpersonal, Direktor-Sekretär) usw.



Die gesamte Entscheidung wird über freie und Open-Source-Software getroffen: Betriebssystem - Raspbian Stretch (Debian 9), Hausautomationssystem - MajorDoMo, VoIP-Server - Freeswitch, IP-Telefonie-Software-Client mit der Fähigkeit, im Terminalmodus Linphonec zu arbeiten.

In diesem Teil werden wir unter dem Schnitt hauptsächlich über die Installation des Linphonec-Konsolen-SIP-Clients sprechen.

Wir werden brauchen:

  1. Raspberry Pi - Single Board Computer (Ich habe ein Raspberry Pi 3B Modell)
  2. Micro SD Speicherkarte mindestens 16 GB, USB-Ladegerät, Gehäuse.
  3. USB-Soundkarte (eine der billigsten, Gembird verwendet), Mikrofon, Lautsprecher (Kopfhörer).
  4. Knopf und ein Paar BBJ-Jumper für GPIO-Pins.

1. Erster Schritt - Installieren eines MajorDoMo-Images für RPI
Derzeit ist die aktuelle Version des Bildes für den Raspberry Pi v. 3.40. Hier ist eine kurze Beschreibung der MajorDoMo-Bilder und -Änderungen:

MajorDoMo Basic Images für Raspberry Pi

Nach der Installation und beim Starten des Systems, wenn die Lautsprecher an den 3.5-Anschluss angeschlossen werden, hören wir Systemmeldungen und die IP-Adresse von Raspberry.

Der Standardbenutzername lautet: pi password: raspberry.

2. Installieren Sie FREESWITCH,
FRESWITCH VoIP Server für Raspberry installieren

Danach fahren wir mit der Installation der notwendigen Komponenten fort. Ein optionaler, aber möglicherweise später nützlicher Schritt.

Installieren Sie RPi-Monitor


Installieren Sie ein kleines, aber nützliches RPI-Monitor-Dienstprogramm, das die Ressourcen unseres Raspberry PI anzeigt.

RPi-Monitor ist eine webbasierte Überwachungssoftware für Raspberry Pi-Karten. Dieses Tool kann nützlich sein, um die Verwendung von Speicherplatz, CPU-Auslastung, Speicher- und Netzwerkverkehr sowie Temperatur zu steuern. RPI-Monitor ist recht einfach zu installieren und zeigt visuell Informationen zum System an.

Zunächst werde ich einen Link zur Quelle geben:
RPi-Monitor .

Installieren Sie den öffentlichen RPi-Monitor-Schlüssel und fügen Sie ihn den vertrauenswürdigen Repositorys hinzu:

sudo apt-get install dirmngr sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2C0D3C0F sudo wget http://goo.gl/vewCLL -O /etc/apt/sources.list.d/rpimonitor.list 

Aktualisieren Sie als Nächstes das System und installieren Sie den RPI-Monitor selbst:

 sudo apt-get update sudo apt-get install rpimonitor 

Öffnen Sie die IP Ihres Computers im Browser mit dem Port 8888, auf dem der Monitor ausgeführt wird, und sehen Sie den RPI-Status.



Installieren einer USB-Audiokarte und Einrichten des Sounds im Raspberry Pi OS


Leider verfügt unser Raspberry Mini-Computer nicht über ein eigenes Mikrofon und einen eigenen Eingang. Um ein Mikrofon anzuschließen, müssen Sie daher eine externe USB-Soundkarte verwenden. Wir schließen die Karte an den Raspberry USB-Anschluss an und führen den Befehl aus (der die Audiogeräte im System anzeigt):

 cat /proc/asound/cards 

Wir sehen die Antwort mit zwei Karten, bcm2835 - eingebaut, extern definiert als USB-Audiogerät:

0 [ALSA]: bcm2835_alsa - bcm2835 ALSA
bcm2835 ALSA
1 [Gerät]: USB-Audio - USB-Audiogerät
GeneralPlus USB-Audiogerät unter usb-3f980000.usb-1.4, volle Geschwindigkeit
Das Betriebssystem sieht unsere Soundkarte, sie ist jedoch noch nicht im System registriert.

Erstellen Sie eine Datei:

 sudo nano /etc/modprobe.d/alsa-base.conf 

Wir schreiben (fügen) die folgende Zeile ein:

Optionen snd-usb-audio index = 1

Speichern (im Editor Strg + X).

Erstellen Sie eine weitere Datei:

 sudo nano /etc/asound.conf 

Inhalt hinzufügen:

Dateiinhalt
 pcm.!default { type plug slave { pcm "hw:1,0" } } ctl.!default { type hw card 1 } 


Wir bearbeiten die folgende Konfigurationsdatei:

 sudo nano /usr/share/alsa/alsa.conf 

Ändern Sie die Standard-Soundkarte von 0 auf 1 (USB-Karte). Offensichtlich ist 0 standardmäßig die integrierte Soundausgabe des Minicomputers. Stellen Sie die folgenden Parameter in zwei Zeilen ein:

 defaults.ctl.card 1 defaults.pcm.card 1 

Die Änderungen werden wirksam. Nach dem Neustart werden wir durch Eingabe in die Konsole überladen:

 sudo reboot 

Wir verbinden ein Mikrofon und Lautsprecher (Kopfhörer) mit einer externen Audiokarte. Führen Sie nach dem Neustart das Alsamixer-Soundkonfigurationsprogramm aus.

 alsamixer 

Wir sehen unsere Geräte, die wir standardmäßig im System definiert haben:



Verwenden Sie die Cursortasten links und rechts, wählen Sie das gewünschte Gerät aus, nach oben und unten, passen Sie es an und achten Sie auf die Symbole unter dem ausgewählten Gerät:

xOOx - Gerät ist eingeschaltet, xMMx - Gerät ist ausgeschaltet. Wie Sie auf dem Screenshot sehen können, war mein Mikrofon im System standardmäßig ausgeschaltet.
Um das Gerät ein- und auszuschalten, müssen Sie M auf der Tastatur drücken.
Beenden Sie alsamixer (beenden Sie Strg + C).
Überprüfen des Sounds im System. Lautsprecher und ein Mikrofon sind an die entsprechenden USB-Ausgänge der Soundkarte angeschlossen.

Wir geben den Befehl:

 arecord -D plughw:1,0 -f cd /home/pi/test_record.wav 

Mit diesem Befehl wird eine Audiodatei über das Mikrofon in das entsprechende Verzeichnis (in unserem Fall das Home-Pi des Benutzers) aufgezeichnet. Beenden Sie die Aufnahme Strg + c .

Überprüfen Sie die aufgezeichnete Datei:

 aplay /home/pi/test_record.wav 

Wir werden später eine bessere Überprüfung durchführen.

Installieren des Linphonec Console VoIP-Clients


Es gibt nicht so viele Programme, die im Betriebssystem ohne grafische Oberfläche funktionieren können. Ich habe mich für das Linphone-Paket entschieden.

Das Paket ist ziemlich groß, es hat viele potenzielle Funktionen, aber bisher benötigen wir nur ein kleines Dienstprogramm Linphonec, das im Terminal arbeiten kann und die Funktion der automatischen Antwort (automatische Abholung) hat.

Für sie werden die folgenden Aktionen ausgeführt.

Ich stelle fest, dass bei der Installation aus dem Raspbian-Repository eine ziemlich alte Version 3.6.1 installiert ist, die mit dem ALSA-Soundsystem nicht richtig funktioniert. Ich hatte einen Soundverlust, das Programm stürzte mehrmals ab.

Daher werde ich eine aktuellere Version verwenden.

Für die Selbstorganisation des Pakets aus den Quellen installieren wir zusätzliche Abhängigkeiten:

 sudo apt-get install cmake automake autoconf libtool intltool yasm libasound2-dev libpulse-dev libv4l-dev nasm git libglew-dev 

Gehen Sie zum Home-Verzeichnis:

 cd /home/pi/ 

Laden Sie das Linphone-Paket selbst herunter. Der Download dauerte ca. 20 Minuten.

 git clone git://git.linphone.org/linphone-desktop.git --recursive 

Ich konnte das Linphone-Paket weder vom ersten noch vom zweiten Mal an kompilieren und kompilieren. Daher werde ich meinen Aktionsalgorithmus angeben.

Wir stoppen fast alle derzeit ausgeführten, aber derzeit nicht verwendeten Dienste mithilfe des systemctl-Dienstverwaltungssystems.

Bei der Montage sind Fehler aufgetreten, unser Mini-PC verfügt einfach nicht über genügend Ressourcen. Geben Sie sie für die Installation frei.

Stoppen von Diensten
 sudo systemctl stop freeswitch.service sudo systemctl stop majordomo.service sudo systemctl stop avahi-daemon.socket sudo systemctl stop avahi-daemon.service sudo systemctl stop mosquitto.service sudo systemctl stop mysql sudo systemctl stop mpd.service sudo systemctl stop mpd.socket sudo systemctl stop homebridge.service sudo systemctl stop nginx.service sudo systemctl stop bluetooth.target sudo systemctl stop bluetooth.service 


Nur für den Fall, dass wir eine temporäre Auslagerungsdatei (vor dem Neustart) (Festplattenspeicher) erstellen können, die das Betriebssystem bei unzureichendem RAM verwendet.
Um zu überprüfen, ob die Auslagerungsdatei in unserer Raspbian (Debian) -Installation enthalten ist, geben Sie Folgendes ein:

 sudo swapon --show 

Die Ausgabe ist leer, was bedeutet, dass das System keine Auslagerungsdatei hat.
Fügen Sie 1G Swap hinzu und erstellen Sie eine Datei:

 sudo fallocate -l 1G /swapfile 

Nur der Root-Benutzer kann die Auslagerungsdatei lesen und schreiben, daher legen wir die richtigen Berechtigungen fest:

 sudo chmod 600 /swapfile 

Wir verwenden das mkswap-Tool, um den Linux-Swap-Bereich in der Datei zu konfigurieren und durch Eingabe der folgenden Befehle zu aktivieren:

 sudo mkswap /swapfile sudo swapon /swapfile 

Wechseln Sie beim Herunterladen des Pakets in das erstellte Verzeichnis:

 cd linphone-desktop 

Wir bereiten für die Installation eine Version ohne grafische Oberfläche vor:

 sudo ./prepare.py no-ui -DENABLE_OPENH264=ON -DENABLE_WEBRTC_AEC=OFF -DENABLE_UNIT_TESTS=OFF -DENABLE_MKV=OFF -DENABLE_FFMPEG=ON -DENABLE_CXX_WRAPPER=OFF -DENABLE_NON_FREE_CODECS=ON -DENABLE_VCARD=OFF -DENABLE_BV16=OFF -DENABLE_V4L=OFF 

Erstellen Sie mit dem Attribut –j4 (d. H. Erstellen Sie 4 Threads gleichzeitig.

 sudo make -j4 

Bei der Installation können wir den Status unseres Computers in RPI-Monitor anzeigen:



Die Bauzeit für mich betrug ca. 30-40 Minuten.

Die kompilierten Programmdateien wurden im Verzeichnis OUTPUT / no-ui / bin angezeigt. Um das Programm auszuführen, gehen wir darauf ein:

 cd OUTPUT/no-ui/bin 

Überprüfen Sie die Version des Programms:

 ./linphonec -v 

Wir erhalten das Ergebnis: Version: 3.12.0
Überladung unserer Himbeere
Beim Neustart verschwindet die Auslagerungsdatei, alle beim Start registrierten laufenden Dienste werden wiederhergestellt.

Eine kleine anfängliche Freeswitch-Einrichtung.


Der FREESWITCH-Server wird standardmäßig im Verzeichnis / usr / local / freeswitch / installiert. Der Ordner conf enthält Konfigurationsdateien. Standardmäßig ist die Vanilla-Testkonfiguration installiert, die zum größten Teil dazu dient, sich mit der Möglichkeit eines VoIP-Servers vertraut zu machen, und eine Vielzahl von Beispielen enthält, die für den Heimgebrauch eindeutig redundant sind. Lassen Sie uns zunächst die sofort einsatzbereite Konfiguration des VoIP-Servers anzeigen.

Bearbeiten Sie die Konfigurationsdatei vars.xml

 sudo nano /usr/local/freeswitch/conf/vars.xml 

Ändern Sie zunächst das Standardkennwort 1234 in einen anderen Wert, z. B. 1111. Wenn Sie dies nicht tun, wird vor jedem Anruf eine Pause eingestellt, bevor Sie 10 Sekunden wählen.

Wie ich in einem früheren Artikel geschrieben habe, haben wir standardmäßig 20 Teilnehmernummern 1001-1020. Dialplan ist ebenfalls standardmäßig installiert.

Aus irgendeinem Grund stürzte der Server in diesen Zeiten im Vergleich zu vor sechs Monaten, als das Modul mod_xml_rpc eingeschaltet war, ständig ab.

Dialplan FreeSWITCH verwendet in großem Umfang reguläre Ausdrücke. Der Standard-Wählplan ist für die Verarbeitung von Anrufen verantwortlich. Der nächste Abschnitt der Local_Extension-Datei ist für das Senden an unsere lokalen Nummern verantwortlich. Kommentieren Sie einige Zeilen aus:

 sudo nano /usr/local/freeswitch/conf/dialplan/defaults.xml 

Fügen Sie im Dialogfeld ein Kommentarsymbol in diesen Abschnitt ein:

Dialogbearbeitung der Nummern 1001-1019
 <extension name="Local_Extension"> <condition field="destination_number" expression="^(10[01][0-9])$"> <action application="export" data="dialed_extension=$1"/> <!-- <action application="bind_meta_app" data="1 bs execute_extension::dx XML features"/> <action application="bind_meta_app" data="2 bs record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="bind_meta_app" data="3 bs execute_extension::cf XML features"/> <action application="bind_meta_app" data="4 bs execute_extension::att_xfer XML features"/> --> 


Ein kleiner Exkurs, meiner Meinung nach ist es trotz der Arbeitsfähigkeit des FS nach mehreren Änderungen besser, die FS-Konfigurationsdateien selbst zu wiederholen, einschließlich Abonnement, Wählplan usw., aber Sie können nicht alles in einen Artikel einfügen. Wir wenden uns daher an unseren Terminal-Client.

Konfigurieren und starten Sie den Linphonec-Terminal-Client


Führen Sie Linphonec im aktuellen Antwortmodus vom aktuellen pi-Benutzer aus:

 /home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonec -a 

Beim ersten Start versucht Linphonec, eine Datenbankdatei und eine Einstellungsdatei zu erstellen. Der Start ist jedoch fehlerhaft.

Fehler beim Starten von linphonec
 2019-08-02 18:02:58:715 mediastreamer-error-Connection to the pulseaudio server failed 2019-08-02 18:02:58:946 belle-sip-error-udp bind() failed for ::0 port 5060: Address already in use 2019-08-02 18:02:58:947 belle-sip-error-TCP bind() failed for ::0 port 5060: Address already in use 2019-08-02 18:02:59:126 liblinphone-fatal-Unable to open linphone database. Aborted 


Zunächst werden wir uns mit dem letzten Fehler befassen und die Datenbankdatei öffnen.

Die Datenbankdatei wird im Ausgangsverzeichnis unter folgendem Pfad erstellt: /home/pi/.local/share/linphone
Eine Linux-Datei (oder ein Linux-Verzeichnis) gilt als ausgeblendet, wenn ihr Name mit einem Punkt "." Beginnt. Zum Beispiel ".myfile". In der Regel werden solche Dateien von Anwendungen zum Speichern von Einstellungen, Konfigurationen und anderen Informationen verwendet, die vor dem Benutzer verborgen werden müssen.
Erstellen Sie ein Verzeichnis vom aktuellen Benutzer (pi)
 mkdir /home/pi/.local mkdir /home/pi/.local/share mkdir /home/pi/.local/share/linphone 

Wir starten das Programm, das Programm wurde gestartet, aber es gibt einen Fehler:
Portöffnungsfehler
 2019-08-07 11:29:32:780 mediastreamer-error-Connection to the pulseaudio server failed 2019-08-07 11:29:32:866 belle-sip-error-udp bind() failed for ::0 port 5060: Address already in use 2019-08-07 11:29:32:866 belle-sip-error-TCP bind() failed for ::0 port 5060: Address already in use 


Wir haben das erste Problem beim Erstellen einer Datenbank herausgefunden: Beim ersten Start hat das Programm eine Datenbankdatei generiert.

Der mit dem Pulseaudio-Soundsystem verbundene Fehler beeinträchtigt die Funktionsweise des Programms nicht. Ich plane, ALSA zu verwenden. Falls erforderlich, kann immer ein Soundserver installiert werden, bevor.

Die zweiten Ports 5060 sind besetzt. Diese Ports werden üblicherweise von SIP-Anwendungen verwendet. Wir können das Programm beenden und den Befehl geben:

 sudo netstat -tulpn | grep LISTEN 

Wir werden sehen, dass Port 5060 unseren VoIP FREESWITCH-Server verwendet. Nun, wir werden freie Ports verwenden.

Wir kehren zum Programm linphonec zurück. Und mach ein kleines Setup.

Ändern Sie zunächst den Port für Linfon, geben Sie dann die Registrierung beim VoIP-Server an, überprüfen Sie den Registrierungsstatus und sehen Sie sich die Liste der Soundkarten und der verwendeten Karte an und konfigurieren Sie sie auf einem externen USB-Stick (mit dem Index im Linphone-Programm - 2):

 ports sip 5062 register sip:1001@192.168.15.13 192.168.15.13 1111 linphonec> help register status register soundcard list soundcard show soundcard use 2 soundcard show 



Im Registrierungsteam verwenden wir das folgende Format: Sip-Benutzer-ID - Standardmäßig haben wir 20 Abonnenten mit den Nummern 1001-1019. Diese Nummern sind die Benutzernamen der Abonnenten. Abonnenten-Login @ [Domainname] - Domainname - IP-Adresse unserer Himbeere. Sip-Proxy - entspricht der RPI-IP-Adresse und am Ende dem Kennwort des Benutzers, den wir kürzlich eingerichtet haben 1111.

Beenden Sie das Programm (Strg + x), die Einstellungen werden nicht immer sofort angewendet. Nach dem Beenden im Home-Verzeichnis / home / pi wurde die Konfigurationsdatei des Konsolenclients angezeigt: .linphonerc.
Wir können bereits Änderungen vornehmen, indem wir die Konfigurationsdatei des SIP-Clients bearbeiten.
Auf einem neuen SIP-Client der Startkonsole.
Öffnen Sie parallel zur aktuellen SSH-Sitzung eine neue und melden Sie sich mit Ihrem Benutzernamen und Passwort an.
Wir starten alsamixer. In einer Sitzung haben wir Linphonec, in der zweiten ein Dienstprogramm zur Tonabstimmung.
Wir führen den Anruf vom SIP-Client auf einem Smartphone oder PC aus (wie im Artikel über die Installation von FREESWITCH beschrieben), indem wir das Standardkennwort in Ihr eigenes ändern und eine Nummer wählen, in unserem Fall 1001. Wir können das Freswitch-Portal unter IP_Raspberry: 8080 aufrufen und die Registrierung der Abonnenten sowie den Status anzeigen Anruf usw.



Mit alsamixer passen wir den Sound an. Soundänderungen werden im laufenden Betrieb angewendet, ohne dass Programme beendet werden.

Leider konnte ich aufgrund der Verwendung einer billigen Audiokarte keinen akzeptablen Klang erzielen. In den Lautsprechern war ein Echo zu hören. Es kann etwas minimiert, aber komplett entfernt werden - es ist mir nicht gelungen.

Da es nicht möglich war, auf eine Weise zu entfernen, entfernen wir es auf eine andere Weise.
Schließen Sie Linphonec und bearbeiten Sie die Konfigurationsdatei:

 sudo nano /home/pi/.linphonerc 

Im Soundbereich bringen wir die letzten drei Zeilen in diese Form:

Linphonerc Sound Section
 [sound] remote_ring=/home/pi/linphone-desktop/OUTPUT/no-ui/share/sounds/linphone/ringback.wav playback_gain_db=0.000000 mic_gain_db=0.000000 ringer_dev_id=ALSA: bcm2835 ALSA playback_dev_id=ALSA: bcm2835 ALSA capture_dev_id=ALSA: USB Audio Device 


Auf diese Weise haben wir den Klingelton und das Tonausgabegerät gezwungen, an der eingebauten 3,5-Himbeer-Buchse zu arbeiten, und das Aufnahmegerät - das Mikrofon, um über eine externe Soundkarte zu arbeiten - das Echo verschwand.

Schalten Sie die Lautsprecher auf den Himbeer-eigenen Anschluss.

Wir berücksichtigen den folgenden Moment: Beim Laden und in einigen Fällen spielt das Smart-Home-System seine Systemmeldungen über diesen Audioausgang ab.

Schalten Sie sie aus. Wir geben IP_Rasberry an die Hauptseite weiter und öffnen das MajorDoMo-Hausautomationssystem.

Wir rufen das Control Panel - das Computerobjekt (erweitern Sie das Gerät) - ThisComputer auf der Registerkarte Eigenschaften auf und legen die Werte fest:

  ThisComputer.minMsgLevel 100 ThisComputer.volumeLevel 0 



Hinzufügen eines Eintrags zu cron (ein Daemon-Programm, mit dem Aufgaben zu einem bestimmten Zeitpunkt oder in bestimmten Intervallen ausgeführt werden können. Das Dienstprogramm crontab wird zum Bearbeiten von Aufgaben verwendet):

 crontab –e 

Ich stelle fest, dass wir dies unter dem Benutzer pi tun.

Fügen Sie die Zeile ganz am Ende ein:

 @reboot /home/pi/linphone-desktop/OUTPUT/no-ui/bin/linphonec –a 

Beim Neustart und Einschalten des Computers startet diese Zeile das Linphonec-Programm im automatischen Antwortmodus.
Zurück zu MajorDoMo:
Gehen wir zur Hauptseite im Servicebereich:
Im Menü dieses Abschnitts werden Schaltflächen zum Neustarten (Ausschalten) des Computers erstellt.
Tatsache ist, dass zum Sparen der Ressourcen der SD-Speicherkarte die Änderungen nach einer bestimmten Zeit (15 Minuten) im „Smart Home“ -System aufgezeichnet werden. Wenn Sie Himbeeren überladen müssen, ist es daher besser, es richtig zu machen. Wir starten das System neu.



Gehen Sie nach dem Neustart zur Hauptseite von MajorDoMo, rufen Sie die Systemsteuerung auf und rufen Sie wie im letzten Artikel über das folgende Format von der Konsole aus auf:

 GetURL("http://freeswitch:works@192.168.1.103:8080/webapi/originate?user/1001%201003%20XML%20default") 

Nach dem Befehl nimmt Linphonec das Telefon automatisch ab. Im RPI-Lautsprecher wird eine Audiodatei abgespielt und ein Anruf an das zweite Softphone (PC / Smartphone) gesendet. Nach dem Abheben des Mobilteils (durch Drücken der Antworttaste im Programm) wird die Verbindung hergestellt.



Damit beende ich diesen Teil. Ich werde versuchen, etwas später die Schaltfläche selbst mithilfe von GPIO zu beschreiben und Anrufe außerhalb meines lokalen Netzwerks einzurichten.

Source: https://habr.com/ru/post/de464309/


All Articles