Bonjour,
edit : ce bout de code n’est finalement pas vraiment nécessaire …
j’y avais pourtant mis tout mon coeur !
cf la solution
préambule : le pourquoi
Je suis sur un pi 3b, et il y a quelques jours ma carte SD nous a quitté
J’ai donc été obligé de faire une réinstall toute belle toute propre, et j’avais heureusement une sauvegarde de mon instance jeedom que j’ai pu restaurer.
Tout s’est plutôt bien passé et j’ai retrouvé mes équipements sauf que …
… la restauration Jeedom ne restaure pas la passerelle et ses éléments sur la clé conbee ! J’avais bien réaliser à un moment donnée une sauvegarde mais elle datait de plusieurs semaines et je n’avais pas tous les derniers éléments dessus … j’ai donc du ré-intégrer certains équipements sur la clé Conbee (et c’est pénible!)
Je viens de faire un petit bout de code permettant de sauvegarder automatique la configuration et éléments de la passerelle Conbee.
Il est vrai que l’on n’intègre pas forcément de nouveaux équipements tous les jours, mais c’est quand même plus sympa quand un process auto fait le job à votre place sans avoir à s’en soucier(*)
Je vous partage donc ces quelques lignes si jamais ça peut servir à quelqu’un
Pré-requis :
- créer un répertoire de sauvegarde dédié, sous
/var/www/html/
de façon à ce que les sauvegarde jeedom prennent également celle-ci.
Ensuite il suffit de
- créer un scénario
- choisir un déclencheur programmé (à vous de définir : tous les jours, les semaines, …),
- ajouter un
bloc code
et coller le code qui suit - modifier les 2 premiers paramètres : le chemin où mettre les sauvegardes, et le nombre de sauvegarde qui vous semble intéressant de garder(*)
- sauvegarder
& enjoy
//~~~~~~~~~~~~~~~~~~~~~~~~
// Custom with your own data here only !
$path_for_backup='/var/www/html/backup_deconz';
$nb_backup_allowed = 10; //-1 if you dont want to make the check
//~~~~~~~~~~~~~~~~~~~~~~~~
//********
// deConZ path details
$deconz_path = '/root/.local/share/dresden-elektronik/deCONZ/';
$deconz_initial_name = 'deCONZ.tar.gz';
//********
if ( ! is_dir($path_for_backup) ){
$scenario->setLog(' ~~' .$path_for_backup . ' folder does NOT exist. Abort') ;
}
else{
$gateways = config::byKey('gateway', 'deCONZ') ;
$keys = array('id', 'name', 'internalipaddress', 'internalport', 'websocketport', 'apikey', 'manageTimeZone') ;
foreach($gateways as $gateway) {
$current_datetime = date("Ymd_His") ;
$scenario->setLog('***************************') ;
$scenario->setLog(' === New gateway conf ===') ;
foreach($keys as $key){
$scenario->setLog(' | ' . $key . ' : ' . $gateway[$key] ) ;
}
$scenario->setLog(' _________' );
$gateway_id = ($gateway['name'] ?: 'gatewayDefault') . '_' . ($gateway['id'] ?: '0000') ;
$scenario->setLog(' |** Manage backup for : ' . $gateway_id );
$url = 'http://' . $gateway['internalipaddress'] . ':' . $gateway['internalport'] . '/api/' . $gateway['apikey'] . '/config/export';
$scenario->setLog(' | url called : ' . $url );
$request = create_gateway_backup($url) ;
//$scenario->setLog(' | backup response ('.$request[0].') :' . $request[1] );
if ($request[0] == 200 ) {
$shell_output = shell_exec('sudo mv '. $deconz_path . $deconz_initial_name . ' ' . $path_for_backup . '/'. $current_datetime . '_backup_deconz_gateway_' . $gateway_id . '.tar.gz 2>&1; echo $?' );
if ( $shell_output != 0 ){
$scenario->setLog(' | ~~~ sheel output : ' . $shell_output );
message::add('Backup Gateway Deconz', 'Something went wrong for backup '. $gateway_id .'. Please check scenario logs' );
break;
}
$scenario->setLog(' | Backup successfully created for '. $gateway_id);
}
else {
$scenario->setLog(' | Something went wrong ... \n' . $request[1] );
message::add('Backup Gateway Deconz', 'Something went wrong for backup '. $gateway_id .'. Please check scenario logs' );
}
$scenario->setLog(' _________' );
}
//*****
// Check if the number of backups do not exceed the max allowed in $nb_backup_allowed
//*****
if ( $nb_backup_allowed > 0 ){
$shell_count_file = shell_exec('ls '. $path_for_backup . '/* | wc -l ' );
$bkp_count_file = str_replace(array("\n","\r","\r\n"),'', trim($shell_count_file)) ;
if ( $bkp_count_file > $nb_backup_allowed) {
$scenario->setLog('Clean-up required ! '. $bkp_count_file . ' backup(s) exist in ' . $path_for_backup );
message::add('Backup Gateway Deconz', 'Clean-up required ! '. $bkp_count_file . ' backup(s) exist in ' . $path_for_backup );
}
}
}
function create_gateway_backup($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$exec = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);
return array($httpcode, $exec);
}
(*) ou presque…
mes sauvegardes ne font que 10ko ! donc ca n’est vraiment pas très gros. Je n’ai pas voulu intégrer les suppressions automatique d’anciens fichiers (bien que ca soit faisable!), donc à la main pour le moment