OpenHAB on Intel Edison
What is openHAB?
openHAB is a software for integrating different home automation systems and technologies into one single solution that allows over-arching automation rules and that offers uniform user interfaces.
- This means openHAB is designed to be absolutely vendor-neutral as well as hardware/protocol-agnosticcan
- run on any device that is capable of running a JVM (Linux, Mac, Windows)
- lets you integrate an abundance of different home automation technologies into one
- has a powerful rule engine to fulfill all your automation needs
- comes with different web-based UIs as well as native UIs for iOS and Android
- is fully open sourceis maintained by a passionate and growing community
- is easily extensible to integrate with new systems and devices
- provides APIs for being integrated in other systems
Intel® Edison Board Specs
Hardware: Intel® Atom™ dual-core processor at 500 MHz, 1 GB DDR3 RAM, 4 GB eMMC Flash, Bluetooth* 4.0, Wi-Fi*
Software: Yocto Project
Introduccion Y Desarrollo
Objetivo:
- Realizar una pequeña aplicación de la plataforma openHAB para domotica, usando una Intel Edison como servidor.
- Utilizando el protocolo MQTT enviar y recibir información de los sensores.
Sensores y actuadores :
- Grove sensor de temperatura
- Grove relay
Primer paso:
Lo primero que se debe realizar es descargar el runtime de openHAB disponible en:
Configuraciones
Items
Dentro del runtime/configurations se encuentra la carpeta de items que es donde se configura los elementos que nuestra aplicación tendrá disponibles, ejemplo
home.items
Group All
Switch mqttsw1 "Switch 1" (all) {mqtt=">[broker:/home/sw/1:command:off:0],>[broker:/home/sw/1:command:on:1]"} Switch mqttsw2 "Switch 2" (all) {mqtt=">[broker:/home/sw/2:command:off:0],>[broker:/home/sw/2:command:on:1]"} Switch mqttsw3 "Switch 3" (all) {mqtt=">[broker:/home/sw/3:command:off:0],>[broker:/home/sw/3:command:on:1]"} Number temp "Temperatura [%.1f °C]" {mqtt="<[broker:/home/temp/state:state:default]"}
DateTime Date "Date [%1$tA, %1$td.%1$tm.%1$tY]" { ntp="" }
lo que nos dice que hay 3 interruptores que envian los datos de on y off (1 y 0) por medio de MQTT, luego esta un elemento tipo numero que recibe un valor desde MQTT que es la temperarura por ultimo esta uno llamado DateTime que toma la fecha del servidor y la muestra.
Sitemap
También dentro de configurations esta el archivo del sitemap que es donde se configura la forma de mostrar los elementos; es la parte visual de la aplicación web, ejemplo:
home.sitemap
sitemap demo label="Home IoT"
{ Frame label="Sala" { Switch item=mqttsw1 label="Lamp 1" Switch item=mqttsw2 label="Lamp 2" Switch item=mqttsw3 label="Lamp 3" Text item=temp } Frame label="Fecha" { Text item=Date } Frame label="CameraIP" icon="video" { Webview url="http://xxx.xxx.x.xx:8080/video" height=8 } }
OpenHAB Configuración General
para que openHAB reconozca cada archivo es necesario que tengan el mismo nombre pero la extension es donde se coloca el tipo de archivo como los casos anteriores.
Configuración general
dentro de la carpeta de configurations debe de estar un archivo llamado openhab.cfg de donde tomara la información de ubicación, nombre de los elementos que la aplicación necesitara, ejemplo:
openhab.cfg
#######################################################
folder:items=10,items
##### General configurations #### #######################################################
folder:sitemaps=10,sitemap
folder:rules=10,rules
folder:scripts=10,script
folder:persistence=10,persist
chart:provider=default
mqtt:broker.url=tcp://localhost:1883
Sensores Y Actuadores
Sensor de temperatura:
#codigo parcial
import paho.mqtt.client as paho import time import pyupm_grove as grove
sensor_temp = grove.GroveTemp(0)
def on_temp(mosq, obj, msg):
pass
def temp():
mqttclient = paho.Client()
mqttclient.on_publish = on_temp
mqttclient.connect("xxx.xxx.x.xx", 1883, 60)
while True:
message = sensor_temp.value()
mqttclient.publish("/home/temp/state", message)
time.sleep(20)
Actuador:
#codigo parcial
import paho.mqtt.client as paho import pyupm_grove as grove
relay1 = grove.GroveRelay(2)
def on_lamp_1(mosq, obj, msg): if int(msg.payload) == 1: relay1.on() else: relay1.off() print "MQTT lamp_1 %s %s" % (msg.topic, msg.payload)
def lamp_1(): mqttclient = paho.Client() mqttclient.on_message = on_lamp_1 mqttclient.connect("xxx.xxx.x.xx", 1883, 60)
mqttclient.subscribe("/home/sw/1", 0) while mqttclient.loop() == 0: pass
Conclusion
El potencial de la plataforma de openHAB es muy alto ya que cuenta con una variedad de items disponibles conexiones con mas servicios y APIs disponibles en internet, ejemplo: bots con telegram, servicios de GPS, control de dispositivos multimedia, bases de datos, etc. en lo que respecta al proyecto mostrado es algo bastante simple que eventual tiene formas de crecer por las facilidades que otorga tanto openHAB como tarjeta de desarrollo Intel Edison.
Opciones de expansión:
- Realizar una red de sensores y actuadores y distribuirlos en una casa usando módulos ESP8266-XX comunicados por MQTT.
- cambiar la Intel Edison por una Raspberry pi para aprovechar la salida de vídeo y tener la interfaz gráfica en el mismo dispositivo.