Page 1 sur 1

[LUA] 'then' expected near 'commandArray'

Publié : 10 juin 2020, 21:31
par Hexolite
Bonjour,
J'essaye de mettre en place mon premier Script LUA, et je ne vois pas trop ce qui cloche donc je fais appel à vous.

Code : Tout sélectionner

--Script pour allumer les lumières du couloir
--En fonction de l'heure et de la luminosité
--Si luminosité pas suffisante on allume
--La petite lampe entre 23h et 9h 
--Les 2 plafonniers sinon

commandArray = {}
if (devicechanged['detecteur_haut'] == 'On')then
	print('mouvement')
	if (tonumber(otherdevices_svalues['detecteur_haut_lum'])<10) then
		print('lumiere faible')
		if (os.date('%H') > '23' and os.date('%H') < '9') then
			print('entre 23h et 9h')
			commandArray['Lampe_couloir']='On FOR 30 SECONDS'
		elseif 
			print('entre 9h et 23h')
			commandArray['Group:Couloir']='On FOR 30 SECONDS'
		end
	end
end
return commandArray
Actuellement quand je place le fichier dans le dossier domoticz/scripts/lua j'ai le message d'erreur:

Code : Tout sélectionner

'then' expected near 'commandArray'
Je comprends qu'il manque un commandArray quelque part mais je ne vois pas...

Merci par avance :)

Re: [LUA] 'then' expected near 'commandArray'

Publié : 10 juin 2020, 22:23
par Keros
Le soucis n'est pas avec le commandArray. Tu as un soucis avec tes conditions (je fais un zoom sur ton code avec le soucis, je ne l'ai pas corrigé)

Code : Tout sélectionner

if (os.date('%H') > '23' and os.date('%H') < '9') then
     print('entre 23h et 9h')
     commandArray['Lampe_couloir']='On FOR 30 SECONDS'
elseif 
     print('entre 9h et 23h')
     commandArray['Group:Couloir']='On FOR 30 SECONDS'
end
Le message 'then' expected near 'commandArray' indique un problème avec un then, très certainement manquant ...

Re: [LUA] 'then' expected near 'commandArray'

Publié : 10 juin 2020, 22:36
par vil1driver
Salut,

Après la syntaxe tu auras un souci de logique
Rien ne peut être à la fois supérieur à 23 et inférieure à 9...

Re: [LUA] 'then' expected near 'commandArray'

Publié : 10 juin 2020, 23:02
par Hexolite
vil1driver a écrit : 10 juin 2020, 22:36 à la fois supérieur à 23 et inférieure à 9
Tellement évident que je ne l'ai pas vu... Merci!
Keros a écrit : 10 juin 2020, 22:23 Le message 'then' expected near 'commandArray' indique un problème avec un then, très certainement manquant ...
Le elseif attend en effet un then... Du coup je peux juste mettre else? Merci!

Ça devrait être mieux comme ça (je ne peux pas tester maintenant, on verra demain):

Code : Tout sélectionner

commandArray = {}
if (devicechanged['detecteur_haut'] == 'On')then
	print('mouvement')
	if (tonumber(otherdevices_svalues['detecteur_haut_lum'])<10) then
		print('lumiere faible')
		if (os.date('%H') > '23' or os.date('%H') < '9') then
			print('entre 23h et 9h')
			commandArray['Lampe_couloir']='On FOR 30 SECONDS'
		else
			print('entre 9h et 23h')
			commandArray['Group:Couloir']='On FOR 30 SECONDS'
		end
	end
end
return commandArray

Re: [LUA] 'then' expected near 'commandArray'

Publié : 10 juin 2020, 23:15
par Keros
Le else tout seul est bon ;)

Bien vu vil1driver pour la logique au niveau des heures :shock:

Re: [LUA] 'then' expected near 'commandArray'

Publié : 11 juin 2020, 07:17
par denis_brasseur

Code : Tout sélectionner

commandArray['Lampe_couloir']='On FOR 30 SECONDS'
On FOR doit etre exprimé en minutes.
The wiki http://www.domoticz.com/wiki/LUA_commands said "FOR" is in minutes when the "AFTER" is in seconds.
Je n'ai jamais réussi à utiliser correctement 'On FOR 30'

Code : Tout sélectionner

commandArray['Lampe_couloir']='On'
commandArray['Lampe_couloir']='Off AFTER 30'

Re: [LUA] 'then' expected near 'commandArray'

Publié : 11 juin 2020, 08:22
par boum

Code : Tout sélectionner

commandArray['Lampe_couloir']='On'
commandArray['Lampe_couloir']='Off AFTER 30'
L'élément 'On' dans la table commandArray sera remplacé par la seconde commande et la lampe ne sera pas allumée.

Code : Tout sélectionner

commandArray[#commandArray+1]={['Lampe_couloir']='On'}
commandArray[#commandArray+1]={['Lampe_couloir']='Off AFTER 30'} 
ou:

Code : Tout sélectionner

table.insert(commandArray, { ['Lampe_couloir'] = 'On' })
table.insert(commandArray, { ['Lampe_couloir'] = 'Off AFTER 30' })

Re: [LUA] 'then' expected near 'commandArray'

Publié : 11 juin 2020, 08:53
par vil1driver
Denis,

Regarde bien le lien que tu cites, il est bien écrit que tu peux préciser l'unité et plus encore

Code : Tout sélectionner

'On FOR 2 SECONDS REPEAT 9 INTERVAL 4 SECONDS'
FOR est chiant car retourne à l'état précédent et non opposé.

Si déjà On lors du On FOR.. A la fin du décompte : retour à On..
Du moins c'était comme ça... Aujourd'hui je ne sais pas

Re: [LUA] 'then' expected near 'commandArray'

Publié : 11 juin 2020, 18:08
par Hexolite
vil1driver a écrit : 11 juin 2020, 08:53 Denis,

Regarde bien le lien que tu cites, il est bien écrit que tu peux préciser l'unité et plus encore

Code : Tout sélectionner

'On FOR 2 SECONDS REPEAT 9 INTERVAL 4 SECONDS'
FOR est chiant car retourne à l'état précédent et non opposé.

Si déjà On lors du On FOR.. A la fin du décompte : retour à On..
Du moins c'était comme ça... Aujourd'hui je ne sais pas
Je testerai avec "On FOR 30 SECONDS" sinon je testerai la méthode @boum.
Pour le retour à l'état précédent c'est pas un soucis je trouve, au contraire.