MotionEyeOS

Aus SatriaWiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Was ist MotionEyeOS

Es handelt sich um eine Webanwendung, die für verschiedene Hardware-Plattformen bereitgestellt wird, unter Anderem auch für den Raspberry PI 3, was sie sehr interessant macht. Denn diese Webanwendung stellt eine kostenlose Videoüberwachungs-Zentrale dar, an die man mehrere Kameras anschließen bzw. IP Kameras konfigurieren kann, deren Bild+ und Videomaterial dann hiermit verwaltet werden. Das schließt ganz besonders auch MotionDetection mit ein.

SSH

Login mit RSA key

Der public key des RSA-Schlüsselpaars muss nach

/data/etc/ssh_authorized_keys

gespeichert werden.

Konfiguration ohne UI

Startup Skript

Eine Datei

in /data/etc/userinit.sh

wird beim Booten ausgeführt.

Motion Detection ein/ausschalten

Wenn man nach einer Möglichkeit sucht, die Bewegungserkennung und die daran gekoppelte Alarmbildgenerierung automatisiert ein- oder auszuschalten, muss zunächst die Webschnittstelle des tools "motion" im LAN verfügbar machen, denn sie ist auf localhost beschränkt:

Per SSH editiert man die Datei

/data/etc/motion.conf

und verändert hier den Wert

webcontrol_localhost on

zu

webcontrol_localhost off

Speichern und über die Weboberfläche sofort neustarten, ohne hier weitere Änderungen zu machen und anzuwenden. Danach ist motion über den Port 7999 konfigurierbar, und zwar wie folgt, wobei raspi die Adresse oder der Name des Raspberrys ist und 1 die Nummer der konfigurierten Kamera, um die es gerade geht:

http://raspi:7999/1/detection/status
Gibt den Status der Bewegungserkennung aus.
http://raspi:7999/1/detection/start
Aktiviert die Bewegungserkennung.
http://raspi:7999/1/detection/pause
Pausiert die Bewegungserkennung

Leider ist das nicht von Dauer. Irgendwie startet sich der Dienst neu mit den konfigurierten Werten!

SSL / HTTPS

Um den Server auf HTTPS umzustellen, sind einige manuelle Schritte nötig:

  1. SSL Zertifikat bzw. Schlüsselpaar erzeugen:
    z.B.: ssl_motioneye.key und ssl_motioneye.pem
  2. Schlüsselpaar nach /data/etc kopieren.
  3. /data/etc/motioneye.conf editieren und diese 2 Zeilen anhängen:
    sslcert /data/etc/ssl_motioneye.pem
    sslkey /data/etc/ssl_motioneye.key
  4. 2 Quelldateien herunterladen:
    Motioneye@github --> server.py
    Motioneye@github --> settings.py
  5. settings.py editieren. Am Ende hinzufügen:
    SSLCERT = "/data/etc/ssl_motioneye.pem"
    SSLKEY = "/data/etc/ssl_motioneye.key"
  6. server.py editieren. Oben zu den import Statements:
    from tornado import httpserver
    Dann die Zeile
    application.listen(settings.PORT, settings.LISTEN)
    ersetzen mit:

if os.path.exists(settings.SSLCERT) and os.path.exists(settings.SSLKEY):
  http_server = httpserver.HTTPServer(application,ssl_options={
    "certfile": settings.SSLCERT,
    "keyfile": settings.SSLKEY,
  })
  http_server.listen(settings.PORT)
else:
  application.listen(settings.PORT, settings.LISTEN)

Ergebnis: Es funktioniert, aber in der motioneye.log finden sich hunderte Fehler, die auch dazu führen, dass der Server sich ständig neu startet.

nginx als reverse proxy

Eine weitaus vielversprechendere Methode ist es, einen einfachen nginx Webserver, konfiguriert als reverse proxy, in das MotionEyeOS Linux zu integrieren. Das Schwierige hier ist, dass dieses Linux nicht mal über apt-get verfügt, das heißt: Handarbeit!

Ich habe auf einem Raspbian Stretch per "apt-get install nginx" das Paket installiert und mir alles herausgezogen, was nötig ist, um es auf MotionEyeOS laufen zu lassen, was erstaunlich wenig ist. Die Struktur der benötigten Dateien schaut so aus:

/data/etc/userinit.sh (Das ist das Skript, mit dem man nginx (und andere tools) beim booten starten kann)
/etc/init.d/S86nginx
/etc/nginx/nginx.conf
/etc/nginx/* (Unter den übrigen Dateien hier gibt es sicher einige überflüssige, aber sie stören nicht)
/usr/lib/libpcre.so.3.13.3 -> /usr/lib/libpcre.so.3
/usr/sbin/nginx
/var/lib/nginx/ (Ordner muss nur angelegt werden)
/var/log/nginx/ (Ordner muss nur angelegt werden)

Die /etc/nginx/nginx.conf sieht nur so aus:

include /data/etc/nginx.conf

damit dort die richtige Konfiguration liegen kann. Das erleichtert die Administration, denn /etc ist normalerweise schreibgeschützt gemounted.

Die /data/etc/userinit.sh sieht so aus:

/etc/init.d/S86nginx start

Wenn jetzt die /data/etc/nginx.conf korrekt ist, hat man beim booten einen https nginx webserver, der alles zu MotionEye weiterleitet :)

Das nginx-Paket habe ich hier zum Download. Es fehlt nur die userinit.sh, da die von meinem Paket nicht überschrieben werden soll, falls sie schon existiert.

Datei:Nginx-for-motioneyeos.7z

Um dieses TAR auf den Raspi zu übertragen, muss man sich an einer SSH Konsole anmelden und das root filesystem beschreibbar remounten:

mount -o remount,rw /

Danach mit einem SFTP Client (z.B. Filezilla) das TAR nach / übertragen und zurück auf der Konsole entpacken:

tar -xvf nginx-for-motioneyeos.tar

Quellen

https://github.com/ccrisan/motioneyeos

http://www.lavrsen.dk/foswiki/bin/view/Motion/MotionHttpAPI

Meine Werkzeuge