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&param=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