Emplacement et sauvegarde fichiers zwave-js-ui

Forum dédié au Z-Wave : protocole, équipements, objets, interfaces ...
Répondre
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Emplacement et sauvegarde fichiers zwave-js-ui

Message par denis_brasseur »

Bonjour.
Tout est dans le titre. Suite passage à zwave-js-ui, je m'interroge sur l'emplacement des fichiers de configuration afin de mettre en place une sauvegarde.
Je n'ai rien trouvé à ce sujet sur le forum.
Concernant mon installation, j'ai choisi la solution docker.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par Chrominator »

Bonjour,

Je me suis inspiré de cette page pour modifier mon script de sauvegarde que j'ai pompé sur le net à l'origine.
Le plus contraignant était de trouver l'id du conteneur actif, le code est dans le script.
Ça fonctionne bien, pas de souci depuis plusieurs mois.

Le script ci-dessous est un peu plus large que le seul zwave-js-ui, je suis certain que tu t'y retrouveras. ;)

J'ai aussi écrit un script pour récupérer les dernières mises à jour du module et les inclure dans docker, dit-moi si ça t'intéresse.

Code : Tout sélectionner

#! /bin/bash

##-------------------------------------------------------------------------
## Script : backup.sh
##
## Objectif : Script qui permet d'automatiser la sauvegarde des éleménts
## importants d'une installation Domoticz'
##
## Auteur : Bastien DUMAS 
## Date : 01/11/2015
## Version : 1.0
##-------------------------------------------------------------------------

## https://www.it-connect.fr/comment-sauvegarder-et-restaurer-un-conteneur-docker/

UNAME="/bin/uname"

CURL="/usr/bin/curl"
DD="/usr/bin/dd"
TAR="/usr/bin/tar"
DOCKER="/usr/bin/docker"
MONIT="/usr/bin/monit"
SLEEP="/usr/bin/sleep"

################### CONFIGURATION DU SCRIPT ###################
## Information abonné FreeMobile pour l'envoie de SMS
FREE_USERNAME="votre ID" #Nom d'utilisateur freemobile
FREE_PASSWORD="votre PASSWORD" #Password freemobile

HOSTNAME=`$UNAME -n`

#Informations relative à domoticz
DOMOTICZ_IP="192.168.1.4"  # Domoticz IP 
DOMOTICZ_PORT="8080"       # Domoticz port 
DOMOTICZ_DIRECTORY="/home/pi/domoticz" #Répertoire Domoticz
FILESYSTEM1="sda4" #Chemin du device filesystem

#Informations relative à la sauvegarde
BACKUP_DIRECTORY="/mnt/images_sd/Domoticz/live" #Répertoire de destination des fichiers issus de la sauvegarde
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S` #Timestamp utilisé pour différencier les sauvegardes
DB_BACKUPFILE="domoticz_$HOSTNAME_$TIMESTAMP.db" #Nom du fichier issu de la sauvegarde de la base de donnée domoticz
DOMOTICZ_DIRECTORY_BACKUPFILE="domoticz_directory_$HOSTNAME_$TIMESTAMP.tar.gz" #Nom du fichier issu de la sauvegarde du répertoire domoticz 
FILESYSTEM_BACKUPFILE="domoBox_${HOSTNAME}_$TIMESTAMP.bz2" #Nom du fichier issu de la sauvegarde du filesystem complet
ZWAVEJSUI_BACKUPFILE="zwave-js-ui_${HOSTNAME}_${TIMESTAMP}.tar" # Nom du fichier contenant l'image du docker à sauvegarder
ZWAVEJSUI_CONTAINER_ID=`$DOCKER ps | awk -F"   " 'NR>1 { if ($7 == "zwave-js-ui") print $1}'` # Id du container zwave-js-ui
ZIGBEE_PLUGIN_DIRECTORY="/home/pi/domoticz/plugins/Domoticz-Zigbee/"
ZIGBEE_BACKUPFILE="zigbee_${HOSTNAME}_${TIMESTAMP}.tar.gz"
ZIGBEE_EXTRA_MENU="/home/pi/domoticz/www/templates/"
DOMOTICZ_DB="/home/pi/domoticz/domoticz.db"
BIN_DIRECTORY="/home/pi/bin"
BIN_BACKUPFILE="bin_${HOSTNAME}_${TIMESTAMP}.tar.gz"
MONIT_DIRECTORY="/etc/monit"
MONIT_BACKUPFILE="monit_${HOSTNAME}_${TIMESTAMP}.tar.gz"

#Chemin du fichier de log
LOG_FILE="/var/log/backup.log"

#Temps de conservation des fichiers de sauvegarde
TTL_DB="7" #Base de donnée
TTL_DOMOTICZ="31" #Répertoire domoticz
TTL_FILESYSTEM="62" #Sauvegarde complete du FILESYSTEM
TTL_ZWAVEJSUI="31" #Sauvegarde du container zwavejsui
TTL_ZIGBEE="31" #Sauvegarde de zigbee
TTL_BIN="31" #Sauvegarde du répertoire /home/pi/bin
TTL_MONIT="31" #Sauvegarde du répertoire /etc/monit
###############################################################

####################### DEBUT DU SCRIPT #######################
echo "===============> Sauvegarde du $TIMESTAMP" >> $LOG_FILE
echo "==== ELEMENTS DE CONFIGURATION ====" >> $LOG_FILE
echo "BACKUP_DIRECTORY : $BACKUP_DIRECTORY" >> $LOG_FILE
echo "TIMESTAMP : $TIMESTAMP" >> $LOG_FILE
echo "DB_BACKUPFILE : $DB_BACKUPFILE" >> $LOG_FILE
echo "DOMOTICZ_DIRECTORY_BACKUPFILE : $DOMOTICZ_DIRECTORY_BACKUPFILE" >> $LOG_FILE
echo "FILESYSTEM_BACKUPFILE : $FILESYSTEM_BACKUPFILE" >> $LOG_FILE
echo "ZWAVEJSUI_BACKUPFILE : $ZWAVEJSUI_BACKUPFILE" >> $LOG_FILE
echo "myBackupFile = ${BACKUP_DIRECTORY}/${DB_BACKUPFILE}" >> $LOG_FILE
echo "LOG_FILE = $LOG_FILE" >> $LOG_FILE
echo "===================================" >> $LOG_FILE
echo "" 
echo ""

SEND_NOTIF () {

	#LOG du résultat
	if [ -e $myBackupFile ]
	then
		msg="$TIMESTAMP : Sauvegarde ${OP} OK dans le fichier : $myBackupFile en $ELAPSED"
		echo $msg >> $LOG_FILE
		# Envoi d'une notification vers Domoticz
		# Mise en forme du texte pour utilisation dans Curl
		msg=`echo "${msg// /$'%20'}"`
		$CURL -s -i -k "http://${DOMOTICZ_IP}:${DOMOTICZ_PORT}/json.htm?type=command&param=sendnotification&subject=Backup&body=$msg&subsystem=telegram;kodi;browser"
	else
		msg="$TIMESTAMP : ERREUR LORS DE LA SAUVEGARDE DE $myBackupFile" 
		echo $msg >> $LOG_FILE
		##Envoie du SMS d'erreur
		#$CURL -s -i -k "https://smsapi.free-mobile.fr/sendmsg?user=$FREE_USERNAME&pass=$FREE_PASSWORD&msg=$msg"
		exit 3;
	fi
}

CHECK_DZ_STATUS () {
	JOB=`netstat -tunlp |grep -w "8080\|443" | awk -FLISTEN '{print $2}'`
	if [[ $JOB == *"domoticz"* ]]; then
		echo `/bin/date +'%T'` " domoticz toujours actif, on attend..."  >> $LOG_FILE
	else
		LOOP=0
	fi
}

OP=$1

#### PARTIE 1 : SAUVEGARDE #####

case "$1" in
DB) ## Sauvegarde de la base de donnée de domoticz
	echo "$TIMESTAMP : Sauvegarde de la base de donnée de Domoticz " >> $LOG_FILE
	myBackupFile="${BACKUP_DIRECTORY}/${DB_BACKUPFILE}"

	#Initialisation du timer
	BEFORE=$(/bin/date +'%s')

	#Sauvegarde
	sav_db=$($CURL -s http://$DOMOTICZ_IP:$DOMOTICZ_PORT/backupdatabase.php --output $myBackupFile)
	#Calcul du temps d'éxécution
	AFTER=$(/bin/date +'%s')
	ELAPSED=$(($AFTER - $BEFORE))
	ELAPSED=`/bin/date -u -d @${ELAPSED} +"%T"`

	#LOG du résultat
	SEND_NOTIF
	;;

DOMOTICZ) ## Sauvegarde du répertoire domoticz complet
	echo "$TIMESTAMP : Sauvegarde du répertoire DOMOTICZ" >> $LOG_FILE

	#Construction du nom de fichier
	myBackupFile="${BACKUP_DIRECTORY}/${DOMOTICZ_DIRECTORY_BACKUPFILE}"

	#Initialisation du timer
	BEFORE=$(/bin/date +'%s')

	#Sauvegarde
	sav_directory=$(sudo $TAR czf $myBackupFile $DOMOTICZ_DIRECTORY)

	#Calcul du temps d'éxécution
	AFTER=$(/bin/date +'%s')
	ELAPSED=$(($AFTER - $BEFORE))
	ELAPSED=`/bin/date -u -d @${ELAPSED} +"%T"`

	#LOG du résultat
	SEND_NOTIF
	;;
FILESYSTEM) ## Sauvegarde du FILESYSTEM complet
	echo "$TIMESTAMP : Sauvegarde du FILESYSTEM" >> $LOG_FILE

	#Construction du nom de fichier
	myBackupFile="${BACKUP_DIRECTORY}/${FILESYSTEM_BACKUPFILE}"

	#Initialisation du timer
	BEFORE=$(/bin/date +'%s')

	#Sauvegarde
	#sav_filesystem=$(sudo $DD if=$FILESYSTEM | gzip > $myBackupFile)
	sav_filesystem=$(sudo $DD if=/dev/$FILESYSTEM1 | lbzip2 -zk > $myBackupFile.$FILESYSTEM1)
	#sav_filesystem=$(sudo $DD if=/dev/$FILESYSTEM2 | lbzip2 -zk > $myBackupFile.$FILESYSTEM2)

	#Calcul du temps d'éxécution
	AFTER=$(/bin/date +'%s')
	ELAPSED=$(($AFTER - $BEFORE)) 
	ELAPSED=`/bin/date -u -d @${ELAPSED} +"%T"`

	#LOG du résultat
	SEND_NOTIF
	;;
ZWAVE-JS-UI) ## Sauvegarde du container zwave-js-ui complet
	echo "$TIMESTAMP : Sauvegarde du container docker zwave-js-ui" >> $LOG_FILE

	#Construction du nom de fichier
	myBackupFile="${BACKUP_DIRECTORY}/${ZWAVEJSUI_BACKUPFILE}"

	#Initialisation du timer
	BEFORE=$(/bin/date +'%s')

	#Sauvegarde
	$DOCKER commit -p ${ZWAVEJSUI_CONTAINER_ID} ${ZWAVEJSUI_BACKUPFILE}
	$DOCKER save -o ${myBackupFile} ${ZWAVEJSUI_BACKUPFILE}

	#Calcul du temps d'éxécution
	AFTER=$(/bin/date +'%s')
	ELAPSED=$(($AFTER - $BEFORE)) 
	ELAPSED=`/bin/date -u -d @${ELAPSED} +"%T"`

	if [ -e $myBackupFile ]
	then
		#Nettoyage des anciens snapshots du container
		echo "Nettoyage des anciens snapshots du container zwave-js-ui" >> $LOG_FILE
		$DOCKER images -a |  grep -v $TIMESTAMP | grep zwave-js-ui | awk '{print $3}' | xargs docker rmi >> $LOG_FILE
	fi
	SEND_NOTIF
	;;

ZIGBEE) ## Sauvegarde de la configuration zigbee
	echo "$TIMESTAMP : Sauvegarde de la configuration zigbee" >> $LOG_FILE

	# Comme recommandé dans le wiki, arrêt de domoticz avant de sauvegarder la base et le plugin
	# https://zigbeefordomoticz.github.io/wiki/fr-fr/Plugin_Sauvegardes.html
	
	$MONIT stop domoticz
	
	LOOP=1						# On attend suffisamment longtemps que domoticz s'arrête.
	ESCAPE=20					# En cas de boucle infinie, on sortira quand même après quelques itérations
	while [ "$LOOP" -eq 1 ] && [ "$ESCAPE" -gt 0 ]
	do 
		CHECK_DZ_STATUS
		$SLEEP 10
	done
	
	if [ $ESCAPE -eq 0 ]
	then				# Domoticz toujours actif
		echo `/bin/date +'%T'` " domoticz toujours actif, echec de la sauvegarde de ${myBackupFile}"  >> $LOG_FILE
		exit 4
	else
		echo `/bin/date +'%T'` " domoticz inactif, on commence la sauvegarde de ${myBackupFile}"  >> $LOG_FILE
		echo $JOB
	fi
	
	#Construction du nom de fichier
	myBackupFile="${BACKUP_DIRECTORY}/${ZIGBEE_BACKUPFILE}"

	#Initialisation du timer
	BEFORE=$(/bin/date +'%s')

	#Sauvegarde
	tar -czvf $myBackupFile $ZIGBEE_PLUGIN_DIRECTORY $DOMOTICZ_DB "${ZIGBEE_EXTRA_MENU}"
	#Calcul du temps d'éxécution
	AFTER=$(/bin/date +'%s')
	ELAPSED=$(($AFTER - $BEFORE)) 
	ELAPSED=`/bin/date -u -d @${ELAPSED} +"%T"`

	# Redémarrage de domoticz après la sauvegarde
	$MONIT start domoticz
	
	#LOG du résultat
	SEND_NOTIF
	
	;;

BIN) ## Sauvegarde des scripts generaux
	echo "$TIMESTAMP : Sauvegarde des scripts" >> $LOG_FILE
	myBackupFile="${BACKUP_DIRECTORY}/${BIN_BACKUPFILE}"

	#Initialisation du timer
	BEFORE=$(/bin/date +'%s')

	#Sauvegarde
	tar cvzf $myBackupFile $BIN_DIRECTORY
	#Calcul du temps d'éxécution
	AFTER=$(/bin/date +'%s')
	ELAPSED=$(($AFTER - $BEFORE))
	ELAPSED=`/bin/date -u -d @${ELAPSED} +"%T"`

	#LOG du résultat
	SEND_NOTIF
	;;

MONIT) ## Sauvegarde du paramétrage de monit
	echo "$TIMESTAMP : Sauvegarde de monit" >> $LOG_FILE
	myBackupFile="${BACKUP_DIRECTORY}/${MONIT_BACKUPFILE}"

	#Initialisation du timer
	BEFORE=$(/bin/date +'%s')

	#Sauvegarde
	tar cvzf $myBackupFile $MONIT_DIRECTORY
	#Calcul du temps d'éxécution
	AFTER=$(/bin/date +'%s')
	ELAPSED=$(($AFTER - $BEFORE))
	ELAPSED=`/bin/date -u -d @${ELAPSED} +"%T"`

	#LOG du résultat
	SEND_NOTIF
	;;

*) ## ERREUR DE PARAMETRE

	echo "USAGE $0 :" >&2
	echo "$0 type_sauvegarde" >&2
	echo "$0 (DB|DOMOTICZ|FILESYSTEM|BIN|ZIGBEE|ZWAVE-JS-UI|MONIT)" >&2
	echo "Paramètres incorrects" >> $LOG_FILE
	exit 3;
esac

#### PARTIE 2 : NETTOYAGE #####

#Nettoyage des sauvegarde de DB
myDBFile="${BACKUP_DIRECTORY}/*.db"
DB_to_be_deleted=`find $myDBFile -type f -mtime +$TTL_DB`
echo "DB_to_be_deleted : $DB_to_be_deleted" >> $LOG_FILE
find $myDBFile -type f -mtime +$TTL_DB -exec rm {} \; > /dev/null 2>&1

#Nettoyage des sauvegardes de répertoire domoticz
myDIRECTORYFile="${BACKUP_DIRECTORY}/*.tar.gz"
DIRECTORY_to_be_deleted=`find $myDIRECTORYFile -type f -mtime +$TTL_DOMOTICZ`
echo "DIRECTORY_to_be_deleted : $DIRECTORY_to_be_deleted" >> $LOG_FILE
find $myDIRECTORYFile -type f -mtime +$TTL_DOMOTICZ -exec rm {} \; > /dev/null 2>&1

#Nettoyage des sauvegardes du filesystem
myFSFile="${BACKUP_DIRECTORY}/*.bz2.sd??"
FS_to_be_deleted=`find $myFSFile -type f -mtime +$TTL_FILESYSTEM`
echo "FS_to_be_deleted : $FS_to_be_deleted" >> $LOG_FILE
find $myFSFile -type f -mtime +$TTL_FILESYSTEM -exec rm {} \; 

#Nettoyage des sauvegardes de zwave-js-ui
myFSFile="${BACKUP_DIRECTORY}/zwave-js-ui*.tar"
FS_to_be_deleted=`find $myFSFile -type f -mtime +$TTL_ZWAVEJSUI`
echo "zwave-je-ui_to_be_deleted : $FS_to_be_deleted" >> $LOG_FILE
find $myFSFile -type f -mtime +$TTL_ZWAVEJSUI -exec rm {} \; > /dev/null 2>&1

#Nettoyage des sauvegardes de zigbee
myFSFile="${BACKUP_DIRECTORY}/zigbee*.tar.gz"
FS_to_be_deleted=`find $myFSFile -type f -mtime +$TTL_ZIGBEE`
echo "zigbee_to_be_deleted : $FS_to_be_deleted" >> $LOG_FILE
find $myFSFile -type f -mtime +$TTL_ZIGBEE -exec rm {} \; > /dev/null 2>&1

#Nettoyage des sauvegardes de bin
myFSFile="${BACKUP_DIRECTORY}/bin*.tar.gz"
FS_to_be_deleted=`find $myFSFile -type f -mtime +$TTL_BIN`
echo "bin_to_be_deleted : $FS_to_be_deleted" >> $LOG_FILE
find $myFSFile -type f -mtime +$TTL_BIN -exec rm {} \; > /dev/null 2>&1

#Nettoyage des sauvegardes de monit
myFSFile="${BACKUP_DIRECTORY}/monit*.tar.gz"
FS_to_be_deleted=`find $myFSFile -type f -mtime +$TTL_MONIT`
echo "bin_to_be_deleted : $FS_to_be_deleted" >> $LOG_FILE
find $myFSFile -type f -mtime +$TTL_MONIT -exec rm {} \; > /dev/null 2>&1
######################## FIN DU SCRIPT #######################
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par denis_brasseur »

Merci Chrominator, je regarde le script.
En complément à ta réponse, comment trouver l'id du conteneur actif en dehors du script ?
Je ne maitrise pas docker et je ne vois pas ou est installé zwave-js-ui.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par Chrominator »

L'emplacement de stockage de docker importe peu, on sauvegarde l'image pour pouvoir la restaurer plus tard.
C'est la ligne 45 qui permet de récupérer l'id du container actif ;
en CLI, c'est

Code : Tout sélectionner

sudo docker ps | awk -F"   " 'NR>1 { if ($7 == "zwave-js-ui") print $1}'
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par denis_brasseur »

Chrominator a écrit : 01 sept. 2025, 15:02 Le script ci-dessous est un peu plus large que le seul zwave-js-ui, je suis certain que tu t'y retrouveras. ;)
Merci Chrominator, je m'y retrouve parfaitement sur l'ensemble de la sauvegarde, merci.
Chrominator a écrit : 01 sept. 2025, 15:02 J'ai aussi écrit un script pour récupérer les dernières mises à jour du module et les inclure dans docker, dit-moi si ça t'intéresse.
Bien sur que cela m'interesse !
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par Chrominator »

Alors le voici.
Il est tout simple, je le lance quand je remarque que l'UI me signale une mise à jour.
J'ai laissé les lignes qui font appel à monit, elles doivent être retirées/mises en commentaire si tu ne l'utilises pas.
A lancer avec les droits d'administration (sudo).

Code : Tout sélectionner

#!/bin/bash
# upd_zwavejsui.sh
# Update zwave-js-ui container
# Author: Chrominator
# Creation: 2024-10-05

# Get container data 
container=(`docker ps | awk -F"   " 'NR>1 { if ($7 == "zwave-js-ui") print $1" "$2}'`)
container_id=${container[0]}
container_pull=${container[1]}
echo "Mise à jour du container $container_id vers $container_pull"
# Disable zwave-js-ui monitoring before operation then stop docker
monit -c /etc/monit/monitrc stop zwave-js-ui
docker stop zwave-js-ui
docker rm zwave-js-ui
docker pull $container_pull
docker images
# Restart docker
/etc/monit/scripts/zwave-js-ui_init.sh start
# Enable zwave-js-ui monitoring
monit -c /etc/monit/monitrc start zwave-js-ui
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par denis_brasseur »

Merci Chrominator
A l'issue de la mise à jour, tu relance zwave-js-iu via monit

Code : Tout sélectionner

# Restart docker
/etc/monit/scripts/zwave-js-ui_init.sh start
Si je n'utilise pas monir pour monitorer zwave, qu'elle est la commande ?

Code : Tout sélectionner

docker start zwave-js-ui # ?????
??
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par Chrominator »

Oui, désolé, ça m'a échappé.

Voici le script en question :

Code : Tout sélectionner

#!/bin/bash
# zwave-js-ui_init.sh
# Manage zwave-js-ui container status
# Author: Chrominator
# Creation: 2022-10-22
cd /home/pi/domoticz
if [ $1 = "start" ]; then
    /usr/local/bin/docker-compose up -d
else
    if [ $1 = "restart" ]; then
	    /usr/local/bin/docker-compose stop
	    /usr/local/bin/docker-compose up -d
    else	
	/usr/local/bin/docker-compose $1
    fi
fi
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par denis_brasseur »

Merci Chrominator, c'est parfait, simple et efficace.
Comment gères tu la surveillance de Zwave-js-ui avec monit, je n'ai rien trouvé sur ce sujet.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Emplacement et sauvegarde fichiers zwave-js-ui

Message par Chrominator »

Content que ça te rende service.

Pour monit, j'ai un script qui permet de s'assurer que zwave-js-ui est bien démarré, et les specs qui déterminent comment monit doit interpréter le résultat.
Ca donne ça dans monit (dernière ligne) :
Capture d'écran 2025-09-11 195902.png
Capture d'écran 2025-09-11 195902.png (32.39 Kio) Consulté 15839 fois
L'output n'est pas vraiment en ligne (horaire de démarrage, c'est toujours le précédent) mais ça fonctionne, alors j'ai laissé comme ça.

Les specs (stockées dans un fichier nommé check_container_zwave-js-ui dans /etc/monit/conf-available)

Code : Tout sélectionner

CHECK PROGRAM zwave-js-ui WITH PATH /etc/monit/scripts/check_container_zwave-js-ui.sh
  START PROGRAM = "/etc/monit/scripts/zwave-js-ui_init.sh start"
  STOP PROGRAM = "/etc/monit/scripts/zwave-js-ui_init.sh stop"
  IF status != 0 FOR 3 CYCLES THEN RESTART
  IF 2 RESTARTS WITHIN 5 CYCLES THEN UNMONITOR
Bien sûr pour le rendre actif je crée un lien de ce fichier dans /etc/monit/conf-enabled

Le script /etc/monit/scripts/check_container_zwave-js-ui.sh :

Code : Tout sélectionner

#! /bin/bash
#docker top "zwave-js-ui" | awk -F" " 'NR>1{print "zwave-js-ui started @"$5 " pid " $2 }'
status=(`docker top "zwave-js-ui" | awk -F" " 'NR>1{print $5" "$2" "$8}'`)
start_time=${status[0]}
pid=${status[1]}
node=${status[2]}
echo "zwave-js-ui started @"$start_time "pid "$pid
if [ $node != "node" ]; then
	exit 255
else
       	exit 0
fi
Le code retour est exploité par la spec monit comme tu le vois pour déterminer s'il y a une anomalie.

Tu as déjà le script /etc/monit/scripts/zwave-js-ui_init.sh mais je le répète ici par esprit de simplification :

Code : Tout sélectionner

#!/bin/bash
# zwave-js-ui_init.sh
# Manage zwave-js-ui container status
# Author: Chrominator
# Creation: 2022-10-22
cd /home/pi/domoticz
if [ $1 = "start" ]; then
    /usr/local/bin/docker-compose up -d
else
    if [ $1 = "restart" ]; then
	    /usr/local/bin/docker-compose stop
	    /usr/local/bin/docker-compose up -d
    else	
	/usr/local/bin/docker-compose $1
    fi
fi
A ta dispo.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Répondre