Dispositivos - Jusaba/Domo-Serverpic GitHub Wiki
Como se describió en la Introducción, el sistema domótico se compone de la centralita, los terminales y los dispositivos entre los que diferenciábamos entre transductores y sensores. Ya tenemos Serverpic funcionando, ya es posible conectarnos a el abriendo un socket con un terminal y ya es posible que cualquier dispositivo capaz de abrir un socket también se pueda conectar. En este apartado le toca el turno a los dispositivos.
Tal como se indicó e esa introducción, el objetivo del proyecto es proporcionar herramientas y documentación para que cualquier persona con conocimientos básicos de electrónica y programación pueda diseñarse dispositivos a medida de sus necesidades.
Tanto los sensores como los transductores serán elementos que se conectarán a Serverpic y, unos, esperarán a recibir ordenes para convertirlas en actuaciones y otros, recogerán información del entorno y la mandarán a algún destinatario conectado a Serverpic.
Inicialmente, los dispositivos deben ser configurados, es decir, se les debe indicar a que SSID conectarse, la ubicación de Serverpic y el nombre con el que se ha de conectar, para ello, cuando el dispositivo se arranca por primera vez, crea una red wifi y conectándonos a ella con un terminal, le proporcionaremos los datos de configuración. Una vez configurado, el dispositivo guarda los parámetros en la EEPROM de forma que cuando arranque de nuevo, pueda recuperar esos datos y utilizarlos para conectarse a Serverpic. Una vez conectado a Serverpic, el dispositivo, además de aceptar ordenes y proporcionar información, debe supervisar la conexión con Serverpic y responder a las peticiones de hardware que se le puedan hacer en local ( pulsador on/off, reset, .... ).
Según la función para la que se diseñe cada dispositivo, aceptará unas ordenes y proporcionara una información que será particular de cada diseño, no es lo mismo un interruptor que una sonda de temperatura o un detector de inundación, cada dispositivo tiene unos comportamientos particulares, sin embargo, lo que es la configuración, la conexión, la gestión de la EEPROM, el análisis de los mensajes, ...... son facilidades que van a compartir todos ellos. Para proporcionar esas facilidades se han diseñado unas librerías que se encuentran en este repositorio y se componen de los siguientes módulos
Configuracion Funciones para configurar el módulo. Crea una estructura de datos de configura-
ción ( DataConfig ) y las funciones para almacenarla y recuperarla de la EPROM.
Eprom Funciones para operar con la EEPROM. Permiten guardar/recuperar configuraciones
del módulo en/de la EEPROM
Global Funciones y parámetros generales de la aplicación que por definición no pueden
ser ubicadas en módulos de software específicos.
ModoAP Funciones que ponen el módulo en modo AP, envía la página de configuración,
una ver rellenada, la recibe y extrae los datos de configuración para
grabarla en Eprom con los paquetes anteriores.
ModoOTA Funciones que ponen el módulo en modo OTA para grabación del modulo de forma
inalambrica local o remota.
ModoSTA Funciones que ponen el módulo en modo STA y lo conecta a la red correspondiente
a la configuración guardada en EEPROM
Servidor Funciones que conectan el módulo a ServerPic y gestiona la comunicación
desde y hacia ServerPic mediante una estructura de datos definida en este
modulo ( Telegrama )
Como se decía, estas librerías contienen las funciones comunes a todos los dispositivos, cualquier dispositivo hará uso de estas librerías para desarrollar la función para la que fue diseñado.
Para el desarrollo de los dispositivos partiremos de una estructura básica desarrollada sobre un módulo al que se he denominado Dispositivo Básico.
Este Dispositivo Básico contiene la estructura de los dispositivos y, para crear un dispositivo específico tan solo será crear una líneas de código para adaptar las ordenes recibidas a la electrónica empleada.
Cada uno de los dispositivos específicos atenderá a unas ordenes particulares, un a Luz esperará recibir un On o un Off, una Sonda de Temperatura podrá recibir la orden Mide y esta, después de medir contestará el remitente con la temperatura medida pero, todos los dispositivos atenderán a unas ordenes comunes que se han denominado Ordenes de Servicio. Estas ordenes son independientes del hardware empleado y sirven para gestión de la conexión del dispositivo al sistema.
Ordenes de Servicio 🛠️
Las Ordenes de Servicio, empiezan todas por el caracter # para diferenciarlas de las Ordenes de Dispositivo
Las Ordenes de Servicio se encuentran en el modulo Servidor.cpp y son las siguientes
Comando | Descripcion |
---|---|
#ping | Devuelve pong al Remitente que le solicito ping |
#reset | Resetea el modulo |
#factory | Borra los datos de EEPROM y deje el dispositivo 'virgen' |
#nombressid | Cambia en EEPROM el nombre de la SSID actual por la que se le envia como parametro en esta orden |
#passwordssid | Cambia en EEPROM el password de la SSID actual por el que se le pasa como parametro en esta orden |
#usuarioservidor | Cambia en EEPROM el nombre de usuario del servidor actual por el que se le pasa como parametro en esta orden |
#websocket | Opciones |
#webSocket.- Devuelve el estado del flag lWebSocket | |
#websocket-:-lEstado.- Pone el flag lWebSocket a lEstado | |
#homekit | Opciones |
#homekit.- Devuelve el estado del flag lHomeKit | |
#homekit-:-lEstado.- Pone el flag lHomeKit a lEstado | |
#estadisticas | Opciones |
#estadisticas.- Devuelve el estado del flag lestadisticas | |
#estadisticas-:-lEstado.- Pone el flag lestadisticas a lEstado | |
#push | Opciones |
#push.- Devuelve el estado del flag lpush | |
#push-:-lEstado.- Pone el flag lpush a lEstado | |
#clientepush | Opciones |
#clientepush.- Devuelve el esatdo del flag lPush + Cliente Push ( mensaje-:-remitente-:-InfoPush-:-lPus-:-Cliente Push) | |
#clientepush-:-NombreClientePush.- Registra el cliente de push para este dispositivo | |
#ESPInfo | Devuelve una cadena con la información del chip delmodulo |
ChipId-:-Version Core-:-Version SDK-:-Frecuencia CPU-:-Flash Id-:-Flash Size-:-Frecuencia Flash-:-Sketch Size-:-Sketch Free | |
#Info | Devuelve una cadena con la información del modulo ( IP. y la información de #Version) |
Main->VMain-:-VLibreriaConfiguracion-:-VLibreriaEprom-:-VLibreriaGlobal-:-VLibreriaModoAP-:-VLibreriaModoSTA-:-VLibreriaModoOTA-:-VLIbreriaServidor-:-IP-:-ModeloESP-:-Board-:-Compilador-:-VerionCompilador | |
#ConfiguracionInfo | Devuelve una cadena con la informacion de configuracion |
NombreSSID-:-Servidor-:-Puerto-:-NombreUsuario-:-ClientePush-:-lHomekit-:-lWebSoclket-:-lEstadisticas-:-lPush | |
#IP | Devuelve la IP del modulo |
#OTA | Pone el módulo en modo OTA |
#OTAServer | Pone el módulo en modo OTA remoto |
#LeeVariable | Lee una variable almacenada en servidor |
#GrabaVariable | Graba una variable en el servidor |
#DelVariable | Borra una variable almacenada en el servidor |
#ResetEstadisticas | Borra en el servidor las variables urilizadas para estadisticas ( inicios, recwifi, recserver, comandos ) |