Page 2 sur 3

Re: récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 29 nov. 2020, 14:06
par denis_brasseur
Essaie :

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] = idx..'|0|'..puissance..';0'}
Update device (Electrique)

Re: récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 29 nov. 2020, 14:13
par Enamaryn
denis_brasseur a écrit : 29 nov. 2020, 14:06 Essaie :

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] = idx..'|0|'..puissance..';0'}
Update device (Electrique)
Merci Denis !
Mais ce code ne me sert pas car... je ne le comprends pas. Que dois-je modifier pour que cela fonctionne avec mon script ?

Re: récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 29 nov. 2020, 16:37
par Keros
A toi de faire le script,
  • qui récupère l'info souhaité : ça il semblerait que tu y arrives avec ton print
  • qui envoi les infos où tu souhaites : Denis viens de te donner la fonction permettant d'envoyer des infos dans un device électrique.
  • qui s’exécute quand tu le souhaites : Voir Le point sur les scripts lua de Domoticz et les autres explications que j'ai regroupé dans le lien Débuter en programmation dans ma signature.
Je pense qu'il te manque que la fonction de Denis à modifier pour y arriver. Tu as deux valeurs à renseigner ;)

Re: récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 29 nov. 2020, 16:52
par Enamaryn
Keros a écrit :A toi de faire le script,
  • qui récupère l'info souhaité : ça il semblerait que tu y arrives avec ton print
  • qui envoi les infos où tu souhaites : Denis viens de te donner la fonction permettant d'envoyer des infos dans un device électrique.
  • qui s’exécute quand tu le souhaites : Voir Le point sur les scripts lua de Domoticz et les autres explications que j'ai regroupé dans le lien Débuter en programmation dans ma signature.
Je pense qu'il te manque que la fonction de Denis à modifier pour y arriver. Tu as deux valeurs à renseigner ;)
Ce que ma envoi Denis, tel quel, ne fonctionne pas. J'ai essayé de remplacer l'idx que j'ai par celui de mon capteur virtuel. Notamment 34, de remplacer puissance par la variable "MyUptime" qui renseigne du coup la puissance instantané.

Et cela ne fonctionne pas. Comme je ne comprends pas la fonction qu'il me donne et comment je dois l'utiliser.. Compliqué. J'ai essayé du coup un tas de variante sans succès.

Si vous pouvez m'expliquer la fonction je pourrais l'adapter à mon usage.

Re: récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 29 nov. 2020, 16:59
par Keros
Denis t'a donné la source de son info. Normalement en remontant, tu devrais comprendre comment elle fonctionne.
Enamaryn a écrit : 29 nov. 2020, 16:52 Cela ne fonctionne pas
Qu'est-ce qui ne fonctionne pas ? Tu as des erreurs ? Que dises les logs ?

De plus, nous avons besoin de voir ton code pour t'aider.

Re: récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 30 nov. 2020, 05:14
par denis_brasseur
Enamaryn a écrit : 29 nov. 2020, 16:52 Ce que ma envoi Denis, tel quel, ne fonctionne pas. J'ai essayé de remplacer l'idx que j'ai par celui de mon capteur virtuel. Notamment 34, de remplacer puissance par la variable "MyUptime" qui renseigne du coup la puissance instantané.

Et cela ne fonctionne pas. Comme je ne comprends pas la fonction qu'il me donne et comment je dois l'utiliser.. Compliqué. J'ai essayé du coup un tas de variante sans succès.
Tout est pourtant dans la commande
Si idx est l'idx de ton capteur, et MyUptime la valeur à mettre à jour, cela donne ceci :

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] = idx..'|0|'..MyUptime..';0'}
SI tu passes l'idx sans passer par une variable, ça devient ceci :

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] = '35|0|'..MyUptime..';0'}
Tu peux tester ceci et voir si ton device se met à jour avec la valeur 18 :

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] = '35|0|18;0'}
Sans voir ton code, l'état de ton device après mise à jour et tes logs, pas facile de t'aider.
Si vous pouvez m'expliquer la fonction je pourrais l'adapter à mon usage.
L'API json sur le wiki domoticz fait référence pour tout ce qui est UpdateDevice
Electricity (instant and counter)

Code : Tout sélectionner

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=POWER;ENERGY
- IDX = id of your device (This number can be found in the devices tab in the column "IDX")
- POWER = current power
- ENERGY = cumulative energy in Watt-hours (Wh) This is an incrementing counter. (if you choose as type "Energy read : Computed", this is just a "dummy" counter, not updatable because it's the result of DomoticZ calculs from POWER)

Re: récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 30 nov. 2020, 05:27
par Enamaryn
Merci Keros et Denis,

J'ai enfin réussi à trouver la solution. J'avais déjà essayé tout un tas de fonction avec mes variables, sans succès. En faisant la même chose mais en utilisant les variables de l'exemple, ça fonctionne. Voici le code final :

Code : Tout sélectionner

-- On appel JSON pour decoder le texte donner par shelly a cette adresse http://ip.du.she.lly/status sur un reseau local --
	json = (loadfile "/opt/domoticz/scripts/lua/JSON.lua")()  -- For Linux    
	--  API call
	local config=assert(io.popen('curl "http://192.168.1.24/status"')) -- ip du shelly
	local result = config:read('*a')
	config:close()
	output = json:decode(result)

-- déclaration des variables avec les bonnes données issu du json --
	local idx = 34 -- on rentre le bon id du capteur virtuel, capteur Utilisation Electrique ou en anglais Usage electric
	local energieInstantanee = output.meters[1].power -- on prend l'information dans le tableau JSON

-- on update le capteur virtuel --
	domoticz_updateDevice(idx,'',energieInstantanee)
Après analyse de tout ce que j'ai fais, je pense que j'ai du faire une erreur dans l'écriture du code. Un espace de trop, une virgule, un guillement..

En tout les cas cela fonctionne !

Merci à vous

Re: [RESOLU]récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 30 nov. 2020, 12:47
par Keros
On aurait pu t'aider à trouver cet espace, virgule ou guillemet qui te posait problème... Mais il aurait fallut qu'on voit ton code :roll:

Là, tu as trouvé une autre solution, tout seul. Tant mieux, c'est comme ça qu'on apprend et qu'on progresse !

Re: [RESOLU]récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 30 nov. 2020, 18:14
par denis_brasseur
On pourrait également t'aider si tu nous donnais la totalité du code.

Code : Tout sélectionner

domoticz_updateDevice(idx,'',energieInstantanee)
correspond à une fonction ?

Re: [RESOLU]récuperer des infos JSON pour transmettre à IDX en LUA

Publié : 30 nov. 2020, 22:17
par Keros
Je me suis posé la même question et il semblerait que ce soit une fonction de DomoticZ (je suis passé par Gogogle pour voir car la recherche sur le forum remonte tout les posts avec DomoticZ :? )