Da es zu teuer langweilig einfach wäre eine fertige Türsprechstelle zu kaufen, könnte man auf die Idee kommen selbst eine zu basteln.
- Hardware
Wer jetzt schon sagt „Aber um das gleiche Geld bekomme ich das als Komplettgerät!“ ist hier eindeutig falsch.
- Funktionen
- Tätigt Anrufe über einen SIP Account
- Kann angerufen werden
- Dient als IP Kamera
- Kann durch Scripting einfach erweitert werden (z.B Schaltausgänge)
ALs Grundlage dient ein Raspberry OS Lite Image, das man unter Windows z.B. mit dem Balena Etcher auf die Micro SD Karte schreibt.
Bevor man die Karte in den Raspberry Pi steckt, legt man am besten gleich auf der „boot“ Partition (erstes unter Windows sichtbares Laufwerk auf der Karte) ein leeres File „ssh“ an. Das ermöglich den Zugriff auf das Gerät ohne physische Konsole (z.B. mit PuTTY).
Hier in einem „One shot“ Script zusammengefasst die Installation
#!/bin/bash
### Konfiguration
base="/opt/Ring-O"
zielrufnummer="666"
gpio="2"
stille="/home/pi/silence.wav"
siprufnummer="777"
sipproxy="my.sip.proxy"
sipuser="benutzername"
sippassword="passwort"
giturlmjpgstreamer="https://github.com/jacksonliam/mjpg-streamer.git"
giturlgpiowatch="https://github.com/larsks/gpio-watch.git"
### Ordnerstruktur anlegen
sudo mkdir -p $base
sudo chown -R pi:pi $base
mkdir -p $base/mjpg-streamer/www
mkdir -p $base/gpio-watch/scripts
mkdir -p $base/scripts
mkdir -p /home/pi/.baresip
### Software installieren
sudo apt install alsa-base baresip curl gcc g++ cmake libjpeg8-dev git
mkdir -p /home/pi/src
cd /home/pi/src
git clone $giturlmjpgstreamer
git clone $giturlgpiowatch
cd /home/pi/src/mjpg-streamer/mjpg-streamer-experimental
make
cp /home/pi/src/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer $base/mjpg-streamer/
cp /home/pi/src/mjpg-streamer/mjpg-streamer-experimental/input_raspicam.so $base/mjpg-streamer/
cp /home/pi/src/mjpg-streamer/mjpg-streamer-experimental/output_http.so $base/mjpg-streamer/
cd /home/pi/src/gpio-watch
make
cp /home/pi/src/gpio-watch/gpio-watch $base/gpio-watch/
### 5 Sekunden Stille aufnehmen
arecord -q -r8000 -fU8 -twav -c1 -d5 $stille
### Sounds für baresip ersetzen (keine Signalisierung an der Sprechstelle)
sudo mv /usr/share/baresip/ /usr/share/baresip.dist/
sudo mkdir -p /usr/share/baresip
sudo cp $stille /usr/share/baresip/busy.wav
sudo cp $stille /usr/share/baresip/callwaiting.wav
sudo cp $stille /usr/share/baresip/message.wav
sudo cp $stille /usr/share/baresip/notfound.wav
sudo cp $stille /usr/share/baresip/ring.wav
sudo cp $stille /usr/share/baresip/ringback.wav
sudo cp /usr/share/baresip.dist/logo.png /usr/share/baresip/
sudo cp /usr/share/baresip.dist/error.wav /usr/share/baresip/
## Systemkonfiguration anpassen
sudo touch /etc/modprobe.d/alsa-base.conf
echo "options snd_usb_audio index=0
options snd_bcm2835 index=1
options snd slots=snd-usb-audio,snd-bcm2835" | sudo tee /etc/modprobe.d/alsa-base.conf
echo "pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm \"output\"
}
capture.pcm {
type plug
slave.pcm \"input\"
}
}
pcm.output {
type hw
card 0
}
pcm.input {
type hw
card 0
}
" > /home/pi/.asoundrc
### Statische Scripts und HTML erstellen
echo "<html>
<head>
<title>Tuerglocke</title>
</head>
<body>
<center>
<img src="./?action=stream" />
</center>
</body>
</html>" > $base/mjpg-streamer/www/index.html
# Startscript gpio-watch
echo "#!/bin/bash
$base/gpio-watch/gpio-watch -s $base/gpio-watch/scripts -e switch 2 &" > $base/gpio-watch/start.sh
chmod +x $base/gpio-watch/start.sh
# Startscript mjpg-streamer
echo "#!/bin/bash
export LD_LIBRARY_PATH=\"$base/mjpg-streamer\"
$base/mjpg-streamer/mjpg_streamer -o \"output_http.so -n -p 8001 -w $base/mjpg-streamer/www\" -i \"input_raspicam.so -fps 15 -x 1280 -y 720\"" > $base/mjpg-streamer/start.sh
chmod +x $base/mjpg-streamer/start.sh
# Actionscript für Türklingel
echo "#!/bin/bash
/usr/bin/curl -s -o /dev/null http://localhost:8000/?d$zielrufnummer
/usr/bin/curl -s -o /dev/shm/tuere.jpg http://localhost:8001/?action=snapshot" > $base/scripts/doorbell-action.sh
chmod +x $base/scripts/doorbell-action.sh
ln -s $base/scripts/doorbell-action.sh $base/gpio-watch/scripts/$gpio
# SIP Account
echo "<sip:$siprufnummer@$sipproxy>;auth_user=$sipuser;auth_pass=$sippassword;stunserver=stun:stun4.l.google.com:19302;answermode=auto" > /home/pi/.baresip/accounts
# Lazy Startup über rc.local ...
sudo cp /etc/rc.local /etc/rc.local.dist
sudo touch /etc/rc.local
echo "#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will \"exit 0\" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Run gpio-watch
su pi -c \"$base/gpio-watch/start.sh\"
# Run baresip daemon
su pi -c \"/usr/bin/baresip -d\"
# Run mjpg-streamer
su pi -c \"$base/mjpg-streamer/start.sh\"
# Print the IP address
_IP=\$(hostname -I) || true
if [ \"\$_IP\" ]; then
printf \"My IP address is %s\n\" \"\$_IP\"
fi
exit 0
" | sudo tee /etc/rc.local
sudo chmod +x /etc/rc.local
Nacharbeiten, die noch nicht im Script erfasst sind
- nach dem ersten Start von baresip in /home/pi/.baresip/config die auskommentierte Zeile „module httpd.so“ aktiveren.
- über „sudo raspi-config“ die Kamera aktivieren
- Die Soundfiles ersetzen – das funktioniert nicht, weil ursprünglich kein Mikrophon vorhanden
stille="/home/pi/silence.wav"
### 5 Sekunden Stille aufnehmen
arecord -q -r8000 -fU8 -twav -c1 -d5 $stille
### Sounds für baresip ersetzen (keine Signalisierung an der Sprechstelle)
sudo mv /usr/share/baresip/ /usr/share/baresip.dist/
sudo mkdir -p /usr/share/baresip
sudo cp $stille /usr/share/baresip/busy.wav
sudo cp $stille /usr/share/baresip/callwaiting.wav
sudo cp $stille /usr/share/baresip/message.wav
sudo cp $stille /usr/share/baresip/notfound.wav
sudo cp $stille /usr/share/baresip/ring.wav
sudo cp $stille /usr/share/baresip/ringback.wav
sudo cp /usr/share/baresip.dist/logo.png /usr/share/baresip/
sudo cp /usr/share/baresip.dist/error.wav /usr/share/baresip/