YASDC (Yes Another Script De Chauffage) !

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
benarkor
Messages : 7
Enregistré le : 12 sept. 2018, 22:32

Re: YASDC (Yes Another Script De Chauffage) !

Message par benarkor » 20 nov. 2018, 02:23

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Nissa
Messages : 84
Enregistré le : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: YASDC (Yes Another Script De Chauffage) !

Message par Nissa » 20 nov. 2018, 09:58

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+
Domoticz sur RPI2 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff

vil1driver
Messages : 5113
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: YASDC (Yes Another Script De Chauffage) !

Message par vil1driver » 20 nov. 2018, 10:11

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..

valentin44
Messages : 15
Enregistré le : 23 févr. 2018, 21:30

Re: YASDC (Yes Another Script De Chauffage) !

Message par valentin44 » 21 nov. 2018, 16:45

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 :)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


benarkor
Messages : 7
Enregistré le : 12 sept. 2018, 22:32

Re: YASDC (Yes Another Script De Chauffage) !

Message par benarkor » 25 nov. 2018, 01:05

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 !

jmeda
Messages : 3
Enregistré le : 22 janv. 2019, 13:16

Re: YASDC (Yes Another Script De Chauffage) !

Message par jmeda » 22 janv. 2019, 13:22

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)

Nissa
Messages : 84
Enregistré le : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: YASDC (Yes Another Script De Chauffage) !

Message par Nissa » 24 janv. 2019, 01:23

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 ' ?
Domoticz sur RPI2 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff

jmeda
Messages : 3
Enregistré le : 22 janv. 2019, 13:16

Re: YASDC (Yes Another Script De Chauffage) !

Message par jmeda » 24 janv. 2019, 15:53

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...

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 : 231
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: YASDC (Yes Another Script De Chauffage) !

Message par denis_brasseur » 24 janv. 2019, 16:57

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].

Code : Tout sélectionner

commandArray['SendEmail']='Domoticz Alerte#Alerte sonde '..piece[key]..' muette#'..mail
Domoticz + Raspberry Pi3 + Disque Dur PiDrive + RFXtrx433
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro RC 5CH
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
Module D2L LINKY

jmeda
Messages : 3
Enregistré le : 22 janv. 2019, 13:16

Re: YASDC (Yes Another Script De Chauffage) !

Message par jmeda » 24 janv. 2019, 21:26

Effectivement cela fonctionne mieux.
Tout est OK
Merci

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre