Surveillance Station Benachrichtigung bei Bewegungserkennung

Joezi

Benutzer
Mitglied seit
15. Jan 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo Zusammen, ich habe zwei Kameras eingebunden. Bei Beiden ist die Bewegungserkennung aktiviert. Nun würde ich mich gerne per SMS benachrichtigen lassen, wenn bei der zweiten Kamera (innen) eine Bewegung erkannt wurde. Leider kann ich eine Mail- oder SMS-Benachrichtigung nur für beide Kameras aktivieren. Weiß jemand, wie man es hinbekommt, dass man sich nur bei einer Kamera benachrichtigen lassen kann?
Weiterhin würde ich gerne wissen, wann denn "Custom Notifications" möglich sind? Momentan kann man z.B. nur Schnappsschüsse machen sobald eine Bewegung erkannt wurde. Ich würde aber gerne ein Skript starten. Das scheint im Moment nicht möglich zu sein, oder irre ich mich?

Ich war wirklich am überlegen, mir eine Lizenz für eine dritte Kamera zuzulegen. Mit der eingeschränkten Funktionalität werde ich dieses jedoch nicht tun.
 

loetlampe

Benutzer
Mitglied seit
25. Okt 2013
Beiträge
121
Punkte für Reaktionen
1
Punkte
18
Moin Joezi,

du kannst natürlich genau einstellen, wann du von welcher Kamera eine Bnachrichtigung erhalten möchtest oder eben nicht. Dazu in der Surveillance Station auf "Notification" oder "Benachrichtigung" gehen,
dann auf "Settings" oder "Einstellungen" und dann auf den Eintrag "Motion detection" oder "Bewegungserkennung". Diesen Eintrag auswählen und dann links oben im Dropdownmenü "Edit Schedule" "Edit" oder "Bearbeiten" klicken. Dann kannst du für jede Kamera einzeln die Zeiten auswählen, in denen Benachrichtigt werden soll.

motion.jpg
 

Joezi

Benutzer
Mitglied seit
15. Jan 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo Lötlampe,

vielen lieben Dank für den Hinweis. Nun bin ich schon etwas zufriedener mit der Surveillance Station. Hast Du vielleicht noch einen Tipp, wie man bei Bewegungserkennung ein Skript oder ähnliches starten kann? Bei Custom Actions ist man ja schon sehr eingeschränkt.
 

loetlampe

Benutzer
Mitglied seit
25. Okt 2013
Beiträge
121
Punkte für Reaktionen
1
Punkte
18
Nabend Joezi,

mit getriggerten Scripten durch Bewegungserkennung habe ich persönlich noch keine Erfahrung gemacht, evtl sagst du mal was du genau vor hast, vielleicht findet sich ja dann jemand, der dir da weiter helfen kann.
 

Joezi

Benutzer
Mitglied seit
15. Jan 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Ich würde gerne bei Bewegungserkennung eine HTTP-Adresse aufrufen. Das könnte man z.B. über ein PHP Skript oder ein Perl-Skript realisieren.
 

alexbeer

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Hallo,

ich bin auch gerade dabei, dass meine Surveillance Station mir nicht eine SMS bei Bewegung, sondern via Telegram eine Nachricht sendet. Mit der Anleitung https://forum.synology.com/enu/viewtopic.php?t=130630 funktioniert das auch schon.
Ich möchte jedoch nicht nur informiert werden, dass eine Bewegung erkannt wurde, sondern gleich auch noch das Bild bekommen - dazu folgender Ansatz:

Das php-Skript müsstest du wie folgt anstoßen können:
1. Surveillance-Station --> App "Aktionsregel"
2. Tab "Information"
Name: Ereignis
Regeltyp: ausgelöst
Aktionstyp: unterbrechenbar
3. Tab "Ereignis"
Ereignisquelle: Kamera
Gerät: Kamera #1
Ereignis: Bewegung entdeckt
Auslöstertyp: konstant
4. Tab "Aktion"
Aktionsgerät: Externes Gerät
URL: XXX.YYY.zzz
User / Pass: Optional
ss_http_event.png

Vielleicht können wir dieses PHP Skript hier gemeinsam entwickeln - ich scheitere zumindest daran.

Folgende Idee.
Rich (BBCode):
//1. Letzten Snapshot holen
// per php scandir das Verzeichnis volume1/surveillance/@Snapshot/ auslesen und absteigend sortieren in array schreiben
// in array[0] steht letzter Snapshot

//2. Snapshot per Telegram versenden
// Telegram Konstanten $chat_id und $token definieren
// curl -F chat_id="<chat_id>" -F document=@"path/to/some.file" https://api.telegram.org/bot<token>/sendDocument
Ich scheitere leider schon an 1. - ich vermute, dass das php scandir mit dem @-Sonderzeichen nicht umgehen kann...

VG Alex
 

Joezi

Benutzer
Mitglied seit
15. Jan 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo Alex,

zunächst mal vielen Dank für deine Informationen. Die Seite mit den Infos zu Telegram Bot Notification war mir noch nicht bekannt.

Ich habe die Entwicklung eines PHP-Skriptes bei mir auf dem Zettel. Momentan komme ich jedoch noch nicht dazu. Sobald ich aber etwas Brauchbares habe, werde ich es hier einstellen. Wir können es somit gerne zusammenentwickeln.

Gruß
Joezi
 

Joezi

Benutzer
Mitglied seit
15. Jan 2018
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Zu 1) Das sollte eigentlich relativ leicht umzusetzen sein:


<?php
$dir = '/volume1/surveillance/@Snapshot/';
//aufsteigend
$files1 = scandir($dir);
//absteigend
$files2 = scandir($dir, 1);

print_r($files1);
print_r($files2);
?>
 

alexbeer

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Hi,

danke - das funktioniert schon mal.

Mit
Rich (BBCode):
// letztes Snapshot - Foto 
$file = $dir . $files2[0];
habe ich den letzten Snapshot im Zugriff.

Jetzt muss "nur" noch per CURL die URL für sendPhoto aufgerufen werden.
Ich habe versucht dies von https://www.domoticz.com/forum/viewtopic.php?p=95324&sid=d4e57f95ece82db65d9b2186c6a9a0c1#p95324 zu kopieren.
Aber es kommt noch nichts an.
Als $Chat_ID habe ich den Wert gesetzt, den ich aus der Telegram-Gruppe, der mein Bot zugeordnet ist, per Befehl
Code:
 /getID
erhalten habe - also im Format 123456789.
Code:
<?php
/**
 * Notification MEssage Sending including photo via telegram
 * 
 * idea copied from:
 * https://www.domoticz.com/forum/viewtopic.php?p=95324&sid=d4e57f95ece82db65d9b2186c6a9a0c1#p95324 und
* https://stackoverflow.com/questions/32296272/telegram-bot-api-how-to-send-a-photo-using-php/32457290#32457290
 *
 **/
 
$dir = '/volume1/surveillance/@Snapshot/';

//absteigend sortieren
$files2 = scandir($dir, 1);

// letztes Snapshot - Foto 
$file = $dir . $files2[0];

 
$chat_id=-123456789;
$bot_url    = "https://api.telegram.org/bot987654321:ABCDk-4nO2y1BMqDsL31wU94MrFaYfa-ABC/";
$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"     => "@path/to/image.png", 
      "photo"  	=> $file,
)); 
// curl_setopt($ch, CURLOPT_INFILESIZE, filesize("path/to/image.png"));
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));
$output = curl_exec($ch);
print$output;
?>

Irgendetwas mache ich aber noch falsch - als Rückmeldung bekomme ich
Code:
 {"ok":false,"error_code":400,"description":"Bad Request: URL host is empty"}
Was die Ursache für den Fehler ist, versteh ich noch nicht ganz - ich vermute, dass es das @ im Pfad zum Bild ist.

Das wäre schon cool, wenn das läuft.

VG Alex
 
Zuletzt bearbeitet:

alexbeer

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Hallo,

ich habe das jetzt rudimentär am Laufen - mit folgendem Code bekomme ich den letzten Snapshot der Synology SS per Telegram als jpg an meinen Bot gepushed.
Da der PHP Code nur per Copy & Paste zusammenkopiert ist, ist er definitiv zu optimieren.
Ich teste das dann auch gerne ;-)

PHP:
<?php
/**
 * Telegram Notification of latest Surveillance Snapshot
 * 
 * idea copied from:
 * [url]https://www.domoticz.com/forum/viewtopic.php?p=95324&sid=d4e57f95ece82db65d9b2186c6a9a0c1#p95324[/url]
 * [url]https://stackoverflow.com/questions/32296272/telegram-bot-api-how-to-send-a-photo-using-php/32457290#32457290[/url]
 * [url]https://core.telegram.org/bots/api#sendphoto[/url]
 *
 * Setup of telegram bot:  [url]https://forum.synology.com/enu/viewtopic.php?t=130630[/url]  
 * @ author: alexbeer
 **/
 
$dir = '/volume1/surveillance/@Snapshot/';

//absteigend
// @TODO: Sortierung muss über CreateDate erfolgen, da folgende Logik nur bei einer Kamera funktioniert!
$files2 = scandir($dir, 1);

// letztes Snapshot - Foto - normalerweise Element 0 - habe da aber noch Dateileichen.
$file = $dir . $files2[0];

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


	
// Telegram Parameter;
$chat_id=-987654321; //groupID

$bot_url    = "https://api.telegram.org/bot123456789:AABCk-4nO2y1BMqXsL31wU87MrFaZfa-ABC/";
$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/web/telegram/snapshot.jpg")),
	"caption" => $files2[0]
)); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("snapshot.jpg"));
$output = curl_exec($ch);
print $output;

?>

VG Alex
 

4r7ur

Benutzer
Mitglied seit
23. Mai 2016
Beiträge
33
Punkte für Reaktionen
3
Punkte
8
Interessanter Thread :)

Die Aktionsregel, die die Snapshots erstellen funktionieren bei mir. Das Skript aus dem letzten Post auch, wenn ich auf der Konsole
> php /volume1/web/BildAnTelegramGarten.php
eingebe, wird ein Bild (leider nicht das letzte, aber das ist gerade nicht mein Problem) an meine Gruppe geschickt.

Leider bekomme ich die Aktionsregel, die das Skript starten soll nicht zum Laufen:
telegram.JPG

Die Webstation ist installiert und funktioniert.
Was muss denn bei Url eingetragen werden? Und muss ich hier Benutzername und Passwort eingeben?
 

4r7ur

Benutzer
Mitglied seit
23. Mai 2016
Beiträge
33
Punkte für Reaktionen
3
Punkte
8
Hallo,

Versuch doch mal die IP 127.0.0.1 durch die korrekte der DiskStation zu ersetzen.

Hallo Alex,
das hatte ich auch schon erfolglos probiert. Auch wenn ich Benutzername & PW eingebe, oder statt der url das Verzeichnis mit /volume1/... verwende. Ich hatte auch schon einmal die Web-Station komplett deinstalliert und wieder neu installiert, leider hat das nichts gebracht. Leider findet sich auch nirgends ein Protokoll mit einer Fehlermeldung.

Viele Grüße,
Artur
 

4r7ur

Benutzer
Mitglied seit
23. Mai 2016
Beiträge
33
Punkte für Reaktionen
3
Punkte
8
Hallo Alex,
das hatte ich auch schon erfolglos probiert.

Leider kann ich meinen Beitrag nicht mehr editieren. Ich habe heute Morgen die Ursache meines Problems gefunden. In den Einstellungen der Web Station muss man bei PHP in den erweiterten Einstellungen explizit die Erweiterungen aktivieren.:rolleyes:

Jetzt bin ich auf Deine Korrekturen gespannt. Ich habe 2 Kameras, von denen die Schnappschüsse im gleichen Verzeichnis "@Snapshot" landen - leider kann man das anscheinend nicht individuell einstellen. Eine Kamera speichert mit dem Filepattern "Garten...", die andere mit dem Pattern "Haustüre...". Dein Skript sendet im Moment immer das letzte File mit dem Pattern "Haustüre" an Telegram, auch wenn in "@Snapshot" neuere Dateien mit dem Pattern "Garten" vorliegen.
[Edit: :eek: klar, ich habe das eben mit der absteigenden Sortierung ausprobiert. Erst kommen bei absteigend alle files, die mit "H" beginnen, dann die mit "G"... Das hat erst einmal nichts mit dem Timestamp zu tun]
 
Zuletzt bearbeitet:

4r7ur

Benutzer
Mitglied seit
23. Mai 2016
Beiträge
33
Punkte für Reaktionen
3
Punkte
8
ich habe jetzt eine Lösung gefunden, wie im Snapshot-Verzeichnis die Datei mit den neusten Änderungsdatum ermittelt werden kann:

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

chdir($dir);
array_multisort(array_map('filemtime', ($files = glob("*.{jpg,png}", GLOB_BRACE))), SORT_DESC, $files);
$file = $dir . $files[0];
chdir('/volume1/web');

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

alexbeer

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Hi,

Ich nutze derzeit folgendes :
Code:
<?php
/**
 * Notification Message Sending including photo via telegram
 * 
 * idea copied from:
 * https://www.domoticz.com/forum/viewtopic.php?p=95324&sid=d4e57f95ece82db65d9b2186c6a9a0c1#p95324
 * https://stackoverflow.com/questions/32296272/telegram-bot-api-how-to-send-a-photo-using-php/32457290#32457290
 * https://core.telegram.org/bots/api#sendphoto
 * @ author: alexbeer
 **/
 
$dir = '/volume1/surveillance/@Snapshot/';

// warten bis Snapshot abgelegt ist
sleep(1);

// Sortierung nach letztem Änderungsdatum
$files = array();
if ($handle = opendir($dir)) {
    while (false !== ($filesorted = readdir($handle))) {
        if ($filesorted != "." && $filesorted != "..") {
           $files[filemtime($filesorted)] = $filesorted;
        }
    }
    closedir($handle);

    // sort
    ksort($files);
    // find the last modification
    $reallyLastModified = end($files);

    foreach($files as $filesorted) {
        $lastModified = date('F d Y, H:i:s',filemtime($filesorted));
        if(strlen($filesorted)-strpos($filesorted,".jpg")== 4){
           if ($filesorted == $reallyLastModified) {
             // do stuff for the real last modified file
           }
           // echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$filesorted\" target=\"_blank\">$filesorted</a></td><td>$lastModified</td></tr>";
        }
    }
}

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


// Snapshot aus Surveillance station in Ordner Web/... kopieren
$newfile = '/volume1/web/telegram/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/bot987654321:BBCCD-fyYgxFgyYgvYzjbUjnc-COQ/";
$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/web/telegram/snapshot.jpg")),
	"caption" => $filesorted
)); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize("snapshot.jpg"));
$output = curl_exec($ch);
print $output;

?>

Ich bin definitiv kein Entwickler und habe das alles nur zusammenkopiert.
Vielleicht sammeln wir einfach Mal Anforderungen und versuchen das ganze nach und nach zu erweitern.

Die Unterscheidung der unterschiedliche Kameras könnte man ggf über den Vergleich per Teilstring (zB http://php.net/manual/en/function.preg-match.php) realisieren.
 

hrvy

Benutzer
Mitglied seit
18. Apr 2018
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
Ich habe das Script etwas vereinfacht. In die Variablen $chat_id und $bot_id müssen noch die korrekten Werte eingetragen werden. Evtl. muss noch die Variable $dir angepasst werden und der Pfad in den PHP-Einstellungen unter open_basedir eingetragen werden.
Code:
<?php
/**https://www.domoticz.com/forum/viewtopic.php?p=95324&sid=d4e57f95ece82db65d9b2186c6a9a0c1#p95324
 * https://stackoverflow.com/questions/32296272/telegram-bot-api-how-to-send-a-photo-using-php/32457290#32457290
 * https://core.telegram.org/bots/api#sendphoto
 * @ author: alexbeer
 **/

// warten bis Snapshot abgelegt ist
sleep(1); 

$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;

// Telegram Parameter;
$chat_id=-CHATID;
$bot_id = 'BOTID';

$bot_url    = "https://api.telegram.org/".$bot_id."/";
$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($file)),
	"caption" => "Kamera hat Bewegung erkannt - " . date("d.m.Y - H:i:s")
)); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));
$output = curl_exec($ch);
print $output;

?>
 

4r7ur

Benutzer
Mitglied seit
23. Mai 2016
Beiträge
33
Punkte für Reaktionen
3
Punkte
8
@hrvy: schade, ich habe Deine Antwort erst gesehen, nachdem ich die alte Version meines Skripts umgebaut hatte. Das sieht auf jeden Fall aufgeräumter aus, leidr habe ich jetzt gerade keine Zeit mehr, das zu integrieren.

Um unterschiedliche Kameras voneinander unabhängig laufen zu lassen, muss man für jede Kamera eine eigene Aktionsregel definieren, die ihr eigenes Push Skript ausführt. Im Skript selbst kann man aus dem Snapshot Verzeichnis die Dateien z.B. für die Kamera "Garten" wie folgt filtern:

Rich (BBCode):
// Sortierung aller Garten-Bilder im Snapshot-Verzeichnis nach letztem Änderungsdatum 
$dir = '/volume1/surveillance/@Snapshot/';
chdir($dir);
array_multisort(array_map('filemtime', ($files = glob("Garten*.{jpg,png}", GLOB_BRACE))), SORT_DESC, $files);

// neustes 'Garten'-Bild ermitteln
$file = $dir . $files[0];
//print $file;

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

Bei mir musste ich noch in der Zeile mit "CURLOPT_POSTFIELDS" den Pfad für Garten anpassen. So gibt es für Jede Kamera ein php Skript, dass die Bilder in das eigene temporäre Verzeichnis kopiert. Damit sollte der - zugegebenermaßen seltene - Effekt nicht mehr auftreten, dass beide Kameras ein Ereignis auslösen und nur ein Bild verschickt wird.
 

alexbeer

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
In den Medien habe ich gesehen, dass u.a. diverse Behörden https://aws.amazon.com/de/rekognition/ zur Auswertung ihrer Überwachungsbilder verwenden.

Ob es zweckmäßig ist, mag ich nicht beurteilen - reizvoll finde ich es dennoch, um zB gezielt über Paketanlieferung en benachrichtigt zu werden...

Noch jmd Interesse?
 

alexbeer

Benutzer
Mitglied seit
06. Jan 2013
Beiträge
13
Punkte für Reaktionen
0
Punkte
1
Habe das Mal spontan getestet.
Folgende Antwort liefert mir der AWS Service:
Response
{
"Labels": [
{
"Name": "Human",
"Confidence": 99.11570739746094
},
{
"Name": "People",
"Confidence": 99.11569213867188
},
{
"Name": "Person",
"Confidence": 99.11570739746094
},
{
"Name": "Asphalt",
"Confidence": 50.841609954833984
},
{
"Name": "Tarmac",
"Confidence": 50.841609954833984
},
{
"Name": "Leisure Activities",
"Confidence": 50.58249282836914
},
{
"Name": "Scooter",
"Confidence": 50.502235412597656
},
{
"Name": "Transportation",
"Confidence": 50.502235412597656
},
{
"Name": "Vehicle",
"Confidence": 50.502235412597656
}
],
"OrientationCorrection": "ROTATE_0"
}
Das ist mir (noch) zu wenig aussagekräftig.
 


 

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