
Cool alors.
Et est-ce que tu connais le fonctionnement de tous ces "commandArray" "devicechanged" "uservariables_lastupdate" "timeofday" et autre ?
En faite, il s'agit de table. On peut imaginer que ce sont des tableaux de deux colonnes. Tu peux y mettre par exemple une valeur seul en colonne 1, une valeur en colonne 1 et sa clef en colonne 2 (par exemple une variable et son résultat) ou alors carrément une autre table complète.
La table sera lu soit en ligne, soit par valeur (table[1] ou table['MyOtherDeviceName1']). C'est a dire que si tu viens insérer dans la table une clef différent pour une même valeur, alors il s'agira d'un remplacement. Sinon, si tu vient modifier une valeur et sa clef par ligne alors il s'agira d'un ajout.
Pour domoticz, ce sont toutes des tables d'entrées, c'est a dire qu'elles sont créés pour la récupération d'information de domoticz vers le script, sauf commandArray qui est une table de sortie du script vers domoticz. Dans les tables d'entrée, domoticz y place certaines valeurs. En général, il va y placer le nom d'un device, d'une variable, d'une scène ou autre, dans la première colonne, la deuxième colonnes sera surement l’état, le résultat ou le contenu, de ce qui se trouve en première colonnes.
Pour commandArray (qui est la table de sortie), tu viendras y mettre toi même le nom du device, et l’état que tu veux lui attribuer. A la toute fin du script, domoticz vient chercher cette table, scrute les colonnes pour chercher le nom des devices et affecte l’état que tu as mis en deuxième colonne.
Domoticz ici pourra mettre l’état On au device 'MyOtherDeviceName1':
On initialise une table avec des crochets: commandArray={} et on retourne la table a domoticz avec return commandArray. C'est pour cela qu'il faut impérativement ces chaines en début et en fin de script.
Ce qui donne visuellement: commandArray = { 'Colonnes 1' = 'Colonnes 2' ; etc ; etc }
Il y a plein de façon de manipuler les tables, notamment tu peux indiquer que tu veux (au lieu de la méthode habituelle) en première ligne de la colonne, insérer une table avec le nom de ton device et son statu, exemple:
commandArray[1]={'MyOtherDeviceName1'='On'}
Quand domoticz viendra scruter cette table il comprendra la même chose.
Tu peux du coup en arriver à '#commandArray' qui te renvoi la taille de la table. Celle la sera de 0 au début, et du nombre d'entrée que tu y auras inséré a la fin.
#devicechanged elle sera constamment a 1, car elle n'est créé qu'avec le dernier changement d’état du dernier device changeant d’état. #otherdevice elle aura le nombre total de device dans domoticz etc etc.
Et c'est pour cela qu'on peut automatiquement créé des lignes différentes dans commandArray avec :
Code : Tout sélectionner
commandArray[#commandArray+1]={['MyOtherDeviceName1'] = 'On'}
on calcul la taille en cours de la table, on rajoute 1 pour une nouvelle ligne et on insère la valeur et la clef (device, statu).
Tous ça pour en arriver à un problème qui se pose souvent lorsqu'on essai d'activer plusieurs device dans un seul script. Il faut impérativement que ce soit clair pour domoticz.
Si tu fais plusieurs commandArray à la suite avec le même device, ton script va remplacer la clef de la même valeur. Alors que si tu viens insérer le device et son statu ligne par ligne, alors tu auras autant de clef que tu as de ligne pour pouvoir changer l'etat de ton device autant de fois. Cependant si aucun timer n'est present les changements auront lieu d'un coup. Voila pourquoi il existe aussi les 'ON FOR', 'ON AFTER' ou autre...
On peut naviguer dans les tables avec des boucles:
Code : Tout sélectionner
for deviceName,deviceValue in pairs(otherdevices) do
print ( "Device: '..deviceName..'" - Etat: '..deviceValue)
end
Mais aussi simplement avec next:
Code : Tout sélectionner
print ( "Device: '..next(devicechanged)..'" - Etat: '..devicechanged[next(devicechanged)] )
J'ai recensé toutes ces tables (qui pour certaines ne sont pas dans le wiki). Ces tables sont des créations domoticz et pas lua. Voila pourquoi il est dur de les connaitre si le wiki ne les recense pas:
https://easydomoticz.com/forum/viewtopi ... 944#p38944