Page 1 sur 3
Sauvegarde et exportation des scripts LUA de la DB
Publié : 14 juil. 2021, 17:17
par 53l3cu5
Bonjour à tous,
C'est mon premier post ici.
Je cherche à sauvegarder régulièrement les scripts LUA, pas ceux dans les dossiers, mais dans la base de donné pendant que je développe.
Pour l'instant, j'arrive à exporter et à sauvegarder mes scripts manuellement.
cd /home/pi/domoticz
sqlite3 domoticz.db
sqlite> .separator |
sqlite> .output sauvegarde.txt
sqlite> select * from EventMaster;
sqlite> .exit
Mais j'aimerai faire une sauvegarde quotidienne de la base. Et tant que possible dans un fichier diffèrent tout les jours.
Merci d'avance
Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 15 juil. 2021, 04:59
par denis_brasseur
Voici le script que j'utilise, script de type time.
Il te faut évidemment adapter les chemins à ta configuration.
Code : Tout sélectionner
commandArray = {}
function SaveTable(matable,sortie)
Path="/home/pi/domoticz/"
dbPath="/home/pi/domoticz/domoticz.db"
if sortie == nil then sortie = 'sortie.txt' end
sql='sqlite3 -header -csv '..dbPath..' "select * from '..matable..';" > '..Path..sortie
os.capture(sql)
os.execute("chown pi "..Path..sortie)
end
if time.hour==5 and time.min==1 then
-- retourne le jour sur 2 car ex: "29"
jour = os.date("%d")
SaveTable('EventMaster', 'scripts/lua/logs/Event_'..jour..'.txt')
end
return commandArray

- Capture.PNG (35.64 Kio) Consulté 3071 fois
Publié : 15 juil. 2021, 17:05
par hestia
voici mon script (issu du forum anglais)
Code : Tout sélectionner
#!/bin/bash
#
# dump all dzVents to separate files
#
# change to reflect your situation / requirements
#
# from: https://www.domoticz.com/forum/viewtopic.php?f=31&t=28627&p=218924&hilit=save+file+lua#p218924
domoticzDir='/home/pi/PROD_domoticz/'
scriptDir='/home/pi/mydomoticz/myscripts/dzVents/'
# no changes required below this line
#
#mkdir -p $scriptDir
sudo cp $domoticzDir/domoticz.db /tmp/tmp.db
sudo sqlite3 /tmp/tmp.db "select ID, name,status from eventMaster WHERE interpreter = 'dzVents'" | while read line;
do
#echo "line:" $line
ID=$(echo $line | awk -F'|' '{ print $1 }')
#echo "ID " $ID
NAME=$(echo $line | awk -F'|' '{ print $2 }')
#echo "NAME " $NAME
STATUS=$(echo $line | awk -F'|' '{ print $3 }')
#echo "STATUS" $STATUS
if [[ $STATUS == 0 ]] ; then # script inactive
scriptDirName=$scriptDir$NAME'.inactive.lua'
else
scriptDirName=$scriptDir$NAME'.lua'
fi
sudo sqlite3 /tmp/tmp.db "select XMLSTatement from eventMaster WHERE interpreter = 'dzVents' and ID = $ID" > $scriptDirName
echo "export " $NAME " to " $scriptDirName
done
sudo rm /tmp/tmp.db
il est pour dZvents, mais adaptable facilement (le pense) pour LUA en changeant
par ce qu'il faut...
La sortie, un fichier par script, avec les scripts inactifs avec une extension .inactive
Code : Tout sélectionner
-rw-r--r-- 1 pi pi 9163 Dec 18 2020 AlerteMoustiques.lua
-rw-r--r-- 1 pi pi 10014 Jul 15 00:05 AlerteMoustiques_V1R0.lua
-rw-r--r-- 1 pi pi 1893 Jul 15 00:05 Aqua_Icones.inactive.lua
-rw-r--r-- 1 pi pi 2393 Jul 15 00:05 AquaMeters.lua
-rw-r--r-- 1 pi pi 4093 Jul 11 00:05 aquaOnOff.lua
-rw-r--r-- 1 pi pi 4205 Jul 15 00:05 AquaOnOff.lua
-rw-r--r-- 1 pi pi 2577 Jul 15 00:05 AquaOnOffPump.lua
-rw-r--r-- 1 pi pi 4480 Jul 15 00:05 AquaVolume.lua
-rw-r--r-- 1 pi pi 1530 Jul 15 00:05 aTestDimTo0.inactive.lua
-rw-r--r-- 1 pi pi 11537 Sep 20 2020 Auto_off.inactive.lua
-rw-r--r-- 1 pi pi 50834 Dec 11 2020 AutoOff_Notif.inactive.lua
Je ne RAZ pas le répertoire de sortie avant l'export, comme cela je garde les anciennes versions pour peu que je mette la version dans le nom du script
le cron
Code : Tout sélectionner
# export dzvents scripts
5 0 * * * /home/pi/mydomoticz/myscripts/export_dzVent.sh 2>&1 | /usr/bin/logger -t DZBACKUP
Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 15 juil. 2021, 23:55
par 53l3cu5
denis_brasseur a écrit : 15 juil. 2021, 04:59
Code : Tout sélectionner
commandArray = {}
function SaveTable(matable,sortie)
Path="/home/pi/domoticz/"
dbPath="/home/pi/domoticz/domoticz.db"
if sortie == nil then sortie = 'sortie.txt' end
sql='sqlite3 -header -csv '..dbPath..' "select * from '..matable..';" > '..Path..sortie
os.capture(sql)
os.execute("chown pi "..Path..sortie)
end
if time.hour==5 and time.min==1 then
-- retourne le jour sur 2 car ex: "29"
jour = os.date("%d")
SaveTable('EventMaster', 'scripts/lua/logs/Event_'..jour..'.txt')
end
return commandArray
Merci Denis Je vais tester ça tout de suite !
hestia a écrit : 15 juil. 2021, 17:05
voici mon script (issu du forum anglais)
Code : Tout sélectionner
#!/bin/bash
#
# dump all dzVents to separate files
#
# change to reflect your situation / requirements
#
# from: https://www.domoticz.com/forum/viewtopic.php?f=31&t=28627&p=218924&hilit=save+file+lua#p218924
domoticzDir='/home/pi/PROD_domoticz/'
scriptDir='/home/pi/mydomoticz/myscripts/dzVents/'
# no changes required below this line
#
#mkdir -p $scriptDir
sudo cp $domoticzDir/domoticz.db /tmp/tmp.db
sudo sqlite3 /tmp/tmp.db "select ID, name,status from eventMaster WHERE interpreter = 'dzVents'" | while read line;
do
#echo "line:" $line
ID=$(echo $line | awk -F'|' '{ print $1 }')
#echo "ID " $ID
NAME=$(echo $line | awk -F'|' '{ print $2 }')
#echo "NAME " $NAME
STATUS=$(echo $line | awk -F'|' '{ print $3 }')
#echo "STATUS" $STATUS
if [[ $STATUS == 0 ]] ; then # script inactive
scriptDirName=$scriptDir$NAME'.inactive.lua'
else
scriptDirName=$scriptDir$NAME'.lua'
fi
sudo sqlite3 /tmp/tmp.db "select XMLSTatement from eventMaster WHERE interpreter = 'dzVents' and ID = $ID" > $scriptDirName
echo "export " $NAME " to " $scriptDirName
done
sudo rm /tmp/tmp.db
Merci à toi aussi hestia ! Je ne connais pas le langage que tu utilises mais le script à l'air très complet.
Si je réussi à faire un mélange de vos deux scripts je viendrais poster le résultat ici
Merci beaucoup à vous deux
Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 16 juil. 2021, 11:47
par hestia
Je ne connais pas le langage que tu utilises
C'est du script shell à faire sur linux directement
Pour avoir les LUA, je dirai qu'il faut mettre 'Lua' à la place de 'dzVents' dans WHERE interpreter = 'dzVents'
Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 16 juil. 2021, 22:36
par 53l3cu5
Merci pour le renseignement. Je saurais quoi chercher quand j'en aurais besoin.
Et voici le résultat du mixe de vos deux scripts
Code : Tout sélectionner
commandArray = {}
function mysplit (inputstr, sep)
if sep == nil then sep = "%s" end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table.insert(t, str)
end
return t
end
function os.capture(cmd)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
return s
end
function SaveTable(dbPath, matable, sortie)
local sql1='sqlite3 '..dbPath..' "select ID, name,status from '..matable..';"'
local result = os.capture(sql1)
local lignes = mysplit(result, '\n\r')
for i=1,#lignes,1 do
splited = mysplit(lignes[i], '|')
id = splited[1]
name = splited[2]
status = splited[3]
if status == '0' then
scriptDirName = sortie .. name ..'.inactive.lua'
else
scriptDirName = sortie .. name ..'.active.lua'
end
sql2 = 'sqlite3 ' .. dbPath .. ' "select XMLSTatement from '..matable..' WHERE ID = ' .. id .. '" > "' .. scriptDirName .. '"'
os.execute(sql2)
os.execute('chown pi "'..scriptDirName .. '"')
end
print("Les scripts LUA ont été sauvé")
end
Timer = os.date('%H:%M')
if Timer == '05:01' then
-- retourne le jour de l'année ex: "365"
jour = os.date("%j")
SaveTable('/home/pi/domoticz/domoticz.db', 'EventMaster', '/home/pi/domoticz/scripts/lua/logs/'..jour..'_')
end
return commandArray
Ce qui donne ça

- Sans titre-1.png (169.81 Kio) Consulté 2995 fois
Encore un grand merci à vous deux !
Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 17 juil. 2021, 07:30
par denis_brasseur
Beau travail, marche nickel

Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 17 juil. 2021, 08:25
par Doudy
Hello,
C'est pour dzvents et lua ?

Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 18 juil. 2021, 07:02
par denis_brasseur
Le script de 53l3cu5 va sauvegarder l'ensemble des scripts de la base de données, quelque en soit le type, blockly, python, lua et dzvents.
Re: Sauvegarde et exportation des scripts LUA de la DB
Publié : 18 juil. 2021, 08:32
par Doudy
C'est un script en LUA, je suppose
Mais script_time_x c'est toutes les minutes !
Et script_device_x attend une modification d'un device !
Comment démarrer ce script ?
