Page 1 sur 1
Capteur viltuelle de Mesure domoticz
Publié : 31 août 2015, 14:39
par flosers
Bonjour,
Je cherche à créer un capteur de mesure virtuelle qui irait chercher un nombre dans un fichier situé sur le raspberry.
J'aimerais savoir si quelqu'un sait comment faire ça ?
merci d'avance
Re: Capteur viltuelle de Mesure domoticz
Publié : 31 août 2015, 14:55
par vil1driver
salut,
le capteur ne peut pas aller chercher, c'est à toi de lui envoyer les infos (voir
commandes Json)
pour le créer il te faut commencer par ajouter un nouveau matériel (choisir Dummy)
puis tu verras de ce nouveau matériel, un bouton 'créer capteurs virtuels'
si tu as bien coché 'Accepter de nouveaux dispositifs matériels' dans les préférences,
tu trouveras ton nouveau capteur dans la liste des dispositifs inutilisés.
Re: Capteur viltuelle de Mesure domoticz
Publié : 01 sept. 2015, 18:55
par flosers
ok ça marche ! Merci
Re: Capteur viltuelle de Mesure domoticz
Publié : 02 sept. 2015, 20:24
par mulot35
salut,
un exemple ici
http://www.domoticz.com/forum/viewtopic.php?f=14&t=1641
je l'avais un peut modifié
Code : Tout sélectionner
--|6969.690
----------------
--Zone a editer
----------------
local thisfilename = "/home/pi/domoticz/scripts/lua/script_device_Compteur_eau.lua" --emplacement de ce fichier nommé avec le nom du capt virtuel
local Compt_virtuel_eau_id = 159 --idx du capteur virtuel
local Capt_impulsion = "Compteur_impulsion" --nom du capteur physique rfxmeter
local cptmaxi = 5 --comptage maximum sur 30sec (voir script arduino)
userVariableerreurcompteurdeau = 'Erreur_de_comptage_compteur_d_eau' --Uservariable trop de comptage
-----------------
--fin de la zone a editer
-----------------
commandArray = {}
--Si le compteur impulsion est mis a jour
if devicechanged[Capt_impulsion] then
--Si le capteur reel indique un nombre d'impulsion supérieur a 0 et inferieur au nombre maximum théorique d'impulsions
if (((tonumber(otherdevices_svalues[Capt_impulsion])) > 0) and ((tonumber(otherdevices_svalues[Capt_impulsion])) < (tonumber(30 / cptmaxi) + 1))) then
--Ouvre ce fichier et lit la première ligne
file = io.open(thisfilename, "rb")
sContents = file:read("*l")
file:close()
-- Analyser et mettre à jour le countvalue
foo, snumber = sContents:match("([^,]+)|([^,]+)")
local impulsionmill = ((tonumber(otherdevices_svalues[Capt_impulsion])) / 1000)
local countvalue = snumber + tonumber(impulsionmill)
local newline = foo .. "|" .. string.format("%.3f", tostring(countvalue))
-- Maj du compteur virtuel
ts = Compt_virtuel_eau_id .. "|0|" .. string.format("%.3f", tostring(countvalue))
commandArray['UpdateDevice'] = ts
-- Ecrit la nouvelle valeur
local file = io.open(thisfilename, "r+")
file:write(newline)
file:close()
print("Compteur eau entre 0 et 6 impulsions: " .. tonumber(impulsionmill) .. " L les dernieres 30sec" )
--Si le compteur a impuslion indique plus de 6 impulsions-- (30sec(temps entre deux communications)/5sec(temps entre deux impulsions)=6 maxi) (7,8,9,...)
elseif ((tonumber(otherdevices_svalues[Capt_impulsion])) > (tonumber(30 / cptmaxi ))) then
commandArray['Variable:'..userVariableerreurcompteurdeau] = (tonumber(uservariables[userVariableerreurcompteurdeau]) + 1)
print("superieur a 6 impulsions = erreur de comptage uservariable actualisé")
end
end
return commandArray