[Tuto] Purger les captures de ses caméras par script paramétrable cam, fichier jour

Hello !

Je ne sais pas si nous sommes nombreux à utiliser cela mais bon…
Pour ceux qui avec le plugin caméra font des captures images, des vidéos, il faut parfois penser à purger sous peine de voir son disque dure se remplir.

C’est pourquoi je vous propose sans prétention un petit script.

1ere Etape
Avec l’éditeur de fichiers, allez voir dans le dossier plugins, camera, data, records
image

Chacun de ses dossiers est en fait le dossier d’enregistrement de chacune de vos caméras.
Le nom n’est pas mis au hasard, c’est l’ID de l’équipement Caméra.

C’est important de le noter car c’est cela qui vous permettra de purger le dossier concerné.

2eme Etape

Passons au script !
Pour cela, rendez vous dans le plugin, celui là au cas où #plugin-script#

Créé un équipement Script, appelons-le PurgeCamRecords
Créé une commande script de type action / défaut avec pour nom le nom de la caméra concernée
image

Vient ensuite le moment de créer un script. Donc vous cliquez sur l’icone avec le crayon
image
L’éditeur de fichiers vous a placé au bon endroit, à savoir dans plugins/script/data
La vous faites nouveau fichier
image
Vous choisissez bien SH Shell !!
image
Vous lui donnez un nom moi c’est visible sur la capture ci dessous
image

Vous copiez le code suivant

PATHFILES="/var/www/html/plugins/camera/data/records/"$1
REGEXNAME=$2
NBJOURS=$3

find $PATHFILES/$REGEXNAME -type f -mtime $NBJOURS -exec rm -f {} \;

Vous sauvegardez et fermez ! et vous retournez sur votre script et à l’aide de l’icone ‹ folder › vous allez chercher votre script .sh

Auquel il faut passer des paramétres, comme vous le voyez sur la capture.
1er : 335 chez moi : ID de la caméra concernée
2eme *.jpg type de fichier à supprimer
3eme +7 correspond a 7j donc cela va effacer tous fichier jpg de plus de 7 jours dans le dossier 335 qui correspond au dossier de la caméra que je veux purger

Vous faites ainsi une commande par caméra, vous copiez coller la commande en changeant ID, et rétention si vous voulez

Vous pouvez à présent créer un scénario, programmé tous les 7 jours qui appellent ces commandes script et voilà votre purge images capturées est en place.

ATTENTION, c’est du rm -f donc suppression sans demande ou autre de validation !

Je ne serai pas responsable si vous recopiez mal un truc et que vous effacez des mauvais fichiers !

Enjoy :beers:

Pour ceux qui veulent aller plus loin …

Par exemple via scénario pouvoir appeler le script et choisir des périodes de jours dans une liste !

Lors de l’action dans le scénario vous aurez ce choix

On peut également aussi jouer avec les tags ! afin de tout passer depuis le scénario comme le type de fichier *.jpg le numéro de camera etc…

Donc une seule commande script

Par contre dans le scénario un peu plus de boulot lol

Donc dans message vous passé bien IDCam Filetype et Retention

!! rétention 0 = ca efface même les fichiers du jours.
sinon c’est +1 +7 +90 +ce que vous voulez

ou peut même faire du -90 : la ca garde les fichiers plus vieux de 90jours par exemple

Bon voilà, je pense avoir fait le tour.
Certains vont même peut être découvrir le select, le type message etc…

Dernière précision, si aucu fichier *.jpg n’est trouvé, le log du scénario a une erreur. Mais bon perso ça me gène pas et je ne la gère pas lol

Mais si quelqu’un veut améliorer le script bash pour tester présence de fichier avant delete…
Il est le bienvenu

1 « J'aime »

Salut @anon53349806 ,
sinon dans la configuration du plugin tu peux mettre la taille maximum que tu veux sauvegarder…

Oui je sais mais ce n’est pas dans ce but que j’ai créé le tuto.

12 cameras, pas de souci de place, juste pour moi cnil et suppression par rapport à la date de record.

Donc oui le plugin permet de limiter la taille du dossier, néanmoins pour une taille non atteinte, il n’y a pas de moyen de purger des fichiers plus vieux de x jours. Or c’était bien le besoin à la base. Et comme je ne peux prédire la quantité de captures à l’avance ce script sans prétention réponds à mes attentes.

De plus ça peut aider des newbies à découvrir des certaines choses, enfin pour ceux qui sont un peu curieux.

:beers:

C’est vrai que purger par date pourrait être une amélioration pas mal du #plugin-camera !

1 « J'aime »

Bon j’ai amélioré le script bash afin d’éviter des erreurs si dossier inexistant ou fichiers inexistants.
Avec en plus retour état dans Jeedom :wink:

Le retour d’état via plugin-script est pas possible sur un script action message
Donc j’ai fait autrement, l’idée m’a été soufflé par @Phpvarious :beers:

Voilà le code

#!/bin/bash

# V2 23/04/2023

#Variable contenant le nombre d'arguments attendus
ARGATTENDU=3;
VALUE=0 ;

#Teste du nombre d'arguments passés
if [ $# -eq $ARGATTENDU ]; then
   #Assignation des arguments à des variables
   PATHFILES="/var/www/html/plugins/camera/data/records/"$1
   REGEXNAME=$2
   #Test du nbre de jours. Si +0 qui est interdit dans la commande on met 0
   if [ $3 == "+0" ]; then
    NBJOURS="0";
   else
   NBJOURS=$3;
   fi
   #On teste l'existance du répertoire
   if [ -d $PATHFILES ]; then
    #echo "Le dossier existe";
    #On teste existance fichier
    if find $PATHFILES/$REGEXNAME -maxdepth 1 -type f -mtime $NBJOURS 2> /dev/null |grep -q "jpg"; then
      #echo "Fichiers "$2" trouvés";
      # En supprimant le # dans la ligne ci-dessous le scipt va effacer vos fichiers
      # C'est en commentaire volontairement !
      # Si la sortie de script vaut 1 c'est que tout est OK si pas y a un souci
      # Souci à voir dans les différents lignes echo ci dessous.
      # Recherche & Suppresion selon les arguments passés
      # En supprimant le # dans la ligne ci-dessous le script va effacer vos fichiers
      find $PATHFILES/$REGEXNAME -type f -mtime $NBJOURS -exec rm -f {} \;
      #$? est le Exit Status de la dernière commande exécutée. Donc  celle du dessus qui supprime
      VALUE=$?;
    else
      #echo "Pas de fichier "$2" à effacer plus vieux de "$NBJOURS" jours";
      VALUE=2;
    fi
   else
   #echo "Dossier "$PATHFILES" inexistant";
   VALUE=3;
   fi
else
#echo "Mauvais Nbre d'arguments "$#" au lieu de "$ARGATTENDU;
VALUE=4;
fi
#curl "http://$IP/core/api/jeeApi.php?apikey=$APIKEY&plugin=virtual&type=event&id=$ID&value="$VALUE ;

La dernière ligne du code est en fait le retour d’état, via API dans le cas présenté vers une info dans un virtuel type info numérique
Donc je gère le retour état
0 c’est OK
1 y a eu un souci avec la commande de suppression.
2 Pas de fichiers à effacer
3 Dossier passé en paramètre inexistant
4 Nombre d’argument passé au script mauvais !
A vous de faire un beau widget, je ne renvoie que du numérique

On aurait pu faire cela dans une info script type numérique aussi… Bref

Donc le plugin script ce que j’ai créé pour ce nouveau code, uniquement cela

Et le scénario

Avec dans la partie message #IDCam# #fileType# ensuite le chiffre de la rétention
#fileType# sous la forme *.jpg ou *.mov etc.
La rétention est en jour

C’est donc plus générique que la précédente version

Passons au retour d’état
Créé un virtuel avec un info de type numérique

En cliquant sur l’engrenage, allez récupérer ID de votre commande
image

Dans configuration jeedom allez récupérer la clé API du plugin virtuel

Dans le code du script sur la dernière ligne vous n’avez plus qu’à

#curl "http://$IP/core/api/jeeApi.php?apikey=$APIKEY&plugin=virtual&type=event&id=$ID&value="$VALUE ;

remplacer $IP par l’ip de votre jeedom
$APIKEY ben devinez par l’api du plugin virtuel
$ID par l’ID de votre commande info ca fera l’url pour mettre a jour par API

ATTENTION si vous ajoutez une info dans le plugin script il faut aussi changer l’info plugin dans l’url

NB: je n’ai qu’un retour d’état, donc si dans un scénario vous paramétrez pour enchainer la purge de toutes vos caméras, le statut aura tjrs la valeur retour de la dernière purgée…

Ou vs décallez vos purges, comme moi, ou vous implémentez un retour état basé sur le nom du dossier. Perso j’arrête la.

Voila, la dessus je vais boire un coup

1 « J'aime »

Bonsoir,

quelle est la règle de suppression quand on atteint la taille max paramétré ?
la suppression se fait par vétusté ? et par caméra ?

Ce post est un tuto sur un script.

Ce nest pas l’endroit a squatter pour une question qui n’a rien a voir avec ce script

Merci

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.