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