Edimax Kamera

Kamera Hacking macht Spaß

Seit ein paar Wochen ist eine Edimax Kamera bei mir im Einsatz und es fallen mir immer wieder neue Sachen hierzu ein. Es ist unheimlich spannend was in Kombination mit einem Raspberry Pi, Node-Red, UNIX-Scripts so alles möglich ist.

Edimax Kamera
Edimax Kamera

Als erstes haben mich die CGI-Remote Befehle interessiert, da die Kamera via IoT, MQTT und Smarthome unabhängig gesteuert werden soll, um nicht die Software des Hersteller nehmen zu müssen.

Es gab hierzu echt ein paar sehr interessante Ergebnisse die hier im Blog dokumentiert sind :

Edimax Kamera mit MQTT steuern

 

In Verbindung mit Node-Red und ein wenig UNIX-Shellscripts kann man wirklich sehr interessante Dinge machen. Zum Beispiel Bilder der Kamera als Snapshot an Twitter zu senden. Die werden dann über einen Crontab Mechanismus via Node-Red angesteuert und automatisiert an Twitter gesendet.

Die Anleitung hierzu gibt es hier: Webcam Bilder mit Raspberry Pi an Twitter senden

Nun kam eine weitere Idee hinzu, alle 15 Minuten automatisiert ein Bild (Snapshot) von der Kamera aufzunehmen, welches dann auf ein NAS-Storage gespeichert wird und zusätzlich per FTP an einen FTP-Server.

Der erste Akt mit dem Snapshot auf ein NAS-Storage ist sehr einfach gelöst, da die Kamera in den Einstellungen die Möglichkeit hat, ein SMB-Fileshare einzubinden. Der Befehl hierzu ist wie folgt:

"wget -O /tmp/snapshot.txt http://admin:1234@192.168.2.1/camera-cgi/admin/recorder.cgi?action=snapshot

Wenn die Anmeldedaten stimmen und die IP-Adresse, kann man einfach in einer Linux-Shell diesen oben angezeigten Befehl kopieren und ENTER drücken. Die Kamera macht dann ein Snapshot auf dass von dem eingestellten Speichermedium zb. Speicherkarte, oder NAS-Storage.

Snapshot NAS-Storage
Snapshot NAS-Storage

So sieht dann die Verzeichnisstruktur aus wenn die Bilder gespeichert werden.

Nun verbinden wir den oben gezeigten Befehl mit Node-Red wie folgt:

[{"id":"20d83420.f421f4","type":"inject","z":"4bbf54b9.3f94dc","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"*/15 0-22 * * *","once":false,"x":263.88330078125,"y":205,"wires":[["beb64a0.07e90b8"]]},{"id":"beb64a0.07e90b8","type":"exec","z":"4bbf54b9.3f94dc","command":"wget http://admin:1234@192.168.2.1/jpg/image.jpg -O /home/pi/webcams/wohnzimmer/wohnzimmer.jpg","addpay":false,"append":"","useSpawn":"","timer":"","name":"Snapshot","x":551.88330078125,"y":204,"wires":[["6bd99122.6ac518"],[],[]]},{"id":"573399e1.7acec","type":"function","z":"4bbf54b9.3f94dc","name":"Test Function 5","func":"if (msg.payload == \"Snapshot\") {\n return [ msg, null, null, null, null ];\n} else if (msg.payload == \"Inside\") {\n return [ null, msg, null, null, null ];\n} else if (msg.payload == \"InsideFTP\") {\n return [null, null, msg, null, null];\n} else if (msg.payload == \"Cam4\") {\n return [null, null, null, msg, null];\n} else {\n return [null, null, null, null, msg];\n}\n\n","outputs":"5","noerr":0,"x":267.88330078125,"y":301,"wires":[["71e0772f.264b7","f704e77d.3ec658"],["71e0772f.264b7","77606f6e.ada608"],["71e0772f.264b7","beb64a0.07e90b8"],["71e0772f.264b7"],["71e0772f.264b7"]]},{"id":"6bd99122.6ac518","type":"debug","z":"4bbf54b9.3f94dc","name":"","active":true,"console":"false","complete":"false","x":881.88330078125,"y":191.7833251953125,"wires":[]},{"id":"71e0772f.264b7","type":"debug","z":"4bbf54b9.3f94dc","name":"","active":true,"console":"false","complete":"false","x":799.88330078125,"y":296.1166687011719,"wires":[]},{"id":"4f83e0e9.c8d488","type":"mqtt in","z":"4bbf54b9.3f94dc","name":"","topic":"cam","qos":"2","broker":"191d04ca.0c7d13","x":93.88330078125,"y":301,"wires":[["573399e1.7acec"]]},{"id":"f704e77d.3ec658","type":"exec","z":"4bbf54b9.3f94dc","command":"wget -O /tmp/snapshot.txt wget http://admin:password@192.168.2.1/camera-cgi/admin/recorder.cgi?action=snapshot","addpay":false,"append":"","useSpawn":"","timer":"20","name":"Snapshot on Storage","x":597.88330078125,"y":90.99999237060547,"wires":[[],[],[]]},{"id":"77606f6e.ada608","type":"exec","z":"4bbf54b9.3f94dc","command":"wget http://admin:1234@192.168.2.1/jpg/image.jpg -O /home/pi/webcams/wohnzimmer/wohnzimmer.jpg","addpay":false,"append":"","useSpawn":"","timer":"","name":"Take Photo","x":565,"y":144.88330078125,"wires":[["385d6b0e.61ba84"],[],[]]},{"id":"4ba9dc04.feb0ec","type":"inject","z":"4bbf54b9.3f94dc","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"*/15 0-22 * * *","once":false,"x":263.88330078125,"y":93,"wires":[["f704e77d.3ec658"]]},{"id":"385d6b0e.61ba84","type":"file in","z":"4bbf54b9.3f94dc","name":"Read locale Photo","filename":"/home/pi/webcams/wohnzimmer/wohnzimmer.jpg","format":"","x":789,"y":132.88330078125,"wires":[["17db7b2b.f8cbfd"]]},{"id":"a58b9ac5.2cb0e8","type":"inject","z":"4bbf54b9.3f94dc","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":266.0000305175781,"y":144.88330078125,"wires":[["77606f6e.ada608"]]},{"id":"17db7b2b.f8cbfd","type":"change","z":"4bbf54b9.3f94dc","name":"","rules":[{"t":"set","p":"media","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"Current Photoshoot Inside","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1025,"y":132.88330078125,"wires":[["91915da2.530c8"]]},{"id":"91915da2.530c8","type":"twitter out","z":"4bbf54b9.3f94dc","twitter":"","name":"Tweet","x":1206,"y":132.88330078125,"wires":[]},{"id":"191d04ca.0c7d13","type":"mqtt-broker","z":"","broker":"mqtt.unixweb.de","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

In der “Test Function 5” sind 3 MQTT-Befehl enthalten “Snapshot, Inside, InsideFTP” . Der Snapshot speichert ein Bild auf den jeweilig eingerichteten Speichermedium.
Mit “Inside” erstelle ich eine Bilddatei unter “/home/pi/webcams/wohnzimmer/wohnzimmer.jpg” die dann anschließend per Twitter gesendet wird. Mit “InsideFTP” erstelle ich ebenfalls die Datei “wohnzimmer.jpg” und versende diese dann an ein FTP-Server meiner Wahl.
Um das Bild per FTP versenden zu können, benötigen wir noch einen Flow und ein UNIX-Script
[{"id":"a9d46366.097b78","type":"exec","z":"4bbf54b9.3f94dc","command":"/home/pi/bin/ftp.sh ","addpay":false,"append":"","useSpawn":"","timer":"","name":"FTP Upload","x":802.88330078125,"y":415.1665954589844,"wires":[["ba23f689.ec4448"],[],[]]},{"id":"e4e8f1ef.3fd","type":"watch","z":"4bbf54b9.3f94dc","name":"Wohnzimmer","files":"/home/pi/webcams/wohnzimmer","x":502.88330078125,"y":412.1999206542969,"wires":[["a9d46366.097b78"]]},{"id":"ba23f689.ec4448","type":"debug","z":"4bbf54b9.3f94dc","name":"","active":true,"console":"false","complete":"false","x":1055.88330078125,"y":400.5500183105469,"wires":[]}]

Hier das UNIX-Script, welches lokal auf dem Raspberry Pi zb. unter /home/pi/bin/ gespeichert werden kann mit dem Namen “ftp.sh” :

#!/bin/bash
#set -x
DATE=$(date +%d-%m-%y)
DATEFILE=`cat /tmp/date.txt`
FILE=backup_`date +%Y%m%d_%H%M%S`.jpg

            if [ "$DATE" = "$DATEFILE" ]; then
        echo put /home/pi/webcams/wohnzimmer/wohnzimmer.jpg /$DATE/$FILE |ftp ftp.<meinserver>.de
            else
            echo $DATE > /tmp/date.txt
        echo mkdir $DATE |ftp ftp.<meinserver>.de
        echo put /home/pi/webcams/wohnzimmer/wohnzimmer.jpg /$DATE/$FILE |ftp ftp.<meinserver>.de
            fi

Wenn jetzt der Befehl “InsideFTP” an Topic “cam” per MQTT-Server Deiner Wahl gesendet wird, wird ein Bild von der Kamera aufgenommen und per FTP auf den FTP-Server hochgeladen.

Ein kleiner Trick fehlt hier noch für das automatische FTP-Login per Shellscript. Hierzu musst Du prüfen unter welchen Benutzer “node-red” läuft. Wenn dieser unter dem Benutzer “pi” läuft, muss eine versteckte Datei “/home/pi/.netrc” angelegt werden mit folgendem Inhalt , die Daten die dort sthen sind nur exemplarisch und müssen durch Deine FTP-Daten ergänzt werden :

cat .netrc
machine <ftp.meinserver.de>
login <login@meinserver.de>
password <Dein Passwort>

Der Node “watch” überwacht das Verzeichnis “/home/pi/webcams/wohnzimmer”. Wenn hier eine neue Datei hineinkopiert oder angelegt wird, kann der Node “FTP-Upload” die hochgeladene Datei zB. “wohnzimmer.jpg” automatisiert mit dem Script “ftp.sh” auf den eingetragenen FTP-Server hochladen.

So sieht dann das Verzeichnis aus mit den hochgeladenen Bildern. Dieses FTP-Upload dient auch nochmal zur Sicherheit wenn die Daten auf dem lokalem Speichermedium gestohlen werden sollten bei einem eventuellen Einbruch.

Es gibt hier noch so viele weitere Möglichkeiten , die der Fantasie keiner Grenzen gesetzt sind. Was wäre für Dich ein aktueller Anwendungsfall, den Du mit einer eigenen Kamera abbilden möchtest ? Erzähl mir hier und wir arbeiten gemeinsam an einer Lösung. Deal oder No Deal ? 🙂

 

Viel Spaß wünscht weiterhin , Joachim

 

 

 

Joachim

Aus Leidenschaft für Technik. Aktuelle Themen sind Datensicherheit, Software für Datenschutz, Mobile Geräte, Smartphone Sicherheit und Anwendungen, Raspberry Pi Geek.

Alle Beiträge ansehen von Joachim →

5 Gedanken zu “Kamera Hacking macht Spaß

  1. Hallo ,

    ich habe selbst ein Problem, wobei ich deine Hilfe brauche.
    Als Imker verteile ich meine Bienenkästen im Sommer an verschieden lukrativen Plätzen. Da das Imkern immer mehr Interessenten findet, werden einige Völker entwendet.
    Nun zu meinem Anliegen:
    Die Bienenvölker werden mit einer „Wildkamera“ überwacht, diese sendet per GSM nach auslösen des Bewegungsmelders ein Foto an meinen FTP Server.
    Jetzt soll node red ins Spiel kommen……..
    Ich würde gerne das neue Foto (jpg) per Telegram Adapter an eine Gruppe verteilen.
    Das Speichern der Fotos auf mein NAS in einen Ordner funktioniert einwandfrei.
    Wie kann ich den FTP Ordner triggern ?
    Über Lösungsvorschläge würde ich mich sehr freuen.

    1. Hallo Imker

      es gibt einen Node “File” damit kann man ein Verzeichnis überwachen ob eine neue Datei angelegt wird. Damit kannst Du das Bild an Telegram senden.

      Grüße , Joachim

  2. Hallo!
    Kann ich denn auch direkt ein Bild im Dashboard anzeigen lassen? Also im Prinzip
    payload=wget http://admin:1234@192.168.2.1/tmpfs/auto.jpg
    payload anzeigen
    Im Moment scheitert es schon am exec, da dieser mit error 1 abbricht.
    Hintergrund ist, es soll ein Bild von der Kamera geholt werden, wenn jemand den Klingelknopf betätigt. Da wäre ich über den richtigen Denkanstoß sehr glücklich.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert