Surveillance Station Benachrichtigung bei Bewegungserkennung

Thomas101

Benutzer
Mitglied seit
17. Mrz 2017
Beiträge
3
Punkte für Reaktionen
0
Punkte
1
Ich bekomme immer die Fehlermeldung: "failed to copy /volume1/surveillance/@Snapshot/ ... {"ok":false,"error_code":400,"description":"Bad Request: there is no photo in the request"}"
Habe alle php Scripte probiert. Hat jemand einen Tip.
Danke
 

Calle

Benutzer
Mitglied seit
30. Jan 2013
Beiträge
104
Punkte für Reaktionen
4
Punkte
18
Guten Morgen in die Runde,

ich weiß wirklich nicht, ob das hier noch jemand verfolgt und ob mein Beitrag in irgendeiner Art relevant ist. Aber ich wollte gern mein Vorgehen beschreiben.

Ich habe eine NVR1218 und wollte mich ursprünglich an das Vorgehen hier im Thread orientieren. Das hat aus mehreren Gründen leider nicht geklappt.
1. Die NVR1218 hat keine klassische WebStation die man zum Aufrufen des php-Skripts ansprechen kann.
2. Bei der Aktionsregel gibt es nicht die Option "Externes Gerät" bei der man über eine URL das php-Skript ansprechen kann.

Daher wollte ich mir in Proxmox einen Container aufsetzen, der auf das NFS-Share @snapshot zugreift, dort regelmäßig die neuen Dateien mittels inotify ausliest und dann das php-Skript ausführt, welches ebenfalls im Container abgelegt ist.

Diese Variante fiel dann leider auch ins Wasser. Inotify nutzt Informationen des Kernels, um herauszufinden, ob eine neue Datei vorhanden ist. Da inotify des Containers aber nicht auf den Kernel der NVR1218 zugreifen kann, wurden keine Benachrichtigungen versandt.

Daher habe ich mir die NVR1218 nochmals genauer angesehen. Hier nun meine Lösung:
php war bereits installiert, was mich zunächst verwunderte, aber vor dem Hintergrund der SurveillanceStation doch wieder logisch ist. inotify ist standardmäßig nicht installiert, kann aber über den SynoCommunity Store nachinstalliert werden. Bei der Gelegenheit habe ich gleich noch die CLI-Tools mitinstalliert.

Im Anschluss daran habe ich mir ein neues Verzeichnis für die php-Datei erstellt. Darin befindet sich das folgende php-Skript:

Code:
<?php

$dir = '/volume1/surveillance/@Snapshot/';

$files = scandir($dir, SCANDIR_SORT_DESCENDING);
$last_snap = $files[0];

// kompletten Pfad zu letztem Snapshot erstellen
$file = $dir . $last_snap;

//echo $file;
// Snapshot aus Surveillance station in Ordner Web/... kopieren
$newfile = '/volume1/surveillance/telegram-snapshot/snapshot.jpg';
If (!copy($file, $newfile)) {
        echo "failed to copy $file ... \n";
}

//warten bis Snapshot ins Zielverzeichnis kopiert wurde.
sleep(1);


// Telegram Parameter;
$chat_id=123456789;

$bot_url    = "https://api.telegram.org/bot123456789:ABC_defghi__X_f06gfg45zi4634w/";
$url = $bot_url . "sendPhoto?chat_id=" . $chat_id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type:multipart/form-data"
    ));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
        "photo"         => new CURLFile(realpath("/volume1/surveillance/telegram-snapshot/snapshot.jpg")),
        "caption" => "Kamera hat Bewegung erkannt - " . date("d.m.Y - H:i:s")
));
$output = curl_exec($ch);
print $output;

?>

Ich habe hier auf die vorhanden Skripte des Threads zurückgegriffen und diese an meine Bedürfnisse ein wenig angepasst. Danke an der Stelle!
So habe ich zum Beispiel kein sleep(1); mehr, Erklärung folgt.

Neben dem php-Skript habe ich folgendes bash Skript geschrieben:
Code:
#!/bin/bash
inotifywait -mrq -e create --format %w%f /volume1/surveillance/@Snapshot/ | while read FILE
do
    sudo php /php/snapshot-versenden.php
done

inotify überprüft hier in einer dauerhaft laufenden Schleife, ob auf dem @snapshot Verzeichnis der NVR1218 neue Dateien abgelegt wurden. Ist dies der Fall, wird das php-Skript ausgeführt.
inotify löst den Befehl erst aus, nachdem eine neue Datei abgelegt wurde. Daher konnte der sleep(1); Eintrag im php-Skript entfernt werden.

Zum Abschluss habe ich mir noch eine Aufgabe in der Synology-Oberfläche angelegt. Dieses führt beim Hochfahren einfach nur das oben geschriebene bash Skript mit dem inotify Befehl aus. :)

Ich weiß, dass mein Vorgehen etwas merkwürdig erscheinen mag. Aber die NVR1218 hat einfach nicht den Funktionsumfang wie eine vollwertige DS. Daher habe ich ein wenig improvisieren müssen. Uns es funktioniert!

Vielleicht sucht irgendwann noch jemand mit einer NVR1218 nach der Möglichkeit, sich Nachrichten per Telegram schicken zu lassen und stößt auf diesen Beitrag.


LG
Pascal
 

c0smo

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
08. Mai 2015
Beiträge
7.572
Punkte für Reaktionen
1.682
Punkte
274
Danke dafür!
Ich frage mich allerdings wo der Nutzen oder Mehrwert ist? Was spricht gegen Push oder Mails?
 
Zuletzt bearbeitet:

Calle

Benutzer
Mitglied seit
30. Jan 2013
Beiträge
104
Punkte für Reaktionen
4
Punkte
18
Gegen Push und E-Mail spricht die Geschwindigkeit. Gerade E-Mail zu träge. Auch die DS cam App ist sehr verbesserungswürdig. Die Benachrichtigung via Telegram hat den WAF bei mir zu Hause ziemlich erhöht. Weil es einfach, simpel und schnell ist. Die DS cam App muss sich regelmäßig erst einloggen, die Kamera aufrufen, den Videoschnipsel finden und dann abspielen.

Ich habe vor das Script noch zu erweitern, sodass nicht nur die Snapshots geschickt werden, sondern auch kurze Videoschnipsel, die ich erstellen lasse, wenn eine Bewegung erkannt wurde. Wenn das läuft, dann sind wir gar nicht mehr auf die DS cam App angewiesen.
 

c0smo

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
08. Mai 2015
Beiträge
7.572
Punkte für Reaktionen
1.682
Punkte
274
Dann ist aber irgendetwas faul bei dir. Push in DS Cam bekomme ich innerhalb von max. 5 Sek nach Auslöseereignis.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat