VoIP Video Türsprechanlage mit dem Raspberry und DoorPI

02. Nov
2017
geschrieben von Roland Meier

Mein wohl umfangreichstes Smarthome-Projekt neigt sich nach fast 2 Jahren "tüfteln" dem erfolgreichem Ende zu.

Eine Video Türsprechanlage mit dem Raspberry PI, welche über die Fritzbox auf meine Telefon ruft, ich hier ein Bild des Eingangs erhalte, das Gespräch annehmen und Aktionen wie Licht oder Türöffner tätigen kann.

 

Zugegeben, die Zeit die ich hierfür investiert habe, darf ich nicht betrachten.
Ein derart umfangreiches Projekt hat nun mal viele Ecken und Enden an denen es haken kann.
So waren sehr lästige Themen z.B. Echo Probleme bei der Kommunikation, WLAN Anbindung und Stabilität, Außensprechstelle und Türblende, Schaltrelais der Gongs, Licht und Türöffner sowie dessen Stabilität und und und.

Dabei war die eigentliche Installation und Stabilität der Software DoorPI das geringste Thema. Ein großes Lob an Thomas Meißner und seine Forenuser für dieses geniale Stück Software.
Ohne der Vorlauf- und Testzeit wäre das Projekt heute vermutlich an einem Wochenende umgesetzt.

 

In diesem Beitrag werde ich sehr detailliert die einzelnen Themen und vor allem auch Probleme und Lösungen schreiben, sodass euch Lesern hoffentlich einige Stunden an herumprobieren und Fehlkäufen erspart bleiben.

Alleine die Länge dieses Beitrags zeigt, dass dieses Thema Durchhaltevermögen erfordert, sofern Ihr daran interessiert seit.

 

Warum eigentlich das Ganze?
Nun, seit meinem Ausbau vor ca. 10 Jahren haben wir eine Ritto Anlage hier, welche aber immer wieder sporadisch schlecht bis nicht funktionierte, die Sprachqualität war absolut miserabel, sodass wir die Anlage kaum nutzten.
Dies kann natürlich auch nicht Sinn und Zweck einer tausend Euro Türsprechanlage sein, Lösungen fanden weder wir selbst, noch Ritto Techniker.

 

Installation und Einrichtung der DoorPI Software auf dem Raspberry

DoorPI ist eine inzwischen sehr umfangreiche Software für den Raspberry Pi, mit welcher z.B. in Kombination einer Fritzbox ein SIP-Ruf auf interne Telefone getätigt werden kann. Auch externe Rufweiterleitungen aufs Handy sind möglich, verursachen in unserem Fall aber Kosten.
Gerade durch den günstigen Raspberry PI und seiner Raspi Cam kann dadurch mit überschauberem Budget eine Türsprechstelle gebaut werden.

Auch wenn ich im Laufe meiner Tests Teilweise die Hardware änderte, z.B. Raspberry 2 auf Raspberry 3, die Installation sowie Grundeinrichtung der Raspberry PIs mit DoorPI ist stets ähnlich.

Der erste "Tischsetup" bestand aus folgenden Komponenten und schlug mit knapp 150€ in die Kasse:

 

Bei 3 GPIO Pins des Raspberry´s hatte ich Taster (später EG, OG & Licht), die 4 Relais (Licht, Türöffner, Gong EG, Gong OG) wurden mit weiteren GPIO Pins angesteuert.
Über die USB Soundkarte betrieb ich im ersten Setup ein einfaches Headset.

Als Betriebssystem hatte ich Raspbian Jessie verwendet, inzwischen ist bereits Debian Strech stabil, aber Jessie wird in jeden Fall noch einige Jahre supportet.

 

Grundinstallation des Raspberry´s und DoorPI

Nachdem der Raspberry mit dem frischen Raspbian gestartet war, hatte ich erstmal einige Grundeinstellungen vorgenommen:

sudo -i
raspi-config

8 Update
3 Boot Options → B1 CLI
4 Localization Options → I1 Change Locale → de_de.UTF-8 UTF-8
4 Localization Options → I2 Change Timezone → Europe → Berlin
4 Localization Options → I3 Change Wi-fi Country → EU Europe
Da ich keinen PiFace nutze, hatte ich den SPI nicht aktiviert!
Dies würde mit 5 → P4 SPI → Yes → Ok → Yes gehen
5 → P1 Camera → Yes → Ok → Yes
Finish → Yes
Reboot → Yes

 

Von da an hatte ich alles nur noch vom Hauptcomputer über SSH gemacht.

Wie folgt erstmal die standard Python Pakete entfernt, das Python Development Paket sowie einige vertraute Dienste & Programme installiert, gefolgt von einem Systemupgrade.

Zwischendurch machte ich gerade bei den Systemupgrades einige Reboots.

apt remove python-pip python-rpi.gpio
apt install python-dev mc htop
apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade

 

Dann konnte auch schon DoorPI selbst installiert werden. Da nicht alle Python Pakete in den Raspbian Quellen vorhanden sind, bediente ich mich dem PIP Tool:

easy_install pip || (wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python) && sudo easy_install pip 

 

Danach können der Python Daemon, LinPhone und DoorPI darüber installiert werden:

pip install linphone4raspberry python-daemon doorpi

 

Mit folgendem Befehl kann dann auch schon DoorPI in einer Standardkonfiguration gestartet werden.
Durch den Tracemodus hilft dieser ungemein bei der Fehlersuche:

doorpi_cli

 

An dieser Stelle möchte ich noch 2 nützliche Befehle zum Aktualisieren von PIP und DoorPI zeigen:

pip --version                   # gibt die PIP Version aus
pip install --upgrade pip # aktualisiert PIP auf die neueste Version

doorpi_cli --version # gibt die DoorPI Version aus
pip install --upgrade doorpi # aktualisiert DoorPI auf die neueste Version

 

Konfiguration des Raspberry´s für DoorPI

  1. Root Verbindung über SSH erlauben
    Die Root Verbindung über SSH ist normal deaktiviert, während der Einrichtung ist aber die ständige Eingabe von ROOT nervig, sodass ich die Verbindung während dieser Zeit erlaube:
    mcedit /etc/ssh/sshd-config
    ...
    PermitRootLogin yes
    ...
    service ssh restart
  2. WLAN Anbindung
    Dieser Punkt trug u.a. zur Entscheidung weiter unten bei, den Raspberry NICHT von außen zugänglich zu montieren!
    iwlist wlan0 scan

    # mit folgendem Befehl wird ein PSK Schlüssel erzeugt und in die Config gespeichert!
    wpa_passpharse MEINESSID MEINKEY >> /etc/wpa_supplicant/wpac_supplicant.conf

    # in der Datei steht u.a. der WLAN-Schlüssel im Klartext, dieser kann herausgelöscht werden!

    wpa_cli reconfigure

    # danach sollte auch schon eine Adresse per DHCP bezogen werden, was überprüft werden kann:
    ifconfig
  3. DoorPI beim Booten des Raspberry´s starten
    wget https://raw.githubusercontent.com/motom001/DoorPi/master/doorpi/docs/service/create_daemon_file.py -O - | sudo python
    systemctl daemon-reload
    update-rc.d doorpi defaults
    reboot

    # nun sollte DoorPI beim Systemstart laden, was wie folgt überprüft werden kann:
    pgrep doorpi # hier sollte eine Prozess-ID erscheinen

    # mit folgenden Befehlen kann DoorPI gesteuert werden:
    service doorpi start
    service doorpi stop
    service doorpi restart
  4. DoorPI Konfiguration & Logfiles
    # die DoorPI Logdatei liegt in:
    mcedit /usr/local/etc/DoorPi/log/doorpi.log

    # DoorPI kann mit einer Konfigurationsdatei individuell eingestellt werden:
    mcedit /usr/local/etc/DoorPi/conf/doorpi.ini
    Nähere Infos zu den möglichen Einstellungen findet ihr unter: https://github.com/motom001/DoorPi/wiki
  5. MJPG-Streamer für die Bildübertragung
    apt-get install subversion libav-tools libavcodec56 libavdevice55 libavfilter5 libavformat56 libavutil54 libdc1394-22 libdirac-encoder0 libgsm1 libmp3lame0 libmysqlclient18 libopencv-core2.4 libopencv-imgproc2.4 libpostproc52 libpq5 libraw1394-11 libschroedinger-1.0-0 libspeex1 libswscale3 libtheora0 libva1 libvpx1 libx264-142 libxvidcore4 mysql-common libjpeg62 screen subversion-tools libjpeg8-dev imagemagick
    svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
    cd mjpg-streamer
    make
    make install

    # die Kameratreiber müssen bei jedem Systemstart geladen werden:
    modprobe bcm2835-v4l2
    echo bcm2835-v4l2 >> /etc/module

    # nun sollte der MJPG-Streamer starten:
    mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 30" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 8080"
    Der Stream kann dann mit einem Browser im Netzwerk aufgerufen werden:
    http://IP-DES-RASPBERRY:8080
  6. Startscript für den MJPG-Streamer
    mcedit /etc/init.d/mjpg_streamer

    # Inhalt ab hier kann einfach kopiert werden:
    #!/bin/sh # /etc/init.d/mjpg_streamer ### BEGIN INIT INFO # Provides: mjpg_streamer # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: MJPG-Streamer # Description: MJPG-Streamer takes JPGs from Linux-UVC compatible webcams and streams them as M-JPEG via HTTP. ### END INIT INFO start() { echo "Starting mjpg-streamer..." /usr/local/bin/mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 30" -o "/usr/local/lib/output_http.so -n -w /usr/local/www -p 8080" >/dev/null 2>&1 & } stop() { echo "Stopping mjpg-streamer..." kill -9 $(pidof mjpg_streamer) >/dev/null 2>&1 } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac exit 0

    # nun noch die Rechte anpassen und in den Autostart legen:
    chmod 0755 /etc/init.d/mjpg_streamer
    update-rc.d mjpg_streamer defaults
  7. Standard Soundkarte umstellen
    # mit folgendem Befehl kann die gewünschte Soundkarte ermittelt werden:
    aplay -l

    mcedit /usr/share/alsa/alsa.conf
    # in folgenden Zeilen die 0 gegen die ID der ermittelten Soundkarte tauschen und speichern:
    defaults.ctl.card 0
    defaults.pcm.card 0
  8. Soundkarte überprüfen
    aplay /usr/local/etc/DoorPi/media/ShortDialTone.wav
    # oder
    speaker-test -c 2
  9. Lautstärke vom Lautsprecher und Mikrofon einstellen
    alsamixer
    alsactl store
  10. Watchdog welcher den Raspberry überwacht und wenn nötig neu startet
    modprobe bcm2835_wdt
    apt-get install watchdog

    mcedit /etc/watchdog.conf
    # folgendes ändern
    watchdog-device = /dev/watchdog
    max-load-1 = 24

    /etc/init.d/watchdog restart

    # Funktion kontrollieren
    pgrep watchdog

 

Einrichtung der Türsprechstelle in der Fritzbox

Die Telefone sowie Rufnummern waren in meiner Fritzbox bereits eingerichtet.

Nun musste aber auch noch die SIP Türsprechstelle angelegt werden.
In der Fritzbox Oberfläche ist dies unter dem Punkt Telefonie → Telefoniegeräte zu finden.

Hier können die Klingeltasten mit den IDs der Telefoniegeräte eingetragen werden, in meinem Fall leiten sie direkt aufs entsprechende Telefon und haben einen anderen Rufton, damit ich Türanlage von normalen Telefonanrufen unterscheiden kann.

Im Feld Live-Bild kann dann noch die IP-Adresse des Raspberry´s eingetragen werden, da meine Fritzfon MT-F Telefone (Anzeige) aber kein direktes Video abspielen kann sondern nur Bilder, leite ich auf die Funktion SNAPSHOT des MJPG-Streamers.
Dieser erstellte dann im ca. Sekundentakt ein Bild und schickt es dem Telefon, sodass ein etwas "ruckeliges Video" zu sehen ist, aber Ziel ist es eh nur zu sehen wer vor der Türe steht:

fritzbox sprechanlage

 

Die erste Version der Raspberry Türsprechstelle

Im folgenden Bild meine erste Version des Projekts in einem Metallgehäuse für die Außenstation:

sprechstelle version 1

 

blendeFür den Einbau in einen saubern Unterputz-Rahmen waren dann weitere Komponenten für knapp 130€ nötig:

Die Alublende hatte mir Daniel von Nubcustoms (Anzeige) nach nebenstehender Skizze gefräst. Hierfür vielen Dank.

Hier könnt ihr meine original Skizze im LibreOffice ODG Format herunterladen.

 

 

Problem 1 - instabile WLAN Verbindung des DoorPI Raspberry´s

Ein Thema das ich hatte, den Raspberry musste ich in jeden Fall per WLAN anbinden, da kein LAN Kabel an der Türe vorhanden ist. Die ersten Version hatte einen Raspberry PI 2 mit einem USB-WLAN Modul.
Hier hatte ich auch schon das erste Problem, dass sporadisch bei Neustarts keine WLAN-Verbindung aufgebaut wurde.

Da ich keine anständige Lösung fand, kaufte ich einen neueren Raspberry PI 3, welcher bereits ein WLAN-Modul eingebaut hat.

 

Problem 2 - zu geringe Lautstärke des DoorPI Lautsprechers

Während die Lautstärke des Headsets kein Problem war, stellte ich fest, dass herkömmliche Lautsprecher für den Einsatz zu leise sind, gerade wenn z.B. die Umgebungsgeräusche etwas höher sind.
Deshalb auch die kleine Verstärkerplatine als Lösung, da ich den 8 Ω Lautsprecher wegen der Bauform und den Maßen behalten wollte.

Generell können über den Alsamixer die Lautstärken der Soundkarten eingestellt werden. Bei Änderungen können die letzten Werte dann ins System abgespeichert werden:

alsamixer
alsactl store

 

Problem 3 - störendes Rauschen des DoorPI Lautsprechers

Sobald der Raspberry gestartet hat, erzeugt er ein kleines Störgeräusch, welches durch den Verstärker natürlich auch verstärkt wurde und sich als sehr störend herausstellte.

Die Lösung lag darin, gezielt den Verstärker bei Rufannahme einzuschalten und nach dem Gespräch wieder auszuschalten.
Dies kann über die DoorPI-Config gelöst werden:

...
[EVENT_OnCallStateConnect]
10 = out:ls_power,1

[EVENT_OnCallStateDisconnect]
10 = out:ls_power,0

[EVENT_OnSipPhoneMakeCall]
10 = out:ls_power,1
...
[onboardpins_OutputPins]
10 = blinking_led
20 = ls_power

amp platine

 

Hier schalte ich den 20er GPIO-Pin, welchen ich auf den SW (Switch) Pin der Verstärkerplatine legte.

Dadurch wird die Verstärkung gezielt de-/aktiviert.

 

 

 

 

Problem 4 - verzögerte Reaktion bei Tastendruck am DoorPI

Mit dem Raspberry PI 2 hatte ich auch einen sehr unschönen Effekt, dass ich die Taster eine gewisse Zeit geschlossen halten musste, damit der Raspberry das Signal erkennt und verarbeitet. Dies war zwar minimal, aber dennoch zu lange, sodass die hohe Gefahr bestand, einige "Läutversuche" nicht mitzubekommen.

Die erste Lösung bestand in einer selbstgebauten monostabilen Kippstufe mit einem NE555, welcher mir bei Flankenänderung sicher 1s durchgeschaltet hatte.
Damit war zwar eine weitere Platine im Schaltkasten, aber die Taster erzeugten dadurch auch eine sichere Reaktion des DoorPIs.

Hier ein Bild des Schaltvorgangs, Gelb ist mein Taster, welcher kurz schließt, Blau meine mit der Beschaltung eingestellte "Verlängerung".

monoflop

 

In folgendem Video seht ihr den Unterschied mit und ohne dem Monoflop.
Schaltet bitte eure Lautsprecher ein, dann könnt ihr das Tasterklicken hören.
Während der obere Taste direkt am hier noch PiFace hängt und entsprechend schlecht reagiert, schaltet der untere sofort.
Ihr seht die Reaktion an den LEDs bzw. hört es an den Relais.

 

Die finale Lösung war aber noch einfacher, mit dem Raspberry PI 3 anstelle des 2ers war auch ohne die Monoflop-Schaltung keine Verzögerung festzustellen.

Nachdem diese Themen gelöst waren, sah alles wie im nächsten Video nach einer guten und funktionierenden Kombination aus.

 

Dann begannen jedoch erste Tests mit der Komminkation, wozu ich mir Unterstützung meiner Frau holte.

 

Problem 5 - extremes Echo bei geschlossener DoorPI Türstation

Die Echo Problematik ist bereits im DoorPI Forum bekannt. Dieses Thema hatte mich sehr lange und intensiv beschäftigt, zahlreiche Versuche eine Software-Lösung zu finden sind kläglich gescheitert.
Das Thema führte sogar soweit, dass das ganze Projekt über ein halbes Jahr "einschlief" und fast eingestellt wurde.

Die Ursache lag aber weniger an der DoorPI Software, viel mehr am individuellen Aufbau des Schaltkastens.
Der Schall wurde natürlich perfekt an die Blende übertragen, an dieser war letztendlich auch das Mikrofon fest angeklebt. Dazu noch der kleine metallene Resonanzkörper des geschlosenen Schaltkastens und die Rückkopplung war perfekt.

Nachdem ich einige Einbaulautsprecher ausprobiert hatte, blieb ich letztendlich bei dem Polycom CS100 hängen. Dieser ist eine USB-"Freisprecheinrichtung" für Windows z.B. für Skype Konferenzen:

Okay zugegeben, nicht ganz billig, aber funktioniert einwandfrei mit Linux und auch die Sprachqualität ist nun ausreichend.

 

Inzwischen sind wir bei einem Budget von knapp 280€ für das Projekt.

 

Die Fritzbox (Anzeige) sowie die Fritz DECT Telefone (Anzeige) zähle ich nicht dazu, denn die waren bereits vorhanden.

 

In dieser Konstellation entschied ich mich dann vergangenes Wochenende, die Anlage fest im Haus zu verbauen.

doorpi setup

 

Da dieser Beitrag eh bereits mit über 2.000 Wörtern recht lang ist, werde ich die finalen Arbeiten, Probleme und Lösungen in einen eigenen Beitrag Einbau der VoIP Video Türsprechanlage im Haus schreiben.

 

Gelesen 37554 mal Letzte Änderung am Mittwoch, 05 Dezember 2018
Artikel bewerten
(18 Stimmen)

9 Kommentare

  • Roland Meier Dienstag, 02 Oktober 2018 13:54 gepostet von Roland Meier

  • Heinz Sonntag, 30 September 2018 22:25 gepostet von Heinz

  • Roland Meier Sonntag, 30 September 2018 11:40 gepostet von Roland Meier

  • Heinz Samstag, 29 September 2018 18:39 gepostet von Heinz

  • Roland Meier Mittwoch, 15 August 2018 18:57 gepostet von Roland Meier

  • Markus Sonntag, 12 August 2018 10:48 gepostet von Markus

  • Andreas Zehe Sonntag, 20 Mai 2018 11:24 gepostet von Andreas Zehe

  • Roland Donnerstag, 26 April 2018 14:24 gepostet von Roland

  • Tom Mittwoch, 25 April 2018 13:11 gepostet von Tom

Schreibe einen Kommentar

Ich habe den Datenschutz gelesen. Ich stimme zu, dass meine Angaben und Daten zur elektronisch erhoben und gespeichert werden. Alternativ kann ich als Namen auch ein Pseudonym eintragen. Hinweis: Sie können Ihre Einwilligung jederzeit für die Zukunft per E-Mail an widerrufen.

Kalender

« März 2019 »
Mo Di Mi Do Fr Sa So
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Newsletter

Euch interessieren meine Themen hier? Dann tragt euch einfach in den Newsletter ein und ihr werden bei neuen Beiträgen informiert.

Anzeige

 

 

Webdesign aus Saal a.d. Donau von Medialekt eK 2019

Cookies erleichtern die Bereitstellung dieses Blogs. Mit der Nutzung dieses Blogs erklärst du dich damit einverstanden, dass Cookies verwendet werden!

Weitere Info

Verstanden