Page 2 sur 2

Re: script time et commandArray ['updateDevice'] incompatible ?

Publié : 17 janv. 2016, 11:29
par rimram31
vil1driver a écrit :c'est le mot array qui te dérange ? vrai que ça ne veut pas dire tableau ;)
:D non ce qui me dérange c'est que LUA n'a pas de vrais tableaux mais des map ou dictionnaires qui servent de tableau a défaut. Et ensuite que domoticz met a peu près tout dans une entrée de commandArray, un nom de peripherique, un nom de commande, un indice 1, 2, 3 ... J'ai jeté un oeil au source EventSystem.cpp (main) disons qu'on est loin de l'etat de l'art sur ce type de design. Mais bon, on va pas le dire trop fort et on remercie les dev. ;)

Désolé du HS

Re: script time et commandArray ['updateDevice'] incompatible ?

Publié : 18 janv. 2016, 00:09
par alexbi
bon j'ai enfin réussi !!

je fais un petit retour des problèmes rencontrés :

mon script chauffage (enfin un bout):

Code : Tout sélectionner

if (temperature <= (consigne_1 - hysteresis) and otherdevices[vacances] == 'Off' and fenetres_fermees and otherdevices[presence] == 'On' and MF_OFF and otherdevices[radiateur] == 'Off') 
			or (MF_ON and otherdevices[radiateur] == 'Off' and temperature <= (consigne_1 - hysteresis))then
             print('Allumage du chauffage dans le salon consigne_1')
             commandArray[radiateur]='On'
             --commandArray[5]={['UpdateDevice']='118|0|20.4'}
            -- commandArray['Variable:consigne_salon'] = '20.4'
            commandArray['OpenURL']=url..'/json.htm?type=command&param=updateuservariable&idx=31&vname=consigne_salon&vtype=1&vvalue=20.4'
pour commencer après plusieurs tests, le json n'aime pas pas les espaces... et moi j'avais comme variable 'consigne salon' que j'ai remplacé par 'consigne_salon' sinon ça fonctionne pas (et la on va me répondre fallait mettre des '' ?)

(pour info : pour le vtype de json 0=entier, 1=décimal, 2= chaine , ...)

le json sur cette commande fonctionne bien, la variable est bien mise a jour et le changement de la variable peut être utilisé par un script_variable. Normale on va me dire ... ba non parce que

commandArray['Variable:consigne_salon'] = '20.4' change la variable MAIS le script variable ne reconnait pas le changement d'état de la variable si quelqu'un a une explication je veux bien l’écouter pcq ça m'a bien pris la tête !

pour résumer cette première partie mon chauffage s'enclenche quand consigne = 20.4 et envoie un changement de variable via json valeur 20.4

puis

pour la deuxième partie un script_variable qui détecte un changement de variable et va envoyer la variable vers un device virtuel de température avec la valeur de consigne_salon

Code : Tout sélectionner

-- script_variable_ConsigneSalon.lua

local url = '192.168.2.62:8084' -- user:pass@ip:port de domoticz

commandArray = {}

if (uservariablechanged['consigne_salon']) then 
   
    commandArray['OpenURL']=url..'/json.htm?type=command&param=udevice&idx=118&nvalue=0&svalue='.. uservariables['consigne_salon'] 
    
 end   
 
  print ('consigne_salon: '..uservariables['consigne_salon'] )
 

return commandArray

Merci a ceux qui m'ont aidé

PS: vil1driver, j'adore comment tu as condensé mon premier script (de noob) en 4 lignes (..uservariables['consigne_salon'], je ne connaissais pas )

Re: script time et commandArray ['updateDevice'] incompatible ?

Publié : 18 janv. 2016, 09:04
par vil1driver
Salut,

Json ou plutôt les url aiment bien les espaces mais encodés ;) %20

Le script variable ne voit la mise a jour d'une variable que si elle à été modifié par une requête json (ou à la main)

Encore la rigueur des devs de domoticz certainement ;)

Re: script time et commandArray ['updateDevice'] incompatible ?

Publié : 18 janv. 2016, 10:26
par rimram31
vil1driver a écrit :...Encore la rigueur des devs de domoticz certainement ;)
Ca pourrait pas poser des soucis de réentrance ? D'ailleurs la question se pose dans le cas d'un appel http/json, par exemple un script device modifie une variable qui entraine l'appel du script variable qui lui-même modifie un device ? -> appels infinis, time out ?

Re: script time et commandArray ['updateDevice'] incompatible ?

Publié : 19 janv. 2016, 23:52
par alexbi
je ne sais pas si c'est de ca dont vous parliez mais il y a un nouvel article

http://easydomoticz.com/les-tables-domoticz/