[LUA] 'then' expected near 'commandArray'

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Hexolite
Messages : 29
Inscription : 18 févr. 2019, 14:14

[LUA] 'then' expected near 'commandArray'

Message 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 :)
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

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

Message 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 ...
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message 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...
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Hexolite
Messages : 29
Inscription : 18 févr. 2019, 14:14

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

Message 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
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

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

Message par Keros »

Le else tout seul est bon ;)

Bien vu vil1driver pour la logique au niveau des heures :shock:
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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'
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

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

Message 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' })
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

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

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Hexolite
Messages : 29
Inscription : 18 févr. 2019, 14:14

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

Message 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.
Répondre