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