Page 1 sur 1

format.string en lua

Publié : 04 avr. 2022, 12:38
par knasson
bonjour,

j'essaye de créer des dummy device pour afficher les données qui me parlent sur le plan/

pour ma production solaire j'ai un idx (20) qui me donne toutes les infos que je souhaitent dans le json
avec "http://192.168.1.XX:8080/json.htm?type=devices&rid=20"
je mets les valeurs qui m'intéressent dans des variables:
je souhaite avoir "CounterTody" qui en Kwh dans le json et "Usage" valeur en W qui correspond a la production instantannée.
j'ai 2 devices idx 595 et idx 596
et un script qui ne fonctionne qu'a moitié.

Code : Tout sélectionner

json = (loadfile "/home/kan/domoticz/scripts/lua/JSON.lua")()  -- For Linux
commandArray = {}
local config=assert(io.popen("curl -s 'http://192.168.1.38:8080/json.htm?type=devices&rid=20'"))
local blocjson = config:read('*all')
config:close()
--print (blocjson)
local jsonValeur = json:decode(blocjson)
local function update(idx, value)
    local cmd = string.format("%d|0|%q", idx, value)
    table.insert (commandArray, { ['UpdateDevice'] = cmd } )
    print( string.format("%d|0|%q", idx, value))
end

Pjour = jsonValeur.result[1].CounterToday
PNow = jsonValeur.result[1].Usage

print ("ProdJour"..Pjour)
print ("ProdNow"..PNow)


value = Pjour
update ( 596,value)
value = Pnow
update ( 595,value)

return commandArray
pas d'erreur dans le log
resultat:
ce que je souhaite c'est avoir une valeur en KWh pour la prod du jour et une valeur en W pour la prod instantannée
je galère..pouvez vous m'aider...
Merci
knasson

Re: format.string en lua

Publié : 04 avr. 2022, 18:45
par Keros
Tu peux nous mettre les logs que tu as quand tu exécutes ton script ? Cela nous permettrait de voir ce qui est affiché avec les print().

Re: format.string en lua

Publié : 04 avr. 2022, 20:42
par knasson
Merci keros, Voilà!
2022-04-04 20:35:38.657 Status: LUA : ProdJour17.551 kWh
2022-04-04 20:35:38.658 Status: LUA: ProdNow0 Watt
2022-04-04 20:35:38.659 Status: LUA: 596|0|"17.551 kWh"
2022-04-04 20:35:38.659 Status: LUA: 595|0|nil
Les valeurs "ProdJour" et "ProdNow" sont bien renvoyées et sont correctes (ProdNow est a zero mais il fait nuit!)
je ne comprends pas pourquoi ProdNow est "nil" est ce un problème d'unité?

cdlmt
Knasson

Re: format.string en lua

Publié : 04 avr. 2022, 20:50
par Keros
La ligne print ("ProdJour"..Pjour) te donne : ProdJour17.551 kWh.
Donc la variable Pjour a la valeur 17.551 kWh.

Pour nous humain, 17.551 kWh, nous savons que c'est un nombre avec une unité, mais si tu essayes d'envoyer l'info de cette variable pour remplir la valeur d'un autre widget, cela ne va pas fonctionner ;)

Re: format.string en lua

Publié : 04 avr. 2022, 23:23
par knasson
Ok en fait je devrai poser le problème autrement....je souhaite afficher sur mon plan une autre valeur que celle du compteur production solaire totalisateur et qui correspond a ce widget qu'il me propose et qui me semble sans intérêt d'où la création des variables virtuelles production journaliere et production instantannée.
je ne vois pas comment faire autrement..
Merci de vos suggestions...
cordialement
knasson

Re: format.string en lua

Publié : 05 avr. 2022, 08:30
par knasson
Keros a écrit : 04 avr. 2022, 20:50 La ligne print ("ProdJour"..Pjour) te donne : ProdJour17.551 kWh.
Donc la variable Pjour a la valeur 17.551 kWh.

Pour nous humain, 17.551 kWh, nous savons que c'est un nombre avec une unité, mais si tu essayes d'envoyer l'info de cette variable pour remplir la valeur d'un autre widget, cela ne va pas fonctionner ;)
Si je comprends bien tu suggères que je ne dois pas envoyer une "chaine de caractères" pour la mise a jour du device mais une valeur?

Re: format.string en lua

Publié : 05 avr. 2022, 12:31
par Keros
Oui, je pense que c'est le [espace]kWh qui pose le souci.

Re: format.string en lua

Publié : 05 avr. 2022, 23:20
par knasson
Bonsoir,

Pb résolu je prend en device virtuel un custom sensor Kwh pour la production du Jour, et un custom sensor W pour la production instantanée et j'ai abandonné la fonction

Code : Tout sélectionner

--local function update(idx, value)
   -- local cmd = string.format("%d,%d", idx, value)
   -- table.insert (commandArray, { ['UpdateDevice'] = cmd } )
   -- print( string.format("%d,%d", idx, value))
--end
car je ne maitrise pas l'instruction string.format...
et donc je fais un script pour la prod du jour et un avec la prod instantanée.
L'avantage c'est que ca marche...

cordialement,
knasson