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.
- Inicialmente mediante conexión usb al servidor físico, y un script en python interpreta e inyecta sentencias mqtt
- 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
- Creación de la BBDD
- se crea una bbdd llamada domo, con la tabla
- hay que habilitar un usuario de mysql
- seguir con https://mypiweatherstation.wordpress.com/
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.