Surveillance Station + Telegram

Il faut ajouter le code des commandes dans surveillanceStation.class.php :
dans la section « Méthodes d’instance », juste après le code commenté commençant par $cmd = $this->getCmd(‹ action ›, ‹ snapshotsend ›);

Puis ajouter le code derrière l’action dans la section « Getteur Setteur » juste après le code commenté commençant par if ($this->getLogicalId() == ‹ snapshotsend ›) {

Ensuite, il faut aller dans Jeedom->Plugins->Sécurité->Surveillance Station et cliquer sur « Synchronisation ». Cela va récréer une commande « Envoi instantané » et une info « URL instantané » dans la liste des commandes de vos caméras que vous pouvez alors utiliser dans vos scénarios

Par exemple (ici avec Discord mais ça fonctionne pareil avec Télégram) :

Bonjour,

J’ai suivis tes indications et j’ai eu un « 500 : Internal Server Error » au moment de la synchronisation.

Dans la section « Getteur Setteur » il n’y avait pas le code commenté commençant par if ($this->getLogicalId() == ‹ snapshotsend ›) {. Il n’y avait aucun code commanté du tout d’ailleurs.

Peux-tu m’aider?

Il n’est pas nécessaire que le code ajouté soit exactement après celui qui (chez moi) est commenté. Ci-joint le code de surveillanceStation.class.php (rennommé en .txt pour qu’il puisse être joint ici) surveillanceStation.class.txt (54,6 Ko)

Essaie avec celui-ci…

Je comprends que ce code est utilisé pour envoyer un instantané, mais y a-t-il une possibilité qu’il envoie une vidéo d’une certaine heure?

Ok merci pour ton aide, j’ai réussi, je n’avais pas ajouté la seconde partie au bon endroit…

Ca marche bien, je recoit un snapshot avec le lien. Savez-vous si cette fonctionnalité fonctionnera toujours si je passe ma connexion dans le plugin en LAN?

Bonjour,
je viens de découvrir cette mise à jour. Merci pour l’évolution envoi snapshot. :clap:

J’en profite pour interconnecté un post que j’ai ouvert en décembre :

Je suis habitué sous telegram à recevoir les photos directement, plutôt qu’un lien. J’ai trouvé une bidouille pour le faire, mais cela ne marche plus en cas de reboot du synology.
Si quelqu’un a une idée je suis preneur.

Merci pour votre travail.

Aknot

Hello,

J’ai commencé à faire une PR pour pouvoir télécharger sur le jeedom, temporairement, un snapshot ou même une videos de quelques secondes.
L’objectif étant de pouvoir envoyé directement l’image ou la video et non pas un lien (dans mon cas le Syno n’est pas accessible d’internet).

Mais au passage, j’en profite pour revoir un peu les historiques de v3 pour le mettre vraiment au gout du jour v4.
Du coup je me demandais l’interet d’avoir 2 commandes :

  • snapshot
  • snapshotsend
    Vu que les 2 génère un snapshot mais que seule la seconde génère le lien ou trouver le snbapshot sur le syno pour la stocker dans la commande info snapshotsendURL, ce serait pas mieux d’avoir que la commande snapshot qui stocke systématiquement l’URL aussi ?

Ainsi ca permettrait de faire des scénarios par exemple, qui quand manuellement on fait un snapshot par Jeedom (sur le panel ou le widget par exemple) donc via la commande snapshot, ca permet d’updater la commande snapshotsendURL et si le scénario écoute les changement sur snapshotsendURL, il envoi automatiquement le message.
Enfin bref, je trouve que 2 commandes pour générer un snapshot peut perturber les utilisateurs (en tout cas moi il m’a fallu lire le code pour comprendre la diff) alors qu’une seule (snapshot) mais qui fait ce que fait (snapshotsend) serait suffisant et plus clair.

Je suis preneur de votre vision

Salut, où en es-tu du dévelloppement de l’envoie d’un snap direct plutôt qu’un lien?

Bonjour,

J’ai fait pour les screenshot mais j’essaye d’intégrer la récupération de video de quelques minutes aussi mais j’arrive pas à trouver un EndPoint API qui me le permette.

C’est déjà super pour les screenshot, du coup tu vas faire une maj?

Je ferais une PR mais cela fera une MaJ que lorsque l’auteur acceptera la PR.

Ah je croyais que c’était toi le développeur.

Hello
Vous n’êtes pas obligé de modifier le plugin … vous pouvez tout gérer par un scénario … enregistrement sur le jeedom d’une snapshot à partir d’une url …et si vous voulez vous pouvez prendre plein de snap et faire une vidéo et apres l’envoyer avec le canal que vous souhaitez …dans l’exemple ci-dessous via jeedomConnect

function sendvideo($scenario,$message) {
	$date = new DateTime();
    $dateMef=$date->format('Y-m-d H:i:s');

    //Build video from snapshot
    $filePath='/var/www/html/snapshots/records/';
    $fileName='_snap_record_Garage.jpg';
    $scenario->setLog($filePath.'temp');
    $scenario->setLog(str_pad($nb, 8, '0', STR_PAD_LEFT).$fileName);

    $startTime=strtotime("now");
    $endTime=$startTime+30;
    $nb=0;
    $nbSnapshot=30;
    //while ( strtotime("now") <= $endTime) {
    while ($nb <= $nbSnapshot) {
      $scenario->setLog(strtotime("now") .'| endtime : ' . $endTime);
      commonsFunction::get_file($scenario,'http://192.168.1.135:8765/picture/1/current/',$filePath.'/temp/',str_pad($nb++, 8, '0', STR_PAD_LEFT).$fileName);
      sleep(1);
    }

    if (file_exists($filePath.'/temp/')) {
      $output_file = 'buildVideo' . '_' . date('Y-m-d_H-i-s') . '.mp4';
      $files = scandir($filePath.'/temp/');
      if (count($files) > 1) {
        //$first_number = substr($files[2], 0, 6);
        $first_number = substr($files[2], 0, 1);
        $start = '-start_number ' . $first_number . ' ';
      }


      $framerate="1";
      $engine = config::byKey('rtsp::engine','camera','avconv');
      $scenario->setLog('engine : ' .$engine);
      $scenario->setLog('Start : ' . $start);
      $shellCmd=$engine.' -framerate ' . $framerate . ' ' . $start . ' -f image2 -i ' . $filePath .'temp/' . '%08d' . '_snap_record_Garage.jpg -pix_fmt yuv420p ' . '/var/www/html/snapshots/records/' .$output_file;
      $scenario->setLog($shellCmd);
      $result=shell_exec($shellCmd);
      notificationFunction::sendJeedomConnectMessage($scenario,'chris','Notif_Camera','/var/www/html/snapshots/records/' .$output_file,'Camera Garage Motion eye : '. $dateMef,$message);
      shell_exec(system::getCmdSudo() . 'rm -rf ' . $filePath.'/temp/*.jpg');
    }
}

La fonction commonsFunction::get_file permet d’enregistrer l’image à partir d’une url

public function get_file($scenario,$file, $local_path, $newfilename) {
        $err_msg = ''; 
        
        $out = fopen($local_path.$newfilename,"wb");
      	//$scenario->setLog("Attempting message download for $file to $out"); 
        if ($out == FALSE){ 
          $scenario->setLog("File not opened<br>"); 
          exit; 
        } 

        $ch = curl_init(); 

        curl_setopt($ch, CURLOPT_FILE, $out); 
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        curl_setopt($ch, CURLOPT_URL, $file);
      	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

        curl_exec($ch); 
        //$scenario->setLog("Error is : ".curl_error($ch)); 

        curl_close($ch); 
    }
  

A ça il faut ajouter un pti script de purge des fichiers et le tour est joué … moi je fais une vidéo si une personne ouvre le garage et que l’alarme est activée… :slight_smile:

$scenario->setLog("Start script delete snapshots");

//31 jours
//$delta=2678400;
//16 jours
$delta=1382400;

//Delete videos
deleteFile($scenario,'/var/www/html/snapshots/records/',$delta);

$scenario->setLog(' ');

//delete snapshots
deleteFile($scenario,'/var/www/html/snapshots/',$delta);


function deleteFile($scenario,$path,$delta) {
	try {
      $nbDelete=0;
      $scenario->setLog('Function deleteFile : ' . $path . ' - delta : ' . $delta);
      $folder=new DirectoryIterator($path);
      $scenario->setLog('Path : ' . $path . ' -> esapce utilisé avant purge : ' . shell_exec('du -sh '. $path));
      foreach($folder as $file) {
        try {
          if($file->isFile() && !$file->isDot() && (time() - $file->getMTime() > $delta)) {
              unlink($path.$file->getFilename());
              $nbDelete++;
              $scenario->setLog("File : " . $file->getFilename()  . '| creation date : ' .  $file->getMTime() . '	==> deleted');
          }
        } catch (Exception $e) {
            $scenario->setLog('		=> Error on deleteFile function on a file : ' .  $e->getMessage());
        }
      }
      $scenario->setLog('	- Nb fichiers purgés : ' . $nbDelete);
      $scenario->setLog('Path : ' . $path . ' -> esapce utilisé après purge : ' . shell_exec('du -sh '. $path));
	} catch (Exception $e) {
    	$scenario->setLog('		=> Error on deleteFile function : ' .  $e->getMessage());
	}

}
$scenario->setLog("End script delete snapshots");

Avec ça peut importe le plugin vous etes en capacité de sauvegarder des snaps … de créer un ptite video et de l’envoyer

Si ça peut aider et que vous avez des soucis d’intégration hésitez pas par MP
@chris94440

Bonjour,

Oui je sais que je peux faire par scénario mais l’objectif est de faire évoluer le plugin pour lui permettre de l’intégrer nativement pour faciliter cette possibilité aux utilisateurs

5 « J'aime »

PR soumise au développeur : https://github.com/phifi92/surveillanceStation/pull/7

Phifi a integré la PR en beta pour ceux qui veulent tester.
Il suffit de configurer dans les options du plugin que l’on veut la capture dans Jeedom plutôt que Synology

Et pour le reste c’est comme avant.
La commande Instantané genere un snapshot et la commande URL instantané affiche soit l’URL de l’instantané dans Synology (si on a laissé l’option synology) soit le chemin dans l’arborescence du Jeedom (si on utilise l’option Jeedom)

1 « J'aime »

Ok super, je suis entrain de tester. Mais comment fait tu pour que l’image soit envoyé via Telegram? Parceque là je recois juste le chemin jeedom…

Je sais pas je suis sous Discord mais d’apres la doc je dirais avec l’option file

et au lieu de mettre le nom du fichier comme dans l’exemple tu met la commande ca devrait etre remplacé par le chemin complet de l’image

Effectivement, merci pour ton aide! Ca marche niquel :+1:

Pour donné un exemple de scénario concret à ceux que ca pourrait aider ( envoie d’un snap lorsque l’on sonne à ma porte) :

Hello,

je confirme, ça fonctionne nickel, merci à tous.
Par contre, a mon avis, le fonctionnement n’est pas terrible.
Quand tu as 10 cameras, ca te fait de suite des scenarios a rallonge.
Une évol est-elle prévue dans ce sens?