WifiManager + Emoncms (OEM) con ESP8266 (Temperatura) #1

La siguiente implementacion utilizando un modulo ESP8266  y un sensor de temperatura ds18b20 permite la configuración y el envió de datos a Emoncms sin requerir modificar o editar ni una linea de código, facilitando la creación de aplicaciones parametrizables.

Luego de realizar pruebas a las librerías Wifimanager, las cuales permiten una configuración ágil de las credenciales de red y adicionalmente permiten agregar parámetros o configuraciones iniciales antes de ejecutar la aplicación final, en este caso utilizaremos la versión WifiManager creada por tzapu – creador.

Tutorial Recomendado: Introduccion Libreria WifiManager

La idea : es implementar esta librería en mas integraciones futuras y crear una especie de plantilla base wifimanager para quienes quieran hacer pruebas y adicionar parámetros sea mas sencillo.

Tutorial available in English: WifiManager + Emoncms (OEM) with ESP8266 (Temperature) #1

Introducción

Esta implementacion en Arduino IDE para ESP8266 resulta muy útil para no requerir que descargar firmware o modificar codigo si las credenciales de red cambian, facilitando llevar nuestra aplicación a otras redes disponibles.

En este tutorial utilizaremos WifiManager como medio de configuración y la integraremos con un cliente http/json que enviara datos a la plataforma Emoncms, en este caso especifico realizaremos solo pruebas de conexión en una red local.





 

Próximas implementaciones

En este caso implementaremos la conexión emoncms, pero también es posible modificar el código para crear conexiones con otras plataformas: blynk, cayenne, adafruit.IO, thinger.IO, aRest, Thinkspeak, MQTT, CoAP entre otras.  protocolos Modbus TCP/IP, Modbus RTU, Mewtocol.

 Emoncms (OpenEnergyMonitor)

Desde hace un buen tiempo hemos realizado pruebas con la plataforma Emoncms perteneciente al proyecto OpenEnergyMonitor, en pocas palabras es una plataforma web y herramienta para recopilar y analizar datos referente a consumo de energía eléctrica, solar, eólica, térmica.. 

Mayor información en el siguiente Tutorial: Instalación de Plataforma Emoncms en linux

Informacion Completa : OpenEnergyMonitor.org

Recomendado: He creado estas listas de reproduccion la cual contiene gran parte de las pruebas de PDAControl con Emoncms.

Aplicación

Esta es la primera integración que realizamos de WifiManager  con una aplicación especifica «Emoncms», dado que es una prueba inicial realizamos lo mas básico, no se desconoce que la api de emoncms fácilmente permite enviar múltiples valores»sensores» a emoncms pero en este caso iniciaremos creando el código para la configuración y parametrizacion para el envió un solo sensor o input, en caso solo es detalladamente analizar y modificar el código.

Tutorial available in English: WifiManager + Emoncms (OEM) with ESP8266 (Temperature) #1

WifiManager

Creara un formulario que realizara las siguientes funciones:

  1. Configuración de Parámetros de Red «SSID» & «PASSWORD» desde formulario web.
  2. Se han adicionado 6 campos input HMTL  a nuestro formulario para ingresar mas parametros requeridos en este caso especifico para nuestro cliente Emoncms.

Mas información: parametros custom WifiManager.

Parámetros  creados para cliente Emoncms :

  1. host o servidor emoncms permite dirección ip y host o dns:  «192.168.0.13» o «serveremoncms.com».
  2. puerto servidor emocms, por defecto: «80».
  3. apikey o llave de autentificacion para escritura/lectura emoncms.
  4.  tiempo envió de datos en segundos :«120».
  5. nombre de variable o sensor, en emoncms input :  «sensor02_temperatura».
  6. nodo emoncms, es el grupo al que asignaremos el sensor: «1».

Nota: Descarga Ejemplo codigo de «Ejemplo Basico esp8266 WifiManager «disponible en parte inferior del articulo..

Cliente http Emoncms

Se ha creado un cliente http/json el cual envía datos a emoncms con las siguientes caracteristicas:

  1. Creación de cliente TCP/IP «WiFiClient» .
  2. Conexión a Servidor «host» Emoncms «(!client.connect(host, port))».
  3. Lectura de variables o sensores  «Temperatura = float celsius = sensors.getTempCByIndex(0);».
  4. Creación de json según características  ejemplo: Input API emoncms.
  5. Envió de json como petición a servidor emoncms  client.print(String(«GET «) + json + » HTTP/1.1\r\n»…..
  6. timeout conexión 5s en caso de no conexión reintentar.
  7. Imprimir en el terminal Respuesta de servidor  «200 ok».

Fragmento de codigo conexion de cliente Arduino ide .

        

// get temperature ds18b20  - capturar temperatura ds18b20   /// Onewire
sensors.requestTemperatures();
float celsius = sensors.getTempCByIndex(0);
Serial.println(sensors.getTempCByIndex(0));               

/// RSSI -esp8266              
long rssi = WiFi.RSSI();   

/// JSON/HTTP Emoncms
Serial.println("json");
String json ="/emoncms/input/post.json?node="+String(nodedata)+"&json={"+String(inputname)+":"+ String(celsius)+","+"RSSI:"+String(rssi)+"}&apikey="+apikey;
Serial.println(json);
Serial.println("");

 // This will send the request to the server emoncms
client.print(String("GET ") + json + " HTTP/1.1\r\n" +     
			  "Host: " + host + "\r\n" + 
			  "Connection: close\r\n\r\n");

///////////////// timeout 5 sec - sin respuesta de servidor.. //////////////////////
 unsigned long timeout = millis();
while (client.available() == 0) {
  if (millis() - timeout > 5000) {
	digitalWrite(pin_led_App, LOW);
	Serial.println("--- Client Timeout !");
	client.stop();
	return;
  }
}

// Read all the lines of the reply from server and print them to Serial
while(client.available()){
  String line = client.readStringUntil('\r');
  Serial.print(line);
}

Serial.println();
Serial.println("closing connection");

delay(updatedata*1000);  /// update data  sec * 1000ms  
////////////end void main/////////////

Mas información: Documentación completa api emoncms

Nota: Descarga «Ejemplo Conexion basica esp8266 emoncms» disponible en parte inferior del articulo..

Tutorial available in English: WifiManager + Emoncms (OEM) with ESP8266 (Temperature) #1





 

Materiales y donde comprar

Conexiones

Configuraciones

Para habilitar la parametrizacion desde wifimanager hemos agregado 1 pulsador y 2 diodos led para indicar el estado o funcionamiento de aplicación.

  • Pulsador Normalmente abierto: «Config WiFi»: permite habilitar la configuración y parametrizacion del ESP8266.
  • Diodo led Rojo: Encendido indica ESP8266 en modo «Config WiFi» o WifiManager activado.
  • Diodo led verde: Encendido Indica que el código de la aplicación en este caso el cliente http de Emoncms esta conectado con el servidor correctamente.

 

Modo 1: Conexión y Configuración Correcta

Aplicación conectada a Emoncms o aplicación cliente  funcionando correctamente, específicamente indica que la conexión y/o envió de datos se ha realizado satisfactoriamente .

  • Botón «Config WiFi» = sin pulsar
  • Diodo Led verde = ON
  • Diodo Led rojo = OFF
  • en este caso el modulo deberia estar enviando los datos a emoncms y permitir la visualización de los datos en la plataforma.

Modo 2: Habilitar configuración desde WifiManager

Para configurar modulo desde WifiManager realizar la siguiente secuencia.

  1. Mantener presionado: Botón «Config WiFi«.
  2. Pulsar 1 vez Botón «Reset» de modulo esp8266.
  3.  Soltar: Botón  «Config WiFi«.
  4. Diodo Led verde = OFF
  5. Diodo Led rojo = ON
  6. Automáticamente el modulo pasa a modo AP y habilita la RED «ESP_emoncmsxxxxxxxx» .

Nota: los 8 digitos corresponden al ID propio de cada esp8266.

  • Conectar e ingresar a la dirección 192.168.4.1 desde navegador web de su preferencia.

Modo 3: Error de Conexión de RED o  Conexión Cliente-Servidor

  • Diodo Led verde = (Flasheando o parpadeando)
  • Diodo Led rojo = (Flasheando o parpadeando)

De presentarse que ambos led flashen  continuamente 1 o 2 seg , si el parpadeo «flasheo» no se detiene puede ser alguna de las siguientes causas.

  1. Conexión fisica Wifi: El Router inalámbrico ruteador inalámbrico, la RED no esta disponible casos (Apagado, desconectado) sin conexión a Internet en caso de conectar a un servidor emoncms en Internet.
  2. Conexión servidor Emoncms: La aplicación  o cliente http se conecta a emoncms «Apache» en caso de no existir dicha respuesta del servidor falla en conexión.

Nota 1: en caso de solucionar alguno de los inconvenientes de conexión el modulo conectara automáticamente con la aplicación.

Nota 2: También es posible que al iniciar el modulo (conectar o alimentar) el parpadeo de los diodos dure algunos segundos mientras se conecta a la red, es normal.





 

Vistazo a  Emoncms

El modulo esp8266 luego de ser configurado correctamente, realiza el envió de la temperatura y también se enviara el RSSI indicando la fuerza señal de la red recibida.

Tutorial available in English: WifiManager + Emoncms (OEM) with ESP8266 (Temperature) #1

  1. Temperature
  2. RSSI

Inputs

El cliente http/json esp8266 siempre  enviara los datos directamente a inputs, el metodo esta determinado por la API Inputs.

Mayor informacion : API Inputs Emoncms.

Feeds

El input debe convertirse en un Feed para ser configurado en un proceso asociado a la variable o variables «temperatura ,RSSI»  el cual permite ajustar, integrar, parametrizar registra o almacenar entre muchas funciones disponibles, en este caso log to feed,  para la posterior creación de dashboard, graficos e historicos.

Mayor informacion : API Feed Emoncms.

Dashboard

Permite administrar y crear dashboard.

Editor Dashboard

Permite asociar los Feeds a Widgets y la gran variedad graficos disponibles.

Mayor informacion:  Dashboard OpenEnergyMonitor.

Tutorial prueba completa

WifiManager + Emoncms + ESP8266, Configuración y medición #1

Explicaremos el funcionamiento de una manera practica de la configuración y la conexión.

 





 

WifiManager + Emoncms + ESP8266 Configuración y Conexión #2

Conexión con las 3 variaciones de Emoncms, si editar código podemos enviar datos a cualquiera de las 3 versiones.

 

Conexión con 3 variantes disponibles de emoncms

Referente a las pruebas realizadas con emoncms, conecta sin problemas con:

emoncms local

Version instalada en pc, en este caso envió datos cada 10 segundos, dado que es mi red domestica, puedo «bombardear» sin limitantes, se podría decir que depende de los recursos de el equipo ya sea Raspberry pi, Beaglebone  o un preferiblemente un PC«Linux , windows, etc» .

Mayor información en el siguiente Tutorial: Introducción e Instalación de Plataforma Emoncms en linux

emoncms.org

Hosting disponible propiedad de emoncms, he creado una cuenta, aunque solo la utilizo para pruebas rápidas, yo personalmente intento no abusar de la frecuencia de envió de datos, realmente desconozco las condiciones existen para el envió de datos. aunque supongo que deber estar montado sobre un superhosting, aunque emoncms.org  no utiliza HTTPS o TLS cuenta con una cifrado de capa de transporte incorporada en la que el emoncms apikey se utiliza como clave precompartida para cifrar los datos con AES-128-CBC….. todo eso significa datos seguros.

Mayor informacion : API Inputs Emoncms.

emoncms en Hosting 

Servicio pago de Hosting + Dominio, he decidido montar mi propia plataforma en Internet, existen gran variedad de planes y paquetes de hosting en caso de requerir un servicio en Internet pero recuerden calidad = costos, dado que al ser un servicio en Internet, en caso de adquirirlo se deben tener en cuenta el «ancho de banda disponible» y frecuencia de envió de datos por usuario, instalar emoncms es muy fácil ya que cuenta con un CPANEL para configurar a continuación documentación y consideraciones a tener en cuenta.

Tutorial recomendado: Vista Rapida a Plataforma Emoncms OpenEnergyMonitor en Hosting

Tutorial available in English: WifiManager + Emoncms (OEM) with ESP8266 (Temperature) #1





 

Recomendaciones

En esta oportunidad, recomendaría descargar y probar, me he tomado la tarea de comentar el código arduino IDE en su mayor parte  para un mejor entendimiento.

  1. Descargar «Ejemplo Basico esp8266 WifiManager « para analizar y entender el proceso de parametrizacion con Wifimanager, utilizar como plantilla para sus  proyectos.
  2. Descargar «Ejemplo Conexion basica esp8266 emoncms» es un ejemplo basico para analizar el método de envió de datos utilizado por Emoncms.
  3. Descargar Versión final «Ejemplo WifiManager +Emoncms +Temperatura « es técnicamente la unión de los 2 ejemplos anteriores, aunque se han agregado algunas mejoras con sus correspondientes comentarios. Es la versión utilizada en las pruebas.

Nota: Descargas código Arduino IDE disponibles abajo.

Código Base

Para el código tome como base en el ejemplo  AutoConnectWithFSParameters.ino  de WifiManager creado por  tzapu.

  1. Principalmente se analizo el método de implementado para guardar datos en de datos en el sistema de archivos SPIFFS, mas información: save settings 
  2. Se organizo el código para facilitar la funcionalidad y agrego un pulsador para habilitar la configuración.
  3. Se analizaron los ejemplos de parametrizacion disponibles, específicamente el el ejemplo código  AutoConnectWithFSParameters.ino,  para crear campos o parámetros nuevos simplemente se copiaron y se modificaron teniendo en cuenta el tipo, tamaño entre otras cosas, mas información : Custom Parameters.
  4. Se realizaron pruebas del cliente http que conecta con emoncms  y se agrego el código al void main() y se realiza el direccionamiento los parámetros capturados convirtiéndolos a las variables requeridas por el cliente.
  5. Se implemento la inyección de HTML en los parámetros de configuración específicamente en el formulario para darle mas dinamismo y algunas restricciones desde html  «maxlength=10 type=number , min= max=9999, type= password», mas información : HTML personalizado, CSS, Javascript

Parametrizacion

Para implementar el código y realizar modificaciones se debe tener en cuenta los siguiente:

  1. Para adicionar parámetros recomiendo solo modificar los siguientes campos tratando de «copiar y pegar» luego  editar y/o crear parámetros.
  2. Tener en cuenta principalmente es crear nuevas variables y remplazar el tipo y la longitud de la variable y/o parametro según necesidades.
///inicializacion de parametros /// initialization of parameters 
char char_server_emoncms[40]="serveremoncms.com";

///lectura de valor desde json /// reading value from json
strcpy(char_server_emoncms, json["char_server_emoncms"]);

/// Agrega input HTML a formulario /// Add HTML input to form
WiFiManagerParameter custom_server_emoncms ("char_server_emoncms", "server emoncms", char_server_emoncms, 40,"title= \"server or Host Emoncms \"");

///adiciona input HTML /// add HTML input
wifiManager.addParameter(&custom_server_emoncms); 
		
/// captura valor de input /// capture input value
strcpy(char_server_emoncms, custom_server_emoncms.getValue());
		
///save the custom parameters to FS ///
json["char_server_emoncms"] = char_server_emoncms;

///print serial
Serial.println(char_server_emoncms);

  • No editar ni modificar el código de funciones SPIFFS o funciones json referente a parametros escritura/lectura.

IMPORTANTE: Si elimina o crea parámetros,  se debe formatear el sistema de archivos SPIFFS, si no se formatea, el esp8266 no podrá leer y escribir el archivo config.json dando como resultado error o un reinicio del modulo indefinidamente :

  1. descomentar la linea «SPIFFS.format();»
  2. descargar código a esp8266  se eliminara el archivo config.json
  3.  nuevamente comentar «SPIFFS.format();»
  4.  descargar código a esp8266.

Funcionalidad

HTML form (formulario)

Para realizar mejoras en el diseño web se requiere conocer un poco de los atributos y funcionalidades de los formularios en html, he tomado como base y método de depuración los tutoriales de www.w3schools.com.

En gran parte se ha intentado implementar algunas restricciones en el formulario html, por ahora son muy básicas tales como:

  • Restricción de longitud de parámetro ingresado.
  • Restricción de ingreso solo variables tipo numéricas, según el campo requerido ejemplo: nodo.
  • Restricción de ingreso solo variables tipo alfanuméricas, según el campo requerido ejemplo: host.
  • Restricción de vista u ocultar para variables tipo password  ejemplo :apikey.
  • Adicional se ha agregado algunas restricciones en código arduino ide en caso de ingresar un campo vacio, no permitir conexión.
  • Para no utilizar los tag  html <h1> </h1> o <p> </p> en los parámetros dado que se altera el diseño dado que inserta <br>, se ha utilizado la atributo title en los campos del formulario, permitiendo ver la informacion  al colocar el mouse sobre el  campo, ejemplo: atribute title html.

Implementacion WifiManager: Custom Parameters.

Nota: el campo input no deja espacios en el nombre del input utilizar un separador ejemplo «temperatura_actual» «presion_zona1»,  si el input tiene espacios »   » al enviar a emoncms rechazara los datos.

Mejoras

Agregar mas campos para el envió de mas variables utilizando el modo  Bulk data para el envió masivo de datos permitiendo Cargar de forma eficiente múltiples actualizaciones desde múltiples nodos y datos. Mas información API Inputs Emoncms.

Agregar parametrizacion y/o configuración de pines según el sensor, aunque tal dinamismo si se requiere para una implementacion grande que lo requiera, de lo contrario no es rentable, recomiendo enfocarlo en configuración y/o conexión mediante Wifi.

Quizás agregar un logo, modificar los estilos ccs, en mi caso realice  una prueba modificando el color a gris.

Aunque algunas funciones de la librería WifiManager creada por Ken Taylor  tales como la creación de un checkbox HTML no esta disponible o implementada en WifiManager de Tzapu, intentare migrar o probar dichas funciones y probar si hay posibilidad de agregar quizás menu desplegables y otros atributos HTML, solo hago especulaciones.





 

Conclusiones

Claro existen otros métodos, algunos dirán  que medios mas eficientes para programar los esp8266  o hacer esta implementacion y pero, he decidido explorar el alcance WifiManager y me ha parecido una muy buena solución, muy practica para aplicaciones con Arduino IDE, para personas que ya hemos realizado algunas pruebas.

Tutorial available in English: WifiManager + Emoncms (OEM) with ESP8266 (Temperature) #1

Para que puedan crear sus propias implementaciones, diría que aunque el código parezca largo y un poco complicado, técnicamente «lo complicado no requiere modificaciones»despues leer la documentación de librería en github, es mas sencillo y nuevamente recomiendo los ejemplos básicos «disponibles abajo» .

Los parámetros están almacenado en el sistema de archivos SPIFFS, si apagas o reinicias el modulo los parámetros no se perderán.

Esta es prueba basica «para el tutorial para ser lo mas explicativo posible» con los ejemplos simplemente adicionar parametros, leer mas variables , construir el http/json  y  enviar mas datos a emoncns .

Proxima integracion «WifiManager + ModbusTCP/IP esclavo»…

Finalmente espero que a alguien le sirva esta información, son  pruebas iniciales si alguien prueba o tiene sugerencias o recomendaciones por favor comentar que serán bien recibidas.

Agradecimientos

Agradecimientos a Tzapu creador de la librería WifiManager y a todas las personas que contribuyen con este proyecto.

Agradecimientos a Fundadores y mantenedores de proyectos Emoncms : Trystan Lea y Glyn Hudson gracias por compartir y generar conciencia 

Descargas

Codigo Arduino IDE:

Referencias





 

Deja una respuesta