Interfaz Domotico. OpenHAB y Easy IoT

Hola a todos

Me he echo un sistema domotico en casa. Mas de 10 arduinos conectados por Modbus (RS485) envian al master sus datos (luz, presencia, temperatura, humedad, potencias, etc, etc) a un servidor central (un Mega) y reciben ordenes de el (persianas, aire acc, luces, acceso etc). Todo va bien y llevo tiempo usandolo. Quiero hacer un buen doc contando todos los detalles.

El Arduino Mega "central" gestiona a los otros, envía twitters de aviso, sube datos a xively para tener gráficas monas y tiene una web con un wiznet que es una kk. Necesito un interfaz decente. He estado invertigando y solo he encontrado dos que creo que son realmente gratis: OpenHAB y EasyIoT (http://iot-playground.com). ¿Alguien conoce alguno más?

He conseguido que una raspery Pi lea todos los datos del arduino Mega por el USB. Con lo que los datos pueden entrar y salir, pero no encuentro info de como meterselos al OpenHAB o EasyIoT sin hacer cosas raras como pasar los datos a mqtt subirlos a la nube y que la rpi los lea de ahi.

¿Alguien ha echo algo parecido y puede darme alguna pista de por donde tirar? Gracias.

Por desgracia no tengo conocimientos para ayudarte en tu consulta, pero me parece una maravilla el proyecto que tienes entre manos...

Me encantaría poder ver el doc con todo si algún día lo haces para aprender y poder llegar a hacer y tener algo parecido.

Muchas gracias.

Un saludo!

Puedo recomendarte el proyecto Souliss, dispone de aplicacion para Android, compatible con OH, compatible con mas AVR y mas metodos de comunicacion (incluido el 485), Todo ello gratuito y Opensource :slight_smile:

Si necesitas enlaces o ayuda no dudes en preguntar, hay un post en este mismo foro bastante extenso y un foro especifico, en español-ingles-italiano :stuck_out_tongue:

Salu2

Hola, Gracias por responderme.

fradyjavi: Estos proyectos son mas sencillos de lo que parecen, pero muy laboriosos. El principal problema que he tenido (aparte del sabotaje de FTDI en sus drivers, la madre que los...) ha sido el modbus. Hasta que descubrí que era por los retrasos del micro al hacer otras cosas, como leer sensores y tal lo que provocaba los paquetes perdidos. Y luego los conflictos entre librerias por los timers, como la de infrarojos con tone() y esas cosas que de primeras no te explicas.

juanpintom: Si, estuve leyendo tu post y mirando el souliss. Gran trabajo. Lo he medio descartado porque parece un paquete muy hecho, yo no uso en encj (ya lo usé y fue un poco pesadilla), ni los ESP. Ya tengo el sistema montado y lo que me falta es poner el montón de datos en bonito, con graficas botoncitos, barritas deslizantes y esas cosas. Me da la impresión de que no está pensado para hacerle un interface "mi sistema" <---> Souliss. Si no es así soy todo oidos.

Aqui hay una recopilación de sistema domoticos (¿por qué no está el souliss?):

Al parecer el TOP es el OpenHab, aquí la mejor explicación que he encontrado:

Creo que se le añaden "drivers" para meterle los datos (lo que ahora busco, como meterle los datos) entre los que está un prometedor "Serial".
http://www.openhab.org/features/supported-technologies.html

En su www te puedes bajar una demo que se ejecuta en windows y puedes ver en tu navegador.
http://www.openhab.org/getting-started/index.html

Espero ponerlo en marcha y contar por aqui como se hace.

Saludos

Hola eb4cak :stuck_out_tongue: Comentarte que Souliss es compatible tanto con W5100, como con ENC28J60, asi como 485, NRF24L01 y en ultima instancia se ha añadido compatibilidad con ESP8266, Se puede crear cualquier mezcla de conectividades o utilizar una solo, en la tuya por lo que entiendo seria W5100 + 485, aqui tienes un ejemplo:

Respecto a lo de "mi sistema" <---> Souliss" habria que ver tus codigos y lo facil que pueda ser adaptarlo pero tienes razon, no esta pensado para eso :stuck_out_tongue: Lo que si creo (porque estuve en tu situacion hace tiempo) que diseñar o adaptar es una interfaz grafica es tanto o mas complicado que crear una red de Arduinos con Sensores etc... Ahi es donde entra Souliss, que basicamente lo que hace es facilitar la configuracion y comunicaciones de la red (ethernet, 485,...) y tambien incluir lo que controlará cada Arduino (Sensores, botones, luces, etc) Adaptar esa parte de tu codigo a Souliss no es nada complicado (y menos con tus conocimientos y la ayuda de la comunidad)

A esto hace poco se añadio soporte nativo con Openhab, por lo que ya de por sí, tienes un framework que comunica los Arduino y la interfaz de control Opensource mas potente. Aunque no es obligatorio, puedes utilizar la aplicacion gratuita para Android y ya tendrás la interfaz bonita con graficos, botones, notificaciones, widgets, control por voz e incluso ahora integracion con Tasker y Automate, por lo que las posibilidades de personalizacion y automatizacion son infinitas.

Quede claro que no cobro de Souliss xDD, aunque soy bastante activo en la comunidad lo hago de forma desinteresada porque me gustó el proyecto y es de codigo totalmente abierto, tanto la parte de Arduino como la App.

Salu2 y suerte!, yo como te he comentado empece con un proyecto parecido yo solo y al descubrir Souliss se me abrio un mundo de posibilidades :PP

Bueno, pues para como lo has planteado, voy a dejar de lado el openHAB y voy a centrarme en el Souliss.
Gracias por tus consejos.

No hay de que :stuck_out_tongue: No dudes en pasarte por el foro y exponer tu proyecto, asi como si quieres poner algun sketch que ya tengas hecho y quieras adaptar a Souliss, te echo una mano :slight_smile:

Salu2

Comentar, por si a alguien le es útil, que mientras miraba lo de Souliss se me ocurrió probar openhab con uno de esos conversores USB<->RS485 que valen sobre 1€ en ebay y conectarlo a la red de arduinos que tengo echa con arduinos nano y la libreria simpleModbus. Bueno, pues ha funcionado tanto al probarlo en windows como en la RPI.

Los pasos son mas o menos estos:

1º Instalar OpenHAB. En su www lo explican. Como es java no hay que copilar ni instalar. Copiar y ejecutar, es como si fuera un portable. Si modificas los ficheros de configuracion con el openHAB corriendo, este suele darse cuenta y ejecutar los cambios sin que hagas nada, lo que resulta sorprendente. Es JAVA.
Hay que instalar la demo que trae OpenHAB, vamos, copiarla.

2º Copiar el "puente" de modbus en su carpeta correspondiente. (addons)
3º Mirar en que puerto se ha puesto el USB. En mi caso es COM28 en Windows y /dev/ttyUSB0 en rpi (se ve con ls /dev/tty*)
4º Configurar OpenHAB.

openhab_demo.cfg, en el apartado de modbus:

  modbus:slave1.type=serial
  modbus:serial.slave1.connection=COM29:19200:8:none:2:rtu
  modbus:serial.slave1.id=1
  modbus:serial.slave1.type=holding
  modbus:serial.slave1.start=0
  modbus:serial.slave1.length=6
  modbus:serial.slave1.valuetype=uint16

En rpi sería como minimo (solo definimos un esclavo):

  modbus:slave1.type=serial
  modbus:serial.slave1.connection=/dev/ttyUSB0:19200:8:none:2:rtu
  modbus:serial.slave1.id=1
  modbus:serial.slave1.type=holding
  modbus:serial.slave1.start=0
  modbus:serial.slave1.length=6
  modbus:serial.slave1.valuetype=uint16

En mi caso el modbus va a 19200 baudios, con 8N2 y en modo RTU que es mas eficiente y el que usa simplemodbus.

En demo.items he sustituido la linea de Weather_Temperature dejando esto: (la ultima parte es donde lee el modbus realmente, y lee el reguistro 1)

Number Weather_Temperature 		"Temperatura de fuera [%+.2f °C]"	<temperature> (Weather_Chart) {  modbus="slave1:1" }

Y con estas dos cosas y un poco de suerte, va y funciona...

Ahora me toca enterarme de como funciona la configuración del openHAB, que no es nada facil. Si alguien sabe algo y quiere comentar, soy todo oidos.

Hola de nuevo.

Para ser un poco útil, añado aqui abajo los fuentes de uno de los nodos modbus que tengo en casa.

Aclarar que son dos micros que se comunican si por serie, uno se encara del modbus y otro de:
Recopilar datos de temperatura, luz y presencia. (en otras partes hay humedad, CO2, presión barometrica, consumo electrico, acceso, etc)
Actuar subiendo o bajando las persianas. (En el futuro actuarán sobre luces, tiras led, calecacción, etc)
Por cierto que también tiene un receptor de infrarrojos para subir las persianas. Y la parte de las melodias creo que no funciona.

Antes lo tenía todo en el mismo micro, pero se perdían un 10% de paquetes y ahora es practicamente un 0%.

/Perdón por mis comentarios en los fuentes, no están preparados para exhibición./

Pongo una foto de uno de los registros con sus micros. Queda más bonito con la tapa puesta.

DOMO_EB4CAK_v1_3_MODBUS.ino (9.52 KB)

DOMO_EB4CAK_v2_0_Dormit_Papis.ino (23.3 KB)

A ver si te puedo ayudar con la configuracion de OH, aunque no he probado el Modbus en OH :stuck_out_tongue:

Que necesitas?

Salu2

Muchas gracias juanpintom

Estoy buscando información de como funciona el ".rules". Me ha parecido ver que es Xtend, que al parecer es como un Java simplificado, pero no encuentro info en español sobre el (excepto unos videos de como configurar eclipse para poder usarlo, osea, nada).

En realidad no se que se usa para decirle a openHAB que haga lo que tu quieres, el .rules parece Xtend, pero, ¿y los otros?, ¿son scripts, es Java, son configuariones de linux, es un poco de todo?

Me encuentro con que en el ".items" puedes definir que lea el modbus y ver el resultado directamente así:

Number Weather_Temperature "Temperatura de fuera [%+.2f °C]" <temperature> (Weather_Chart) {  modbus="slave1:1" }

Y ese modbus="slave1:1" me tiene loco. No se que es. El problema es que mi modbus envía 2532 para 25,32ºC, por lo que tengo que dividirlo por 100. Pero ese modbus="slave1:1" no puedo dividirlo. Ni igualarlo a un numero, ni a un string, ni nada. Ni en el items (lo cual parece lógico ya que ahi parece que solo se definen los elementos o items) ni en el .rules, que es donde parece que se mete el codigo y se hacen las cosas de verdad.
He creido averiguar que la forma de "enviar" un dato desde el .rules es escribiendo en el bus, a través de postUpdate( Variable_definida_en_item, Variable_o_valor_que_queramos) y ahí el modbus="slave1:1" funciona, pero no puedo modificarlo. Grrrrrrrr

Por cierto, comentaros que he encontrado info en español sobre como configurar el openHAB en:
http://eduhab.awardspace.info/index.php

Y el foro donde se trata todo esto, pero en ingles:
https://groups.google.com/forum/#!forum/openhab

La verdad es que ahi me pillas, todo lo que he hecho en OH es basado en el demo, del cual puedes sacar muchas ideas y del foro (el ultimo link que has puesto), lo que pasa es que yo utilizo el plugin(binding) de Souliss para OH, lo cual facilita mucho las cosas.

Respecto a lo de slave1 debo suponer que es un parametro, puesto que en Souliss cuando llamamos al binding lo hacemos asi souliss="T16:0:2", El T16 equivale al tipo de dispositivo (T16, Una tira RGB), el 0 es el numero de nodo y 2 el numero de slot dentro del nodo. Debo entender que en algun sitio dentro de la configuracion has configurado (o tiene preconfigurado el slave1) y por ese "canal" de comunicacion es por el que debe salir.

Por norma debe ser suficiente con los items, estos deben tanto recibir el estado como enviar comandos, pero esto no sé hasta que punto es facil con Modbus.

Salu2

Ok, Entiendo que con souliss, si lees la temperatura con un 18B20, puedes enviar un float para los decimales. Con modbus yo solo se enviar un valor int de 16 bits. Pero el sistema parece igual a souliss.

Si , por ejemplo lees una temperatura con, por ejemplo souliss="T16:0:1" y quieres algo tan tonto como compararla con otra para activar un aire acondicionado, ¿como lo haces? O si quieres sumarle un gradito, o calcular una media...

He probado todo esto (con modbus="slave1:1" que es lo mismo) y no funciona nada:
int x= (souliss="T16:0:2")
String x = (souliss="T16:0:2")
float x= Float(souliss="T16:0:2")
String x = (souliss="T16:0:2")
int x = Integer.parseInt((souliss="T16:0:2"))
y mas cosas que no recuerdo....

Tiene que haber una manera, es imposible que se puedan ver los datos y sea imposible hacer nada con ellos.

Para dejar resuelto el tema comentar que lo he preguntado y me han respondido aqui: Data management items modbus extract data - Beginners - openHAB Community

Explicandome como se hace lo de modificar las variables. Lo he probado y funciona bien.

De todos modos OH veo que es lentisimo con el Modbus. Al parecer es un problema cuya solución pasa por instalar un gateway, creo que interno dentro de la rpi. Algo que no parece sencillo ni elegante. Modbus serial - failed to read - #2 by nickma82 - Bindings - openHAB Community

No entiendo mucho de comunicaciones a bajo nivel :S pero por lo poco que se modbus o el 485 para conseguir largas distancias y comunicaciones fiables bajan la velocidad, por lo que si se envian - reciben muchos datos puede ser algo mas lento. De hecho yo cuando he probado nodos por ethernet y 485 he notado bastante diferencia en el tiempo de respuesta.

Salu2