FHEM IPCAM Modul für INSTAR Kameras
- FHEM Installation
- Machen Sie FHEM hübsch(er)
- Das IPCAM Modul
- Adding your Cameras Live Video
- Tablet UI
- Automatisieren Sie Kamerafunktionen
- Bewegungserkennung und Benachrichtigung
- MQTT Integration
Dies ist eine Übersicht über die FHEM-Benutzeroberfläche. Wir werden das Hausautomationssystems in Raspbian auf einem Raspberry Pi 2 installieren. Wenn Sie ein anderes Betriebssystem verwenden, lesen Sie bitte die offizielle Installationsanleitung.
FHEM Installation
Importieren Sie den Repository-GPG-Schlüssel:
sudo wget http://debian.fhem.de/archive.key | apt-key add -
Fügen Sie das Repository zu
sudo nano /etc/apt/sources.list
hinzu:deb http://debian.fhem.de/nightly/ /
Aktualisieren Sie Ihren Paketmanager:
sudo apt-get update
Installieren Sie FHEM:
sudo apt-get install fhem
Greifen Sie über die IP Ihres FHEM-Servers auf die Webbenutzeroberfläche zu - z.B. 192.168.2.64 :
http://192.168.2.64:8083/fhem
Machen Sie FHEM hübsch(er)
Die FHEM-Benutzeroberfläche ist vollständig anpassbar - Sie können sogar fertige Designs wie die z.B. haus-automatisierung.com Skin herunterladen, die ich für dieses Tutorial leicht modifiziert habe. Skins ändern das Tastenlayout der Benutzeroberfläche nicht, und alles ist rein kosmetisch. Man muß sie also nicht installieren, um dem Tutorial folgen zu können. Wenn Sie jedoch das Aussehen entsprechend anpassen möchten, laden Sie entweder die ursprüngliche Skin oder die modifizierte INSTAR-Version herunter:
- Kopieren Sie den Inhalt des Verzeichnisses
www
aus dem Repository in das Verzeichniswww
in Ihrer FHEM-Installation/opt/fhem/www/
. - Rufen Sie Ihre FHEM-Benutzeroberfläche auf, klicken Sie auf Unsortiert und wählen Sie die FHEMWEB / Web device aus:
- Wählen Sie das
stylesheetPrefix-Attribut
aus und geben Sieinstar_theme
(oderhausautomatisierung_com
) ein und bestätigen Sie. Laden Sie die Website erneut, um das Ergebnis zu sehen:
Das IPCAM Modul
Hinzufügen Ihrer INSTAR HD- oder Full HD-Kamera
Mit IPCAM können Sie ereignis- oder zeitgesteuerte Videoaufzeichnung von INSTAR-Netzwerkkameras einrichten. Es ist auch möglich, die Kamera über CGI-Befehle zu steuern. Wir können mit der Definition unserer Netzwerkkamera beginnen:
define <name> IPCAM <ip[:port]>
In dem Beispiel haben wir eine lokale INSTAR Full HD-Kamera mit IP 192.168.2.116
und Port 80
hinzugefügt (wenn Ihre Kamera einen anderen Port verwendet, müssen Sie ihn an der IP Ihrer Kamera anfügen) und dem Gerät den Namen OfficeCam
gegeben:
define OfficeCam IPCAM 192.168.2.116:80
Wir können auf die Befehlsreferenz für verfügbare Attribute verweisen, die wir unserer Kamera zuweisen können.
Um auf unsere Kamera zuzugreifen, können Sie eine Datei ipcams.conf in /opt/fhem/credentials
erstellen (stellen Sie sicher, daß Sie den Ordner und die Datei dem FHEM User zuweisen und Sie lesbar machen sudo chown fhem:dialout
/ sudo chmod 755
!):
$credentials{OfficeCam}{username} = "admin";
$credentials{OfficeCam}{password} = "instar";
In diesem Beispiel haben wir ein Administratorkonto mit dem Login admin/instar auf unserer Kamera. Bitte ändern Sie diese Werte entsprechend Ihrer Kameraeinstellung. In den folgenden Schritten müssen wir das Login jetzt nicht mehr verwenden. Wir müssen nur die Anmeldeinformationsdatei referenzieren.
Kamerasteuerung
Now with everything set up we can start using the IPCAM Module. The first thing we can add is a collection of up to 15 CGI commands that help us to take control over the camera functions through the FHEM web interface and allow us to later set up time schedules or event listeners to automatically trigger a certain command and automate our camera. For this example we picked the following commands (you can, of course, replace every one of them - check out our CGI documentation for all VGA, HD and Full HD cameras):
Jetzt können wir mit der Konfiguration des IPCAM-Modul beginnen. Das erste, was wir hinzufügen können, ist eine Sammlung von bis zu 15 CGI-Befehlen, die uns helfen, die Kamerafunktionen über das FHEM-Webinterface zu steuern. Später können Sie Zeitpläne oder Ereignis-Listener einrichten, um einen bestimmten Befehl automatisch auszulösen. Für dieses Beispiel haben wir die folgenden Befehle ausgewählt (Sie können natürlich jeden von diesen ersetzen - lesen Sie unsere CGI-Dokumentation für alle VGA-, HD- und Full HD-Kameras):
Befehl | Funktion |
---|---|
cmd01 | Löst einen Alarm auf unserer Kamera aus |
cmd02 | Stellen Sie die IR-LEDs auf automatisch |
cmd03 | IR-LEDs ausschalten |
cmd04 | Deaktivieren Sie alle Erkennungsbereiche und den internen PIR-Sensor |
cmd05 | Aktivieren Sie alle Erkennungsbereiche + internen PIR-Sensor |
cmd06 | Gehe zur gespeicherten Position 1 |
cmd07 | Gehe zur gespeicherten Position 2 |
cmd08 | Gehe zur gespeicherten Position 3 |
cmd09 | Starten Sie den horizontalen Scan |
cmd10 | Deaktivieren Sie den Alarmzeitplan |
cmd11 | Aktivieren Sie den Alarmzeitplan |
cmd12 | Alarmbereich 1 & 2 aktivieren |
cmd13 | Deaktivieren Sie den Alarmbereich 1 & 2 |
cmd14 | Alarmbereich 3 & 4 aktivieren |
cmd15 | Deaktivieren Sie den Alarmbereich 3 & 4 |
Sie können die folgenden Befehle kopieren und in die FHEM-Befehlszeile einfügen. Bitte ändern Sie den Namen OfficeCam
, wenn Sie im Schritt oben einen anderen Namen für Ihre Kamera gewählt haben:
attr OfficeCam basicauth {USERNAME}:{PASSWORD}
attr OfficeCam credentials /opt/fhem/credentials/ipcams.conf
attr OfficeCam pathCmd param.cgi?
attr OfficeCam cmd01 cmd=pushhostalarm&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd02 cmd=setinfrared&-infraredstat=auto&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd03 cmd=setinfrared&-infraredstat=close&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd04 cmd=setmdattr&-name=1&-enable=0&cmd=setmdattr&-name=2&-enable=0&cmd=setmdattr&-name=3&-enable=0&cmd=setmdattr&-name=4&-enable=0?cmd=setpirattr&-pir_enable=0&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd05 cmd=setmdattr&-name=1&-enable=1&cmd=setmdattr&-name=2&-enable=1&cmd=setmdattr&-name=3&-enable=1&cmd=setmdattr&-name=4&-enable=1?cmd=setpirattr&-pir_enable=1&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd06 cmd=preset&-act=goto&-number=0&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd07 cmd=preset&-act=goto&-number=1&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd08 cmd=preset&-act=goto&-number=2&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd09 cmd=ptzctrl&-step=0&-act=hscan&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd10 cmd=setscheduleex&-ename=md&-week0=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week1=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week2=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week3=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week4=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week5=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-week6=NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd11 cmd=setscheduleex&-ename=md&-week0=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week1=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week2=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week3=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week4=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week5=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-week6=PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd12 cmd=setmdattr&-name=1&-enable=1&cmd=setmdattr&-name=2&-enable=1&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd13 cmd=setmdattr&-name=1&-enable=0&cmd=setmdattr&-name=2&-enable=0&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd14 cmd=setmdattr&-name=3&-enable=1&cmd=setmdattr&-name=4&-enable=1&-usr={USERNAME}&-pwd={PASSWORD}
attr OfficeCam cmd15 cmd=setmdattr&-name=3&-enable=0&cmd=setmdattr&-name=4&-enable=0&-usr={USERNAME}&-pwd={PASSWORD}
Mit den oben genannten Befehlen wird die Attributliste unseres IPCAM-Geräts OfficeCam
mit den CGI-Befehlen "gefüllt", die zur Steuerung unserer Kamera erforderlich sind.
Sie können Ihre Befehle testen, indem Sie deren Nummer eingeben und auf SET klicken, um sie auszulösen (siehe Abbildung unten). Im Beispiel wähle ich den Befehl Nr. 1, der auf meiner Kamera erfolgreich den Audioalarm ausgelöst:
Wir zu unserer Befehlsliste zurückkehren, wenn wir mit der Einrichtung der FHEM Tablet-Benutzeroberfläche unten beginnen.
IPCAM Fotoserie
Mit dem IPCAM-Modul können wir auch eine Anzahl von Schnappschüssen in einem einstellbaren Intervall (Fotoserie) aufnehmen. Diese Momentaufnahmen haben immer den gleichen Dateinamen und vorher aufgenommene Bilder werden immer überschrieben, sobald eine neue Aufnahme ausgelöst wird. Dies ist eine nützliche Funktion, um einen stets aktuellen Screenshot eines Standorts in einer Website einzubetten.
Die folgenden Befehle sagen wir FHEM wie die Snapshot-URL auf unserer Kamera lautet tmpfs/snap.jpg
, begrenzen die Anzahl der Momentaufnahmen auf 1 und legen auf unserem LINUX-Hostsystem einen Pfad fest, in dem Dateien gespeichert werden sollen /opt/fhem/www/snapshots
(stellen Sie sicher, daß Sie den Ordner nach dem erstellen mit sudo mkdir /opt/fhem/www/snapshots
wieder dem FHEM User zuweisen sudo chown fhem:dialout
und sudo chmod 755
setzen, um FHEM zu erlauben ihn für die Schnappschüsse zu nutzen.):
attr OfficeCam path tmpfs/snap.jpg
attr OfficeCam snapshots 1
attr OfficeCam storage /opt/fhem/www/snapshots
attr OfficeCam event-on-update-reading snapshots
attr OfficeCam alias IN-8015 Full HD
attr OfficeCam group Surveillance
attr OfficeCam icon it_camera
attr OfficeCam room Office
attr OfficeCam verbose 5
Das Attribut snapshot
definiert die Anzahl der Snapshots, die aufgenommen werden sollen (wir wählen 1
), wenn unser IPCAM-Gerät durch ein Ereignis ausgelöst wird. Wenn Sie mehr als einen Schnappschuss auswählen, können Sie auch ein attr OfficeCam delay 10
Sekunden zwischen den einzelnen Aufnahmen festlegen. Wir haben auch den Speicherpfad auf dem Raspberry Pi auf /opt/fhem/www/snapshots
gesetzt (stellen Sie sicher, dass das Verzeichnis existiert und vom FHEM-Benutzer beschrieben werden kann) und teilten dem IPCAM-Modul mit, dass diese Snapshots unter tmpfs/snap.jpg
zu finden sind - der 1080p/720p-Schnappschusspfad jeder INSTAR HD- und Full HD-Kamera.
Hinweis: In den meisten Fällen benötigt man das 1920 x 1080 Pixel große Bild nicht. Deshalb bietet Ihre INSTAR Full HD-Kamera drei Auflösungen, aus denen Sie wählen können - die kleineren Auflösungen helfen Bandbreite zu sparen:
/tmpfs/snap.jpg?usr=admin&pwd=instar
Snapshot (1080p)/tmpfs/auto.jpg?usr=admin&pwd=instar
Snapshot (320p)/tmpfs/auto2.jpg?usr=admin&pwd=instar
Snapshot (160p)
Um auf diese Momentaufnahmen zugreifen zu können, können wir den integrierten Webserver innerhalb von FHEM namens HTTPSRV verwenden und ihm mitteilen, dass er den Inhalt des Speicherverzeichnisses bereitstellen soll:
define <name> HTTPSRV <infix> <directory> <friendlyname>
name
ist ein benutzerdefinierter Name für das von der FHEM-Benutzeroberfläche verwendete Gerät.infix
ein Präfix für die FHEMWEB-Base-URL, unter der der Inhalt des Verzeichnisses bereitgestellt wird.directory
der absolute Pfad zum öffentlichen Verzeichnis auf Ihrem RaspPi.friendlyname
der Name, der in der FHEM-Seitennavigation verwendet wird.
define SnapServer HTTPSRV snaps /opt/fhem/www/snapshots OfficeCam-Snapshots
Sie können den Server testen, indem Sie ein Bild nach /opt/fhem/www/snapshots
hochladen, z.B. A19041608083210.jpg
, und greifen Sie auf die URL http://192.168.2.64:8083/fhem/snaps/A19041608083210.jpg
mit Ihrem Webbrowser zu.
Wir können jetzt einen Job definieren, der diese Momentaufnahmen alle Minuten von der Kamera für uns abruft:
define OfficeCam_Timelapse at +*00:01:00 get OfficeCam image
Der Zeitraffer-Job sollte nun jede Minute das IPCAM-Modul auslösen, das dann Bilder in unseren Speicherpfad auf dem RaspberryPi lädt. Über das HTTPSRV-Modul können wir jetzt den neuesten Snapshot mit der folgenden URL laden: http://192.168.2.64:8083/fhem/snaps/OfficeCam_snapshot.jpg
.
Dieses Bild kann in eine Website eingebettet werden. Sie können diesen HTML-Code herunterladen und als Beispiel nach /opt/fhem/www/
snapshots entpacken. Diese Seite wird unter http://192.168.2.64:8083/fhem/snaps
gehostet und zeigt Ihnen den neuesten Schnappschuss in einer jQuery-Lightbox:
Adding your Cameras Live Video
You can use the IFRAME module to add the cameras live video:
define OfficeCamView weblink iframe http://192.168.2.116:80/mjpegstream.cgi?-chn=12&-usr=admin&-pwd=instar
attr OfficeCamView htmlattr width="640" height="352" frameborder="0" marginheight="0" marginwidth="0"
attr OfficeCamView group Surveillance
attr OfficeCamView room Office
attr OfficeCamView verbose 5
Just as it was the case with the snapshots, you can pick for 3 different resolutions for the live video stream - just substitute the channel number in the MJPEG path above:
/mjpegstream.cgi?-chn=11
(1080p)/mjpegstream.cgi?-chn=12
(320p)/mjpegstream.cgi?-chn=13
(160p)
To edit the this view once added, use the following URL
http://192.168.2.64:8083/fhem?detail=OfficeCamView
where you have to replace the OfficeCamView with the name you choose in the commands above.
Tablet UI
FHEM Tablet UI ist ein leichtgewichtiges aber funktionsreiches Frontend-Framework zum Steuern und Überwachen von in FHEM integrierten Geräten. Es basiert auf HTML/CSS/JavaScript und stellt somit keine zusätzlichen Anforderungen an den FHEM-Server.
- Zuerst müssen alle Dateien von FHEM Tablet UI in das FHEM-Verzeichnis /opt/fhem/www kopiert werden. Das geht mit folgendem update-Befehl über die FHEM-Befehlszeile.
update all https://raw.githubusercontent.com/knowthelist/fhem-tablet-ui/master/controls_fhemtabletui.txt
- Anschließend ist ein neues HTTPSRV-Device in FHEM anzulegen, welches auf den Ordner mit den gerade heruntergeladenen Dateien verweist.
define TABLETUI HTTPSRV ftui/ ./www/tablet/ Tablet-UI
- Damit FHEM Tablet UI mit FHEM kommunizieren kann, ist noch die longpoll-Einstellung im FHEMWEB Device festzulegen.
attr WEB longpoll websocket
bzw. bei Problemen mit websocket attr WEB longpoll 1
.
- Weil FTUI noch nichts anzuzeigen hat, wird die Datei
/opt/fhem/www/tablet/index-example.html
nach/opt/fhem/www/tablet/index.html
kopiert.
sudo cp -a /opt/fhem/www/tablet/index-example.html /opt/fhem/www/tablet/index.html
- Abschließend muss FHEM noch neu gestartet werden (shutdown restart) da das Attribut longpoll geändert wurde.
Somit ist FHEM Tablet UI bereit zur Verwendung und kann durch Aufruf der URL http://<fhem-server>:8083/fhem/ftui/
oder den Link im FHEM-Menü geöffnet werden:
Wir können jetzt mit der Erstellung unserer eigenen Benutzeroberfläche beginnen, indem Sie zunächst eine Sicherungskopie der Beispiel HTML-Datei erstellen:
sudo cp /opt/fhem/www/tablet/index.html /opt/fhem/www/tablet/index-bak.html
Wir können dann alle Beispiel-Widgets aus der Originaldatei index.html löschen:
<!DOCTYPE html>
<html>
<head>
<link rel="icon" href="favicon.ico" type="image/x-icon" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="widget_base_width" content="116">
<meta name="widget_base_height" content="131">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="longpoll" content="1">
<meta name="debug" content="0">
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.gridster.min.css" />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/font-awesome.min.css" />
<link rel="stylesheet" href="/fhem/tablet/lib/jquery.toast.min.css" />
<link rel="stylesheet" href="/fhem/tablet/css/fhem-tablet-ui-user.css" />
<script src="js/fhem-tablet-ui.js" defer></script>
<title>FHEM-Tablet-UI</title>
</head>
<body>
<div class="gridster">
<ul>
<li data-row="1" data-col="1" data-sizey="1" data-sizex="1">
<!-- Your Widgets go here -->
</li>
</ul>
</div>
</body>
</html>
Dadurch wurde unsere Benutzeroberfläche auf eine leere Leinwand reduziert, die wir nun mit unseren eigenen Widgets füllen können:
Wir können mit einem Widget beginnen, das das Live-Video unserer Mediendateien (/12
) ständig anzeigt und uns eine Lightbox des Full HD-Streams (/11
) gibt, wenn wir darauf klicken:
<li data-row="1" data-col="1" data-sizey="2" data-sizex="4">
<div data-type="popup" data-height="560px" data-width="960px">
<div data-type="image"
data-url="http://192.168.2.116:80/mjpegstream.cgi?-chn=12&-usr=admin&-pwd=instar" width="100%"
height="100%" class="nocache">
</div>
<div class="dialog">
<header>IN-8015 Full HD</header>
<div data-type="image"
data-url="http://192.168.2.116:80/mjpegstream.cgi?-chn=11&-usr=admin&-pwd=instar"
width="100%" height="100%" class="nocache">
</div>
</div>
</div>
</li>
Wenn wir die Table-Benutzeroberfläche über längere Zeit geöffnet lassen, ist es möglicherweise besser, das Live-Video auszublenden bis wir auf das Widget klicken, um wertvolle Netzwerkbandbreite zu sparen:
<li data-row="3" data-col="4" data-sizex="1" data-sizey="1">
<header>IN-9008 Full HD</header>
<div data-type="popup" data-height="545px" data-width="960px">
<div data-type="button" data-get="STATE" data-icon="fa-video-camera" data-get-on="on"
class="big top-space">
</div>
<div class="dialog">
<header>IN-9008 Full HD</header>
<div data-type="image"
data-url="http://192.168.2.115:80/mjpegstream.cgi?-chn=12&-usr=admin&-pwd=instar"
data-size="100%">
</div>
</div>
</div>
</li>
Wir können auch alle CGI-Funktionen nutzen, die wir zuvor zu unserem IPCAM-Gerät hinzugefügt haben. Im Folgenden wird eine Schaltfläche mit dem Material-Icon looks_one
erstellt. Wenn die Taste gedrückt wird, wird für unsere OfficeCam
ein Auslöser für cmd6
ausgegeben. Wir haben außerdem zwei CSS-Klassen verwendet class="big top-space"
, um ein großes Symbol mit einem kleinen Rand oberhalb der Schaltfläche zu erhalten:
<li data-row="1" data-col="3" data-sizey="1" data-sizex="1">
<Header>Go to Pos 1</header>
<div>
<div data-type="push" data-icon="mi-looks_one" data-device="OfficeCam" data-set-on="cmd06" class="big top-space"></div>
</div>
</li>
Die komplette Datei für alle unsere Funktionstasten können Sie von hier nach /opt/fhem/www/tablet/index.html
kopieren und Ihre Tablet-Benutzeroberfläche unter http://<fhem-server>:8083/fhem/ftui/
sollte jetzt danach so aussehen:
Automatisieren Sie Kamerafunktionen
FHEM bietet einen Scheduler an (automation timer) at
Dadurch können wir zeitgesteuerte Auslöser für die Befehle, die wir zuvor eingerichtet hatten nutzen. Die Befehlsstruktur für den Scheduler lautet:
define <name> at <timespec> <command>
\<name> und \<command> habe hier die gleiche Funktion wie bei einem notify
. Neu ist nur der \<timespec> (time specification). Die Zeit wird in der Notation HH:MM:SS oder HH:MM angegeben:
Varianten der Zeitangaben für at
:
Notation | Erläuterung |
---|---|
+00:02:00 | In zwei Minuten; Einzelausführung |
00:02:00 | Um zwei Minuten nach Mitternacht, z.B. um 00:02 und 0 seconds; einmalige Ausführung |
*00:02:00 | Täglich um 00:02 |
+*00:02:00 | Alle 2 Minuten |
+*{3}00:02 | Dreimal alle zwei Minuten |
*{3}00:02 | Dreimal um 00:02 Uhr |
*{sunset_rel()} | Täglich bei Sonnenuntergang |
*{sunrise(+120)} | 2 Minuten (120 Sekunden) täglich nach Sonnenaufgang |
- Durch die Angabe von
*
wird eine permanente Wiederholung definiert. Die Wiederholungen werden fortgesetzt, bis dasat
gelöscht oder deaktiviert wird. - Durch Angabe von
+
wird die angegebene Zeit nicht mehr als absolute Zeit, sondern als Timer interpretiert, nach wie vielen Stunden: Minuten: Sekunden der Befehl ausgeführt wird. - Durch Angabe von
{n}
wird dasat
nur n-mal ausgeführt. - Die Funktionen
{sunset_rel ()}
und{sunrise ()}
geben die entsprechende Zeit zurück. Dies wird täglich durch Angabe von*
wiederholt. Die geschweiften Klammern zeigen an, dass FHEM den Inhalt dieser Klammern direkt als Perl-Funktionen ausführt.
Um beispielsweise unsere Kamera in die Position zu schwenken, die wir tagsüber im Auge behalten möchten, können wir den cmd 6
auslösen, den wir zuvorerstellt haben, damit sich unsere Kamera jeden Morgen bei Sonnenaufgang in die gespeicherte Position 1 bewegt. Und dann wollen wir bei Sonnenuntergang zurück in die Nachtposition mit Hilfe des cmd 8
:
define go_to_day_position at *{sunrise()} set OfficeCam cmd 6
define go_to_night_position at *{sunset_rel()} set set OfficeCam cmd 8
Da wir unsere Kamera jetzt automatisch bewegen, müssen wir möglicherweise auch die Alarmbereiche ändern, die die Bewegungserkennung verwendet. Tagsüber wollen wir die kleinen Erfassungsbereiche 1 & 2 mit hoher Empfindlichkeit nutzen. Aber in der Nacht müssen wir unsere Flächen vergrößern und eventuell auch die Empfindlichkeit verringern, weil die Erkennung im Nachtsichtmodus empfindlicher ist und wir falsche Alarme reduzieren möchten - daher wechseln wir bei Sonnenuntergang zu den entsprechend eingerichteten Bereichen 3 & 4. Des Weiteren, automatisieren wir auch die IR-Nachtsicht, indem sie tagsüber von automatisch auf aus geschaltet wird. Aufgrund unserer Kameraposition müssen wir möglicherweise das Timing ein wenig anpassen - 10 Minuten (600s) nach Sonnenuntergang und 20 Minuten (1200s) nach Sonnenaufgang scheint ein guter Wert zu sein (passen Sie dies an Ihre Bedürfnisse an):
define enable_are_one_two at *{sunrise(+10)} set OfficeCam cmd 12
define disable_are_three_four at *{sunrise(+15)} set OfficeCam cmd 15
define disable_nightvision at *{sunrise(+1200)} set OfficeCam cmd 3
define disable_are_one_two at *{sunset_rel(+10)} set OfficeCam cmd 13
define enable_are_three_four at *{sunset_rel(+15)} set OfficeCam cmd 14
define enable_nightvision at *{sunset_rel(+600)} set OfficeCam cmd 2
Wir fügen den beiden Bereichsbefehlen außerdem kleine Verzögerungen hinzu, sodass nicht alle Befehle gleichzeitig ausgelöst werden und von der Kamera ggf. verworfen werden.
Für die ereignisgesteuerte Automatisierung lesen Sie bitte die offizielle Dokumentation. Ein Beispiel für eine solche Automatisierung wäre z.B. das Starten einer Fotoserie, wenn die Bewegungserkennung in FHEM ausgelöst wurde.
Hinzufügen Ihres Geo-Standorts
Wenn Sie dies noch nicht getan haben, müssen Sie FHEM Ihren Breiten- und Längengrad hinzufügen, um Ihre Sonnenuntergangs- und Sonnenaufgangszeiten berechnen zu können. Sie können Google Maps verwenden. Klicken Sie mit der rechten Maustaste auf die Karte und wählen Sie Was ist hier? - Ihre Längen- und Breitengrade werden am unteren Bildschirmrand angezeigt:
Öffnen Sie die FHEM-Konfigurationsdatei nano /opt/fhem/fhem.cfg
oder über die FHEM-Oberfläche unter Edit files:
Und fügen Sie Ihren Längengrad und Breitengrad als globales Attribut hinzu:
attr global latitude 50.274297
attr global longitude 8.189495
Bewegungserkennung und Benachrichtigung
In diesem Schritt möchten wir die Bewegungserkennung der Kamera verwenden, um einen FTP-Upload eines Snapshots auf das Raspberry Pi, auf dem FHEM ausgeführt wird, auszulösen. Wir müssen einen FTP-Server installieren und eine Möglichkeit implementieren, FHEM jedes Mal zu benachrichtigen, wenn eine neue Datei hochgeladen wurde.
Einen FTP-Server hinzufügen
Wir werden ProFTPD verwenden, der mit folgendem Befehl auf unserem RasPi installiert werden kann:
sudo apt update
sudo apt install proftpd-basic
Möglicherweise wurden Sie während der Installation zur Auswahl zwischen einem standalone server mode oder from inetd mode aufgefordert - wählen Sie hier den standalone server
. Um ProFTPD manuell zu konfigurieren, öffnen Sie bitte die Konfigurationsdatei in Nano:
sudo nano /etc/proftpd/proftpd.conf
Wir deaktivieren IPv6 - das wir es nicht brauchen, benennen unseren Server in FHEM um und stellen sicher, daß der standalone-server-type aktiv ist.
Jetzt müssen wir einige Änderungen an unserer Benutzerkonfiguration für den ProFTPd-Standardbenutzer ftpuser
vornehmen, indem Sie die folgende Datei erstellen:
sudo nano /etc/proftpd/conf.d/proftp-custom.conf
Fügen Sie hier die folgende Konfiguration ein:
# Ftp-Benutzer benötigen keine gültige Shell
<Global>
RequireValidShell off
</Global>
# Das Standardverzeichnis ist ftpuser's home
DefaultRoot ~ ftpuser
# Beschränken Sie die Anmeldung auf die Gruppe ftpuser
<Limit LOGIN>
DenyGroup !ftpuser
</Limit>
Nachdem die Benutzerkonfiguration abgeschlossen ist, müssen wir nun den ftpuser
zu unserem Linux-System hinzufügen:
sudo adduser ftpuser --shell /bin/false --home /var/www/upload
Wir stellen sicher, dass der ftpuser
nicht verwendet werden kann, um über SSH --shell /bin/false
auf unseren Server zuzugreifen, und verwendet das von ProFTPd erstellte Verzeichnis --home /var/www/upload
als Home Verzeichnis des Users.
In diesem Beispiel habe ich als UNIX-Passwort instar
ausgewählt. Wenn Sie ein anderes Passwort wählen, müssen Sie in den folgenden Schritten instar
ersetzen.
Jetzt müssen wir nur noch den FTP-Dienst neu starten:
sudo service proftpd restart
Wir können unseren Browser zum Testen des FTP-Servers verwenden, indem wir auf die IP-Adresse unseres Raspberry Pi mit dem Präfix ftp:// zugreifen.: ftp://192.168.2.64:21/
:
Sie sollten sich jetzt mit username = ftpuser und password = instar anmelden können - natürlich sehen wir hier nur ein leeres Verzeichnis.
Im Moment kann nur der ftpuser
Dateien lesen und in das ProFTPd-Home-Verzeichnis schreiben - was manchmal etwas frustrierend sein kann, wenn wir eine Datei über den fhem
oder den standardmäßigen pi
Benutzer hinzufügen müssen (beide haben hier nur Leserechte).
- r: Read
- w: Write
- x: eXecute
Wir können die Rechte für das Verzeichnis mit dem folgenden Befehl rekursiv ändern:
sudo chmod -R 755 /var/www/upload/
Benutzer | Gruppe | Global |
---|---|---|
rw- | rw- | rw- |
Mit 666
erhält der Besitzer (ftpuser
), seine Gruppe sowie jeder globale Benutzer die Rechte, Dateien innerhalb des Verzeichnisses rw-
zu lesen, zu schreiben, aber nicht auszuführen
Binary | Octal | Permission |
---|---|---|
000 | 0 | — |
001 | 1 | –x |
010 | 2 | -w- |
011 | 3 | -wx |
100 | 4 | r– |
101 | 5 | r-x |
110 | 6 | rw- |
111 | 7 | rwx |
Wir können jetzt einen Ordner erstellen, den wir als Upload-Ordner für unsere Bürokamera verwenden möchten:
sudo mkdir officecam
sudo chown ftpuser:ftpuser officecam/
sudo chmod -R 755 /var/www/upload/officecam/
Kamera-FTP-Upload
Wir können jetzt unsere INSTAR-Kamera so konfigurieren, dass Dateien auf den FTP-Server im FTP-Menü hochgeladen werden. Verwenden Sie die IP-Adresse Ihres Raspberry Pi, den Port 21, und geben Sie den Ordner, den Sie im Home-Verzeichnis ftpuser
erstellt haben, als Speicherpfad ein (mit einem voranstehenden ./
). Das Login ist das ftpuser
login - username = ftpuser und password = instar. Sie werden sehen, dass das Testbild beim Testen der Einstellungen erfolgreich in das Verzeichnis officecam
hochgeladen wird:
Jetzt müssen wir nur noch den Alarm-FTP-Upload in den Alarm Aktionen aktivieren, wenn ein Alarm auftritt:
FHEM konfigurieren
Zunächst erstellen wir ein Dummy-Gerät für die Alarm Ereignisse in FHEM und weisen es unserem Office-Raum zu:
define OfficeCam.Alarm dummy
Wir können jetzt das Attribut event-on-update-reading
verwenden, um jedes Mal ein Ereignis auszulösen, wenn ein neuer Schnappschuss von unserer Kamera hochgeladen wird:
Die Variable, die unser Gerät jetzt überwacht, ist new_snapshot
, die wir mit dem folgenden Befehl einstellen können: setreading OfficeCam.Alarm new_snapshot test
:
Mit FHEM können wir jedoch auch Befehle über HTTP über unseren Webbrowser (oder einen Curl-Befehl auf Ihrem Linux-Terminal) senden. Die entsprechende URL sieht so aus wenn wir die new_snapshot
Variable jetzt auf den Wert test2
setzen möchten: http://192.168.2.64:8083/fhem?cmd=setreading%20OfficeCam.Alarm%20new_snapshot%20test2&XHR=1
:
Hinweis Wenn der Aufruf der URL nicht funktioniert und ein HTTP ERROR 400 zur Folge hat, führen Sie den folgenden Befehl in der FHEM-Befehlszeile
attr WEB csrfToken none
aus und versuchen Sie es erneut. Schauen Sie ins FHEM Forum für mehr Details und andere Optionen.
Im nächsten Schritt müssen wir ein Shell-Skript schreiben, das im Hintergrund auf unserem RasPi ausgeführt wird und das nach neuen Dateien im FTP-Upload-Ordner sucht und die Variable new_snapshot
mit dem Namen der neuesten Datei aktualisiert. Wir benötigen diesen Service, da die Alarmschnappschüsse unserer Kameras mit einem Zeitstempel benannt werden. Daher wissen wir nicht vorraus, wie der Name der Datei lauten wird, und müssen diese Informationen an die FHEM für die weitere Verarbeitung weiterleiten.
Einen Watch Daemon erstellen
Um FHEM zu benachrichtigen, wenn ein Snapshot hochgeladen wurde, müssen wir die inotify-Tools auf unserem RasPi installieren und ein Shellskript im FHEM-Verzeichnis alarmwatch.sh
erstellen. Dieses Skript sollte als Hintergrunddienst ausgeführt werden. Dabei sollte immer geprüft werden, ob eine neue Datei im Überwachungsordner erstellt wurde, und die oben angegebene URL mit dem Namen der Datei als Wert aufgerufen werden (anstelle von test
oder test2
, wie wir sie zuvor getestet haben).
sudo apt install inotify-tools
sudo nano /opt/fhem/alarmwatch.sh
sudo chmod 744 /opt/fhem/alarmwatch.sh
Das Skript enthält Folgendes:
#!/bin/bash
cd /var/www/upload/officecam
# use inotify to watch multiple create events inside the camera upload folder
inotifywait -m -e create /var/www/upload/officecam |
while true; do
while read $T path action file; do
# cleanUp delete oldest file when 100 files are reached
rm -f `ls -td -1 /var/www/upload/officecam/** | awk 'NR>100'`
echo "'$file' was created in directory '$path' via '$action'"
# Get FHEM Command URL to set new_snapshot to current file name
curl "http://admin:instar@localhost:8083/fhem?cmd=setreading%20OfficeCam.Alarm%20new_snapshot%20$file&XHR=1"
done
done
Wenn Sie etwas anderes für die folgenden Werte ausgewählt haben, passen Sie das Skript bitte entsprechend an:
- Upload Verzeichnis:
/var/www/upload/officecam
- FHEM Benutzername:
admin
- FHEM Kennwort:
instar
- FHEM Port:
8083
- Alarm Dummy Gerät:
OfficeCam.Alarm
- Snapshot Variable:
new_snapshot
Um das Skript ausführen zu können, müssen wir den Besitzer von "root" in "fhem" ändern:
sudo chmod 744 /opt/fhem/alarmwatch.sh
sudo chown fhem:dialout alarmwatch.sh
Wir können jetzt das Skript mit dem Befehl sh /opt/fhem/alarmwatch.sh
manuell starten und testen, ob es funktioniert, indem wir einen Alarm auf unserer Kamera auslösen:
- Der Alarm wird ausgelöst
- Unsere Kamera lädt einen einzelnen Schnappschuss in das Verzeichnis
officecam
- Inotify erkennt, dass eine neue Datei erstellt wurde, und löst unser Skript aus
- FHEM wird mit dem HTTP-Befehl kontaktiert und
new_snapshot
wird auf den Dateinamen des aktuellsten Uploads gesetzt
Nun müssen wir einen Hintergrunddienst erstellen, der unser Skript automatisch als Systemdämon startet. Dies kann mit SystemD erfolgen - sudo nano /etc/systemd/system/OfficeCamWatch.service
:
[Unit]
Description=OfficeCam Alarm Watch
[Service]
Type=oneshot
ExecStart=/opt/fhem/alarmwatch.sh
[Install]
WantedBy=multi-user.target
Jetzt können wir SystemD neu laden und unseren Service starten:
sudo systemctl daemon-reload
sudo systemctl enable OfficeCamWatch.service
sudo systemctl start OfficeCamWatch.service
Der Hintergrunddienst ist jetzt aktiv und FHEM sollte jedes Mal benachrichtigt werden, wenn ein Alarm ausgelöst wird und eine Momentaufnahme von unserer Kamera hochgeladen wird:
Wir können jetzt mit FHEM eine Push-Benachrichtigung mit dem neuesten Alarmbild mithilfe einer App wie der Android / iOS / Windows-App Pushsafer senden. Hinweis es gibt einige andere Apps für Android iOS und Windows, die auch dafür verwendet werden können, falls Sie eine davon bevorzugen:
- Pushover
- Pushbullet
- Prowl
- PushNotifier
Push-Benachrichtigung mit Pushsafer
Um die Push-Benachrichtigung nutzen zu können, müssen Sie zunächst die Pushsafer App für Android, iOS oder Windows herunterladen und ein Konto auf der Pushsafer-Website registrieren. Wenn Sie die Pushsafer-App starten, werden Sie aufgefordert, sich mit Ihren Kontoanmeldeinformationen anzumelden und das von Ihnen verwendete Gerät als Empfänger zukünftiger Push-Benachrichtigungen zu registrieren. Sie finden die API-Dokumentation sowohl im FHEM Wiki als auch auf der Pushsafer FAQ Seite.
Das Pushover-Dashboard zeigt jetzt Ihren privaten Schlüssel sowie das gerade registrierte Gerät an:
Um FHEM für das Senden von Push-Benachrichtigungen vorzubereiten, stellen Sie sicher, dass das folgende Paket auf Ihrem RasPi installiert ist:
sudo apt update
sudo apt install libio-socket-ssl-perl
Um ein Pushsafer-Gerät in FHEM zu definieren, können Sie den folgenden Befehl verwenden:
define <name> Pushsafer <key>
Der Parameter \<key> ist der private Schlüssel, den Sie in Ihrem Pushover-Dashboard finden können. Eine alphanumerische Zeichenfolge (20 Ziffern) aus Ihrem Pushsafer-Konto.
Beispiel:
define PushsaferLogin Pushsafer A1b2c3D4E5F6g7h8i9J0
Um eine Nachricht zu senden, können wir jetzt den set Befehl verwenden:
set <name> message <text> [<option1>=<value> <option2>=<value> ...]
Eine der Optionen, die wir verwenden können, ist die Option picture
, um ein Bild an die Nachricht anzuhängen. Dies kann über einen Dateipfad angegeben werden, der sich in Ihrem Dateisystem befindet (z.B. picture=/var/www/upload/officecam/A19050111495810.jpg
) oder von einer IPCAM-Instanz (wie picture=IPCAM:<name>
) stammen, um den letzte Snapshot zu senden (z.B. picture=IPCAM:OfficeCam
). Die unterstützten Bildformate sind JPG, PNG und GIF.
Wir können mit der letzteren Option beginnen und die letzte Momentaufnahme senden, die vom Modul IPCAM aufgezeichnet wurde. Senden Sie einfach den folgenden Befehl, und einige Sekunden später erscheint das Bild als Teil der Push-Benachrichtigung in der Pushsafer-App:
set PushsaferLogin message "Motion Detection was triggered" title="Office Cam Alarm" picture="IPCAM:OfficeCam"
Unsere Verbindung zu Pushsafer steht und wir können ein Notify Device in FHEM erstellen, das die Push-Benachrichtigung jedes Mal auslöst, wenn ein neuer Alarm-Snapshot hochgeladen wird. Wir werden dieses Gerät AlarmPush
nennen und jedes Mal, wenn OfficeCam.Alarm
ausgelöst wird, eine Benachrichtigung erhalten. Um die URL für das neueste Alarmbild zu erhalten, können wir $EVENT
verwenden, wodurch wir auf das Ereignis new_snapshot: A19050121330310.jpg
zugreifen können. Wir können hier angeben, dass wir nur den Wert A19050121330310.jpg
dieses Paares wollen, indem wir $ EVTPART1
verwenden ($ EVTPART0
würde stattdessen new_snapshot
geben):
define AlarmPush notify OfficeCam.Alarm set PushsaferLogin message 'Motion Detection was triggered' title='Office Cam Alarm' picture='/var/www/upload/officecam/$EVTPART1'
Wir können jetzt einen Alarm auf unserer Kamera auslösen und das Ereignisprotokoll der FHEM überprüfen. Sie sollten sehen, dass die URL korrekt ausgefüllt wurde picture='/var/www/upload/officecam/A19050121330310.jpg'
und das Bild wurde erfolgreich an Pushsafer weitergeleitet.
2019-05-01 21:33:12 dummy OfficeCam.Alarm new_snapshot: A19050121330310.jpg
Pushsafer PushsaferLogin message 'Motion Detection was triggered' title='Office Cam Alarm' picture='/var/www/upload/officecam/A19050121330310.jpg'
2019-05-01 21:33:18 Pushsafer PushsaferLogin lastSuccess: message transmitted
MQTT Integration
Eine ausführliche Einführung zur Integration Ihres INSTAR Full HD (mit integriertem MQTT Broker) in FHEM finden Sie im Abschnitt INSTAR MQTT Broker. Die FHEM-Installation basierte dort jedoch auf der Windows-Version. Diese unterscheidet sich kaum, wenn Sie FHEM erstmal in Betrieb haben. Die Installation von FHEM (wie oben beschrieben) sowie die Installation der Abhängigkeiten (siehe unten) sind jedoch offensichtlich bei beiden Betriebsystemen unterschiedlich.
MQTT Voraussetzung
sudo apt-get install libmodule-pluggable-perl
sudo cpan install Net::MQTT:Simple
sudo cpan install Net::MQTT:Constants
Installation von Node-Red
sudo apt-get install build-essential
wget https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered
bash update-nodejs-and-nodered
node-red-start
node-red-stop
sudo systemctl enable nodered.service
sudo systemctl disable nodered.service
sudo systemctl start nodered.service
sudo systemctl stop nodered.service
Sie können jetzt über die folgende URL auf die Node-RED-Schnittstelle zugreifen http://192.168.2.64:1880/
- wobei 192.168.2.64 durch Ihre Serveradresse (Raspberry Pi) ersetzt werden muss: