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
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

Code : Tout sélectionner

interpreter = 'dzVents' 
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
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 ?
:oops: