[LUA] YASDC (Yes Another Script De Chauffage) !
Re: YASDC (Yes Another Script De Chauffage) !
Bonjour,
Je me présente je m'appelle Benjamin.
J'essaye de mettre en place ce script chez moi.
J'ai une sonde Oregon THGR810, un module Trust dans la salle de bain pour un petit radiateur.
Seulement, le log retourne toujours une erreur au niveau de la fonction timedifference, il n'arrive pas a récupérer la valeur last seen.
Tout le reste marche qui ne nécessite pas cette fonction en commentant différentes lignes.
J'ai vérifié si mon pi était a jour niveau date et heure, vérifier les noms de chaque sonde, interrupteur etc...
Changé plusieurs fois les noms, même en mettant de simple lettre a b c etc....
Recommencer a zéro la création des inter, thermostat etc...
Rien n'y fait.
Je n'arrive pas a comprendre pourquoi je n'arrive pas a récupérer cette valeur last seen.
J'ai même essayer avec une sonde virtuelle rien n'y fait.
Quelqu'un a-t-il rencontrer ce problème ?
Cordialement
Je me présente je m'appelle Benjamin.
J'essaye de mettre en place ce script chez moi.
J'ai une sonde Oregon THGR810, un module Trust dans la salle de bain pour un petit radiateur.
Seulement, le log retourne toujours une erreur au niveau de la fonction timedifference, il n'arrive pas a récupérer la valeur last seen.
Tout le reste marche qui ne nécessite pas cette fonction en commentant différentes lignes.
J'ai vérifié si mon pi était a jour niveau date et heure, vérifier les noms de chaque sonde, interrupteur etc...
Changé plusieurs fois les noms, même en mettant de simple lettre a b c etc....
Recommencer a zéro la création des inter, thermostat etc...
Rien n'y fait.
Je n'arrive pas a comprendre pourquoi je n'arrive pas a récupérer cette valeur last seen.
J'ai même essayer avec une sonde virtuelle rien n'y fait.
Quelqu'un a-t-il rencontrer ce problème ?
Cordialement
Re: YASDC (Yes Another Script De Chauffage) !
Bonjour benjamin,
Il y a sans doute un problème au niveau de tes déclarations de variables
Vérifie bien la déclaration de ta fonction timedifference un peu plus haut dans le script et de la variable sonde :
local sonde = string.format("%s%s", "Temperature_", valeur)
Faire un print de sonde et de valeur pour vérification
A+
Il y a sans doute un problème au niveau de tes déclarations de variables
Vérifie bien la déclaration de ta fonction timedifference un peu plus haut dans le script et de la variable sonde :
local sonde = string.format("%s%s", "Temperature_", valeur)
Faire un print de sonde et de valeur pour vérification
A+
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: YASDC (Yes Another Script De Chauffage) !
Salut,
(Sur une lecture rapide)
Pour une pièce nommée 'chambre'
Il doit exister une sonde de température nommée
'Temperature_chambre'
Et un module radiateur nommé
'Radiateur_chambre'
Etc..
(Sur une lecture rapide)
Pour une pièce nommée 'chambre'
Il doit exister une sonde de température nommée
'Temperature_chambre'
Et un module radiateur nommé
'Radiateur_chambre'
Etc..
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
-
valentin44
- Messages : 15
- Inscription : 23 févr. 2018, 21:30
Re: YASDC (Yes Another Script De Chauffage) !
Bonjour à tous.
Pour information depuis Février Mars 2018, j'ai suivi ce tuto pour mettre un système de chauffage intelligent salon + salle de bain
j'ai du le coupler avec un script permettant de ré-envoyer plusieurs fois le signale toutes les 15 min pour être sur que les modules réceptionnent bien l'information.
9 mois plus tard , tout fonctionne très bien et j'ai même EDF qui m'a baissé ma facture de 18 euros par mois
j'ai rajouté entre temps une tablette avec la custom page pour madame
le contrôle à distance pour quand je suis en déplacement.
encore une fois merci à tous
Pour information depuis Février Mars 2018, j'ai suivi ce tuto pour mettre un système de chauffage intelligent salon + salle de bain
j'ai du le coupler avec un script permettant de ré-envoyer plusieurs fois le signale toutes les 15 min pour être sur que les modules réceptionnent bien l'information.
9 mois plus tard , tout fonctionne très bien et j'ai même EDF qui m'a baissé ma facture de 18 euros par mois
j'ai rajouté entre temps une tablette avec la custom page pour madame
encore une fois merci à tous
Re: YASDC (Yes Another Script De Chauffage) !
Coucou,
J'ai trouvé mon erreur !
vildriver a vu juste.
J'avais nommé ma sonde "Sonde_oregon_SDB".
En renommant en "Temperature_SDB" et j'avais déjà déclaré la pièce SDB, cela fonctionne tout de mieux.
Il serait bon de rajouter un photo d'une sonde dans la première page, car elle n'y parait pas.
En tout cas, cela m'a permit de me baigner dans le code lua.
Merci pour votre aide !
J'ai trouvé mon erreur !
vildriver a vu juste.
J'avais nommé ma sonde "Sonde_oregon_SDB".
En renommant en "Temperature_SDB" et j'avais déjà déclaré la pièce SDB, cela fonctionne tout de mieux.
Il serait bon de rajouter un photo d'une sonde dans la première page, car elle n'y parait pas.
En tout cas, cela m'a permit de me baigner dans le code lua.
Merci pour votre aide !
Re: YASDC (Yes Another Script De Chauffage) !
Bonjour,
J'ai installé ce très bon script chez moi et il semble fonctionner correctement mais j'ai cette erreur qui apparaît régulièrement sans que je trouve le problème.
domoticz sur RPI3 , sondes de températeures xiaomi , chauffage piloté via chacon DIO.
2019-01-22 11:17:02.542 Error: EventSystem: in /home/pi/domotique/domoticz/scripts/lua/script_time_chauffage.lua: ...domotique/domoticz/scripts/lua/script_time_chauffage.lua:95: attempt to concatenate local 'piece' (a table value)
2019-01-22 11:18:02.531 Error: EventSystem: in /home/pi/domotique/domoticz/scripts/lua/script_time_chauffage.lua: ...domotique/domoticz/scripts/lua/script_time_chauffage.lua:95: attempt to concatenate local 'piece' (a table value)
J'ai installé ce très bon script chez moi et il semble fonctionner correctement mais j'ai cette erreur qui apparaît régulièrement sans que je trouve le problème.
domoticz sur RPI3 , sondes de températeures xiaomi , chauffage piloté via chacon DIO.
2019-01-22 11:17:02.542 Error: EventSystem: in /home/pi/domotique/domoticz/scripts/lua/script_time_chauffage.lua: ...domotique/domoticz/scripts/lua/script_time_chauffage.lua:95: attempt to concatenate local 'piece' (a table value)
2019-01-22 11:18:02.531 Error: EventSystem: in /home/pi/domotique/domoticz/scripts/lua/script_time_chauffage.lua: ...domotique/domoticz/scripts/lua/script_time_chauffage.lua:95: attempt to concatenate local 'piece' (a table value)
Re: YASDC (Yes Another Script De Chauffage) !
Bonsoir,
Il y a un problème de concaténation (ligne 95 de ton script)
Vérifie la déclaration du tableau "piece". Les libellés de chaque ligne sont-ils bien délimités par des ' ?
Il y a un problème de concaténation (ligne 95 de ton script)
Vérifie la déclaration du tableau "piece". Les libellés de chaque ligne sont-ils bien délimités par des ' ?
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
Re: YASDC (Yes Another Script De Chauffage) !
Bonjour Nissa,
Je pense que cela vient de la commande d'envoi e-mail car j'ai une sonde de température qui débloque de temps en temps.
J'ai juste enlevé le texte chambre...
Je pense que cela vient de la commande d'envoi e-mail car j'ai une sonde de température qui débloque de temps en temps.
J'ai juste enlevé le texte chambre...
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']='Salon'
piece['1']='SdBain'
piece['2']='Chambre'
local watt={} -- Tableau Rajouter ici la puissance en watts du radiateur (L'index doit correspondre a celui de la piece ci-dessus)
watt['0']='2000'
watt['1']='1000'
watt['2']='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 = 88 -- 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.3 -- Valeur seuil pour éviter que le relais ne cesse de commuter dans les 2 sens
local debug = false -- true or false pour voir tous les messages debug dans le log
local verbose = true -- Print ou non des logs
-- email
local mail = 'xxxxxxxxxx@gmail.com' -- pour réception alerte sonde muette (chauffage coupé)
-- domoticz
local url = 'MON@IP: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_", valeur) -- Nom de la sonde de température
local presence = string.format("%s%s", "Chauffage_on_off_", valeur) -- Interrupteur manuel indiquant la presence
local calendrier = string.format("%s%s", "Chauffage_calendrier_", valeur)
local radiateur = string.format("%s%s", "Radiateur_", 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 30min --
----------------------------------------------
if (lastSeen >= '00:30' and lastSeen < '00:32') then
commandArray['SendEmail']='Domoticz Alerte#Alerte sonde '..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 '..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 '..valeur..' > '..temperature) end
----------------------------------------------
-- Inititialisation des Variables d etat --
----------------------------------------------
if (otherdevices[radiateur] == 'On') then le_radiateur_est_sur_ON = true end
if lastSeen > '00:25' 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
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: YASDC (Yes Another Script De Chauffage) !
piece est un tableau, et non pas une variable.
key est l'index de ton tableau.
Tu doit l'utiliser come ceci : piece[key], comme tu a utilisé watt[key].
key est l'index de ton tableau.
Tu doit l'utiliser come ceci : piece[key], comme tu a utilisé watt[key].
Code : Tout sélectionner
commandArray['SendEmail']='Domoticz Alerte#Alerte sonde '..piece[key]..' muette#'..mailPi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: YASDC (Yes Another Script De Chauffage) !
Effectivement cela fonctionne mieux.
Tout est OK
Merci
Tout est OK
Merci