FHEM Tutorial-Reihe - Part 11: Benachrichtigung mit Bild bei Bewegung
Weiter geht es mit einer IP-Kamera. Diese legt auf dem neu installierten FTP-Server auf dem Raspberry Pi Daten ab. Sobald ein neues Bild gespeichert wurde, wird dieses von einem Daemon erkannt und an FHEM gesendet. In FHEM haben wir dann alle Möglichkeiten. Wir entscheiden uns für eine Push-Notification mit einem Link zum Bild auf dem Apache-Server.
Was genau wird alles gelernt?
- wie man einen FTP-Server auf dem Raspberry Pi installiert und konfiguriert
- wie man die Datei- und Verzeichnisrechte mit ACLs verwaltet
- wie man einen Daemon einrichtet, welcher auf neue Dateien reagiert
- wie per curl readings in FHEM mit den Datei-Informationen gesetzt werden können
- wie man auf diese Änderung reagiert und eine Push-Nachricht versendet
Folgende Befehle braucht ihr:
sudo apt-get install proftpd-basic
sudo vi /etc/proftpd/proftpd.conf
UseIPv6 off
ServerName "FHEM"
sudo vi /etc/proftpd/conf.d/proftp-custom.conf
# Ftp user doesn't need a valid shell
<Global>
RequireValidShell off
</Global>
# Default directory is ftpusers home
DefaultRoot ~ ftpuser
# Limit login to the ftpuser group
<Limit LOGIN>
DenyGroup !ftpuser
</Limit>
sudo adduser ftpuser --shell /bin/false --home /var/www/upload
- Passwort vergeben 2x
- Die anderen Werte ruhig leer lassen
sudo service proftpd restart
cd /var/www/upload/
sudo mkdir camera
sudo chown ftpuser:ftpuser camera/
sudo setfacl -dm g:pi:rwx /var/www/upload/camera/
sudo setfacl -dm u:fhem:rwx /var/www/upload/camera/
sudo setfacl -Rm g:pi:rwx /var/www/upload/camera/
sudo setfacl -Rm u:fhem:rwx /var/www/upload/camera/
getfacl .
define OUT.Bewegung dummy
attr OUT.Bewegung event-on-change-reading current_file
curl http://localhost:8083/fhem?cmd=setreading%20OUT.Bewegung%20current_file%20test
sudo apt-get install inotify-tools
cd /opt/fhem/
sudo vi camerawatch.sh
#!/bin/bash
cd /var/www/upload/camera
mypidfile=/opt/fhem/camerawatch.sh.pid
trap "rm -f '$mypidfile’" 2
echo $$ > "$mypidfile"
inotifywait -m -e create /var/www/upload/camera |
while true; do
while read $T path action file; do
rm -f `ls -td -1 /var/www/upload/camera/** | awk 'NR>50'`
echo "The file '$file' appeared in directory '$path' via '$action'"
curl "http://localhost:8083/fhem?cmd=setreading%20OUT.Bewegung%20current_file%20$file"
done
done
sudo chown fhem:dialout camerawatch.sh
sudo apt-get install inotify-tools
sh camerawatch.sh
cd /etc/init.d/
sudo vi camerawatch
#!/bin/sh
### BEGIN INIT INFO
# Provides: camerawatch
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time for camerawatch
# Description: Enable service provided by daemon.
### END INIT INFO
export PATH=$PATH:/usr/local/bin
PID=`cat /opt/fhem/camerawatch.sh.pid 2>/dev/null`
case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
echo "Camerawatch is already running"
else
su - "fhem" -c "sh /opt/fhem/camerawatch.sh > /dev/null 2>&1 &"
echo "Camerawatch starting"
sleep 2
$0 status
fi
;;
stop)
if ! ps -p $PID > /dev/null 2>&1; then
echo "Camerawatch is not running"
else
kill $PID
echo "Camerawatch closed"
fi
;;
restart)
if ! ps -p $PID > /dev/null 2>&1; then
$0 start
else
$0 stop
$0 start
fi
;;
status)
if ps -p $PID > /dev/null 2>&1; then
echo "Camerawatch is running PID $PID"
else
echo "Camerawatch is not running"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0
sudo chmod 755 /etc/init.d/camerawatch
sudo update-rc.d camerawatch defaults
sudo service camerawatch start
sudo vi /etc/passwd
fhem:x:999:20::/opt/fhem:/bin/bash
define n_Bewegung notify OUT.Bewegung set Pushover_Client msg 'Bewegung vor der Tür' '$EVENT'
cd /var/www/html
sudo ln -s ../upload/camera/ camera
sudo chown -h www-data:www-data camera
define n_Bewegung notify OUT.Bewegung set Pushover_Client msg 'Bewegung bemerkt' 'Es bewegt sich etwas draußen' '' 2 'siren' 30 3600 'Jetzt ansehen' 'http://192.168.178.21/camera/$EVTPART1'