comme confinement oblige , il a bien fallu que je m'occupe un peu
j'ai crée un petit script bash accompagné d'un fichier texte (fichier de paramètres) qui sert a modifier les ID des dispositifs de domoticz
a quoi ca sert ? ben a pas grand chose, a part aux maniaques de l'organisation
bref , si comme moi vous voulez changer les ID de certains de vos dispositifs sans vous prendre la tete ,rassembler tous les ids du même hardware , ou mettre tous les dummy avec des ID> 1000 , ce petit script est fait pour vous , (je ne suis pas le roi du script (c'est mon premier script en bash , mon but étant de le traduire en python prochainement pour ..... comme ca , je connais pas le python , ca m'entrainera
pour le script , créer un fichier dans votre home ou ou vous voulez en fait ..
Code : Tout sélectionner
nano nomduscript.shcoller ce bout de code (qui va faire tousser les puristes du code bash , mais bon
Code : Tout sélectionner
#!/bin/bash
if [ -e "fichier_param.txt" ];then #verification si le fichier de parametres existe
if [ "$#" != "1" ] ; then
echo "******************************************************"
echo "Attention ,il manque le chemin de la bdd en parametres du script "
echo " "
echo "pour lancer le script avec le paramètre"
echo "./script.sh chemindelabdd "
exit
else
echo "******************************************************"
echo "voici les paramètres que vous avez renseignés"
echo " "
echo "chemin de la base de donnée à modifier=> $1" #chemin de la base de donnée a modifier
cat fichier_param.txt | while read ID IDNEW
do
echo "index dispositif à modifier =>$ID / nouvel index => $IDNEW"
done
fi
else
echo "******************************************************"
echo "le fichier 'fichier_param.txt' non trouvé"
echo "merci de verifier que ce fichier se trouve dans le meme repertoire que le script"
echo "chaque ligne de ce fichier doit indiquer : index a modifier , un espace , nouvel index"
echo "exemple je veux modifier les index 6 ,8 et 45 et les rennomer respectivement en 1456 3524 et 456"
echo "mon fichier paramètres devra contenir :"
echo "6 1456"
echo "8 3524"
echo "45 456"
echo "et rien de plus "
echo "******************************************************"
exit 0
fi
now=$(date +"%H%M%S-%m%d%Y")
echo " "
echo "Etes vous certains de vouloir executer le script avec les paramètres ci dessus ?"
echo "une sauvegarde de la bdd sera effectuée avant la modification"
echo "******************************************************"
PS3='Votre choix > ' # le prompt
LISTE=("[o] oui" "[n] non") # liste de choix disponibles
select CHOIX in "${LISTE[@]}" ; do
case $REPLY in
1|o)
tables=("DeviceToPlansMap" "Fan" "Fan_Calendar" "LightSubDevices" "LightingLog" "Meter" "Meter_Calendar" "MultiMeter" "MultiMeter_Calendar" "Notifications" "Percentage" "Percentage_Calendar" "Rain" "Rain_Calendar" "SceneDevices" "SetpointTimers" "PushLink" "SharedDevices" "Temperature" "Temperature_Calendar" "Timers" "UV" "UV_Calendar" "Wind" "Wind_Calendar")
if [ -e $1 ] #verification si le fichier en parametre existe
then
echo " "
echo "vérification des éléments renseignés dans le fichier"
echo " "
#la bdd existe
cat fichier_param.txt | while read ID IDNEW
do
#verification si les index sont presents
name=$(sqlite3 $1 "select Name from DeviceStatus WHERE ID='$ID'")
if [ -z "$name" ]
then
echo "ID dispositif $ID inexistant dans la table DeviceStatus"
exit 10
else
echo "ID dispositif $ID Présent"
fi
#verification si les nouveaux index sont libres
namenew=$(sqlite3 $1 "select Name from DeviceStatus WHERE ID='$IDNEW'")
if [ -z "$namenew" ]
then
echo "ID dispositif $IDNEW Disponible"
else
echo "Le nouvel index $IDNEW éxiste deja ,($namenew), modification impossible"
exit 10
fi
done
if [ $? != 10 ]
then
echo " "
echo "Les éléments renseignés sont ok , lancement des modifcations"
echo " "
#exit 0
echo "Copie de Sauvegarde de la base de donnée"
cp "$1" "$1.$now"
echo "arret de domoticz"
sudo service domoticz stop
cat fichier_param.txt | while read ID IDNEW
do
name=$(sqlite3 $1 "select Name from DeviceStatus WHERE ID='$ID'")
echo "mise à jour de l'index $ID ($name) en $IDNEW dans la table DeviceStatus"
sqlite3 $1 "UPDATE DeviceStatus SET ID ='$IDNEW' WHERE ID ='$ID'"
for i in "${!tables[@]}"
do
r=$(sqlite3 $1 "select * from ${tables[$i]} WHERE DeviceRowID='$ID'")
if [ -n "$r" ]
then
# echo "Aucun index à modifier dans la table ${tables[$i]} pour le DeviceRowID $ID ($name)"
# else
echo "Modification éffectuée pour DeviceRowID $ID ($name) en $IDNEW dans la table ${tables[$i]}"
sqlite3 $1 "UPDATE ${tables[$i]} SET DeviceRowID ='$IDNEW' WHERE DeviceRowID ='$ID'"
fi
done
done
echo "redemarrage de domoticz"
sudo service domoticz start
else
echo " "
echo "Les éléments renseignés sont incorrects ,annulation des modifcations"
echo " "
fi
echo "******************************************************"
else
echo "la bdd $1 n'existe pas ou le chemin est érroné"
echo "******************************************************"
fi
break
;;
2|n)
break
;;
esac
done
Code : Tout sélectionner
chmod +x nomduscript.sh
celui ci DOIT être nommé "fichier_param.txt"
et contenir a chaque ligne l'ID a remplacer puis le nouvel ID espacé
exemple je veux modifier les index 6 ,8 et 45 et les renommer respectivement en 1456 3524 et 456"
mon fichier paramètres devra contenir :
6 1456
8 3524
45 456
et rien de plus (bien penser au retour chariot de la dernière ligne)
lancer le script en ajoutant en paramètre le chemin de la bdd de domoticz
Code : Tout sélectionner
./nomduscript.sh /home/pi/domoticz/domoticz.dbps une copie de la bdd est effectuée avant toute modification
voici les fichiers si vous voulez pas faire du copié collé
fichier param => https://drive.google.com/file/d/1LdP9u1 ... sp=sharing
script bash => https://drive.google.com/file/d/1ASY-RL ... sp=sharing
enjoy
@+++