Sistema de domótica en lechuga

DOCUMENTACIÓN EN WORD, DURANTE EL DESARROLLO

TODO

Conectividad

Para toda la domótica, debe haber un wifi AP propio, sin conexión a internet.

En ese dispositivo, que tendra:

  • zigbee
  • 433mhz
  • wifi

se hará la traducción a MQTT y hará bridge con el MQTT del servidor domótica

Introducción

El sistema de domótica está implementado en ----, servidor por domotica.lechuga.eu.

Protocolos

https://github.com/1technophile/OpenMQTTGateway

El protocolo general será el MQTT

Mapa de conexión

  • Los sensores 'tontos' se conectan al gateway
  • El gateway se conecta:
    • Inicialmente mediante conexión usb al servidor físico, y un script en python interpreta e inyecta sentencias mqtt
      • En este caso, se utiliza un arduino
    • Finalmente el gateway se conecta a la red mediante wifi o ethernet, inyectando sentencias mqtt
      • En este caso, se puede utilizar un raspberry que podría hacer también de servidor domótico.
  • Los sensores con acceso wifi se conectan directamente con el servidor domótico
  • Hay origenes externos de datos, que se obtienen mediante 'scraping' y se incorporan al broker mqtt (p.ej. meteorología bufalà)

Se intenta uilizar la guia del w3c: https://github.com/w3c/wotwg

Comunicación sensor -> gateway

Este caso es para los sensores tontos.

La comunicación se hace mediaante módulos rf433 en ASK.

Comunicación gateway -> brocoli

El gateway, actualmente un arduino con antena 433 se conecta mediante USB a brocoli.

Éste aparece en brócoli como /dev/ttyUSB0.

El gateway inyecta por el /dev/ttyUSBX cadenas en formato [topic]/[valor]

Hay un script en python en /usr/local/bin/leeSERIAL.py ejecutado como servicio. El servicio está descrito en /etc/systemd/system/leeSERIAL.service

Para controlarlo, ejecutara systemctl [status|start|stop] leeSERIAL.service

El script de desarrollo es /home/adminlechuga/domotica/leeSERIAL.py

Si el interfaz usb-serie da problemas

A veces, al hacer cat /dev/ttyUSB0 empieza a leer pero inmediatamente sale.

Hay que quitar y añadir el driver usb: (según https://superuser.com/a/596911)

sudo modprobe -r ch341
sudo modprobe ch341

Utilizar un módulo ESP8266

Utilizar https://sonyarouje.com/2016/03/15/mqtt-communication-with-arduino-using-esp8266-esp-01/

Para publicar los mensajes MQTT directamente al broker, e igual para subscribirse.

Visión global

  • Los dispositivos emiten mensajes colocados en sentencias PUT al servidor web de srv
  • Las sentencias put irán a una base de datos, llamada domo y con una tabla llamada valorSensores
  • La tabla tendrá tres campos: idSensor,tipoParametro,valorParametro.
  • La recogida de la información por openHAB u otros se hará mediante sentendia GET al servidor web de srv
  • Siendo el ámbito local, no se hace comunicación encriptada.

TODOs

Broker mosquitto (protocolo MQTT)

Información

Web del proveedor
http://mosquitto.org/

Blog de instalación
https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-the-mosquitto-mqtt-messaging-broker-on-ubuntu-16-04

Acceso

En el servidor DOMOTICA está el broker principal, que se debería acceder mediante SSL.

En el servidor SRV-INTERNET está un broker que hace de relay al principal, que se debe acceder mediante SSL y clave de usuario.

Probar el servidor

http://www.steves-internet-guide.com/mosquitto_pub-sub-clients/

Publicar un mensaje:

mosquitto_pub --host domotica.lechuga.eu --port 1883 --topic "lechuga/test987/" --message "desde pati222o"

Subscribirse a un tema

mosquitto_sub --host domotica.lechuga.eu --port 1883 --topic "lechuga/test987/" --port 1883 --qos 1

Temas

topic para el control de uso de la play (se publica el tiempo disponible que resta) en formato HH:MM
lechuga/ps4/timer_uso

Volcado MQTT a MySQL

Desde el servidor domotica.lechuga.eu se ejecuta un script en python que se subcribe al topic /lechuga/ y lo retransmite a la BBDD MySQL de srv.lechuga.eu

El usuario MySQL que se utiliza es python_mqtt_logger

La BBDD se llama domotica y la tabla donde se vuelcan los datos es mqtt_store

Estructura mensajes MQTT

Orientación general

Se siguen las recomendaciones de https://www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices

Los mensajes en lechuga siempre empiezan por "lechuga/"

  • la cadena está en formato UTF-8
  • Los datos numéricos seran sin número de millares.
  • Los textos no irán entrecomillados.
  • El símbolo decimal es el punto.
  • Los topics nunca comienzan con la barra
  • Los topics no tienen espacios y sólo carácteres ASCII
  • Los topics son cortos y concisos

Estructura general

topic: [lugar]/[elemento]/[tipo de dato]
payload: El valor en sí

Estructura para sensores en lechuga

topic: lechuga/sensor[número de sensor]/[tipo de dato]
payload: El valor en sí

Para los sensores, seguiran la estructura:

Lista de valores contemplados

TEMPERATURA
VIENTOVEL
HUMEDADREL
PUNTOROCIO
ESTADO
OTROMENSAJE
SINVALOR

Dispositivos activos

Aquí está la lista con los componentes activos:

sensor1: gateway (arduino)

Captación de datos externos

Actualmente y mediante 'scraping' de web, se incorporan datos externos al mqtt de lechuga.

Se hace mediante un script en python desarrollado en patio, directorio /home/hugo/scripts_nolinux/meteoScrap/meteoScrap.py

Éste se incorpora como servicio en el host srv, en el directorio /usr/local/bin/meteoScrap/meteoScrap.py junto con los archivos que le acompañan.