Page 4 sur 7
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 01 nov. 2017, 18:28
par Nissa
Merci Vil1driver, j'ai retiré le double -[[ en trop.
Pour xav999, je vois pas trop où la condition pose problème, mais comme je suis en vacances j'ai du mal a rentrer dans la boucle
Ce script tourne depuis 2 ans chez moi, je n'avais pas remarqué de cycle trop rapide.
Des que je rentre je me penche dessus.
A+
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 04 nov. 2017, 11:05
par vil1driver
le truc c'est que lorsque tu es dans la plage d'hystérésis le script ne sais pas s'il est en phase de chauffe ou non..
je pense que le plus simple est de prendre en compte l'état du chauffage à ce moment là
ou alors utiliser une variable utilisateur.
tout ça dans le but de renvoyer la commande qui va bien à chaque exécution du script..
ou alors tu laisses couler, tu ne commandes qu'en dehors de la plage..
comme tu le fais actuellement..
en fin cela est une autre histoire..
mais effectivement xav999 à raison, ceci est de trop, ton script coupe dès que l'on dépasse la température de remise en marche du chauffage.
on atteint donc jamais la consigne, donc encore moins + hystérésis..
Code : Tout sélectionner
else
commandArray[radiateur]='Off'
status = 0
log = '*** Le Radiateur est arrêté'
if (debug) then print('>>>>>>>>ELSE>>>>>>>>>>>>>>>>>>>>>>>>>>>> Radiateur arrêté ! '..valeur) end
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 19 nov. 2017, 10:20
par Nissa
Bonjour,
Suite à la remarque pertinente de XAV999 et grâce aux conseils de VILLDRIVER (merci à lui) j'ai modifié le script :
MAJ du 19/11/2017/2017
Ajout de la vérification de l'état du poêle avant action pour éviter des commutations trop fréquentes
Ajout de variables d'état pour rendre le code plus lisible
sinon fonctionnement identique
A+
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 23 févr. 2018, 21:46
par valentin44
Bonjour à tous, je vais dénicher un dossier
First

un Grand merci à tout ceux qui participe sur le forum, car je me suis lancé depuis 2 semaine dans la domotique avec un Pi 3 et une carte RFXcom et j'ai non seulement fait quelques trucs sympa, mais j'ai aussi compris ce que j'ai réalisé donc => merci
sinon je me suis lancé à suivre le tuto pour faire une régulation du chauffage de mon salon (pour commencer ) sans fonctionnement
au lieu de brancher mon radiateur j'ai branché une lumière pour tester
j'ai une sonde Oregon
j'ai créé les Switchs virtuel
j'ai créé les capteurs virtuel .
j'ai copié le Script dans l'event en LUA (voir ci dessous )
et j'obtiens l'erreur suivante
2018-02-23 21:45:15.516 Error: EventSystem: in script_time_test: [string "--[[ ..."]:57: bad argument #1 to 'sub' (string expected, got nil)
ci dessous le code
Merci à tous d'avance
Code : Tout sélectionner
--[[
par Nissa MAJ du 19/11/2017
Ajout de la verification de l'état du poele avant action
Ajout de variables d'état pour rendre le code plus lisible
Type: time
Name: chauffage
Algorythme :
Si Chauffage=ON et Calendrier=ON
Consigne=confort (19)
sinon
Consigne=eco(17)
sinon
Consigne=eco+(15)
NOTA : Ce script est volontairement tres verbeux afin d'avoir dans les logs le statut de chaque radiateur
(toutes les minutes !). On peut l eviter en initialisant la variable 'verbose' a false.
Sinon, il est fortement conseille de commenter l option log de domoticz (dans domoticz.sh) afin de ne pas
saturer l espace de stockage par un fichier log trop important
--]]
----------------------------------------------
------ Configuration ------
----------------------------------------------
local piece={} -- Tableau Rajouter ici les radiateurs
piece['0']='Chambre_salon'
--piece['1']='Chambre_AniLou'
local watt={} -- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
watt['0']='1000'
-- consignes de thermostat virtuels
local consigne_confort = 'Thermo_confort'
local consigne_eco = 'Thermo_eco'
local consigne_ecoplus = 'Thermo_ecoplus'
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082036 -- idx du capteur virtuel de consommation électrique
local reset = false -- force la mise à zero de la consomation instantané (laisser à false pour un fonctionnement normal) true/false
local hysteresis = 0.4 -- Valeur seuil pour éviter que le relais ne cesse de commuter dans les 2 sens
local debug = true -- true or false pour voir tous les messages debug dans le log
local verbose = true -- Print ou non des logs
-- email
local mail = 'xxxxxxxxxxx.fr' -- pour réception alerte sonde muette (chauffage coupé)
-- domoticz
local url = '192.xxx.x.xx:8080' -- user:pass@ip:port de domoticz, pour la création des variables
----------------------------------------------
-- Fin de la partie configuration --
----------------------------------------------
function timedifference(d)
s = otherdevices_lastupdate[d]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
cumul_power = 0 -- initialisation de la puissance instantanee des radiateurs en fonctionnement
for key, valeur in pairs(piece) do
-- Maj des variables en fonction de la valeur de la table
local le_radiateur_est_sur_ON = false -- Etat du radiateur false ou true
local sonde_KO = false -- Sonde de temperature HS
local sonde = string.format("%s%s", "Temperature_salon", valeur) -- Nom de la sonde de température
local presence = string.format("%s%s", "Chauffage_on_off_salon", valeur) -- Interrupteur manuel indiquant la presence
local calendrier = string.format("%s%s", "Chauffage_calendrier_salon", valeur)
local radiateur = string.format("%s%s", "Radiateur_chambre_salon", valeur) -- Nom de l'interrupteur de chauffage
log = '***'
log2 = '***'
local heure = string.sub(os.date("%X"), 1, 5) -- Recuperation de l'heure du systeme
local lastSeen = string.sub(os.date("!%X", timedifference(sonde)), 1, 5) -- Heure de la derniere releve de la sonde de temperature
puissance=tonumber(watt[key]) -- Puissance en watt du radiateur
commandArray = {}
if (debug) then print ('>>>>>>>>>>>>>>>Initialisation '..puissance..' Radiateur>'..valeur) end
----------------------------------------------
------ Alerte mail ------
-- si la sonde est muette depuis 30' --
----------------------------------------------
if (lastSeen >= '00:30' and lastSeen < '00:32') then
commandArray['SendEmail']='Domoticz Alerte#Alerte sonde chambre '..piece..' muette#'..mail
if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Envoi mail probleme de sonde ') end
end
----------------------------------------------
------ Gestion consigne ------
----------------------------------------------
-- récupération de la valeur du thermostat
if (otherdevices[presence] == 'On') then -- si la presence est active (interrupteur manuel 'Chauffage_on_off_XXXX')
if (otherdevices[calendrier] == 'On') then -- ET calendrier ON (Chauffage_calendrier_XXXX)
consigne = tonumber(otherdevices_svalues[consigne_confort])
else
consigne = tonumber(otherdevices_svalues[consigne_eco])
end
else -- presence = OFF
consigne = tonumber(otherdevices_svalues[consigne_ecoplus])
end
if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Initialisation Consigne chambre '..valeur..' > '..consigne) end
-- on récupère la température fournie par la sonde
local temperature = math.floor(10*tonumber(otherdevices_temperature[sonde]))/10
if (debug) then print('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Recup valeur sonde chambre '..valeur..' > '..temperature) end
----------------------------------------------
-- Inititialisation des Variables d etat --
----------------------------------------------
if (otherdevices[radiateur] == 'On') then le_radiateur_est_sur_ON = true end
if lastSeen > '00:10' then
local sonde_KO = true
log2 = '*** Sonde muette '
end
----------------------------------------------
------ Gestion du radiateur ------
--- selon temperature relevee et consigne --
----------------------------------------------
if (le_radiateur_est_sur_ON) and not (sonde_KO) then
log = '*** IF 1 > Le Radiateur est en marche'
status = 1
if temperature >= (consigne + hysteresis) then
commandArray[radiateur]='Off'
log = '*** IF 2 > Arret du Radiateur'
status = 0 -- Pour eviter le delai de la Maj du device (variable utilisee dans le if du calcul de conso)
end
else
log = '*** IF 3 > Le Radiateur est arrete'
status = 0
if temperature <= (consigne - hysteresis) and not (sonde_KO) then
commandArray[radiateur]='On'
log = '*** IF 4 > Allumage du Radiateur'
status = 1
end
end
-- calcul de la conso (npower = puissance actuelle / energy = puissance cumulee)
npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)") -- extraction des valeurs stockees dans le device conso
if (status == 1) then -- le radiateur est allume
cumul_power = tonumber(cumul_power + puissance)
energy = tonumber(energy + (puissance / 60)) -- puissance journaliere cumulee
else -- Le radiateur est eteint
energy = tonumber(energy)
end
power = tonumber(cumul_power) -- puissance instantanee
-- envoi de la conso dans le capteur virtuel d'énergie
if (reset) then
power = 0
energy = 0
end
commandArray[3]={['UpdateDevice'] = conso_id .. '|0|' .. power .. ';' .. energy}
-- logs
if (verbose) then
print ' '
print('********************* Chauffage '..valeur..' *********************')
print('*** Il fait '..temperature..'°C pour une consigne de '..consigne..'°C souhaités')
print(log,log2)
print('********************************************************************')
end
end -- fin de tableau
return commandArray
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 23 févr. 2018, 23:39
par Nissa
Bonsoir Valentin,
Il s'agit d'une erreur au niveau de la déclaration des variables.
Vérifie bien chaque ligne, l'orthographe des noms de switchs, il doit y avoir une incohérence dans ces déclarations.
A+
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 24 févr. 2018, 09:36
par valentin44
j'ai trouvé
je n'avais pas compris le système variable fix _ Variable mobile
"temperature_" ne bouge pas et on vient rajouter les pièces
super astuces et super flexible
Un grand merci
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 24 févr. 2018, 20:16
par Nissa
[quote="valentin44"]j'ai trouvé
je n'avais pas compris le système variable fix _ Variable mobile
"temperature_" ne bouge pas et on vient rajouter les pièces
super astuces et super flexible
Un grand merci[/quote

Re: YASDC (Yes Another Script De Chauffage) !
Publié : 28 févr. 2018, 11:26
par jeff0077
Bonjour à tous,
Tous d'abord bravo pour le travail effectué, j'ai deux petite question :
1ere : Dans le tuto on demande d'associé le switch on_off au radiateur mais dans quelle sens ? dans le switch on_off ou dans le switch radiateur? je l'ai fait dans le on_off et il se coupe quand j'arrive a température.
2eme : j'ai le log suivant que j'arrive pas a comprendre :
2018-02-28 11:20:00.387 LUA: >>>>>>>>>>>>>>>Initialisation 1500 Radiateur>Chambre_Parents
2018-02-28 11:20:00.387 LUA: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Initialisation Consigne chambre Chambre_Parents > 19
2018-02-28 11:20:00.387 LUA: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Recup valeur sonde chambre Chambre_Parents > 19
2018-02-28 11:20:00.387 LUA:
2018-02-28 11:20:00.387 LUA: ********************* Chauffage Chambre_Parents *********************
2018-02-28 11:20:00.387 LUA: *** Il fait 19°C pour une consigne de 19°C souhaités
2018-02-28 11:20:00.387 LUA: *** IF 1 > Le Radiateur est en marche
2018-02-28 11:20:00.387 LUA: *** Sonde muette
2018-02-28 11:20:00.387 LUA: ********************************************************************
2018-02-28 11:20:00.387 LUA: >>>>>>>>>>>>>>>Initialisation 1500 Radiateur>SDB
2018-02-28 11:20:00.387 LUA: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Initialisation Consigne chambre SDB > 19
2018-02-28 11:20:00.387 LUA: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Recup valeur sonde chambre SDB > 19.7
2018-02-28 11:20:00.387 LUA:
2018-02-28 11:20:00.387 LUA: ********************* Chauffage SDB *********************
2018-02-28 11:20:00.387 LUA: *** Il fait 19.7°C pour une consigne de 19°C souhaités
2018-02-28 11:20:00.387 LUA: *** IF 3 > Le Radiateur est arrete
2018-02-28 11:20:00.387 LUA: *** Sonde muette
2018-02-28 11:20:00.387 LUA: ******************************************************************************************************
Si j'ai bien compris c'est parce que ma sonde de température a été mise à jour il y a plus de 10 min, c'est ca?
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 28 févr. 2018, 22:52
par Nissa
Bonsoir,
Concernant la 1ère question, le switch on-off est celui qui active le module radio que tu as connecté à ton radiateur.
Pour le switch on-off au vu des logs, il y a sans doute un problème dans tes déclarations de variables, car il récupère bien la température de ta sdb mais il dit sonde-ko ?!! Vérifie tes variables. La racine du nom des interrupteurs est toujours identique (Chauffage_calendrier_ , Chauffage_on_off_ , Radiateur_chambre_ ). Ils ne sont distingués dans le programme que par la désignation finale (valeur, dans le tableau piece)
De toute évidence, ton script récupère bien la température de la sonde mais le test de l'âge de la sonde est erroné (last seen)
A+
Re: YASDC (Yes Another Script De Chauffage) !
Publié : 01 mars 2018, 10:40
par valentin44
Bonjour à tous
voila après quelques jours d'utilisation la régulation de la chauffe marche super,
Pour Information, j'utilise le fameux fil pilote donc
Quand Radiateur = on => pas de chauffe
Quand Radiateur =Off => chauffe
Astuce Évidente pour certain

j'ai rajouté un Switch virtuel "Radiateur_inverseur" puis un petit programme en bloc rapide
Quand radiateur_inverseur est en "On" alors Radiateur du salon est en off => donc allumé
sinon l'inverse
comme cela sur la page d’accueil quand je vois le logo "on" du "radiateur inverseur " je me pose pas la question c'est en chauffe moiahhh
Juste une question le capteur virtuel "Chauffage_conso" n'évolue pas avez - vous une idée ? dans le programme il n'y a que la dénomination à MAJ et le numéro Idx
local conso = 'Chauffage_conso' -- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 00082044 -- idx du capteur virtuel de consommation électrique
coté de l'interupteur virtuel quand je clique sur modifier il y a comme renseignement :
Type : utilisation
Energy read : frome device
Des avis ?
merci