Xiaomi Dafang Kamera

Die Xiaomi Dafang ist eine Indoor-Kamera, die durch ihren günstigen Preis (ca. 30 €) bei gleichzeitig hohen Funktionsumfang überzeugt. Lest euch zu dem Thema aber bitte den Testbericht durch. Hier zeige ich euch, wie man die Kamera mit einer alternativen Firmware betreiben und in Fhem nutzen kann.

Inhalt 

Chinesische Wolken

Xiaomi Produkte werden normalerweise durch die Xiaomi Mii App gesteuert. In Kombination mit der originalen Firmware auf der Kamera lässt sich so einiges anstellen. Leider nutzt die App, sowie die Kamera dazu chinesische Cloud-Server. Es lässt sich nicht nachvollziehen inwiefern die dort ausgelagerten Daten durch dritte genutzt werden – daher ist die Verwendung von Xiaomi Produkten in ihrem original Zustand mit Vorsicht zu genießen.

Für die meisten Xiaomi Produkte, wie auch für die Dafang Kamera gibt es eine Lösung für das Problem. Diese Lösung schränkt den Funktionsumfang der Kamera zwar etwas ein – die wichtigsten Funktionen bleiben erhalten und können so nach belieben in sicherem Umfeld genutzt werden.

Das Stichwort dazu lautet

zurück zum Inhalt

Dafang Hacks

dabei handelt es sich um ein Git-Repository, wo ein netter Mensch eine eigene Firmware für die Kamera entwickelt hat. So lassen sich Funktionen der Kamera in universellen Apps und Anwendungen nutzen.

Die Custom-Firmware überschreibt in dem Fall übrigens nicht die originale Firmware, sondern wird separat auf einer micro SD-Karte betrieben.

zurück zum Inhalt

Installation

Für die Installation der Firmware benötigt man eine micro SD-Karte – diese sollte im Idealfall nicht größer als 4GB sein. Die Installation ist auf der Github-Seite natürlich ausführlich dokumentiert. Seht das folgende einfach als  ausführliche Übersetzung an.

Die eigentliche Installation gliedert sich in zwei Schritte

      • Bootloader

Damit die Cfw (Custom-Firmware) genutzt werden kann, muss der Bootloader der Kamera bearbeitet werden. So ist es auch möglich, dass die Kamera danach sowohl die originale Xiaomi Firmware, sowie die Cfw nutzen kann.

      1. Das Bootloaderfile wird also zunächst heruntergeladen (ca. 10 MB) allein auf die Karte kopiert und in „demo.bin“ umbenannt.
      2. Nach Abschluss des Vorgangs wird die SD-Karte dann an der Unterseite, in die abgeschaltete Kamera gesteckt – das Stromkabel vorher abziehen!
      3. An der Kamera befindet sich neben dem Kartenslot ein kleiner Taster der mit „Setup“ beschriftet ist. Nachdem die SD-Karte also in den Slot gesteckt wurde betätigt man diesen Taster, steckt dann das Stromkabel wieder ein und hält den Taster weitere 10 Sekunden gedrückt.
      4. Die Kamera benötigt nun eine Zeit um den Bootloader zu schreiben (in der Installationsanleitung steht 3 Minuten, bei mir ging es deutlich schneller). Sobald die Kamera fertig ist, beginnt sich der untere Teller zu drehen (Initialisierung)- sobald dieses Ereignis eintrifft muss das Stromkabel sofort wieder abgezogen werden!
      5. Man entfernt nun die SD-Karte mit dem Bootloaderfile  aus dem Kartenslot und startet die Kamera nochmal (dazu dann das Stromkabel wieder einstecken). Während des Bootvorgangs muss die LED der Vorderseite der Kamera für ca. 5 Sekunden durchgehend blau leuchten (nicht blinken) – danach sollte sich der untere Teller zur Initialisierung zu drehen beginnen. Falls die LED nicht blau leuchtet, sondern blinkt – hat der Flash-Vorgang nicht geklappt und muss wiederholt werden!

Wenn das Flashen des Bootloaders erfolgreich war, kann mit der Installation bzw. Einrichtung der

      • Firmware

fortgefahren werden.

      1. Dazu wird die micro  SD-Karte wieder in den PC gesteckt. Die einzelne Bootloader-File (demo.bin) kann gelöscht werden.
      2. Git-Repository als .zip herunterladen (190 MB) und entpacken.
      3. Der Inhalt des Ordners „firmware_mod“, aus dem heruntergeladenen und entpackten Git-Repository, wird nun auf die leere SD-Karte kopiert.
      4. Damit sich die neue Firmware sich direkt mit eurem Netzwerk verbinden kann, muss die Datei „wpa.supplicant.conf.dist“ im Ordner „configs“ auf der SD-Karte bearbeitet werden. Dazu kann man die Datei mit WordPad öffnen, unter „ssid=“ den Netzwerknamen und unter „psk=“ den Netzwerkschlüssel hinterlegen.
      5. Nach dem Speichern der geänderten Datei, muss die „wpa.supplicant.conf.dist“ in „wpa-supplicant.conf“ unbenannt werden!
      6. (OPTIONAL) Die Kamera kann via MQTT ihre Status-Werte übermitteln und gesteuert werden. Um die MQTT-Einstellungen vorzunehmen, muss die Datei „mqtt.conf.dist“ bearbeitet und anschließen ebenfalls umbenannt werden (in „mqtt.conf“). Ich gehe an dieser Stelle nicht weiter darauf ein. Wer MQTT nutzt müsste wissen, was in der Datei einzutragen/zu aktivieren ist.

Man kann auch einen Blick in die anderen Konfigurationsdateien werfen und die ein oder andere Änderung bereits vor der Inbetriebnahme der Kamera setzen. Achtet aber bitte darauf keine willkürlichen Änderungen vorzunehmen – Misserfolg vorprogrammiert.

Wenn man auf der SD-Karte alles fertig eingerichtet hat, kann man die Karte wieder in die zuvor abgeschaltete Kamera stecken und dann starten.

zurück zum Inhalt

Inbetriebnahme

Die Kamera benötigt etwa 1-2 Minuten um vollständig zu booten. Danach ist sie unter Eingabe der IP-Adresse im Browser per Webinterface erreichbar

Benutzername: root
Passwort: ismart12

(diese Daten gelten auch für alle anderen Zugänge der Firmware)

screen.png

Zentral sieht man, wie sollte es auch anders sein, das aktuelle Bild der Kamera. Es handelt sich allerdings nicht um einen Livestream, das aktuelle Bild aktualisiert sich etwa jede Sekunde.

Mit den roten Cursor Buttons oben im Bild kann man die Kamera horizontal und vertikal bewegen.

Im Header hat man drei Links bzw. Menüs zur Auswahl. Hier kann man die Einstellungen der Kamera managen.

manage

Klickt euch einfach mal durch die Menüs, die allermeisten Einträge sind selbsterklärend und analog zu vielen anderen IP-Kameras auf dem Markt.

camera controls

Hier hat man die Möglichkeit die Services der Kamera leicht zu aktivieren/deaktivieren.

zurück zum Inhalt

SSH-Zugang & NFS-Freigabe mounten

Den SSH-Zugang kann man unter Windows wieder mit  PuTTy nutzen, dazu einfach die IP der Kamera eingeben und verbinden.

ssh1

Der Benutzername ist wieder root, das Passwort lautet ismart12

Da das Standard-Passwort immer ein  Sicherheitsrisiko darstellt, sollte dieses zuerst geändert werden, dazu wird

passwd

in die Konsole eingegeben und ein neues Passwort gesetzt.

passwd

Lasst euch von den Fehlermeldungen nicht blenden, das Passwort wird trotzdem geändert.

Es handelt sich bei dem Terminal natürlich nicht um ein(e) voll funktionsfähige(s) Betriebssystem bzw. Shell- nur die wichtigsten Kommandos sind implementiert. Das Mounten von NFS-Freigaben wurde glücklicherweise eingebunden, so können Bilder (Snapshots) oder Videos direkt auf einen externen Datenträger geschrieben werden.

Zum Mounten von NFS-Freigaben auf NAS-Servern kann folgende Zeile verwendet werden

mount -o nolock -t nfs IP:DES:NAS:SERVERS:/NFS/FREIGABE/ /MOUNT/VERZEICHNIS

Hinweis zum Bearbeiten von Dateien

Der Editor Nano ist leider nicht implementiert, stattdessen kann man auf VIM zurückgreifen. Dessen Bedienung ist allerdings etwas anders.

zurück zum Inhalt

RTSP Stream mit VLC wiedergeben

Das Livebild der Kamera lässt sich natürlich nicht nur über die Weboberfläche beobachten, sondern kann über die RTSP-Streaming Funktion z.B. durch den VLC-Player genutzt werden.

Als erstes startet man dazu den MJPEG RTSP Dienst in der Weboberfläche unter „Manage -> Services“. Damit der Service immer läuft, kann man „Autorun“ aktivieren.

mjpeg

Falls der Dienst nicht startet, zu erkennen an einem roten NOK, bitte die Kamera einmal neu starten („Manage -> Reboot“).

Ebenfalls in der Weboberfläche unter „Manage -> Settings“, findet man im Abschnitt „Start MJPEG RTSP“ einen Pfad, um den Stream aufzurufen.

mjpeg2

Diesen kopiert man sich und startet den VLC-Player.

Oben links klickt man nun auf „Medien“ und wählt „Netzwerkstream öffnen“ aus

vlc1

im folgenden Fenster kann man die Adresse des Streams einfügen und unten auf „Wiedergabe“ klicken

vlc2

Die Wiedergabe des Streams sollte unmittelbar beginnen, man hat nun das Livebild der Kamera auf dem VLC-Player

vlc3

zum dem Zeitpunkt der Aufnahme waren die IR-LEDs eingeschaltet und IR-Cut abgeschaltet

Jedes Programm oder Gerät, dass die Wiedergabe von RTSP-Streams unterstützt, kann also das Livebild der Kamera wiedergeben bzw. nutzen.

zurück zum Inhalt

RTSP Stream mit Motion & Fhem

Motion ist ein Linux-Service, der es ermöglicht RTSP-Streams von IP-Kameras auf einer separaten Weboberfläche zur Verfügung zu stellen.

RTSP-Stream bedeutet dabei = das Livebild der Kamera. Warum man das macht, wie man das macht und wozu man es später nutzen könnt erfahrt ihr hier.

zurück zum Inhalt

Dafang_Hacks – Weboberfläche

Das Bild der Dafang_Hacks Weboberfläche z.B. stellt keinen Livestream zur Verfügung, sondern aktualisiert lediglich im voreingestellten Takt das statische Bild. Bewegt sich etwas innerhalb des Zeitraums zwischen zwei Bildern vor der Kamera her – so wird dieses möglicherweise gar nicht erfasst.

zurück zum Inhalt

RTSP-Stream

Die Dafang_Hacks-Firmware stellt zwei Möglichkeiten für einen RTSP-Stream zur Verfügung – H264 und MJPEG. Diese können unter Manage -> Services ausgewählt werden

rtsp

Hier auch wieder auf den PID achten – steht der ein rot hinterlegtes NOK, dann bitte die Kamera neu starten

Für den Test mit Motion habe ich den rtsp-mjpeg Service gewählt. Mit der Option Autorun wird der Stream immer zusammen mit der Kamera gestartet. Ein Klick auf Start – startet, oh wunder, den Service.

Unter Manage -> Settings scrollt man nun bis zu dem Eintrag Start MJPEG RTSP

settings

Wenn der Dienst schon läuft braucht man natürlich nicht erneut auf „Start“ klicken

Die URL unter Path to feed wird für die Einrichtung von Motion am besten kopiert (oder man lässt das Fenster/den Tab geöffnet.

zurück zum Inhalt

Motion

Was Motion genau ist, habe ich euch ganz am Anfang schon erzählt.

Gern hätte ich euch an dieser Stelle den Service Zoneminder anstatt Motion vorgestellt – leider bin ich an der Installation von Zoneminder in mehreren Anläufen gescheitert. Motion funktionierte in jederlei Hinsicht problemlos.

zurück zum Inhalt

Installation

Die Installation von Motion ist denkbar einfach. Da es sich in den offiziellen Paketquellen befindet, reicht die Eingabe von

sudo apt-get install motion

um das Programm zu installieren (Version 3.2.12).

zurück zum Inhalt

Konfiguration motion.conf

Leider findet die Konfiguration etwas altertümlich über die manuelle Bearbeitung von Config-Dateien statt.

sudo nano /etc/motion/motion.conf

Alternativ kann man die Datei natürlich auch per FileZilla auf den PC übertragen und mit einem Programm wie NotePad++ (Wordpad geht zur Not auch) bearbeiten.

Die Zeilenangaben der motion.conf können, je nach Version, leicht abweichen.

      • RTSP-Stream URL einfügen

Als erstes kopieren wir nun die URL von des MJPEG-RTSP Streams aus der Dafang_Hacks-Weboberfläche und fügen Diese bei Zeile 106 anstelle des value in die motion.conf ein, das Semikolon am Anfang der Zeile muss natürlich entfernt werden, damit die Zeile berücksichtigt wird.

Im Ausgangszustand steht dort -> ; netcam_url value

motionconf106

      • auto_brightness

Motion ist in der Lage die Helligkeit des Kamerabildes automatisch anzupassen, dazu muss in Zeile 132 der Wert hinter auto_brightness auf on gesetzt werden.

motionconf132

Hier muss kein Semikolon entfernt werden 🙂

      • output_pictures

Im Ausgangszustand nimmt Motion bei jeder erkannten Bewegung ein aktuelles Bild auf. Je nach eingestellter Empfindlichkeit oder dem Aufstellungsort der Kamera ist das Verhalten nicht immer erwünscht. Um es zu ändern muss in Zeile 250 hinter output_picture ein off gesetzt werden.

motionconf250

Aus „on“ wird „off“. Alternative Kommandos sind in den grünen Kommentarzeilen zu sehen.

      • stream_port, stream_localhost

stream_port findet sich in der Zeile 464. Dieser wird hinterher an die URL des Servers (auf dem Motion läuft) gehangen, um die Webseite mit dem Stream zu öffnen. Der Standartwert ist 8081 – falls das nicht mit einem anderen Port auf eurem Server kollidiert, muss der Wert nicht geändert werden.

stream_localhost findet man in der Zeile 477. Falls man den Stream von einem anderen Rechner aus ansehen möchte, muss man den Wert von off auf on ändern, da der Zugriff sonst blockiert wird.

motionconf464

Um dem Stream von der Kamera zu sehen sind diese Grundeinstellungen erstmal ausreichend. Motion bietet natürlich einen wesentlich grösseren Funktionsumfang. Seht euch dazu einfach mal in Ruhe die motion.conf an – dort ist jeder Eintrag wirklich gut beschrieben.

Wer mehr als nur eine Kamera über Motion betreiben möchte, der muss für jede Kamera, je eine Config-Datei anlegen! Informationen dazu findet man ganz am Ende der motion.conf.

Wer die Datei mit Nano bearbeitet hat, kann jetzt mit STRG+O speichern und mit STRG+X beenden. Wer die FileZilla Variante gewählt hat, speichert die Datei und schiebt die aktuelle Version auf seinen Server.

zurück zum Inhalt

Konfiguration Motion Deamon

Um Motion in einen Deamon zu verwandeln, der beim hochfahren des Servers automatisch gestartet wird, muss noch eine Datei geändert werden

sudo nano /etc/default/motion

die Datei hat nur zwei Zeilen. In der zweiten Zeile muss das no zu einem yes abgeändert werden

etcmotion

wie üblich mit STRG+O speichern und mit STRG+X verlassen.

Der Motion Service wird nun einmal gestartet

sudo service motion start

und direkt neu gestartet

sudo service motion restart

alternativ kann auch direkt der ganze Server neu gestartet werden.

In der motion.conf kann in Zeile 11 ebenfalls der Daemon aktiviert werden – wenn man mehrere Kameras im Einsatz hat (oder plant) ändert sich durch den Eintag in /etc/motion/default auch jede weitere Config-Datei automatisch.

zurück zum Inhalt

Browseraufruf

Über einen Browser von einem beliebigen Gerät im Netzwerk kann nun die URL aufgerufen werden und der RTSP-Stream erscheint, dazu die IP-Adresse des Servers und den festgelegten Port aus der motion.conf in die Adresszeile eintragen

http://IP.Adresse.des.Servers:8081

ein Blick auf mein Regal verrät

ergebnis.png

es funktioniert.

Man kann diesen Stream jetzt für seine eigenen Anwendungen nutzen – z.B. kann man sich per PHP oder HTML eine eigene kleine Webseite bauen, auf der man die Steuerelemente zum Bewegen der Kamera mit einbaut.

Hinweis

Sollte der Stream mal hängen bleiben, hilft ein Restart des Deamon

sudo service motion restart

Fhem-intern kann man sich mit einer Dummy-Notify Kombination behelfen (dazu muss der Linux-Terminal User „fhem“ – sudo nutzen dürfen) – an dieser Stelle möchte ich aber nicht näher darauf eingehen.

zurück zum Inhalt

Fhem

Leider hat Fhem (noch?) kein Modul zur Wiedergabe eines RTSP-Streams. Um das Live-Bild der Kamera dennoch irgendwie einzubinden habe ich zwei Optionen getestet.

zurück zum Inhalt

Weblink

Um das Live-Bild der Kamera in Fhem einzubinden, kann man ein Device vom Typ weblink erzeugen.

define Live_Cam weblink image http://IP.Adresse.des.Servers:8081

weblink

Ob es sich um eine konventionelle Lösung handelt weiß ich aber nicht. An sich funktioniert die Einbindung ganz gut, allerdings scheint der Stream im Iframe irgendwann einzufrieren, daher ist diese Lösung eher suboptimal.

zurück zum Inhalt

Fhem-WEB

Alternativ zum Weblink-Device kann man auch einen Link zum Motion-Stream in die Menüspalte von Fhem einfügen. So kann man bequem aus Fhem heraus den Stream aufrufen.

Dazu wird das Attribut menuEntries im WEB-Device bearbeitet. Wer, wie ich, das Theme von haus-automatisierung.com verwendet, findet dort bereits einige Einträge (welche natürlich auch bearbeitet oder entfernt werden können)

Update,cmd=update,UpdateCheck,cmd=update+check,Restart,cmd=shutdown+restart

Um einen Link zu ergänzen muss lediglich hinter der letzten Angabe wieder ein Komma gesetzt werden, dann wird der Name des Links angegeben (keine Leerzeichen verwenden), nach dem Namen des Links folgt ein weiteres Komma, dann die URL, die aufgerufen werden soll

Dafang_Kamera,http://IP.Adresse.des.Servers:8081

die ganze Zeile lautet dann

Update,cmd=update,UpdateCheck,cmd=update+check,Restart,cmd=shutdown+restart,Dafang_Kamera,http://IP.Adresse.des.Servers:8081

fhemweb

bei einem Klick auf den Link wird man direkt zum Stream der Kamera weitergeleitet – auch eine gute Sache.

Dadurch, dass der Stream, den Motion euch bereitstellt auf diese Art nur von Fhem genutzt wird, kann die Restriktion für den Localhost in der motion.conf auch aktiviert bleiben. Soll weiterhin auch ein Zugriff von anderen Rechnern möglich sein ist natürlich keine Änderung notwendig. Allerdings sollte man dann ggf. über eine Authentifizierung nachdenken – diese kann man über die motion.conf leicht einrichten. Auch mit Authentifizierung ist ein Aufruf des Links über Fhem möglich, dazu muss lediglich der Nutzername und das Passwort vor die IP-Adresse gesetzt werden

-> http://Username:Passwort@Ip.Adresse.des.Servers:8081

Egal was ihr macht, habt auf jeden Fall Spaß dabei 🙂

zurück zum Inhalt

Dafang Hacks, MQTT & Fhem

 Die Dafang_Hacks Firmware kann sowohl die Statusdaten via MQTT senden, als auch Kommandos per MQTT empfangen. Hier zeige ich euch, wie ihr MQTT unter Dafang_Hacks einrichtet und ein entsprechendes Fhem-Device anlegt.

zurück zum Inhalt

MQTT einrichten Dafang Hacks

Die Firmware muss dazu in erster Linie mit dem MQTT-Server bekannt gemacht werden. Dazu muss, wie auch bei der Wlan-Einstellung, eine Config-Datei bearbeitet und umbenannt werden.

Im günstigsten Fall erledigt man das in einem Zug mit der Installation der Firmware. Falls man die Firmware schon in Betrieb hat, kann man entweder das Terminal benutzen, oder die SD-Karte aus der (zuvor abgeschalteten) Kamera nehmen und am PC bearbeiten.

Die Datei selbst befindet sich in Ihrer Urform im Verzeichnis /config und heisst mqtt.conf.dist. Nach der Bearbeitung muss sie in mqtt.conf umbenannt werden.

(ACHTUNG: Ihr nutzt das Terminal als ROOT, d.h. jede falsche Eingabe kann zum Totalausfall führen. Lest das Tutorial erst in Ruhe durch bevor Ihr wilde Copy&Paste Arien durchführt! Wenn ihr euch unsicher im Umgang mit dem Terminal und VIM seid, dann bearbeitet die Datei besser am PC.)

Im Terminal via SSH erreicht man dieses Verzeichnis mit

cd /system/sdcard/config/
ls

ls

Die Datei wird nun bearbeitet, die Shell der Dafang_Hacks-Firmware stellt dazu den Editor VIM zur Verfügung. Geöffnet wird die Datei dann mit

vi mqtt.conf.dist

mqttconfdist

  • In den rot markierten Bereich werden die Daten eures MQTT-Servers eingetragen. Falls euer MQTT-Server keine Authentifizierung mit Username und Passwort nutzt,  werden die Angaben dort entfernt, oder auskommentiert (dazu ein # vor USER und PASS setzen).
  • Im gelben Bereich kann unter „Location“ ein Ort angegeben werden, an dem sich die Kamera befindet. Bei mir z.B. steht dort „Deele“. Der Ort wird hinterher in den MQTT-Topics genutzt.
  • In der blauen Box muss das Kommentarzeichen (#) vor „AUTODISCOVERY_PREFIX“ entfernt werden. Anstelle von „homeassistant“ kann auch ein anderer Prefix gesetzt werden. Ich habe es dabei belassen. Damit laufen unter diesem Topic wichtige Informationen zu den Topics über den MQTT-Server.
  • In der orangenen Box könnt ihr bei STATUSINTERVAL noch festlegen in welchem Takt die Kamera ihre Statuswerte per MQTT sendet. Der Wert wird in Sekunden angegeben. 30 Sekunden sind der voreingestellte Wert – 60 oder 120 sollten aber genügen.

Bevor ihr bei der Nutzung von VIM irgendetwas an der Datei verändern könnt, müsst ihr die Taste „i“ – für den Insert-Mode drücken. Erst dann ist es möglich Änderungen an der Datei vorzunehmen. Ob der Insert-Mode aktiviert ist, seht ihr jeweils am Ende des Editos VOR dem Dateinamen

insertmodus

I = Insert-Mode aktiv

Wenn ihr mit euren Änderungen fertig seid, drückt ihr einmal auf ESC, um den Insert-Modus zu verlassen. Angezeigt wird das, indem am Ende des Editors neben dem Dateinamen das „i“ verschwindet und ein Bindestrich  „-„ erscheint!

leave

Beendet wird der Editor dann indem Ihr einen Doppelpunkt eintippt (sprich Shift  + Punkt-Taste) und danach wq (für write und quit) eintippt und mit Enter bestätigt.

Zurück auf dem Terminal müsst ihr die Datei nur noch umbenennen. Das Terminal der Dafang_Hacks benutzt dazu den Befehl mv

mv mqtt.conf.dist mqtt.conf

die Ausgabe von

ls

sollte euch dann die Datei mqtt.conf anzeigen. mqtt.conf.dist sollte nicht mehr in der Liste auftauchen.

Die Kamera muss nun noch neu gestartet werden, danach ist sind die beiden MQTT-Dienste der Kamera nutzbar.

zurück zum Inhalt

Dafang_Hacks Webinterface

Im Webinterface der Kamera können die beiden MQTT-Dienste nun aktiviert werden. Dazu meldet man sich am Webinterface an und wählt Manage -> Services. Hier scrollt man dann bis zu den beiden MQTT-Services, aktiviert den Autostart und startet die beiden Dienste.

services

Wenn die Dienste einwandfrei laufen ist die PID-ID  über dem Service-Namen zu sehen. Falls hier ein rotes NOK erscheint, dann startet die Kamera bitte neu. Falls danach weiterhin „NOK“ erscheint, dann bitte die Eingaben in der mqtt.conf überprüfen!

Die Dienste starten nun automatisch mit der Kamera. Praktisch ist, das jeder Dienst auch einzeln aktiviert/deaktiviert werden kann. Wenn man also kein Interesse an den Statusdaten der Kamera hat, kann man den Dienst einfach abschalten und nur den Dienst zu Steuerung der Kamera nutzen (oder umgekehrt).

Die Aktivierung/Deaktivierung kann leicht über das Dropdown „Camera Controls“ erledigt werden

cameracontrolsmqtt

zurück zum Inhalt

MQTT-Topics

Leider sind die Informationen zu dem MQTT-Topics in der Firmware-Doku etwas spärlich. Hier nur kurz beschrieben, wie man die entsprechenden Topics ermitteln kann;

Dazu loggt man sich per SSH im Linux-Terminal auf seinem Server ein, der den MQTT-Server hostet und gibt

mosquitto_sub -d -v -t \#

ein. In der Ausgabe erscheinen dann alle Topics, die derzeit so auf dem MQTT-Server zusammenlaufen. Unter dem Topic „homeassistant/“ (welches auch in der mqtt.conf festgelegt werden kann) findet man dann Informationen über die Topics für unterschiedliche Funktionen, im Fall der Kamera also den Status- und Command-Topics.

Wesentlich leichter geht das mit einem externen Programm wie z.B. MQTT.fx (in der dort zu findenden Vorstellung des Programms sieht man auch einige Screenshots dazu).

Ihr müsst das natürlich nicht machen. Weiter unten habe ich euch die wichtigsten Topics zusammengefasst und aufgelistet.

zurück zum Inhalt

Fhem – autoSubscribeReadings

Für ein Gerät mit vielen Readings, die man ggf. nicht genau kennt, bietet sich das Attribut autoSubscribeReadings bei MQTT-Devices an. Mit diesem Attribut ermittelt Fhem die Topics eigenständig und legt entsprechende Readings an. Je nach dem in welcher Zeitspanne das eigentliche Gerät seine Status-Daten per MQTT übermittelt kann es aber eine Zeit dauern bis alle Readings vorhanden sind. Im Fall der Dafang_Kamera als MQTT_DEVICE könnte man also folgendes setzen

attr Dafang_Kamera autoSubscribeReadings LOCATION/DEVICE_NAME/+

das + Zeichen wird im Fhem-Commandref als Wildcard bezeichnet. Jedes Topic anstelle der Wildcard wird demnach ausgewertet und ggf. ein Reading erzeugt.

Sobald autoSubscribeReadings unter dem genannten Topic mit den Ermittlungen fertig ist, kann man das Attribut in

attr Dafang_Kamera autoSubscribeReadings LOCATION/DEVICE_NAME/+/+

ändern. So werden auch alle weiteren Topics ausgewertet und eingebunden. Ich habe alle Readings zu Fuß eingetragen (siehe unten). Für die PublishSets gibt es so ein Attribut leider nicht.

Wenn autoSubscribeReadings alle Readings ermittelt und erzeugt hat, kann das Attribut gelöscht werden. Die erzeugten Readings bleiben euch natürlich erhalten.

zurück zum Inhalt

MQTT-Device – Fhem

Leider gibt es kein Modul für die Dafang_Hacks, daher muss man das Device zu Fuß anlegen und die entsprechenden MQTT (Status-/)Control-Topics manuell eintragen.

Dazu legt man erstmal ein MQTT-Device an

define Dafang_Kamera MQTT_DEVICE

entsprechend dem Aufstellungsort kann man das Device dann auch direkt in den Raum schieben.

zurück zum Inhalt

(Für das folgende wird es wahrscheinlich auch eine bessere Möglichkeit geben ich habe Sie allerdings nicht gefunden)

Als erstes fügt man nun alle

Status-Topics

[dieser Abschnitt ist nur notwendig, wenn man nicht auf autoSubscribeReadings zurückgreift!]

als Readings hinzu dazu geht man nach folgendem Schema ein

attr FHEM_DEVICENAME subscribeReading_NAME LOCATION/DEVICE_NAME/TOPIC

FHEM_DEVICENAME sollte klar sein.  Der NAME hinter subscribeReading kann frei gewählt werden, übersichtlicher ist es natürlich wenn das entsprechende Topic nutzt um einen Bezug herzustellen. LOCATION und DEVICE_Name werden aus der mqtt.conf übernommen.

Im Folgenden sind drei Beispiele. Der FHEM_DEVICENAME lautet wie oben Dafang_Kamera. Die Kamera befindet sich gemäß fiktiver mqtt.conf unter der LOCATION: flur und der DEVICE_NAME lautet schlicht dafang 

attr Dafang_Kamera subscribeReading_Data flur/dafang

Ausgabe -> z.B. {„uptime“:“ 17:56:08 up 7:56, 0 users, load average: 2.84, 2.88, 2.92″, „ssid“:“FRITZ!Box 7490″, „bitrate“:“72.2 Mb/s“, „signal_level“:“67%“, „link_quality“:“58%“, „noise_level“:“0%“ }

Dieses Topic ist das Einzige, das Daten in diesem Format ausgibt.

attr Dafang_Kamera subscribeReading_brightness flur/dafang/brightness

Ausgabe -> z.B. 40

attr Dafang_Kamera subscribeReading_led_yellow flur/dafang/leds/yellow

Ausgabe -> ON / OFF

Das sind nun drei Beispiele, die alle übernommen werden können. Die Kamera liefert insgesamt 15 solcher Status-Topics, welche man davon haben möchte bleibt einem natürlich selbst überlassen.

Anstelle von LOCATION/DEVICE_NAME – füge ich nur * ein.

subscribeReading_ Topic
Data *
Brightness */brightness
IR-CUT */ir_cut
LED_Blue */leds/blue
LED_IR */leds/ir
LED_Yellow */leds/yellow
Motion */motion
Motion_detection */motion/detection
Motion_tracking */motion/tracking
Motor_horizontal */motors/horizontal
Motor_vertical */motors/vertical
Nightmode */night_mode
Nightmode_auto */night_mode/auto
rtsp_h264_server */rtsp_h264_server
rtsp_mjpeg_server */rtsp_mjpeg_server

Wenn alles geklappt hat, sieht es unter den Readings jetzt so aus

readings

Da die Kamera alle X Sekunden (je nach Angabe in der mqtt.conf) ihre aktuellen Werte übermittelt und diese sich vermutlich nicht immer all zu stark voneinander unterscheiden – empfehle ich noch

attr Dafang_Kamera event-on-change-reading .*

zu setzen. So werden nur die Readings aktualisiert, die sich Kamera-seitig in der Zwischenzeit tatsächlich geändert haben und nicht Alle.

zurück zum Inhalt

Wenn man alle Readings eingebunden hat, kann man sich um die

Control-Topics

kümmern. Der Vorgang ist ähnlich zu den Readings, bei den Controls wird allerdings direkt die Auswahl an zur Verfügung stehenden Kommandos mit angegeben.

Generelles Schema lautet hier

attr FHEM_DEVICENAME publishSet_NAME KOMMANDO1 KOMMADO2 TOPIC

Aus KOMMANDO1 und KOMMANDO2 wird, je nach Topic, ein Steuerbefehl für die Kamera. Die Topics dazu sind alle identisch mit den Status-Topics, mit jeweils einem /set im Anhang.

Im folgenden ein Beispiel (Parameter wie oben):

attr Dafang_Kamera publishSet_Blue_Led ON OFF flur/dafang/leds/blue/set

ON und OFF sind jeweils die Kommandos, dahinter folgt das Topic + /set.

Hier wieder die Auflistung, es handelt sich um insgesamt 11 Control-Topics mit je zwei Kommandos, * ersetzt wieder LOCATION/DEVICE_Name

publishSet_ Kommando 1 Kommando 2 Topic / Payload
IR-CUT ON OFF */ir_cut/set
LED_Blue ON OFF */leds/blue/set
LED_IR ON OFF */leds/ir/set
LED_Yellow ON OFF */leds/yellow/set
Motion_detection ON OFF */motion/detection/set
Motion_tracking ON OFF */motion/tracking/set
Motor_horizontal left right */motors/horizontal/set
Motor_vertical up down */motors/vertical/set
Nightmode_auto ON OFF */night_mode/auto/set
rtsp_h264_server ON OFF */rtsp_h264_server/set
rtsp_mjpeg_server ON OFF */rtsp_mjpeg_server/set

(Vor dem Einbinden habe ich die ganzen Topics getestet – die in der Tabelle genannten Topics funktionieren alle. Es existieren weitere Topics, leider konnte mit einem Test-publish der Topics keine Funktion angestoßen werden – daher habe ich mich auf die funktionierenden beschränkt.)

Wenn ihr bis hierher alles korrekt gemacht habt, dann könnt ihr die Kamera nun aus Fhem heraus steuern.

Für die ganze Arbeit dürft ihr euch auch mit einem schönen Icon belohnen

attr Dafang_Kamera icon it_camera

attributes.png

zurück zum Inhalt

stateFormat

Ich habe als stateFormat noch Motion:motion gesetzt. So wird mir immer angezeigt, ob die Kamera grade eine Bewegung erfasst hat.

attr Dafang_Kamera stateFormat Motion:motion

Man hat jetzt also die Möglichkeit die Kamera komplett aus Fhem heraus zu steuern

setvertical

Über die Dropdown-Menüs können alle Kommandos ausgewählt und ausgeführt werden

und diverse Readings zu erfassen – das ist schon eine sehr nette Spielerei, aber noch nicht alles 🙂

zurück zum Inhalt

webCmd

Wo wir grade bei netter Spielerei sind; Abschließend möchte ich euch noch einen Vorschlag für das Attribut webCmd machen – damit könnt ihr die beiden Motoren der Kamera direkt aus der Oberfläche bedienen.

Damit das nicht nur funktioniert, sondern auch schön aussieht, vergeben wir dem ganzen noch ein paar schöne Bilder. Weil die Steuerbefehle derzeit Leerzeichen enthalten, legen wir ein Attribut eventMap an

attr Dafang_Kamera /vertical up:up/vertical down:down/horizontal left:left/horizontal right:right/

Damit werden die Steuerbefehle auf „up“, „down“, „left“ und „right“ reduziert. Mit dem Attribut cmdIcon kann man diesen nun Icons zuweisen, ich habe mich für Pfeile entschieden

attr Dafang_Kamera cmdIcon up:control_arrow_up left:control_arrow_left right:control_arrow_right down:control_arrow_down

Das webCmd lautet dann folgendermaßen

attr Dafang_Kamera webCmd left:up:down:right

webcmd

zurück zum Inhalt