bon j'ai modifié
l'acamedy en mettant Nantes mais sans etre sur
j'ai modifié le chemin
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
J'ai rajouté
local u = require("utf8")
voici le code
Code : Tout sélectionner
local u = require("utf8")
--Variables nécessaires au script
local tmpIdLibelle --Pour stocker temporairement l'id du libellé des vacances
local tmpFichierXml
local libelleVac --Libelle des vacances si vacances
local debutVac --Début des vacances scolaires
local finVac --Fin des vacances scolaires
local timenow = os.date("%H:%M")
local startClock = os.clock()
local flgdzVacancesScolaires = false
local flgdzVacancesScolairesDemain = false
--Variables a éditer
local debug = true --Permet d afficher des messages pour voir l'exécution du script
local forceExecution = false --Permet de forcer l'exécution sans tenir compte de l heure
-- Liste des jours pour récupérer le fichier xml
-- pour éviter de le télécharger tous les jours
--Mot clé possible :
-- /j = tous les jours
-- /m = toute les minutes
local listeJourTelechargementXml={}
listeJourTelechargementXml['30/03'] = '12:20'
listeJourTelechargementXml['30/06'] = '12:20'
listeJourTelechargementXml['30/09'] = '12:20'
listeJourTelechargementXml['30/12'] = '12:20'
--listeJourTelechargementXml['/j'] = '/m' --Pour test éventuel
local heureExecution = "00:03" --Format = HH:MM ex 02:04 ou 12:36, C'est l'heure à laquelle vous voulez que le switch domoticz soit mis a jour
local fname = "/home/pi/domoticz/scripts/lua/vacances.xml" --Renseigner ici le répertoire destination du téléchargement
local fichierSource = "https://www.data.gouv.fr/fr/datasets/r/000ae493-9fa8-4088-9f53-76d375204036"
local DateDuJour = os.date("%Y-%m-%d")
local DateDemain = os.date("%Y-%m-%d",tonumber(os.time(t))+24*60*60)
local academie = "Nantes" --Indiquer ici l'académie
--Nom des dispositifs dans domoticz
local dzVacancesScolaires = "VacancesScolaires" --Renseigner ici le nom du switch a mettre a jour dans domoticz
local dzVacancesScolairesDemain = "VacancesScolaires+1" --Renseigner ici le nom du switch a mettre a jour dans domoticz
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
--Télécharge le fichier json
function telechargeFile (url,dest)
retour=os.execute("wget -O "..dest.." "..url)
--Si erreur de téléchargement
if (debug) then print("Retour telechargement = "..tostring(retour)) end
if ( retour == false ) then
print("Impossible de télécharger le fichier "..url)
end
end
--Pour tester si le fichier est présent sur le disque
function ExisteFile (chemin)
if ( debug ) then print ('Fonction ExisteXML parametre = '..chemin) end
--Ouvre le fichier en lecture
local tmpExiste = false
local tmpFichier = io.open(chemin, "r")
--Verifie l'ouverture du fichier sur le disque
if ( tmpFichier == nil ) then
print("Erreur d'ouverture du fichier '" .. fname .. "'.")
else
tmpExiste = true
tmpFichier:close()
end
return tmpExiste
end
function rangeDate (Date,DateMin,DateMax)
--if ( debug ) then print('Appel fonction rangeDate '..Date..' '..DateMin..' '..DateMax) end
return ( Date >= DateMin and Date < DateMax)
end
commandArray = {}
if ( debug ) then print('Timenow = '..tostring(timenow) ) end
--Mise à jour du fichier vacances.xml
for jour, heure in pairs(listeJourTelechargementXml) do
tmpDate = os.date("%d/%m")
if ( debug ) then print('listeJourTelechargementXml = '..tostring(jour).." "..tostring(heure).." date du jour = "..tostring(tmpDate) ) end
if ( (tostring(jour) == tostring(tmpDate) or tostring(jour) == '/j') and
(tostring(heure) == timenow or tostring(heure) == '/m') ) then
if (debug) then print("C est le moment de telecharger = "..tostring(retour)) end
--Supprime le fichier apres le traitement
retour=os.execute("rm "..fname)
if ( retour == false ) then
print("Impossible de supprimer le fichier "..fname)
end
telechargeFile(fichierSource,fname)
end
end
if ( debug ) then print('heureExecution = '..tostring(heureExecution) ) end
if ( tostring(timenow) == tostring(heureExecution) or forceExecution) then
if ( debug ) then print(' DEBUT SCRIPT VACANCES SCOLAIRES') end
--Test si le fichier est présent sur le disque
if ( ExisteFile (fname ) ) then
if ( debug ) then print('Le fichier json est présent') end
else
--Si le fichier n'existe pas on le telecharge
if ( debug ) then print('Le fichier xml non présent') end
telechargeFile(fichierSource,fname)
end
local f = io.open(fname, "r")
--Verifie l'ouverture du fichier sur le disque
if ( f == nil ) then
print("Erreur d'ouverture du fichier '" .. fname .. "'.")
os.exit(1)
end
if ( debug ) then print('Ouverture du fichier json') end
local json_block = f:read('*all')
print('json_block = '..json_block)
local json_valeur = json:decode(json_block)
--Fermeture du fichier
f:close()
if ( debug ) then print("Date de mise a jour = ") end
if ( debug ) then print(tostring(DateDuJour)) end
if ( debug ) then print('Académie sélectionnée = '..academie) end
for i in pairs(json_valeur) do
if ( json_valeur[i].fields.location == academie and json_valeur[i].fields.end_date ~= nil ) then
--Test la date du jour
if ( rangeDate(DateDuJour,json_valeur[i].fields.start_date,json_valeur[i].fields.end_date) ) then
flgdzVacancesScolaires = true
if ( debug ) then print('i= '..tostring(i)..' '..json_valeur[i].fields.description) end
if ( debug ) then print('Début '..json_valeur[i].fields.start_date..' '..'Fin '..json_valeur[i].fields.end_date..' ') end
if ( debug ) then print('Date du jour : '..DateDuJour..' en vacances') end
end
--Test le lendemain
if ( rangeDate(DateDemain,json_valeur[i].fields.start_date,json_valeur[i].fields.end_date) ) then
flgdzVacancesScolairesDemain = true
if ( debug ) then print('i= '..tostring(i)..' '..json_valeur[i].fields.description) end
if ( debug ) then print('Début '..json_valeur[i].fields.start_date..' '..'Fin '..json_valeur[i].fields.end_date..' ') end
if ( debug ) then print('Date du jour : '..DateDemain..' en vacances') end
end
end
end
if ( flgdzVacancesScolaires ) then
print( tostring(DateDuJour)..' en vacances' )
commandArray[dzVacancesScolaires] = 'On'
else
print( tostring(DateDuJour)..' pas en vacances' )
commandArray[dzVacancesScolaires] = 'Off'
end
if ( flgdzVacancesScolairesDemain ) then
print( tostring(DateDemain)..' en vacances' )
commandArray[dzVacancesScolairesDemain] = 'On'
else
commandArray[dzVacancesScolairesDemain] = 'Off'
print( tostring(DateDemain)..' pas en vacances' )
end
end
if ( debug ) then print(' FIN SCRIPT VACANCES SCOLAIRES '..string.format('elapsed time: %.4f\n', os.clock() - startClock)..' seconde') end
return commandArray
Maintenant j'ai le message d'erreur suivant
pi@rasp_home:~/domoticz/scripts/lua $ ./script_time_vacancesscolaire2.lua
./script_time_vacancesscolaire2.lua: ligne 1: erreur de syntaxe près du symbole inattendu « ( »
./script_time_vacancesscolaire2.lua: ligne 1: `local u = require("utf8")'
pi@rasp_home:~/domoticz/scripts/lua $
et dans les logs:
2019-10-25 06:55:00.211 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_vacancesscolaire2.lua: ...i/domoticz/scripts/lua/script_time_vacancesscolaire2.lua:3: module 'utf8' not found:
2019-10-25 06:55:00.211 no field package.preload['utf8']
2019-10-25 06:55:00.211 no file '/usr/local/share/lua/5.2/utf8.lua'
2019-10-25 06:55:00.211 no file '/usr/local/share/lua/5.2/utf8/init.lua'
2019-10-25 06:55:00.211 no file '/usr/local/lib/lua/5.2/utf8.lua'
2019-10-25 06:55:00.211 no file '/usr/local/lib/lua/5.2/utf8/init.lua'
2019-10-25 06:55:00.211 no file './utf8.lua'
2019-10-25 06:55:00.211 no file '/usr/local/lib/lua/5.2/utf8.so'
2019-10-25 06:55:00.211 no file '/usr/local/lib/lua/5.2/loadall.so'
2019-10-25 06:55:00.211 no file './utf8.so'