Page 8 sur 11

Re: LUA : vacances scolaires

Publié : 23 oct. 2019, 22:31
par vr6man
Bonjour

Depuis plusieurs jours le script ne focntionneplus

J'ai bien mis a jour le script avec la nouvelle version du script

quand je lance a la main j'ai les erreurs suivantes:

./script_time_vacancesscolaire2.lua
./script_time_vacancesscolaire2.lua: ligne 1: --[[ : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 2: auteur : commande introuvable
date: opérande supplémentaire « création »
Saisissez « date --help » pour plus d'informations.
./script_time_vacancesscolaire2.lua: ligne 4: Principe : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 5: Le : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 6: Le : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 8: Le : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 9: Necessite : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 123: erreur de syntaxe près du symbole inattendu « 'Le fichier xml non présent' »
./script_time_vacancesscolaire2.lua: ligne 123: ` if ( debug ) then print('Le fichier xml non présent') end'


merci de votre aide

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 00:12
par balajol
DreamL a écrit : 22 oct. 2019, 10:16 Bonjour
J'ai mis à jour le 1er post avec une nouvelle version du script.
J'espère juste que la source ne vas pas changer d'adresse.

Normalement la bibliothèque json.lua est incluse dans Domoticz. Il faut juste changer le chemin pour qu'il corresponde à voter installation.

Bonne journée

Bonsoir DreamL.
Impeccable, Fonctionne à priori sous windows avec les mêmes restrictions que la version précédente, il faut télécharger le fichier manuellement.
Merci
,cdt
Bertrand

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 06:08
par denis_brasseur
vr6man a écrit : 23 oct. 2019, 22:31 Bonjour

Depuis plusieurs jours le script ne focntionne plus

J'ai bien mis a jour le script avec la nouvelle version du script

quand je lance a la main j'ai les erreurs suivantes:
Que veux tu dire par 'je lance à la main' ?

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 06:43
par vr6man
sau automatique comme mis dans le script a 00.03 ca ne fonctionne pas (pas de maj du device)

et en le lancant en tapant la commande (en étant dans le répertoire ou se trouve le script):

./script_time_vacancesscolaire2.lua

j'ai comme message :

pi@rasp_home:~/domoticz/scripts/lua $ ./script_time_vacancesscolaire2.lua
./script_time_vacancesscolaire2.lua: ligne 1: --Variables : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 2 : local: utilisable seulement dans une fonction
./script_time_vacancesscolaire2.lua: ligne 15 : local: utilisable seulement dans une fonction
./script_time_vacancesscolaire2.lua: ligne 39: --Nom : commande introuvable
./script_time_vacancesscolaire2.lua: ligne 40 : local: utilisable seulement dans une fonction
./script_time_vacancesscolaire2.lua: ligne 41 : local: utilisable seulement dans une fonction
./script_time_vacancesscolaire2.lua: ligne 43: erreur de syntaxe près du symbole inattendu « ( »
./script_time_vacancesscolaire2.lua: ligne 43: `json = (loadfile "/home/cd/domoticz/scripts/lua/JSON.lua")() -- For Linux'

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 06:46
par denis_brasseur
Tu peux forcer l'exécution du script toutes les minutes en modifiant la variable forceExecution à true.

Tu peux également forcer les log en modifiant la variable debug à true

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 06:50
par vr6man
c'est déja fait mais ca ne change rien

et vu que ces messages en le lancant a la main pour tester ca ne marchera pas en forcant

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 06:54
par denis_brasseur
Les messages d'erreur portent sur des commentaires (--[[ ]]--).
Ton fichier est bien encodé en UTF-8 ?

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 06:57
par vr6man
voila le fichier de script

par contre je sais pas comment tu fais pour lui dire utf8

Code : Tout sélectionner

--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 = "B" --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/cd/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



Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 06:58
par denis_brasseur
Comment procèdes tu pour créer ton fichier lua ?
Si tu utilise notepad++, Encodage, Encoder en UTF-8

Re: LUA : vacances scolaires

Publié : 24 oct. 2019, 07:15
par vr6man
je suis sous mac donc pas de notepad ++

j'ai fait un fichier texte sous noteedit enregistré .lua

l'ancienne version fonctionnait sans soucis et mes autres fichiers lua pareil