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:
- Raspberry PI 3 Komplettset (~70€) (Anzeige)
DoorPI Software & Eingänge der Taster. - 4 Relais Arduino Modul (~8€) (Anzeige)
Schalten der Gongs, Licht und Türöffner. - Raspberry NoIR Kamera (~30€) (Anzeige)
- USB Soundkarte für Linux (~8€) (Anzeige)
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
- 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 - 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 - 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 - DoorPI Konfiguration & Logfiles
# die DoorPI Logdatei liegt in:
Nähere Infos zu den möglichen Einstellungen findet ihr unter: https://github.com/motom001/DoorPi/wiki
mcedit /usr/local/etc/DoorPi/log/doorpi.log
# DoorPI kann mit einer Konfigurationsdatei individuell eingestellt werden:
mcedit /usr/local/etc/DoorPi/conf/doorpi.ini - 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
Der Stream kann dann mit einem Browser im Netzwerk aufgerufen werden:
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"
http://IP-DES-RASPBERRY:8080 - 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 - 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 - Soundkarte überprüfen
aplay /usr/local/etc/DoorPi/media/ShortDialTone.wav
# oder
speaker-test -c 2 - Lautstärke vom Lautsprecher und Mikrofon einstellen
alsamixer
alsactl store - 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:
Die erste Version der Raspberry Türsprechstelle
Im folgenden Bild meine erste Version des Projekts in einem Metallgehäuse für die Außenstation:
Für den Einbau in einen saubern Unterputz-Rahmen waren dann weitere Komponenten für knapp 130€ nötig:
- schöne Edelstahltaster mit kaltweißen LEDs (3x ~16€ Stück) (Anzeige)
- 235° Fisheye Objektiv (~8€) (Anzeige)
Hierfür hatte ich lange gesucht, eigentlich zwar ein Objektiv fürs Smartphone, integriert sich aber super in die Blende, siehe im Bild der Vorderseite weiter unten. - 2W Lautsprecher (~10€) (Anzeige)
- Audio Verstärkerplatine (~8€) (Anzeige)
- Tischmikrofon (~8€) (Anzeige)
- MyIntercom Unterputz Gehäuse (~30€) (Anzeige)
- Adafruit Flächen-LED (~8€) (Anzeige)
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
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".
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:
- Polycom CS100 (~100€) (Anzeige)
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.
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.