Como usar un sensor lumínico al encender las luces automáticamente y ahorrar en la factura eléctrica

Compartelo con otros!

Usar un PIR para las luces del baño o de la cocina resulta muy cómodo, pero no siempre es realmente necesario encenderlas, como por ejemplo en un día soleado. Para ello veremos hoy como usar un sensor BH1750 para controlar el encendido.

Sensor BH1750
Sensor BH1750

De esta manera, ayudaremos activamente a reducir el consumo eléctrico, y favorecer el ahorro en la factura eléctrica. Encendiendo las luces automáticamente, solo cuando tú las encenderías manualmente, evitamos un consumo adicional innecesario.

El sensor es realmente sencillo de usar, ya que se puede alimentar a 3.3V y se comunica por I2C.
Perfectamente compatible tanto con la familia de ESP32, como la de ESP8266 (como los módulos de Sonoff).

Este es el sensor que he usado, que incluye una cúpula:

Primero: las conexiones

En mi caso, uso varios sonoff para luces del techo, así que ahí es un buen sitio para el sensor de luz, así que ese sonoff se encargará de gestionar el sensor. El Sonoff tiene los siguientes pines disponibles:

Sonoff Basic PCB
Sonoff Basic PCB

de arriba a abajo (through hole):

GND
TX (GPIO01)
RX (GPIO03)
3V3

Así que conectaremos el sensor de la siguiente manera:

BH1750 PCB
BH1750 PCB

Sonoff Basic <-> BH1750
VCC <-> 3v3
TX <-> SCL
RX <-> SDA
GND <-> GND
(NADA) <-> ADDR

Segundo: Configuracion en Tasmota

Lo indispensable para que Tasmota detecte el sensor I2C, es que sea la versión -sensors
así que primero actualizaremos a la versión minimal, para luego poder pasar a la versión sensors.

Si todavía no tienes flasheado Tasmota en tu Sonoff, pásate por aquí: Como Tasmotizar un Sonoff

Es necesario el paso intermedio, porque para una actualización OTA, nos hace falta tanto espacio disponible como tamaño del archivo a flashear.

Los archivos se descargan desde la siguiente página: ota.tasmota.com/tasmota/release/
-> tasmota-minimal.bin
-> tasmota-sensors.bin.gz (para evitar problemas de espacio, versión comprimida)

La actualización se puede hacer tanto mediante los archivos descargados al ordenador, o usando el link directo:

Tasmota update

Cuando ya estemos en la versión sensors, ya podemos hacer la configuracion:

1- deshabilitar el SerialLog – necesitamos los pines RX/TX!
introducimos el siguiente comando en la consola:

SerialLog 0

2- asignamos los GPIO correspondientes para SDA/SCL:

Sonoff Basic parameters

Una vez aquí, Tasmota debería identificar el sensor sin problema. Si no es así, puede que hayamos cruzado SDA y SCL.
Asi es como podemos confirmar que todo fue bien:

Sonoff Basic BH1750

Tercero: añadirlo a openHAB

asi es como tengo configurado este modulo con Tasmota, solo habrá que añadirle un elemento mas

Archivo .things:

Thing topic LedsCocina "Leds Cocina" @ "Cocina"{
Channels:
    Type string : reachable		"Online"		  	[ stateTopic="tele/LedsCocina/LWT" ]
    Type switch : power		  	"Leds Cocina"		[ stateTopic="stat/LedsCocina/POWER", commandTopic="cmnd/LedsCocina/POWER" ]
    Type number : rssi			  "Señal WiFi"		[ stateTopic="tele/LedsCocina/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI"]
	  Type number : lux			    "Luminosidad"		[ stateTopic="tele/LedsCocina/SENSOR", transformationPattern="JSONPATH:$.BH1750.Illuminance"]
}

Archivo .items:

String LedsCocina_Reachable		"Online: [%s]"		<contactable>											{ channel="mqtt:topic:localhost:LedsCocina:reachable" }
Switch LedsCocina_Power				"Leds Cocina"			<light>														{ channel="mqtt:topic:localhost:LedsCocina:power" }
Number LedsCocina_RSSI				"Señal WiFi"			<wifi>														{ channel="mqtt:topic:localhost:LedsCocina:rssi" }
Number LedsCocina_Lux					"Luminosidad"			<sun>						(gLux_Cocina)			{ channel="mqtt:topic:localhost:LedsCocina:lux" }

De esta manera, openHAB dispone ya de la lectura del sensor, así que ya podríamos automatizarlo como mejor nos parezca, de esta siguiente manera es como lo hice yo:

Cuarto: y lo automatizamos

Para hacerlo de una manera fácil de usar, necesitaremos un para de cosillas:
1- una variable donde tendremos el valor a partir del cual se encienden las luces
2- una entrada en el sitemap que nos permita ajustar la variable
3- una «rule» donde se comprueben los datos

Así está definida mi variable:

Number	Cocina_Lux_target				"Ajuste Luminosidad"					(var)

Así la he añadido en mi sitemap:

Setpoint		item= Cocina_Lux_target			label= "Brillo Cocina [%.0f Lux]"	minValue=0 maxValue=100 step=5

y esta es la «rule» que previamente se encargaba de encender la luz al llegar aviso del PIR:

rule "PIR luces cocina"
when
        Item gPresence_Cocina changed

then
        if ((gPresence_Cocina.state == ON) && (gLux_Cocina.state < Cocina_Lux_target.state)){
                IkeaBulb_1000lm_Switch.sendCommand(ON)}
        if (gPresence_Cocina.state == OFF) {
                IkeaBulb_1000lm_Switch.sendCommand(OFF)}

end

Lo interesante de tener a openHAB como coordinador, es que, en este caso, el sensor está en unas luces secundarias, que reporta por MQTT, tal y como el PIR (de IKEA, zigbee, miembro del grupo gPresence_Cocina), y ambos hacen que se encienda la Bombilla de la cocina (de IKEA también, por zigbee)

¡Un saludo!

Deja un comentario