La bonne température a la bonne heure

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

La bonne température a la bonne heure

Message par deennoo »

Salut a tous, cela faisait longtemps que je n’étais pas venu vous solliciter, et c'est bien dommage c'est vrai.

Une installation qui fonctionne c'est bien, allumer éteindre les choses en fonctions des heures et des présences c'est cool, le Control vocal c'est hyper cool, Xiaomi Yeelight c'est supracool.

Mais de mon coté il est temps d'ajouter un peu d'intelligence.

J'ai des pièces équipées de matériel Yeelight qui permet de jouer sur la température du blanc : Blanc Chaud presque orange a un blanc froid type néon.

L'une de ces pièces est presque aveugle, j'ai bien une fenêtre mais elle donne sur un escalier, sous une terrasse, donc même de jour il faut allumer la lumiére.

C'est sur cette pièce que je souhaite faire ceci partant du principe que :

- Le soleil au zénith peu ce traduire par une température de blanc froid de type néon : 6000k
- Que de nuit il nous faut une lumière plus chaude tirant sur le jaune orange : 3500k
- Que dans Domoticz nous avons les infos de levé et de couché du soleil

Je souhaiterait avoir une variation automatique de la température du blanc en fonction de la position du soleil, ceci toutes les 5 minutes, afin que ce soit le plus progressif possible et presque invisible / perturbant.

Exemple :

lever de soleil a 7h : Lumière a 3500k qui grimpe a 6000k a 13h puis retourne a 3500k a 19h pour le couché du soleil et la nuit.

Nous avons donc 19h00-7h : 12h00 de jour : 720 minutes soit 144 tranches de 5 minutes au total :
- 72 de 7h a 13h
- 72 de 13h a 19h

Soit des variations de : (6000-3500)/144 : 17.361111k j'arrondi a 17k

En attendant que les dev de Domoticz intègre la gestion des températures de blancs, il faut passer par l'api Yeelight, ce n'est pas le plus difficile.

Pour faciliter la gestion des variations je pensais garder la température a "afficher sur l'ampoule" dans une variable utilisateur.

Si les heures de lever et de coucher était aussi carré que l'exemple ce serait "facile" mais vous le savez ce sont des variables qui ne sont pas forcement multiple de 5, oui on peut tricher pour faire commencer et finir les variations au multiple de 5 prés.

J'ai bien des connaissances en LUA Domoticz mais elles sont "basiques" ici il faut faire des maths que je ne sais pas forcement traduire.

Si vous avez des exemples ou idée je suis preneur.

Merci
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: La bonne température a la bonne heure

Message par vil1driver »

Salut,

un peut à l'arrache.. ça va demander affinage, arrondissage, mis en variables, etc..... mais en gros un truc comme ça ?

Code : Tout sélectionner

commandArray = {}
local color
time = os.date("*t")
if time.hour > 7 and time.hour < 19 then

	local insecond = 60*(time.hour*60 + time.min)
	color = 4750+1250*math.cos(2.8*math.pi/66000*insecond)

else

	color = 3500

end
print('color:'..color)	
return commandArray 
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
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: La bonne température a la bonne heure

Message par deennoo »

vil1driver a écrit :Salut,

un peut à l'arrache.. ça va demander affinage, arrondissage, mis en variables, etc..... mais en gros un truc comme ça ?

Code : Tout sélectionner

commandArray = {}
local color
time = os.date("*t")
if time.hour > 7 and time.hour < 19 then

	local insecond = 60*(time.hour*60 + time.min)
	color = 4750+1250*math.cos(2.8*math.pi/66000*insecond)

else

	color = 3500

end
print('color:'..color)	
return commandArray 
Comme a ton d'habitude tu me sors un truc super...Merci.

Je publierais le script ici avant d'etre sur mon blog
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: La bonne température a la bonne heure

Message par vil1driver »

affinage #1

pleine prise en compte du soleil

Code : Tout sélectionner

commandArray = {}
local mini = 3500
local maxi = 6000
local delta = maxi - mini
local wakeup = 60*timeofday['SunriseInMinutes']
local goodnight = 60*timeofday['SunsetInMinutes']
local periode = goodnight - wakeup
local offset = wakeup-periode/2
local color = mini
local time = os.date("*t")
local now = 60*(time.hour*60 + time.min)
if now >= wakeup and now < goodnight then
	color = math.floor((maxi-delta/2)+(delta/2)*math.cos((now-offset)*2*math.pi/periode)+0.5)
end
print('color:'..color)	
return commandArray 
Image
Image
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
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: La bonne température a la bonne heure

Message par vil1driver »

petits codes pour convertir au besoin

KelvinColor en RGB

Code : Tout sélectionner

-- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940)
dofile('/home/vil1driver/domoticz/scripts/lua/modules.lua')

local debug = true  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

-- to rgb

    color = color/100
    local red, green, blue
	
    --Calculate Red:

    if color <= 66 then
        red = 255
    else
        red = constrain(round(329.698727446 * ((color - 60) ^ -0.1332047592)),0,255)
	end
    
    --Calculate Green:

    if color <= 66 then
		green = constrain(round(99.4708025861 * math.log(color) - 161.1195681661),0,255)
    else
		green = constrain(round(288.1221695283 * ((color - 60) ^ -0.0755148492)),0,255)
    end
    
    --Calculate Blue:

    if color >= 66 then
        blue = 255
    else
		if color <= 19 then
            blue = 0
        else
			blue = constrain(round(138.5177312231 * math.log(color - 10) - 305.0447927307),0,255)
		end
	end
log(red)
log(green)
log(blue)
    
RGB en hexadecimal

Code : Tout sélectionner

-- to hex

local rgb = {red,green,blue}
local hexadecimal = '#'

	for key, value in pairs(rgb) do
		local hex = ''

		while(value > 0)do
			local index = math.fmod(value, 16) + 1
			value = math.floor(value / 16)
			hex = string.sub('0123456789ABCDEF', index, index) .. hex			
		end

		if(string.len(hex) == 0)then
			hex = '00'

		elseif(string.len(hex) == 1)then
			hex = '0' .. hex
		end

		hexadecimal = hexadecimal .. hex
	end

log(hexadecimal)
Dernière modification par vil1driver le 01 avr. 2018, 14:43, modifié 1 fois.
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
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: La bonne température a la bonne heure

Message par landaisbenj »

Des oufs ...
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: La bonne température a la bonne heure

Message par deennoo »

Merci Vil1D
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: La bonne température a la bonne heure

Message par deennoo »

vil1driver a écrit :petits codes pour convertir au besoin

KelvinColor en RGB

Code : Tout sélectionner

-- chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940)
dofile('/home/vil1driver/domoticz/scripts/lua/modules.lua')

local debug = true  -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

-- to rgb

    color = color/100
    local red, green, blue
	
    --Calculate Red:

    if color <= 66 then
        red = 255
    else
        red = constrain(round(329.698727446 * ((color - 60) ^ -0.1332047592)),0,255)
	end
    
    --Calculate Green:

    if color <= 66 then
		green = constrain(round(99.4708025861 * math.log(color) - 161.1195681661),0,255)
    else
		green = constrain(round(288.1221695283 * ((color - 60) ^ -0.0755148492)),0,255)
    end
    
    --Calculate Blue:

    if color >= 66 then
        Blue = 255
    else
		if color <= 19 then
            blue = 0
        else
			blue = constrain(round(138.5177312231 * math.log(color - 10) - 305.0447927307),0,255)
		end
	end
log(red)
log(green)
log(blue)
    

Merci pour ce bout de code car j'ai bien "device" qui demande ce type d'info : Mon bureau

https://drive.google.com/uc?id=1nzgQOr5 ... uS_3KfeYUt

Fait avec code : https://github.com/jasoncoon/esp8266-fastled-webserver : une esp8266 + 5m de ruban de led adressable et c'est la fete : effets façon fete foraine, couleur, j'essaye de faire un plugin python pour ceci justement


Par contre il ne suit pas du tout une variation de blanc mais une variation de couleur, c'est fait expres (en prennant en compte les variation possible de teinte d'un ruban a l'autre) ?
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: La bonne température a la bonne heure

Message par vil1driver »

Pas de quoi, ce sujet m'a inspiré..
Je vai très certainement faire la même chose que toi.
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
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: La bonne température a la bonne heure

Message par landaisbenj »

Il devrait exister la même chose pour l'intensité lumineuse :} Plus ça s'assombrit, plus ça s'allume.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Répondre