[Résolu] - Fixer la valeur d'un capteur virtuel en LUA

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
vinchz31
Messages : 312
Inscription : 21 nov. 2016, 07:51

Re: [Résolu] - Fixer la valeur d'un capteur virtuel en LUA

Message par vinchz31 »

Si je reprends ce qui est indiqué sur la page https://www.domoticz.com/wiki/Domoticz_ ... ual_sensor , les nvalues et svalues sont fixés pour les virtual sensor ainsi :
nsvalues.jpg
nsvalues.jpg (75.17 Kio) Consulté 4759 fois
Ainsi, on observe que le capteur d'humidité est défini ainsi :
HUM : nvalue=HUM svalue=1 to 3
Ce qui confirme l'utilisation du Nvalue pour fixer l'humidité et la nécessité de positionner une NValue et une Svalue
Sur cette même page sont précisées les valeurs associées et si on descend un peu on retrouve :
nsvalues2.jpg
nsvalues2.jpg (43.92 Kio) Consulté 4758 fois
Ce qui permet de comprendre à quoi sert le SValue pour l'humidité par exemple...


De même la température est défini ainsi :
TEMP: svalue=TEMP
Ce qui confirme l'utilisation exclusive de la Svalue pour fixer la température et la nécessité de mettre une nvalue à 0 au milieu (|0|)

Il faut donc utiliser ce tableau pour tous les capteurs virtuels...
limonade67
Messages : 36
Inscription : 29 nov. 2016, 11:23

Re: [Résolu] - Fixer la valeur d'un capteur virtuel en LUA

Message par limonade67 »

Slt
J'ai à peu près le même problème.
Je souhaite mettre à jour 2 capteurs virtuels Fuel-utilisé (idx=34) et FuelECS (idx=121).
Les 2 capteurs sont de type général.

commandArray['UpdateDevice'] = 34 .. '|0|' .. tostring(Litre_Compteur)
commandArray['UpdateDevice'] = 121 ..'|' .. tostring(Litre_Compteur_ECS) ..'|' .. 0


Avec les 2 lignes ci-dessus, seul le capteur virtuel 121 se met à jour, et quand je met des -- de commentaire, le capteur 34 se met à jour.
Cela fait une semaine que je fais des test pour comprendre pourquoi.

Voici le script complet :


-- Ce script permet de remonter une estimation de la consommation en fioul de la chaudière dans un capteur virtuel de type "Counter Incremental".
-- A enregistrer en script_time.lua
--Créer une uservariable. Réglage /plus d'option / Variable utilisateur. Nommé "Total_compteur"

--------------------------------
------ Variables à éditer ------
--------------------------------
local switch = 'Chaudière' -- Nom de l'interrupteur virtuel Chauffage dans Domoticz
local switch2 = 'Pompe_ECS' -- Nom de l'interrupteur virtuel ChauffageECS dans Domoticz
local counter = 34 -- Numéro idx du Counter Incremental dans Domoticz
local counterECS = 121 -- Numéro idx du Counter Incremental dans Domoticz
local current_date = (os.date("30/12/2016")) -- Date courante
local current_heure = (os.date("17:57")) -- Heure courante
--------------------------------
-- Fin des variables à éditer --
--------------------------------

--------------------------------
---Paramètres--
----------------------------------
Debit_gicleur = 0.60 --Gallon/heure
Conv_Gallon = 3.78541178 --Litres
Debit_gicleur_l_min = Debit_gicleur * Conv_Gallon / 60 -- En litres/min
Var_ajustement = 1 --Ajustement entre circulateur ON et chaudière ON

-------------------
-- Fonction time --
-------------------
time = os.date("*t")

function timedifference(d)
s = otherdevices_lastupdate[d]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end

------------------- --------------------
-- Fonction arrondir à deux décimales --
------------------- --------------------
-- Le chiffre"x" (dec or x) correspond au nombre de décimales à prendre en compte dans le resultat
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 2)
return math.floor(num * mult + 0.5) / mult
end
end

commandArray = {}

-----------------------------------------------------------------------------------------------------
--------------------Calcul du temps de fonctionnement de la chaudière -------------------------------
-----------------------------------------------------------------------------------------------------

-- Si chauffage ON incrémentation de la variable Domoticz "Total_compteur" --
if (otherdevices[switch]=='On') then
commandArray['Variable:Total_compteur']= tostring(uservariables["Total_compteur"] +1)
if (otherdevices[switch2]=='On') then
commandArray['Variable:Total_compteur_ECS']= tostring(uservariables["Total_compteur_ECS"] +1)
end
end

-- Envoi de la varaible valeur Total_compteur dans le Custom Counter Valeur_Compteur en min--
Valeur_Compteur = tostring(uservariables["Total_compteur"])
Valeur_Compteur_ECS = tostring(uservariables["Total_compteur_ECS"])
-- Transforme Valeur_compteur en litre pour gicleur 0.6 gallon/heure
Litre_Compteur = (Valeur_Compteur )* (Debit_gicleur_l_min)*(Var_ajustement)
Litre_Compteur_ECS = (Valeur_Compteur_ECS )* (Debit_gicleur_l_min)*(Var_ajustement)

-- Envoi de la valeur dans le compteur "counter" --
commandArray['UpdateDevice'] = 34 .. '|0|' .. tostring(Litre_Compteur)
--commandArray['UpdateDevice'] = 121 ..'|' .. tostring(Litre_Compteur_ECS) ..'|' .. 0


-- Envoi des informations dans le LOG si chauffage ON --
if (otherdevices[switch]=='On') then
print("")
print("Cumul du temps de fonctionnement chaudière "..Valeur_Compteur.." Minutes".." // "..math.floor((Valeur_Compteur/60)).. " Heures")
print("dont "..Valeur_Compteur_ECS.." Minutes".." // "..math.floor((Valeur_Compteur_ECS/60)).. " Heures pour l'eau chaude")
print("")
print("Cumul Litres fioul "..Litre_Compteur.." Litres")
print("dont "..Litre_Compteur_ECS.." Litres pour l'eau chaude")
print("")
end
return commandArray
RFXCOM - RFXtrx433 USB 433.92MHz Transceiver
Aeotec Zwave+ Usb
Synology110J
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Fixer la valeur d'un capteur virtuel en LUA

Message par Jeff »

Attention a ne pas écraser une valeur.
commandArray['OpenURL']='www.premierurl.fr'
commandArray['OpenURL']='www.secondurl.fr'
seul le secondurl.fr sera appelé.
C'est une histoire de tableau avec des colonnes..., c'est pour cela qu'on utilise dans ton cas

Code : Tout sélectionner

local CmdIdx=1
commandArray[CmdIdx] = {['UpdateDevice'] = 34 .. '|0|' .. tostring(Litre_Compteur)}
CmdIdx=CmdIdx+1
commandArray[CmdIdx] = {['UpdateDevice'] = 121 ..'|' .. tostring(Litre_Compteur_ECS) ..'|' .. 0}
CmdIdx=CmdIdx+1
Je te l'accord, je le copie sans comprendre exactement tout le fonctionnement, mais ca marche ;)
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
Répondre