Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

J'ai un binary sensor (FGBS) qui m'informe si ma chaudière est en fonctionnement ou pas.

Je voudrais incorporer cela dans les graphes de Lazer.

Je pense donc à  créer une VG pour cela, et à  y stocker toutes les 3 secondes (temps du cycle d'un main loop) si le contact est fermé ou pas.

J'incrémenterais donc ma variable de 3 toutes les 3 secondes, et au bout d'une minute, j'aurais le nombre de secondes de fonctionnement de ma chaudière, qui serait transféré vers la DB de Lazer (et remise à  zéro après le transfert). Je pourrais ainsi visualiser par jour. semaine, mois, ...  la durée de fonctionnement de ma chaudière. (ça ne changera rien à  ma vie, mais c'est rigolo :) )

En multipliant les variables, je pourrais ainsi compter ce que je veux.

Avant que je ne réinvente la roue, est-ce que quelqu'un a déjà  fait ce type de VD ou a des idées sur l'algorithme que je devrais développer ?

Merci

Posté(e)

Je suppose que tu pourrais même utiliser une scène, avec une boucle infinie et un sleep de seulement 1s, tu aurais un meilleure précision.

 

Par contre il va te falloir créer de nouvelles tables et un nouveau type de donnée dans domocharts, non ?

Posté(e)

donc, c'est normal que je n'ai pas trouvé, ça n'existe pas encore ....

 

Merci pour l'idée de la scène, c'est mieux en effet.

 

Pour domochart, je n'ai pas encore regardé, mais n'as-tu pas déjà  prévu le rapatriement de données stockées dans une VG toutes les minutes ?

Et comme tu as prévu une table pour l'humidité, je vais utiliser celle-là , car pour l'instant je ne l'utilise pas.

Te connaissant, lorsque j'aurai développé et testé cette scène, tu l'inclueras dans une prochaine version de domochart ...

Posté(e)

oui tu peux utiliser le type de données "humidity" dans l'immédiat, en attendant qu'on trouve une méthode propre pour l'intégrer.

Posté(e)

Voilàcomment je vois les choses.

--[[
%% properties
169 value
%% globals
--]]

 local currentDate = os.date("*t");
 local TriggerTime = string.format("%02d",currentDate.hour)..":"..string.format("%02d",currentDate.min)..":"..string.format("%02d",currentDate.sec);
 
 time = fibaro:getGlobalValue("CTime");
fibaro:debug(time);
 if (tonumber(time) == 0) then
  -- la première foi la variable Ctime est à0
   fibaro:setGlobal("CTime", TriggerTime);
   fibaro:abort();
 end

_, _, h1, m1, s1 = string.find(time, "(%d+)%d+)%d+)") 
_, _, h2, m2, s2 = string.find(TriggerTime, "(%d+)%d+)%d+)")

dh = h2-h1;
if (dh < 0) then dh = dh + 24; end
dm = m2-m1;
if (dm < 0) then dm = dm + 60; end
ds = s2-s1;
if (ds < 0) then ds = ds + 60; end

local status = fibaro:getValue(169, "value");

if (status == "1") then
  -- le Device pass de off àon
  -- le temps correspond àun temps d'arrêt
  fibaro:debug("arret pendant :"..dh.." h "..dm.." m "..ds.." s");
else
  -- le device passe de on àoff
  -- le temps calculé correspond àun temps de marche
  fibaro:debug("marche pendant :"..dh.." h "..dm.." m "..ds.." s");
end

fibaro:setGlobal("CTime", TriggerTime);

Il faut créer une variable CTime.

Tu peux mettre plusieurs triggers et utiliser json pour gérer plusieurs devices avec la même scène et la même variable.

A toi de voir ce que tu fais avec les temps calculés.

Posté(e)

@Jojo, il me semble que j'avais donné à ohan un bout de code pour faire un truc du genre, si il passe dans le coin...

Posté(e)

Salut,

 

Voilà  le code :

--[[
%% autostart
%% properties
463 value
%% globals
--]]
if (fibaro:countScenes() > 1) then
  fibaro:abort()
end
 
local deviceID = 463
local startedAt = os.time()
local startSource = fibaro:getSourceTrigger()
 
function getActuatorStatus(id)
  return (tonumber(fibaro:getValue(id, "value")) ~= 0)
end
 
if (startSource["type"]~="autostart") then
  local dt = os.date("*t", startedAt)
  local date = string.format("%04d/%02d/%02d %02d:%02d:%02d", dt.year, dt.month, dt.day, dt.hour, dt.min, dt.sec)   
  -- check actuator status and count only when turned on
  if (getActuatorStatus(deviceID)) then
    fibaro:debug("The actuator has been turned on at <font color=\"green\">"..date.."</font>")    
  else
    fibaro:debug("The actuator has been turned off at <font color=\"red\">"..date.."</font>")
  end
end

L'id 463 correspond à  l'id de ton actionneur jojo.

  • Upvote 1
Posté(e)

merci pour tous vos retours,

mais comme je souhaite utiliser le domochart de Lazer, je dois mettre à  jour une VG  pour dire combien de seconde le device a été ON durant la dernière minute, puis le remettre à  zéro, car le domochart de lazer va compabiliser toutes les minutes.

Donc en effet les trigger sont une bonne idée, mais ils ne seront activé qu'en cas de changement détat, et si ma chaudière est on pendant 4min 35 sec, je devrais avoir qqch comme ceci pour utiliser le domochart de Lazer :

 

min 1 : VD = 15 , puis remise à  zéro (la chaudière a démarré à  12h34 et 45')

min 2 : VD = 60 , puis remise à  zéro (la chaudière a tourné toute la minute)

min 3 : VD = 60 , puis remise à  zéro (la chaudière a tourné toute la minute)

min 4 : VD = 60 , puis remise à  zéro (la chaudière a tourné toute la minute)

min 5 : VD = 60 , puis remise à  zéro (la chaudière a tourné toute la minute)

min 6 : VD = 20 , puis remise à  zéro (la chaudière a tourné jusqu'à  12h39 et 20")

Posté(e)

dans ce cas là, il faudrait que domocharts puisse remettre ta variable àzero juste après chaque lecture. Ca veut dire adapter le code.

Posté(e)

J'avance dans ma scène, mais je bloque sur la création automatique de la variable

--[[
%% properties
%% autostart
%% globals
--]]

Timer = {
	{deviceName = "CHAUDIERE_OUTPUT", deviceID = 214, variable = "Timer_Chaudiere"},
	{deviceName = "SOLAIRE_OUTPUT", deviceID = 82, variable = "Timer_Solaire"},
}

variables = api.get('/globalVariables/')
for i = 1, #Timer do
	-- vérification existance variable
	found = false
	for j = 1, #variables do
		if variables[j].name == Timer[i].variable then
			found = true
		end
	end
	if found == false then
		-- création de la varialbe
		fibaro:debug("La variable "..Timer[i].variable.. " n'existe PAS")
		fibaro:debug("data = {name="..Timer[i].variable..", isEnum=0}")
		local http = net.HTTPClient()
		http:request("http://127.0.0.1:11111/api/globalVariables", { 
			options = { 
				method = "POST", 
				data = json.encode({name=Timer[i].variable, isEnum=false})
				},
			success = function(response) 
				fibaro:debug(Timer[i].variable .. " créé avec succès")
				end,
			error = function(response) fibaro:debug(Timer[i].variable .. " ERROR !!!") end,
		})
	else
		fibaro:debug("La variable "..Timer[i].variable.. " existe")
	end
end

local seconde = os.date('%S')
if tonumber(seconde) ~= 1 then
	for i = 1, #Timer do
		fibaro:setGlobal(Timer[i].variable, 0)
	end
	local delta = 61 - seconde  -- il faut décaler de 1 seconde pour être sûr que domochart ait bien fait son job àla seconde 0
	fibaro:debug("Time is  " .. os.date('%H:%M:%S') .. ", waiting for " .. delta .. " seconds...")
	fibaro:sleep(delta*1000)
end

--pour des raison de test :
--fibaro:setGlobal(TimerVG["CHAUDIERE_OUTPUT"], os.date('%S')-1)


local min = os.date('%M')

while true do
	-- Actions to perform every new second

	for i = 1, #Timer do
		if tonumber(fibaro:getValue(Timer[i].deviceID, "value")) == 1 then
			fibaro:setGlobal(Timer[i].variable, fibaro:getGlobal(Timer[i].variable) + 1)
		end
		fibaro:debug('Last run : ' .. os.date('%d/%m/%Y %H:%M:%S').. " - VG '".. Timer[i].variable.. "' = ".. fibaro:getGlobal(Timer[i].variable))
	end
	fibaro:sleep(1000) -- 1 second

	-- Actions to perform every new min
	if tonumber(os.date('%S')) == 1 then
		fibaro:debug('New minute')
		for i = 1, #Timer do
			fibaro:setGlobal(Timer[i].variable, 0)
		end
	end
end

Posté(e)

J'ai remarqué que ce n'était pas une bonne idée de faire des sleeps dans une scène quand tu introduits la notion d'asynchronisme avec net.HTTPClient().

En effet, la scène ne rend jamais la main au système, et les fonctions asynchrones ne démarrent jamais..... sauf quand le programme finit par se terminer, or avec ton "while true do" tu risques d'attendre longtemps.

 

Donc il faut que tu revois entièrement la logique de ta scène pour permettre aux appels à  net.HTTPClient() de s'exécuter.

Pour cela, il faut remplacer tes sleeps tous les matins par des appels à  setTimeout(), donc à  des fonctions. C'est pour cela que ça t'oblige à  revoir toute la structure du code.

 

Regarde mon watchdog pour voir comment j'ai traité le problème :

- le code ne se compose que de fonctions...

- ... sauf à  la fin, moins de 10 lignes de codes sont exécutés linéairement, puis le programme se termine

- dans ces lignes, il y a un appel setTimeout(function() Check(intervalle) end, delay*1000)

- donc tu cherches plus haut la fonction Check(interval)

- dans cette fonction, tu vois toutes les instructions exécutées, y compris des appels à  net.HTTPClient()

- à  la fin de la fonction Check(), on trouve l'appel suivant pour que la fonction se rappelle elle-même en asynchrone après un délai : setTimeout(function() Check(interval) end, interval*1000)

- au moment où le timeout démarre, le système reprend la main, et les instructions httpClient:request précédentes qui étaient en attente peuvent démarrer

 

Ce mécanisme d'appel de fonction récursif par l'intermédiaire du timeout est l'équivalent asynchrone d'un bon vieux "while true .... sleep() do"

Posté(e)

merci pour toutes ces explications, mais je ne suis pas un développeur, et ça me parait fort compliqué (àcette heure-ci en tout cas).

Donc, comme j'arrive àtester si la variable existe, je vais me contenter dans un premier temps d'arrêter la scène si elle n'existe pas et de la créer àla main.

Ce n'est pas le plus important de la scène.

Posté(e)


--[[

%% properties

%% autostart

%% globals

--]]

Timer = {

{deviceName = "CHAUDIERE_OUTPUT", deviceID = 214, variable = "Timer_Chaudiere"},

{deviceName = "SOLAIRE_OUTPUT", deviceID = 82, variable = "Timer_Solaire"},

}

variables = api.get('/globalVariables/')

for i = 1, #Timer do

-- vérification existance variable

found = false

for j = 1, #variables do

if variables[j].name == Timer.variable then

found = true

end

end

if found == false then

fibaro:debug("La variable "..Timer.variable.. " n'existe PAS. \nA créer manuellement. \nArrêt de ma scène.")

fibaro:abort()

--[[

-- création de la varialbe

fibaro:debug("data = {name="..Timer.variable..", isEnum=0}")

local http = net.HTTPClient()

http:request("http://127.0.0.1:11111/api/globalVariables", {

options = {

method = "POST",

data = json.encode({name=Timer.variable, isEnum=false})

},

success = function(response)

fibaro:debug(Timer.variable .. " créé avec succès")

end,

error = function(response) fibaro:debug(Timer.variable .. " ERROR !!!") end,

})

--]]

else

fibaro:debug("La variable "..Timer.variable.. " existe")

end

end

local seconde = os.date('%S')

if tonumber(seconde) ~= 1 then

for i = 1, #Timer do

fibaro:setGlobal(Timer.variable, 0)

end

local delta = 61 - seconde -- il faut décaler de 1 seconde pour être sûr que domochart ait bien fait son job àla seconde 0

fibaro:debug("Time is " .. os.date('%H:%M:%S') .. ", waiting for " .. delta .. " seconds...")

fibaro:sleep(delta*1000)

end

--pour des raison de test :

--fibaro:setGlobal(TimerVG["CHAUDIERE_OUTPUT"], os.date('%S')-1)

local min = os.date('%M')

while true do

-- Actions to perform every new second

for i = 1, #Timer do

if tonumber(fibaro:getValue(Timer.deviceID, "value")) == 1 then

fibaro:setGlobal(Timer.variable, fibaro:getGlobal(Timer.variable) + 1)

end

fibaro:debug('Last run : ' .. os.date('%d/%m/%Y %H:%M:%S').. " - VG '".. Timer.variable.. "' = ".. fibaro:getGlobal(Timer.variable))

end

fibaro:sleep(1000) -- 1 second

-- Actions to perform every new min

if tonumber(os.date('%S')) == 1 then

fibaro:debug('New minute')

for i = 1, #Timer do

fibaro:setGlobal(Timer.variable, 0)

end

end

end

Posté(e)

et voici le debug, avec remise àzéro de la variable 1 seconde après chaque nouvelle minute.

Mais je perds quelques secondes par minutes :angry:

 [DEBUG] 00:28:51: La variable Timer_Chaudiere existe
[DEBUG] 00:28:51: La variable Timer_Solaire existe
[DEBUG] 00:28:51: Time is 00:28:51, waiting for 10 seconds...
[DEBUG] 00:29:01: Last run : 20/12/2015 00:29:01 - VG 'Timer_Chaudiere' = 1
[DEBUG] 00:29:01: Last run : 20/12/2015 00:29:01 - VG 'Timer_Solaire' = 1
[DEBUG] 00:29:02: Last run : 20/12/2015 00:29:02 - VG 'Timer_Chaudiere' = 2
[DEBUG] 00:29:02: Last run : 20/12/2015 00:29:02 - VG 'Timer_Solaire' = 2
[DEBUG] 00:29:03: Last run : 20/12/2015 00:29:03 - VG 'Timer_Chaudiere' = 3
[DEBUG] 00:29:03: Last run : 20/12/2015 00:29:03 - VG 'Timer_Solaire' = 3
[DEBUG] 00:29:04: Last run : 20/12/2015 00:29:04 - VG 'Timer_Chaudiere' = 4
[DEBUG] 00:29:04: Last run : 20/12/2015 00:29:04 - VG 'Timer_Solaire' = 4
[DEBUG] 00:29:06: Last run : 20/12/2015 00:29:06 - VG 'Timer_Chaudiere' = 5
[DEBUG] 00:29:06: Last run : 20/12/2015 00:29:06 - VG 'Timer_Solaire' = 5
...
[DEBUG] 00:29:57: Last run : 20/12/2015 00:29:57 - VG 'Timer_Chaudiere' = 51
[DEBUG] 00:29:57: Last run : 20/12/2015 00:29:57 - VG 'Timer_Solaire' = 51
[DEBUG] 00:29:58: Last run : 20/12/2015 00:29:58 - VG 'Timer_Chaudiere' = 52
[DEBUG] 00:29:58: Last run : 20/12/2015 00:29:58 - VG 'Timer_Solaire' = 52
[DEBUG] 00:29:59: Last run : 20/12/2015 00:29:59 - VG 'Timer_Chaudiere' = 53
[DEBUG] 00:29:59: Last run : 20/12/2015 00:29:59 - VG 'Timer_Solaire' = 53
[DEBUG] 00:30:00: Last run : 20/12/2015 00:30:00 - VG 'Timer_Chaudiere' = 54
[DEBUG] 00:30:00: Last run : 20/12/2015 00:30:00 - VG 'Timer_Solaire' = 54
[DEBUG] 00:30:01: New minute
[DEBUG] 00:30:01: Last run : 20/12/2015 00:30:01 - VG 'Timer_Chaudiere' = 1
[DEBUG] 00:30:01: Last run : 20/12/2015 00:30:01 - VG 'Timer_Solaire' = 1
[DEBUG] 00:30:02: Last run : 20/12/2015 00:30:02 - VG 'Timer_Chaudiere' = 2
[DEBUG] 00:30:02: Last run : 20/12/2015 00:30:02 - VG 'Timer_Solaire' = 2
[DEBUG] 00:30:03: Last run : 20/12/2015 00:30:03 - VG 'Timer_Chaudiere' = 3
[DEBUG] 00:30:03: Last run : 20/12/2015 00:30:03 - VG 'Timer_Solaire' = 3
Posté(e)

moi ce qui me gêne si tu gère toi même la remise à  0 de la variable, comment tu peux être sur que Domocharts sera synchronisé ? Je pense qu'en pratique tu vas perdre des tours.

=> c'est pour ça que je suggérais d'ajouter les instructions nécessaires au VD Domocharts pour qu'il remette ta variable à  0 juste après sa lecture. Le seul risque est que ta scène incrémente la variable pile entre le moment où le VD Domocharts lis la variable puis la remet à  zero, mais le risque est faible, et je ne vois aucun moyen de résoudre ce problème sachant qu'on n'a pas de gestion des mutex (concept de programmation multi-thread)

 

En plus de ton problème de sleep, car ta boucle met plus d'une seconde à  s’exécuter (1s de sleep, plus quelques ms pour toutes les autres instructions)

=> le settimeout améliorerait beaucoup les choses

Posté(e)

oui, en effet, j'y avais pensé, mais je ne voulais pas modifier ton code car il faudrait que je ré-applique ces modifs lors d'une prochaine version de ta part), sauf si on peut intégrer cela dans le futur.

 

Donc je "modifie" ton code, j'essaye avec le settimeout, mais je sens que ça va être chaud d'intégrer tout ça proprement

Posté(e)

bon bhen j'ai eu une idée simple pour le reset, et je n'ai pas pu m'empêcher de la tester ...

Donc dans le VD DomoCharts, bouton Sensors :

local variables = {
	{
		["type"] = "co2",
		["id"]   = 10001,
		["name"] = "Timer_Chaudiere",
		["reset"] = true,
		["resetValue"] = 0
	},
	{
		["type"] = "co2",
		["id"]   = 10002,
		["name"] = "Timer_Solaire",
		["reset"] = true,
		["resetValue"] = 0
	},}

J'ai rajouté pour chaquevariable 2 paramètres ["reset"] et ["resetValue"]

puis, à  la fin du code,

-- Get User Variable list (updated from FHEM through API)
datas = nil
local datas = {}
for i = 1, #variables do
	payload = "/graph/data_post_" .. variables[i].type .. ".php?id=" .. variables[i].id .. "&value=" .. fibaro:getGlobalValue(variables[i].name)
	datas[#datas+1] = {}
	datas[#datas].id = variables[i].id
	datas[#datas].timestamp = 'NULL'
	datas[#datas].type = variables[i].type
	datas[#datas].value = fibaro:getGlobalValue(variables[i].name)
	if variables[i].reset == true then
		fibaro:setGlobal(variables[i].name, variables[i].resetValue)
	end
end

j'ai ajouté les 3 lignes

	if variables[i].reset == true then
		fibaro:setGlobal(variables[i].name, variables[i].resetValue)
	end

FACILE ;)  (et propre me semble-t-il)

  • Upvote 1
Posté(e)

que penses-tu de ce code ? as-tu d'autres idées ?

--[[
%% properties
%% autostart
%% globals
--]]

local interval = 1 -- interval de vérification en sec
local Counter = {
	{deviceID = 214, variable = "Timer_Chaudiere", testValue = 1, increment = 1}, -- CHAUDIERE_OUTPUT
	{deviceID = 215, variable = "Timer_Solaire", testValue = 1, increment = 1},   -- SOLAIRE_OUTPUT
}

function checkVar()
	variables = api.get('/globalVariables/')
	for i = 1, #Counter do
		-- vérification existance variable
		found = false
		for j = 1, #variables do
			if variables[j].name == Counter[i].variable then
				found = true
			end
		end
		if found == false then
			fibaro:debug("La variable "..Counter[i].variable.. " n'existe PAS.")
			-- création de la varialbe
			local http = net.HTTPClient()
			http:request("http://127.0.0.1:11111/api/globalVariables", { 
				options = { 
					method = "POST", 
					data = json.encode({name=Counter[i].variable, isEnum=0})
					},
				success = function(response) 
					fibaro:debug(Counter[i].variable .. " créé avec succès")
					end,
				error = function(response) 
					fibaro:debug(Counter[i].variable .. " ERROR !!!")
					end,
			})
		else
			fibaro:debug("La variable "..Counter[i].variable.. " existe")
		end
	end
end

function start()
	local seconde = os.date('%S')
	if tonumber(seconde) ~= 0 then
		for i = 1, #Counter do
			fibaro:setGlobal(Counter[i].variable, 0)
		end
		local delta = 60 - seconde
		fibaro:debug("Time is  " .. os.date('%H:%M:%S') .. ", waiting for " .. delta .. " seconds...")
		fibaro:sleep(delta*1000)
		fibaro:debug("Start")
	end

--pour des raison de test :
--fibaro:setGlobal(TimerVG["CHAUDIERE_OUTPUT"], os.date('%S')-1)
end

function counter()
	-- Actions to perform every new second
	for i = 1, #Counter do
		if tonumber(fibaro:getValue(Counter[i].deviceID, "value")) == Counter[i].testValue then
			fibaro:setGlobal(Counter[i].variable, fibaro:getGlobal(Counter[i].variable) + Counter[i].increment)
		end
		fibaro:debug('Last run : ' .. os.date('%d/%m/%Y %H:%M:%S').. " - VG '".. Counter[i].variable.. "' = ".. fibaro:getGlobal(Counter[i].variable))
	end

	-- Actions to perform every new min
	-- le reset de la variable est effectuée par le VD DomoCharts

	setTimeout(function() counter() end, interval*1000) --vérification toutes les secondes
end

--vérification de l'existence des variables et création si nécessaire
checkVar()

-- démarrage àla seconde 0
start()

-- démarrage de la boucle du compteur
counter()



Posté(e)

je me suis permis d'adapter le code de la scène domoCharts pour éviter le décalage en utilisant le settimeout(). C'est en test. Je verrai ce soir si décalage

Posté(e)

Excellent ta modif de domocharts, c'est exactement comme ça que je comptais procéder :)

 

J'ai pas lu en détail le code de ta scène compteur, mais ça me semble correct.

 

Pour le décalage, comme expliqué sur l'autre topic, il est inévitable, même avec setTimeout. Si tu mets cette instruction en début de fonction, ce qui n'est pas ton cas car tu l'as mis à  la fin.

Mais la bonne solution, c'est de calculer le décalage et de compenser en ajustant la valeur du timeout.

Posté(e)

ok, merci , je vais essayer de voir ce que je peux faire pour calculer le décalage.

Ce qui est TRES bizarre, c'est que le reset de la variable n'est pas systématique toutes les minutes, bien que la scène domoChart a bien tourné.

 

Je te remets ici également la scène domoCharts adaptée avec le setTimeout pour info, mais je regarde pour adapter le décalage.

--[[
%% properties
%% autostart
%% globals
--]]

local VirtualDeviceID = 157

function start()
	local seconde = os.date('%S')
	if tonumber(seconde) ~= 0 then
		local delta = 60 - seconde
		fibaro:debug("Time is  " .. os.date('%H:%M:%S') .. ", waiting for " .. delta .. " seconds...")
		fibaro:sleep(delta*1000)
	end
	hour = os.date('%H')
	day = os.date('%d')
end

function domoCharts()

	-- Actions to perform every new minute
	fibaro:call(VirtualDeviceID, "pressButton", "1"); -- Sensors (Temperature, humidity, light)
	fibaro:call(VirtualDeviceID, "pressButton", "2"); -- Power consumption
	--fibaro:call(17, "pressButton", "1"); -- Eco-Devices Teleinfo

	-- Actions to perform every new hour
	local newhour = os.date('%H')
	if newhour ~= hour then
		fibaro:debug('New hour')
		-- Actions to perform at 23:00
		if tonumber(newhour) == 23 then
			fibaro:call(VirtualDeviceID, "pressButton", "3"); -- Battery level
		end
		hour = newhour
	end

	-- Actions to perform every new day
	local newday = os.date('%d')
	if newday ~= day and tonumber(os.date('%M')) >= 1 then
		fibaro:debug('New day')
		fibaro:call(VirtualDeviceID, "pressButton", "4"); -- Devices
		fibaro:call(VirtualDeviceID, "pressButton", "5"); -- Trend data
		fibaro:call(VirtualDeviceID, "pressButton", "6"); -- Energy
		--fibaro:call(81, "pressButton", "1"); -- Water
		day = newday
	end

	fibaro:debug('Last run : ' .. os.date('%d/%m/%Y %H:%M:%S'))
	setTimeout(function() domoCharts() end, 60*1000) --vérification toutes les minutes
end

-- démarrage à  la seconde 0
start()

-- démarrage de la boucle domoCharts
domoCharts()


×
×
  • Créer...