Salut, c’est Pierre-Yves. Aujourd’hui je vais vous montrer un scénario que j’ai mis en place chez moi afin d’avoir la liste des backups présent sur le serveur Samba. Le but étant de confirmer que le dernier job de backup s’est bien déroulé et que le backup est bien déposé sur le partage Samba défini dans Jeedom. Cela me permet aussi de confirmer que la rotation des backups est opérationnelle par la même occassion.
Le pourquoi
A un moment donné, mon backup SAMBA n’était plus actif. J’avais changer de stockage et oublié cette partie de la configuration Jeedom. Je me suis donc mis en quête d’obtenir une liste tous les jours après un backup Jeedom.
Lancer un scénario à la fin d’un backup n’a rien de compliqué, il existe un déclencheur pour ça. Récupérer la liste des backups distant m’a un peu plus occupé pour le coup. Je souhaitais récupérer la fonctionnalité qui liste les backups jeedom dans la page configuration. Après quelques recherches dans le code de Jeedom, j’ai enfin pu obtenir le résultat souhaité.
Le comment – Onglet Général
Voici l’onglet Général du scénario
On ajout donc un déclencheur et dans la case Evénement on saisit #end_backup# comme déclencheur. Cela permettra qu’à la fin de chaque backup le scénario soit lancé.
Cet événement permettra ainsi de savoir qu’un problème à eu lieu sur la sauvegarde si nous ne recevons pas le rapport par le moyen de communication choisit (telegram / mail / autre).
Je n’ai pas inventé ce déclencheur, il est présent dans la documentaiton des scénarios pour preuve :
Le comment – Onglet Scénario
Voici le contenu coté scénario.
- N’ayez pas peur, j’ai commenté les quelques lignes du bloc code PHP. Je ne pense pas qu’il soit nécessaire d’en dire plus que les commentaires qui sont dans la copie d’écran. Vous trouverez le contenu du bloc code un peu plus bas. Attention avec le copié/collé. Les guillemets et autres caractères de ce type sont souvent modifié lors d’un copié collé. Un passage par le bloc note en étape intermédiaire est conseillé.
- Envoi via telegram du message
- disable_notify=1 permet de ne pas avoir de notification sur votre téléphone juste pour ce message
- Vous pouvez mettre ce que vous voulez comme message, afin d’appeler la variable listeBackup il faut utiliser l’appel suivant : variable(listeBackup)
- Cette commande est informative, elle permet de rajouter dans le log du scénario des informations. C’est plus un tips pour la faire découvrir à ceux qui ne la connaîtrait pas, qu’un réel besoin.
// On ajoute le contenu du fichier samba.repo.php dans notre page actuelle afin de pouvoir utiliser son code
require_once(‘/var/www/html/core/repo/samba.repo.php’);$backup = new repo_samba; // On créé une instance de la classe repo_samba nommée $backup
$backupsliste = $backup->listeBackup(); // On appelle la fonction listeBackup de l’instance $backup de la classe repo_samba
$listingBackup = » »; // On vide la variable $listingBackup//Ensuite on parcoure chaque élément du tableau $backupsliste afin de rajouter un retour à la ligne à la fin de chaque élément du tableau.
// Le but étant d’obtenir un affiche plaisant sur telegram
foreach($backupsliste as $backupname){
$listingBackup .= $backupname . « \ »\n\ » »; // \n permet de rajouter un retour à la ligne
}
// On affecte le contenu de $listingBackup à la variable listeBackup que l’on appellera dans le message telegram ci-dessous
$scenario->setData(‘listeBackup’,$listingBackup);
Conclusion
Cet article n’est pas très long, mais je pense qu’il peut être utile et ainsi avoir une surveillance simple de l’état de ses sauvegardes. Les sauvegardes étant à mon sens très très importantes.
La partie bloc code PHP n’est pas forcément la plus digeste, mais parfois il faut en passer par là pour obtenir un scénario « court ».
35 commentaires
Super article, je vais le mettre en place ce week-end
Petit script fort sympa, attention toute fois au copier coller du code les simple cote et double cote sont a rectifier sans quoi le script ne fonctionnera pas.
J’adore l’idée, merci beaucoup.
2 erreurs pour moi à l’execution sur un Jeedom Smart :
1. syntax error, unexpected ‘var’ (T_VAR)
2. syntax error, unexpected ‘»’ (T_STRING)
Pour la 1, je pense que sur SMART il faut enlever le répertoire /var/
Pour la 2, aucune idée …
Merci pour vos retours.
Concernant la smart, je ne connais pas du tout ce produit, je n’ai pas les chemins en accès.
Pour ton point 2, c’est le copié collé qui pose problème.
Tu as du avoir des >> qui sont arrivés au lieu des »
remplace les >> ou << dans le bloc code PHP par des " et ça doit le faire
Merci pour ta réponse Pierre Yves.
Cette erreur apparait : unexpected ‘\’ (T_NS_SEPARATOR)
La ligne modifiée est : $listingBackup .= $backupname . » \ « \n\ » « ; // \n permet de rajouter un retour à la ligne
Je colle le code ici au cas ou :
require_once(‘/var/www/html/core/repo/samba.repo.php’);
$backup = new repo_samba;
$backupsliste = $backup->listeBackup();
$listingBackup = » »;
foreach($backupsliste as $backupname){
$listingBackup .= $backupname . « \ »\n\ » »;
}
$scenario->setData(‘listeBackup’,$listingBackup);
Si ça passe mieux
en commentaire ça remplace les » par les >> ou >>
Compare ton code avec le screenshot dans l’article tu va voir ou sont les » ou non dans le code
attention au copier/coller depuis le web ou word, il faut bien revérifier ou retaper les guillemets car le code PHP distingue tous les caractères
Merci ! Je teste ça ce week-end également. Il vaut toujours mieux être prudent avec les sauvegardes et s’assurer qu’elles sont bien réalisées : ton scénario va le permettre !
Pour ceux qui ne vois pas ou sont les erreur de guillement et de simple cote voici un pastebin avec la bonne syntaxe : https://pastebin.com/BGBqRGDQ
Très bonne idée le pastebin.
Il faudrait que j’y pense lors du prochain article avec du bloc code PHP (qui est pour bientôt d’ailleurs)
Pour l’érreur 1 : Réécrire les ‘
Pour l’érreur 2 : Remplacer les » par »
Les guillemets et autres caractères de ce type sont modifié lors d’un copié collé
Merci beaucoup pour l’idée. Bravo pour le partage
Merci pour cet article, pas mal 🙂
De rien, j’ai trouvé cela plus simple comme ça
Bonsoir ..
ceci est une très bonne idée ..adopter et valider
Merci.
Merci pour vos retours 😉 ça fait plaisir
Top Mis en place et fonctionnel !! Merci beaucoup
Merci beaucoup pour le partage, c’est désormais fonctionnel chez moi avec envoi SMS.
Super! Merci beaucoup pour ce tuto! Je viens de le mettre en place et ça fonctionne parfaitement (envoi par mail pour ma part mais c’est la seule différence).
Super. Merci. Ca fonctionne super bien, avec info par SMS audio avec Automate
Parfait
Merci pour ce tuto.
Est ce que qq1 connaîtrait un moyen d’ajouter la taille des fichiers svp ?
Bien à vous
Caelion
Après qq petites compléments pour avoir un retour sur l’exécution du backup .
Voir les lignes avec –>, et ne pas oublier d’ôter ces « –> », si vous voulez utiliser.
en tout cas grâce au scénario d’origine, encore merci Pierre-Yves.
// On ajoute le contenu du fichier samba.repo.php dans notre page actuelle afin de pouvoir utiliser son code
require_once(‘/var/www/html/core/repo/samba.repo.php’);
$backup = new repo_samba; // On créé une instance de la classe repo_samba nommée $backup
$backupsliste = $backup->listeBackup(); // On appelle la fonction listeBackup de l’instance $backup de la classe repo_samba
$listingBackup = » « ; // On vide la variable $listingBackup
–> $jour = date(« Y-m-d »); // récupération de la date du jour
–> $trouve = « non »; // initialisation de la variable
//Ensuite on parcoure chaque élément du tableau $backupsliste afin de rajouter un retour à la ligne à la fin de chaque élément du tableau.
// Le but étant d’obtenir un affiche plaisant sur telegram
foreach($backupsliste as $backupname){
–> $pos = strpos($backupname,$jour); // récupération de la position de départ de la date du jour
$listingBackup .= $backupname. « \n » ; // \n permet de rajouter un retour à la ligne
–>if ($pos > 0) {
–> $trouve = « oui »; // modification de la variable si la date a bien été trouvée
–> }
–>}
// On affecte le contenu de $listingBackup à la variable listeBackup que l’on appellera dans le message telegram ci-dessous
$scenario->setData(‘listeBackup’,$listingBackup);
–>// On affecte le contenu de $trouve à la variable « trouve » que l’on appellera dans le message
–>$scenario->setData(‘trouve’,$trouve);
Merci beaucoup pour le tuto. Çà fonctionne au top. Au plaisir de vous lire
D’après la documentation de telegram ( https://core.telegram.org/bots/api#sendmessage ), c’est disable_notification et non plus disable_notify le flag maintenant.
je ne sais pas si ça dépends du moment ou le bot a été créé ou pas.
Bonjour Charly,
La documentation c’est une chose, mais la on parle coté scénario jeedom.
La commande disable_notify aurait pu être nommé silence tant que dans le code du plugin telegram on fait un :
SI silence alors disable_notification
Je ne suis pas allé lire la doc coté telegram, mais ça fonctionne bien via un scénario et le plugin telegram jeedom
Constate tu des problèmes de fonctionnement chez toi ?
Pingback: Nas Synology Active Backup : Sauvegarder une machine virtuelle automatiquement - La Domotique de Sarakha63
Bonjour,
Je n’arrive pas à faire fonctionner le script (initial, celui du topic, pas le modifié à la fin).
J’ai bien fait attention aux guillemets et apostrophes (j’ai recopié celui du pastebin pour être sûr).
Voici le message d’erreur que j’ai :
[2019-01-30 10:58:38][SCENARIO] Start : Scenario lance manuellement.
[2019-01-30 10:58:38][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-01-30 10:58:38][SCENARIO] Exécution d’un bloc code
[2019-01-30 10:58:38][SCENARIO] Erreur dans l’exécution du terminal, la valeur retournée est : 1. Détails : Array
(
[0] =>
)
[2019-01-30 10:58:38][SCENARIO] Exécution du sous-élément de type [action] : action
[2019-01-30 10:58:38][SCENARIO] Fin correcte du scénario
Est-ce que quelqu’un aurait une idée SVP ?
Bonjour à tous
Depuis les mises à jour de mars de jeedom, ce script ne fonctionne plus. Est ce La cas chez vous également ?
Cordialement
Bonjour,
Effectivement, depuis le passage en 3.x j’ai droit à un message « Call to undefined method repo_samba::listeBackup() » et ça ne fonctionne plus du coup
J’ai décortiqué le code, puis le repo samba inclus dans le début du code et j’ai compris : la fonction a changé de nom et s’appelle maintenant « backup_list » au lieu de « listeBackup ».
Il faut donc remplacer la ligne :
$backupsliste = $backup->listeBackup();
par la ligne :
$backupsliste = $backup->backup_list();
dans le script du scénario et tout fonctionne de nouveau 🙂
Merci JF, pour le complément d’information et la recherche. Je teste ça maintenant
Bonne journée
Merci @JF-44, ça fonctionne a présent
Quel que soit le flag, je reçois quand même une notification sur le téléphone :/
Petite question a ceux qui excite ce code, vous avez aussi un nombre de fichiers différent du nombre réel ? Par exemple dans mon dossier backup j’ai 4 fichiers mais le script ne me retourne que 2 fichiers