Page 1 sur 1
Choix Sonde pour thermostat selon selecteur
Publié : 14 févr. 2017, 19:44
par balajol
Bonsoir,
Je viens vers vous après avoir séché toute ma journée
J'ai un sélecteur qui détermine quelle sonde doit être prise en compte pour mon thermostat: " Choix_sonde_chauffage"
Retour à Off après 2 secondes. (Il commande des Vannes Danfoss)
Un deuxième Sélecteur Garde en "Mémoire" le choix effectué sur le Premier sélecteur (Par BLOCKY) : "Sonde_Active_Chauffage". (Le sélecteur reste à cette position jusqu'au prochain changement de sonde)
J'ai créé une Variable utilisateur " Var_Temp" qui doit être renseigné par la sonde sélectionnée et être utilisée par le scipt Lua "Thermostat"
Par Blocky (DEVICE) la valeur dela variable Utilisateur est renseignée lors du changement d'état puis reste à cette valeur sans être mise à jour jusqu'au prochain changement . (Normal en soi)
Si je change le blocky en "time" pas de Mise à jour de la Variable..
Je vais donc devoir passer en Lua avec votre aide si vous le voulez bien, Pour renseigner cette variable par un des deux sélecteurs ou alors, si c'est plus simple me passer de cette variable pour renseigner directement le script "Thermostat"
( Actuellement : temperature=uservariables["Var_temp"]
Merci par avance

Cdt
Bertrand

- Variable-Mesure-T°.JPG (11.57 Kio) Consulté 6626 fois

- Choix_sonde_Chauffage.JPG (39.68 Kio) Consulté 6624 fois
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 00:05
par balajol
Re,
Tentative infructueuse de l'inclure dans le script "Thermostat"..
Code : Tout sélectionner
-- Ce script permet de maintenir la température------ http://easydomoticz.com/forum/viewtopic.php?f=10&t=233
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_conf_semaine = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort'], "(%d+%.*%d*)"))-- 20 --'Consigne-Danfoss-Confort' -- Température de consigne confort en semaine
local consigne_conf_plus = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort-Plus'], "(%d+%.*%d*)"))--21 -- Température de consigne confort plus le weekend
local consigne_eco = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Eco'], "(%d+%.*%d*)"))--17 --'Consigne-Danfoss-Eco' -- Température de consigne économique
local consigne_abs = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Hors-Gel'], "(%d+%.*%d*)"))--10 --'Consigne-Danfoss-Hors-Gel' -- Température de consigne lors d'abscence prolongée
local moyenne_sondes= 'Moyenne_T_Cuisine_Salon' -- Capteur virtuel, calculé par Lua, moyenne des Temp cuisine et salon
local sonde_Salon = 'Oregon_Salle_4' -- Nom de la sonde de température Salon
local sonde_cuisine = 'Oregon_Cuisine_3' -- Nom de la sonde de température Cuisine
local mode = 'mode_Eco-Conf-(Off:Eco--On:Conf)' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local Presence = 'Presence_Partielle(On)_Hors-Gel(Off)' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)
local boost = 'Mode-confort-plus' -- Nom de l'interrupteur virtuel de de forçage de la consigne en mode weekend
local Easymatic_Domoticz= 'Mode-Chaudière' --Selecteur pour passer de la commande déportée filaire de la chaudière à Domoticz
--temperature=uservariables["Var_temp"] Non utilisé si Sonde active fonctionne
HeureFinConfort=uservariables["Heure-Fin_Confort"]
HeureDebutConfort=uservariables["Heure-Debut_Confort"]
--------------------------------
-- Fin des variables à éditer --
--------------------------------
time = os.date("*t")
commandArray = {}
local today = os.date("%A")
-- Détection de la sonde active et renseignement de "temperature"
if (otherdevices[Sonde_Active_Chauffage] == 'Sonde_cuisine') then
temperature= sonde_cuisine
if (otherdevices[Sonde_Active_Chauffage] == 'Sonde_salon') then
temperature= sonde_Salon
if (otherdevices[Sonde_Active_Chauffage] == 'Moyenne_sondes') then
temperature= moyenne_sondes
end
end
end
if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On' or (otherdevices['Jour_Ferie'] == 'On')) then--Le WE ou Mode-confort-plus = On ou "Jour_Ferie"= on Application Consigne thermostat "Consigne-Danfoss-Confort-Plus"
consigne_conf = consigne_conf_plus
else
consigne_conf = consigne_conf_semaine-- Sinon Application "Consigne-Danfoss-Confort"
end
-- si le swicth " Presence(On)_Hors-Gel(Off)" est actif (On:Presence)
if (otherdevices[Presence] == 'On') then
--Si on est en Mode confort entre "Heure_depart_confort" et "Heure_Arret_Confort"
if (otherdevices[mode] == 'On' and time.hour >= HeureDebutConfort and time.hour < HeureFinConfort) then
consigne = consigne_conf
else
consigne = consigne_eco
end
else
consigne = consigne_abs
end
--Chaudiere en Marche (Chauffe) si:"Marche_Bruleur_Chaudiere" sur On et Sortie thermostat à off (Contact thermostat sur carte chaudiere fermé) ou demande ECS et tempEcsChaudiere < 50°C
if (otherdevices['Relais-Chaud-(On=Domo)'] == 'On') and ((temperature < consigne) or (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'On')) then
commandArray['Marche_Bruleur_Chaudiere-(On=Arrêt)'] = 'Off'
print('Marche Chaudiere -. Marche .-')
else
-- Chaudiere arrêtée si: "Marche_Bruleur_Chaudiere" sur On (Position DOMOTICZ) et interupteur autorisation ECS à Off (Bruleur arreté et circulateur quelques minutes apres)
if (otherdevices['Relais-Chaud-(On=Domo)'] == 'On') and (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'Off' ) then
commandArray['Marche_Bruleur_Chaudiere-(On=Arrêt)'] = 'On'
print('Chaudiere -. Stop .-')
end
end
print('il fait '..temperature..'°C pour '..consigne..'°C souhaité par thermostat Domoticz')
return commandArray
Début du morceau posant problème à : -- Détection de la sonde active et renseignement de "temperature"
Ereur:

- erreur-Thermostat.JPG (25.86 Kio) Consulté 6603 fois
Merci à celui qui pourra m'aiguiller
Cdt
Bertrand
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 04:21
par vil1driver
Salut,
A mon avis tu te compliques..
Pourquoi 2 selecteurs et pas juste 1 ?
Pourquoi stoquer la temps dans une variable et non pas juste lire la sonde sélectionnée par le selecteur ?
C'est ce que tu sembles faire dans le script mais tes end sont mal placés
C'est
if then end if then end...
Ou
if then else if then else if then end
Et non pas
if then if then if then end end
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 10:38
par balajol
Bonjour,
Merci de ton aide,
Je suis revenu sur le Premier Sélecteur en supprimant le retour à 0 (le second, sans retour à Off m'avait été nécessaire pour une autre fonction).
et corrigé les Fonctions If /End , Vérifié les orthographes des sondes , des niveaux du sélecteur, "joué" avec les espaces etc..
Toujours la même erreur
Code : Tout sélectionner
-- Détection de la sonde active et renseignement de "temperature"
if (otherdevices[Choix_sonde_chauffage] == 'Sonde_Cuisine') then
temperature = sonde_cuisine
end
if (otherdevices[Choix_sonde_chauffage] == 'Sonde_Salon') then
temperature = sonde_Salon
end
if (otherdevices[Choix_sonde_chauffage] == 'Moyenne_sondes') then
temperature = moyenne_sondes
end
if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On' or (otherdevices['Jour_Ferie'] == 'On')) then--Le WE ou Mode-confort-plus = On ou "Jour_Ferie"= on Application Consigne thermostat "Consigne-Danfoss-Confort-Plus"

- Erreur_Thermostat.JPG (17.36 Kio) Consulté 6583 fois
Le fait de passer par une variable fonctionnait, pas d' erreur dans "thermostat" mais je n' arrive pas à mettre à jour cette variable (Elle se met à jour lors du changement d'état mais plus de mise à jour jusqu' au prochain changement)
Cordialement
Bertrand
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 14:34
par vil1driver
Code : Tout sélectionner
if (otherdevices['Sonde_Active_Chauffage'] == 'Sonde_cuisine') then
local sonde = sonde_cuisine
elseif (otherdevices['Sonde_Active_Chauffage'] == 'Sonde_salon') then
local sonde = sonde_Salon
elseif (otherdevices['Sonde_Active_Chauffage'] == 'Moyenne_sondes') then
local sonde = moyenne_sondes
end
local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 17:16
par balajol
Bonsoir,
Et Merci encore de ton aide
J'étais arrivé à la solution suivante qui fonctionne avant de voir à l'instant que tu avais complété ta réponse
Code : Tout sélectionner
-- Ce script permet de maintenir la température------ http://easydomoticz.com/forum/viewtopic.php?f=10&t=233
--'Moyenne_T_Cuisine_Salon' -- Capteur virtuel, calculé par Lua, moyenne des Temp cuisine et salon
--'Oregon_Salle_4' -- Nom de la sonde de température Salon
--'Oregon_Cuisine_3' -- Nom de la sonde de température Cuisine
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_conf_semaine = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort'], "(%d+%.*%d*)"))-- --'Consigne-Danfoss-Confort' -- Température de consigne confort en semaine
local consigne_conf_plus = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort-Plus'], "(%d+%.*%d*)"))-- -- Température de consigne confort plus le weekend
local consigne_eco = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Eco'], "(%d+%.*%d*)"))-- --'Consigne-Danfoss-Eco' -- Température de consigne économique
local consigne_abs = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Hors-Gel'], "(%d+%.*%d*)"))-- --'Consigne-Danfoss-Hors-Gel' -- Température de consigne lors d'abscence prolongée
local mode = 'mode_Eco-Conf-(Off:Eco--On:Conf)' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local Presence = 'Presence_Partielle(On)_Hors-Gel(Off)' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)
local boost = 'Mode-confort-plus' -- Nom de l'interrupteur virtuel de de forçage de la consigne en mode weekend
local Easymatic_Domoticz= 'Mode-Chaudière' --Selecteur pour passer de la commande déportée filaire de la chaudière à Domoticz
HeureFinConfort=uservariables["Heure-Fin_Confort"]
HeureDebutConfort=uservariables["Heure-Debut_Confort"]
--------------------------------
-- Fin des variables à éditer --
--------------------------------
time = os.date("*t")
commandArray = {}
-- Détection de la sonde active et renseignement de "temperature"
if (otherdevices['Choix_sonde_chauffage'] == 'Sonde_Cuisine') then
temperature= otherdevices_temperature['Oregon_Cuisine_3']
end
if (otherdevices['Choix_sonde_chauffage'] == 'Sonde_Salon') then
temperature= otherdevices_temperature['Oregon_Salle_4']
end
if (otherdevices['Choix_sonde_chauffage'] == 'Moyenne_sondes') then
temperature= otherdevices_temperature['Moyenne_T_Cuisine_Salon']
end
local today = os.date("%A")
if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On' or (otherdevices['Jour_Ferie'] == 'On')) then--Le WE ou Mode-confort-plus = On ou "Jour_Ferie"= on Application Consigne thermostat "Consigne-Danfoss-Confort-Plus"
consigne_conf = consigne_conf_plus
else
consigne_conf = consigne_conf_semaine-- Sinon Application "Consigne-Danfoss-Confort"
end
-- si le swicth " Presence(On)_Hors-Gel(Off)" est actif (On:Presence)
if (otherdevices[Presence] == 'On') then
--Si on est en Mode confort entre "Heure_depart_confort" et "Heure_Arret_Confort"
if (otherdevices[mode] == 'On' and time.hour >= HeureDebutConfort and time.hour < HeureFinConfort) then
consigne = consigne_conf
else
consigne = consigne_eco
end
else
consigne = consigne_abs
end
--Chaudiere en Marche (Chauffe) si:"Marche_Bruleur_Chaudiere" sur On et Sortie thermostat à off (Contact thermostat sur carte chaudiere fermé) ou demande ECS et tempEcsChaudiere < 50°C
if (otherdevices['Relais-Chaud-(On=Domo)'] == 'On') and ((temperature < consigne) or (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'On')) then
commandArray['Marche_Bruleur_Chaudiere-(On=Arrêt)'] = 'Off'
print('Marche Chaudiere -. Marche .-')
else
-- Chaudiere arrêtée si: "Marche_Bruleur_Chaudiere" sur On (Position DOMOTICZ) et interupteur autorisation ECS à Off (Bruleur arreté et circulateur quelques minutes apres)
if (otherdevices['Relais-Chaud-(On=Domo)'] == 'On') and (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'Off' ) then
commandArray['Marche_Bruleur_Chaudiere-(On=Arrêt)'] = 'On'
print('Chaudiere -. Stop .-')
end
end
print('il fait '..temperature..'°C pour '..consigne..'°C souhaité par thermostat Domoticz')
return commandArray
Elle est fontionnelle, Hormis l'arrondi des mesures qui ne fonctionne pas dans les Logs (Le deux sondes Physiques affichent pas mal de chiffres après la virgule, pour celle qui calcul la moyenne l'arrondi est déjà réalisé) pas vraiment gênant.
Dès que possible j'essaye ta version qui doit à priori gérer ces arrondis

Merci encore bonne soirée.
Cdt
Bertrand
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 20:46
par balajol
Re,
Essai avec dernière Modification:
Edit: Script corrigé sans "local" devant sonde, Fonctionnel
Code : Tout sélectionner
-- Ce script permet de maintenir la température------ http://easydomoticz.com/forum/viewtopic.php?f=10&t=233
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_conf_semaine = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort'], "(%d+%.*%d*)"))-- 20 --'Consigne-Danfoss-Confort' -- Température de consigne confort en semaine
local consigne_conf_plus = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Confort-Plus'], "(%d+%.*%d*)"))--21 -- Température de consigne confort plus le weekend
local consigne_eco = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Eco'], "(%d+%.*%d*)"))--17 --'Consigne-Danfoss-Eco' -- Température de consigne économique
local consigne_abs = tonumber(string.match(otherdevices_svalues['Consigne-Danfoss-Hors-Gel'], "(%d+%.*%d*)"))--10 --'Consigne-Danfoss-Hors-Gel' -- Température de consigne lors d'abscence prolongée
local moyenne_sondes= 'Moyenne_T_Cuisine_Salon' -- Capteur virtuel, calculé par Lua, moyenne des Temp cuisine et salon
local sonde_Salon = 'Oregon_Salle_4' -- Nom de la sonde de température Salon
local sonde_cuisine = 'Oregon_Cuisine_3' -- Nom de la sonde de température Cuisine
local mode = 'mode_Eco-Conf-(Off:Eco--On:Conf)' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local Presence = 'Presence_Partielle(On)_Hors-Gel(Off)' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)
local boost = 'Mode-confort-plus' -- Nom de l'interrupteur virtuel de de forçage de la consigne en mode weekend
local Easymatic_Domoticz= 'Mode-Chaudière' --Selecteur pour passer de la commande déportée filaire de la chaudière à Domoticz
temperature=uservariables["Var_temp"]
HeureFinConfort=uservariables["Heure-Fin_Confort"]
HeureDebutConfort=uservariables["Heure-Debut_Confort"]
--------------------------------
-- Fin des variables à éditer --
--------------------------------
time = os.date("*t")
commandArray = {}
if (otherdevices['Choix_sonde_chauffage'] == 'Sonde_Cuisine') then
sonde = sonde_cuisine
elseif (otherdevices['Choix_sonde_chauffage'] == 'Sonde_Salon') then
sonde = sonde_Salon
elseif (otherdevices['Choix_sonde_chauffage'] == 'Moyenne_sondes') then
sonde = moyenne_sondes
end
local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
local today = os.date("%A")
if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On' or (otherdevices['Jour_Ferie'] == 'On')) then--Le WE ou Mode-confort-plus = On ou "Jour_Ferie"= on Application Consigne thermostat "Consigne-Danfoss-Confort-Plus"
consigne_conf = consigne_conf_plus
else
consigne_conf = consigne_conf_semaine-- Sinon Application "Consigne-Danfoss-Confort"
end
-- si le swicth " Presence(On)_Hors-Gel(Off)" est actif (On:Presence)
if (otherdevices[Presence] == 'On') then
--Si on est en Mode confort entre "Heure_depart_confort" et "Heure_Arret_Confort"
if (otherdevices[mode] == 'On' and time.hour >= HeureDebutConfort and time.hour < HeureFinConfort) then
consigne = consigne_conf
else
consigne = consigne_eco
end
else
consigne = consigne_abs
end
--Chaudiere en Marche (Chauffe) si:"Marche_Bruleur_Chaudiere" sur On et Sortie thermostat à off (Contact thermostat sur carte chaudiere fermé) ou demande ECS et tempEcsChaudiere < 50°C
if (otherdevices['Relais-Chaud-(On=Domo)'] == 'On') and ((temperature < consigne) or (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'On')) then
commandArray['Marche_Bruleur_Chaudiere-(On=Arrêt)'] = 'Off'
print('Marche Chaudiere -. Marche .-')
else
-- Chaudiere arrêtée si: "Marche_Bruleur_Chaudiere" sur On (Position DOMOTICZ) et interupteur autorisation ECS à Off (Bruleur arreté et circulateur quelques minutes apres)
if (otherdevices['Relais-Chaud-(On=Domo)'] == 'On') and (otherdevices['Autorisation-chauffe-ECS-Chaud'] == 'Off' ) then
commandArray['Marche_Bruleur_Chaudiere-(On=Arrêt)'] = 'On'
print('Chaudiere -. Stop .-')
end
end
print('il fait '..temperature..'°C pour '..consigne..'°C souhaité par thermostat Domoticz')
return commandArray
Code erreur dans les LOGS

(il m'avait semblé que cela fonctionnait pendant quelques Minutes..

- Erreur_Thermostat_4.JPG (16.33 Kio) Consulté 6552 fois
Je suis revenu à la version Préçédente qui semble fonctionnelle (Hormis T° avec beaucoup de chiffres après la virgule dans les LOGS)
Cdt
Bertrand
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 20:50
par vil1driver
Essai d'enlever les 3 local qu'il y a avant sonde à tout hasard
J'ai mémoire d'avoir eu ce genre de soucis étrange
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 21:09
par balajol
..
Re: Choix Sonde pour thermostat selon selecteur
Publié : 15 févr. 2017, 21:10
par balajol
Re,
BANCO...
Merci encore de ton aide
J'étais bien perdu sur ce coup là.
Bonne Soirée
Cdt
Bertrand
Edit : Script corrigé sans "local" devant sonde, les deux derniers scripts sont opérationnels