lorsque je fais un update d'une consigne de thermostat vituel avec la commande suivante :
Code : Tout sélectionner
commandArray['UpdateDevice']= b[5]..'|0|'..tempConsigne
Code : Tout sélectionner
commandArray[commandIndex]={['UpdateDevice'] = b[5]..'|0|'..tempConsigne}
j'ai dans la console un warning :
a la deuxième ligne, j'ai manuellement modifié la consigne virtuel de façon a ce qu'elle ne corresponde plus a ce qu'elle devrait être2015-03-28 13:56:19.101 (RFX Interface) Temp + Humidity (Chambre parents)
2015-03-28 13:56:23.214 (Thermostat) Thermostat (Consigne réelle chambre parents)
2015-03-28 13:56:30.258 (RFX Interface) Temp + Humidity (Chambre Mathéo)
2015-03-28 13:56:54.328 (RFX Interface) Temp + Humidity (Salle de bain)
2015-03-28 13:57:00.084 LUA: Consigne réelle chambre parents : 21 - 18.5
2015-03-28 13:57:00.084 Sending SetPoint to device....
2015-03-28 13:57:10.084 Error: Warning: lua script /home/david/domoticz/scripts/lua/script_device_thermostat.lua has been running for more than 10 seconds
2015-03-28 13:57:00.082 (RFX Interface) Temp + Humidity (Chambre parents)
2015-03-28 13:57:10.086 (RFX Interface) Temp + Humidity (Chambre Mathéo)
2015-03-28 13:57:10.089 (Thermostat) Thermostat (Consigne réelle chambre parents)
2015-03-28 13:57:10.092 Script event triggered: /home/david/domoticz/scripts/lua/script_device_thermostat.lua
2015-03-28 13:57:37.304 (RFX Interface) Temp + Humidity (Salle de bain)
2015-03-28 13:57:41.065 (RFX Interface) Temp + Humidity (Chambre parents)
2015-03-28 13:57:48.218 (RFX Interface) Temp + Humidity (Chambre Mathéo)
Ensuite j'ai mes sondes qui remontent leur info et quand je passe sur la sonde "Chambre parents", je vérifie que le thermostat virtuel est conforme et sinon je le met a jour, ça devrait me servir a loguer la température de consigne réelle de chaque pièce et ainsi pouvoir dire : "Tu vois chérie j'ai acheté quelques accessoires "de geek" mais maintenant quand il fait froid je sais pourquoi
Donc mon problème est sur le warning que je voudrais corriger mais dont je ne comprends pas trop la cause.
Ce qui est étrange c'est que ma "consigne de thermostat virtuel est bien mise a jour"
Si besoin voila le script complet :
Code : Tout sélectionner
-- thermostat device script
-- script names have three name components: script_trigger_name.lua
-- trigger can be 'time' or 'device', name can be any string
-- domoticz will execute all time and device triggers when the relevant trigger occurs
--
-- copy this script and change the "name" part, all scripts named "demo" are ignored.
--
-- Make sure the encoding is UTF8 of the file
--
function round(num, dec)
local mult = 10^(dec or 0)
return math.floor(num * mult + 0.5) / mult
end
function round5(num, dec)
return round(num/5,dec)*5
end
hysteresis=0.5
Pieces=
{
['Chambre parents']={'Chambre parents','Consigne chambre parents','Chauffage chambre parents','Consigne réelle chambre parents',23};
['Chambre Mathéo']={'Chambre Mathéo','Consigne chambre Mathéo','Chauffage chambre Mathéo','Consigne réelle chambre Mathéo',22};
['Salon']={'Salle de bain','Consigne salon','Chauffage salon','Consigne réelle salon',21}
--[NOM_PIECE]={'NOM SONDE TEMPERATURE','NOM THERMOSTAT VIRTUEL',NOM SWITCH CORRESPONDANT','CONSIGNE ACTIVE',CONSIGNE_ACTIVE_IDX}
}
Distances={'Distance David','Distance Estelle'}
SwitchChauffages={'Chauffage chambre parents','Chauffage chambre Mathéo','Chauffage salon','Force chauffage'}
SwitchChaudiere='Chaudière'
commandArray = {}
commandIndex=0
distanceChanged = false
minDistance = 100
--for i, v in pairs(otherdevices_svalues) do print(i..' '..v) end
-- Gestion des distances et caclul de la distance la plus proche
for a,b in pairs(Distances) do
if devicechanged[b] then
distanceChanged = true
end
dist = tonumber(otherdevices_svalues[b])
if minDistance > dist then minDistance = dist end
end
-- Gestion des sondes de températures
for a,b in pairs(Pieces) do
if (devicechanged[b[1]] or devicechanged[b[2]] or distanceChanged) then
-- On recupère la température actuel et on calcul la consigne en fonction de la distance
tempActuel = tonumber(otherdevices_svalues[b[1]]:match("([^;]+).+"))
tempConsigne = round5(tonumber(otherdevices_svalues[b[2]]) * math.pow((100-minDistance)/100,1/2),1)
--print ('Consigne pour '..a..' : '..tempConsigne..' - Température actuel : '..round(tempActuel,1))
--On met a jour la capteur de consigne réelle pour les logs
if (tonumber(otherdevices_svalues[b[4]]) ~= tonumber(tempConsigne)) then
print(b[4]..' : '..tonumber(otherdevices_svalues[b[4]])..' - '..tonumber(tempConsigne))
--La mise a jour bloque le systeme plus de 10 seconde??
commandIndex = commandIndex+1
commandArray[commandIndex]={['UpdateDevice'] = b[5]..'|0|'..tempConsigne}
--commandArray['UpdateDevice']= b[5]..'|0|'..tempConsigne
--commandArray[otherdevices_svalues[b[4]]] = tempConsigne
--(otherdevices_svalues[b[4]] = tempConsigne
end
if (tempConsigne < 17) then tempConsigne = 17 end
-- On active/desactive le chauffage en cas de besoin
if ((tempActuel < tempConsigne - hysteresis) and otherdevices[b[3]] == "Off") then
print (a..' : Temperature trop basse'..'. Activation '..b[3])
commandArray[b[3]]='On'
elseif ((tempActuel > tempConsigne + hysteresis) and otherdevices[b[3]] == "On") then
print (a..' : Temperature trop haute'..'. Désactivation '..b[3])
commandArray[b[3]]='Off'
end
end
end
-- Gestion des switch et allumage/Extinction chaudières
for a,b in pairs(SwitchChauffages) do
if (devicechanged[b]) then
if (devicechanged[b] == "On" and otherdevices[SwitchChaudiere] == "Off") then
commandArray[SwitchChaudiere]='On'
elseif (devicechanged[b] == "Off" and otherdevices[SwitchChaudiere] == "On") then
-- On vérifie si aucun des switchs n'est encore actif
needStop = true
for c,d in pairs(SwitchChauffages) do
if otherdevices[d] == "On" then needStop = false end
end
if (needStop == true) then
commandArray[SwitchChaudiere]='Off'
end
end
end
end
return commandArray
Pour chaque piece, j'ai un capteur oregon + une consigne de thermostat virtuel avec planning (qui me permet de définir ma température souhaité en fonction de l'horaire par pièce) + un switch pour allumer au pas le chauffage de la pièces + une consigne de thermostat virtuel que le script doit mettre a jour avec la consigne réelle de la pièce (la consigne réelle de la piece = "consigne du thermostat virtuel avec planning" * "un coefficient lié a la distance qui me sépare de ma maison") + idx de ce dernier thermostat
Et j'ai un switch global pour allumer ou éteindre la chaudière
Merci d'avance.