Device Texte : Mise à jour en LUA

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 <\>.
Répondre
didi
Messages : 32
Inscription : 27 janv. 2018, 22:15

Device Texte : Mise à jour en LUA

Message par didi »

bonjour
j'ai un device Texte qui s'appelle TOTO avec idx = 38 que je veux mettre à jour en mettant le texte "bravo" dans le device .
J'utilise en LUA la commande :
commandArray[textDeviceIdx] = { ['UpdateDevice'] = textDeviceIdx..'|0|'..'some text' }
et en remplaçant :
CommandeArray[TOTO] = {['UpdateDevice'] = TOTO..'|0|'..'bravo' }

Domoticz me donne une erreur dans les logs...

Où est l'erreur?

merci
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Device Texte : Mise à jour en LUA

Message par Neutrino »

['UpdateDevice'] ne fonctionne qu'avec un IDX
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
didi
Messages : 32
Inscription : 27 janv. 2018, 22:15

Re: Device Texte : Mise à jour en LUA

Message par didi »

je fais ceci :
commandArray['UpdateDevice'] = '38|0|Bravo'
et le device Texte dont l'IDX = 38 contient 'Bravo' .

est-ce correct de faire comme çà?
y a-t-il d'autres syntaxes plus complètes et plus intelligentes?

merci
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Device Texte : Mise à jour en LUA

Message par denis_brasseur »

Code : Tout sélectionner

   CommandeArray[TOTO]
commandArray ne prend pas de e et un c minuscule
Et ne s'écrit pas avec le nom, mais comme ceci (par exemple)

Code : Tout sélectionner

commandArray[#commandArray+1]
Dernière modification par denis_brasseur le 01 juin 2020, 17:37, modifié 2 fois.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Device Texte : Mise à jour en LUA

Message par Neutrino »

Quelques exemples valides :

Code : Tout sélectionner

 commandArray['Switch']='On'
 commandArray['Scene:Livingroom']='On'         -- remember, Scene cannot be turned Off!
 commandArray['Group:Kitchen']='Inactive'
 commandArray['Keyfob']='Group On'
 commandArray['DimmableDevice']='Set Level 50'
 commandArray['Selector']='Set Level: 50'
 commandArray['SendNotification']='subject#body#0'
 commandArray['SendEmail']='subject#body#your@email.com'
 commandArray['OpenURL']='www.yourdomain.com/api/movecamtopreset.cgi' 
 commandArray['Blinds']='On RANDOM 30'
 commandArray['Porch Light']='On FOR 2'
 commandArray['Variable:MyVar']='Some value'
 commandArray['Variable:MyVar']='Some value AFTER 3'
 commandArray[textDeviceIdx] = { ['UpdateDevice'] = textDeviceIdx..'|0|'..'some text' }
 commandArray[tempDeviceIdx] = { ['UpdateDevice'] = tempDeviceIdx..'|0|'..temp }
 commandArray[tempHumDevIdx] = { ['UpdateDevice'] = tempHumDevIdx..'|0|'.. temp ..';'.. hum ..';'.. hum_stat }
Source / bible : https://www.domoticz.com/wiki/Events
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
didi
Messages : 32
Inscription : 27 janv. 2018, 22:15

Re: Device Texte : Mise à jour en LUA

Message par didi »

donc
si j'utilises : commandArray[textDeviceIdx] = { ['UpdateDevice'] = textDeviceIdx..'|0|'..'some text' }

et que mon device Texte s'appelle TOTO d'idx 38 , et je veux mettre le texte 'Bravo' dedans,
est-ce qu'il faut faire ceci :
commandArray[TOTO] = { ['UpdateDevice'] = TOTO..'|0|'..'Bravo' }
ou cela :
commandArray[38] = { ['UpdateDevice'] = 38..'|0|'..'Bravo' }

??

merci
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Device Texte : Mise à jour en LUA

Message par vil1driver »

Salut,

Sur ce coup là je trouve le wiki un peu limite
La meilleure syntaxe est celle ci (dixit Denis)

Code : Tout sélectionner

commandArray[#commandArray+1] = { ['UpdateDevice'] = 38..'|0|'..'Bravo' }
A privilégier lorsque l'on veut agir plusieurs fois sur le même dispositif dans un même script.
Ex
On
Off after 10

Dans ton cas ceci suffit

Code : Tout sélectionner

commandArray['UpdateDevice'] = 38..'|0|'..'Bravo' 
Ou

Code : Tout sélectionner

local msg = 'bravo' 
commandArray['UpdateDevice'] = 38..'|0|'..msg 
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
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Device Texte : Mise à jour en LUA

Message par Wolfen38 »

J'essaie aussi de faire quelques choses du genre, je récupère les prévisions de pluie, et je veux les envoyer dans un widget

J'ai ce bout de code :

Code : Tout sélectionner

	rain = jsonValeur.daily[1].rain
	rain2 = jsonValeur.daily[2].rain
	
	if rain ~= nil then 
	
	commandArray['Variable:Pluie-jour'] = tostring(rain)
	
	else
	commandArray['Variable:Pluie-jour'] = '0'
	end
	
	if rain2 ~= nil then 
	commandArray['Variable:Pluie-lendemain'] = tostring(rain2)
	else
	commandArray['Variable:Pluie-lendemain'] = '0'
	end
	Pluiejour = uservariables['Pluie-jour']
	Pluielendemain = uservariables['Pluie-lendemain']
	commandArray[#commandArray+1] = { ['UpdateDevice'] = 397..'|0|'..Pluiejour }
	commandArray[#commandArray+1] = { ['UpdateDevice'] = 398..'|0|'..Pluielendemain }
Mais je recois cette erreur :

Code : Tout sélectionner

2020-06-03 13:41:00.478 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_meteo.lua: /home/pi/domoticz/scripts/lua/script_time_meteo.lua:74: malformed number near '397..'
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: Device Texte : Mise à jour en LUA

Message par Wolfen38 »

Bon, apparemment, ca fonctionne avec le numero d'idx entre ', pas 38.. mais '38'..
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Device Texte : Mise à jour en LUA

Message par denis_brasseur »

Code : Tout sélectionner

    commandArray[#commandArray+1] = { ['UpdateDevice'] = '397|0|'..Pluiejour }   
Effectivement, l'idx doit être placé entre les quotes.

Code : Tout sélectionner

   commandArray[#commandArray+1] = { ['UpdateDevice'] = 'idx|0|valeur a afficher'}  
A moins d'envoyer l'idx dans une variable

Code : Tout sélectionner

   commandArray[#commandArray+1] = { ['UpdateDevice'] = idx..'|0|'..Pluiejour }  
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Répondre