Page 1 sur 1
Virtual texte
Publié : 21 avr. 2020, 14:51
par Juliendim
Bonjour,
Je souhaiterais pouvoir afficher dans un virtual texte un texte et une variable utilisateur.
Par exemple EN CHARGE DEPUIS 35 MINUTES
Le texte etant : EN CHARGE DEPUIS __ MINUTES
La variable utilisateur étant : 35
Cordialement
Re: Virtual texte
Publié : 21 avr. 2020, 15:03
par boum
En dzVents, ça donnerait qq chose comme ça :
Code : Tout sélectionner
return {
on = {
variables = { 'NomVariableUtilisateur' }
},
execute = function(domoticz, variable)
local virtualText = domoticz.devices('NomDispositifTexteVirtuel')
virtualText.updateText("EN CHARGE DEPUIS ".. tostring(variable.value) .." MINUTES")
end
}
Documentation :
https://www.domoticz.com/wiki/DzVents:_ ... _scripting
Re: Virtual texte
Publié : 21 avr. 2020, 15:21
par Juliendim
Merci .
Mais je n’arrive pas a le faire fonctionner, Voila en texte ce que je souhaite faire:
Si capteur = Open
Ecrire dans virtuel texte En fonctionnement depuis xxx minutes
Si capteur = Closed
Ecrire dans virtuel texte En charge depuis xx minutes
xx et xxx sont deux variable utilisateur.
Merci
Re: Virtual texte
Publié : 21 avr. 2020, 16:34
par boum
Code : Tout sélectionner
return {
on = {
devices = { 'NomCapteur' },
variables = { 'NomVariableCharge', 'NomVariableFonctionnement' },
},
execute = function(domoticz, item)
local capteur = domoticz.devices('NomCapteur')
local variable
local texte
if capteur.state == 'Open' then
texte = "En fonctionnement depuis "
variable = domoticz.variables('NomVariableFonctionnement')
else
texte = "En charge depuis "
variable = domoticz.variables('NomVariableCharge')
end
local virtualText = domoticz.devices('NomDispositifTexteVirtuel')
virtualText.updateText(texte .. tostring(variable.value) .." minutes")
end
}
Re: Virtual texte
Publié : 21 avr. 2020, 17:52
par Juliendim
Merci,
cependant il fonctionne mais ne se met pas a jour reste sur 1 min.
Dois je le mettre en script time?
Cordialement
Re: Virtual texte
Publié : 21 avr. 2020, 18:35
par boum
Ça dépend de comment sont mises à jour les variables utilisateur.
Par l'interface ou par un appel via l'api JSON, le script devrait être appelé automatiquement à chaque fois qu'une des deux variables est changée.
Si la variable est changée en Lua classique (pas dzVents), par :
Code : Tout sélectionner
commandArray['Variable:'..USERVARIABLENAME] = USERVARIABLEVALUE
Aucun événement n'est déclenché. Dans ce cas-là, il faut modifier le script pour effectuer un OpenURL :
Code : Tout sélectionner
commandArray['OpenURL']= 'http://IP:PORT/json.htm?type=command¶m=updateuservariable&vname='..USERVARIABLENAME..'&vtype='..USERVARIABLETYPE..'&vvalue='..USERVARIABLEVALUE
Dans le doute, il faut augmenter le niveau de verbosité des logs, et ajouter des domoticz.log(...) dans le script pour voir ce qui se passe.
Re: Virtual texte
Publié : 21 avr. 2020, 18:59
par Juliendim
Les variables sont mises a jour par un script lua:
"commandArray = {}
if (otherdevices[switch]=='Closed') then
commandArray['Variable:cpteur tond']= tostring(uservariables["cpteur tond"] +1)
end
if (otherdevices[switch]=='Open') then
commandArray['Variable:cpteur tond1']= tostring(uservariables["cpteur tond1"] +1)
end
return commandArray"
Par contre je ne vois pas ou mettre le code indiqué :
"commandArray['Variable:'..USERVARIABLENAME] = USERVARIABLEVALUE"
Cordialement
Re: Virtual texte
Publié : 22 avr. 2020, 11:01
par boum
Bref, exactement comme je l'ai écrit précédemment, le changement des variables dans ce cas ne déclenche aucun script en réaction.
On peut remédier à ceci de plusieurs façons :
- utiliser une commande OpenURL pour changer la variable utilisateur et déclencher l'autre script dzVents
- créer deux dispositifs "Custom Sensor" (minutes), le changement de valeur déclenchera le script
- consolider les deux scripts en un seul script dzVents qui met à jour variables et texte
- consolider les deux scripts en un seul script Lua classique qui met à jour le texte
Il faut voir ce qui sera le plus simple à maintenir. (Note : savoir où étaient modifiées les variables dans le premier message aurait problablement déjà donné une différente réponse…)
Code : Tout sélectionner
commandArray = {}
if (otherdevices[switch]=='Closed') then
local temps = tostring(uservariables["cpteur tond"] +1)
commandArray['Variable:cpteur tond']= temps
table.insert(commandArray, { UpdateDevice = otherdevices_idx['NomTexteVirtuel'].. '|0|En charge depuis ' .. temps .. ' minutes' })
end
if (otherdevices[switch]=='Open') then
local temps = tostring(uservariables["cpteur tond1"] +1)
commandArray['Variable:cpteur tond1']= temps
table.insert(commandArray, { UpdateDevice = otherdevices_idx['NomTexteVirtuel'].. '|0|En fonctionnement depuis ' .. temps .. ' minutes' })
end
return commandArray