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 )