FHEM IPCAM Modul für INSTAR Kameras

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:

  1. Kopieren Sie den Inhalt des Verzeichnisses www aus dem Repository in das Verzeichnis www in Ihrer FHEM-Installation /opt/fhem/www/.
  2. Rufen Sie Ihre FHEM-Benutzeroberfläche auf, klicken Sie auf Unsortiert und wählen Sie die FHEMWEB / Web device aus:

INSTAR FHEM Style

  1. Wählen Sie das stylesheetPrefix-Attribut aus und geben Sie instar_theme (oder hausautomatisierung_com) ein und bestätigen Sie. Laden Sie die Website erneut, um das Ergebnis zu sehen:

INSTAR FHEM Style



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]> 

FHEM Raspberry Pi

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.

FHEM Raspberry Pi

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):

BefehlFunktion
cmd01Löst einen Alarm auf unserer Kamera aus
cmd02Stellen Sie die IR-LEDs auf automatisch
cmd03IR-LEDs ausschalten
cmd04Deaktivieren Sie alle Erkennungsbereiche und den internen PIR-Sensor
cmd05Aktivieren Sie alle Erkennungsbereiche + internen PIR-Sensor
cmd06Gehe zur gespeicherten Position 1
cmd07Gehe zur gespeicherten Position 2
cmd08Gehe zur gespeicherten Position 3
cmd09Starten Sie den horizontalen Scan
cmd10Deaktivieren Sie den Alarmzeitplan
cmd11Aktivieren Sie den Alarmzeitplan
cmd12Alarmbereich 1 & 2 aktivieren
cmd13Deaktivieren Sie den Alarmbereich 1 & 2
cmd14Alarmbereich 3 & 4 aktivieren
cmd15Deaktivieren 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}

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

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

FHEM Raspberry Pi

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:

  1. /tmpfs/snap.jpg?usr=admin&pwd=instar Snapshot (1080p)
  2. /tmpfs/auto.jpg?usr=admin&pwd=instar Snapshot (320p)
  3. /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

FHEM Raspberry Pi

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

FHEM Raspberry Pi

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.

FHEM Raspberry Pi

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:

FHEM Raspberry Pi



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:

  1. /mjpegstream.cgi?-chn=11 (1080p)
  2. /mjpegstream.cgi?-chn=12 (320p)
  3. /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.

FHEM Raspberry Pi



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.

  1. 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

FHEM Raspberry Pi

FHEM Raspberry Pi

  1. 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

FHEM Raspberry Pi

  1. Damit FHEM Tablet UI mit FHEM kommunizieren kann, ist noch die longpoll-Einstellung im FHEMWEB Device festzulegen.
attr WEB longpoll websocket

FHEM Raspberry Pi

bzw. bei Problemen mit websocket attr WEB longpoll 1.

  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

FHEM Raspberry Pi

  1. 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:

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

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:

FHEM Raspberry Pi



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:

NotationErläuterung
+00:02:00In zwei Minuten; Einzelausführung
00:02:00Um zwei Minuten nach Mitternacht, z.B. um 00:02 und 0 seconds; einmalige Ausführung
*00:02:00Täglich um 00:02
+*00:02:00Alle 2 Minuten
+*{3}00:02Dreimal alle zwei Minuten
*{3}00:02Dreimal 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 das at 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 das at 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.

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

Öffnen Sie die FHEM-Konfigurationsdatei nano /opt/fhem/fhem.cfg oder über die FHEM-Oberfläche unter Edit files:

FHEM Raspberry Pi

Und fügen Sie Ihren Längengrad und Breitengrad als globales Attribut hinzu:

attr global latitude 50.274297
attr global longitude 8.189495

FHEM Raspberry Pi



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

FHEM Raspberry Pi

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.

FHEM Raspberry Pi

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>

FHEM Raspberry Pi

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.

FHEM Raspberry Pi

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/:

FHEM Raspberry Pi

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).

FHEM Raspberry Pi

  • 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/

FHEM Raspberry Pi

BenutzerGruppeGlobal
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

BinaryOctalPermission
0000—
0011–x
0102-w-
0113-wx
1004r–
1015r-x
1106rw-
1117rwx

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

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

Jetzt müssen wir nur noch den Alarm-FTP-Upload in den Alarm Aktionen aktivieren, wenn ein Alarm auftritt:

FHEM Raspberry Pi

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

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

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.

FHEM Raspberry Pi

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

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

  1. Der Alarm wird ausgelöst
  2. Unsere Kamera lädt einen einzelnen Schnappschuss in das Verzeichnis officecam
  3. Inotify erkennt, dass eine neue Datei erstellt wurde, und löst unser Skript aus
  4. 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

FHEM Raspberry Pi

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:

FHEM Raspberry Pi

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:

Pushsafer App

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

Pushsafer App

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"

Pushsafer App

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'

Pushsafer App

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.

Pushsafer App

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

Pushsafer App





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

FHEM Raspberry Pi

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

FHEM Raspberry Pi

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:

FHEM Raspberry Pi