Tecnología Informática      Técnico en Instalaciones de Telecomunicaciones About

Proyecto IOT.  Obtener la hora valle tarifa eléctrica con NodeMcu

Importante

Veremos un  breve curso de  Luis del Valle sobre Arduino en este LINK ( los videos están en la parte inferior. Al terminar, hacer la tarea que viene al principio ). >https://programarfacil.com/blog/arduino-blog/curso-de-arduino/

 

La siguiente práctica ( proyecto de desarrollo ), que hacemos con nuestros alumnos del ciclo de grado medio  del IES Mare Nostrum, es crear un sistema inteligente, usando los principios de IOT y la placa NodeMcu, para obtener la hora valle de la red eléctrica y con esta premisa, activar un electrodoméstico del hogar ( Termo, lavadora, lavavajillas ..)

Estos datos los gestiona esios, dependiente de REE, que publica los precios de la electricidad  pvpc  ( Mercado regulado )clok and electricity

Nuestro objetivo es doble

1º Crear un sistema que obtenga la hora donde la tarifa es mas barata para activar un sistema ( por ejemplo, un termo eléctrico ). Cada día, el termo consulta la hora para calentar el agua y abastecer de agua caliente durante todo el día

2º Aprender. Si ponemos el conjunto de programas funcionales para montar, poco vamos a aprender. La práctica tiene varias etapas, donde los alumnos van a mejorar los programas, van a quitar código repetido, van a perfeccionar el funcionamiento del sistema e implementar nuevas funciones, pueden seguir adelante con mejorar la presentación de un producto ( por ejemplo, con diseño de cajas con impresora  3D ) etc.

 

 

MUY IMPORTANTE: Esta no es la típica práctica que se inicia y se acaba. Se debe considerar como un proyecto abierto a cambios e innovación, donde se pueda adaptar  a otros sistemas, que se pueda completar con aplicaciones móviles (APP),  que se actualice según los cambios que surjan en terceros ( REE o necesidades del usuario ). Todo ello es en realidad, el Objetivo de este proyecto. Crear soluciones de eficiencia energética usando las tecnologías IOT para bien de nuestra sociedad ( nuestros vecinos de Málaga, y como no, del resto de España )

 

tramos horarios tarifa electricidad

En la imagen de arriba tenemos los diferentes tramos horarios

En la imagen de abajo, como puede evolucionar los precios según la hora dentro del mismo tramo ( sábado , 7 de agosto de 2021)precio luz sabado

Tenemos un precio de 1,8 céntimos a las 4 de la tarde. En el mismo tramo "barato", y a las 22 horas, tenemos el kwh a 13,48 céntimos ( un 750% más caro ).

Algunas consideraciones sobre el termo

  1. El termo es un dispositivo, normalmente cilíndrico, donde tiene un depósito con agua, protegido del exterior por una segunda chapa, con un aislante entre el depósito y la chapa. La calidad de ese aislante dará mayores o menores pérdidas
  2. Un termo enchufado 24 horas es un termo perdiendo calor 24 horas. No existe un aislamiento ideal. A mejor aislamiento mayor precio del termo
  3. Las perdidas se producen por convección ( contacto entre dos cuerpos sólidos ). A mayor diferencia de temperatura entre el depósito y la chapa externa, mayor gasto energético
  4. La fórmula que nos permite calcular las pérdidas es Qc = A x λ x ΔT
  5. En la expresión anterior,  A = área del la chapa, λ = coeficiente de transferencia de calor,  y ΔT = diferencia de temperatura desde el exterior al interior

  λ nos va a dar la calidad del aislamiento del termo. A menor valor, menores pérdidas

 La pregunta es, ¿ Mantenemos el termo siempre encendido, o lo ponemos algunas horas al día ?

Mantener el termo a alta temperatura sin usar el agua hace que la perdida sea mayor. Si dejamos que baje la temperatura, las perdidas serán cada vez menores. Luego utilizamos las horas donde la electricidad es mas barata para restaurar la temperatura normal de trabajo

 

Etapas:

 Creamos un archivo php encargado de consultar las tarifas PVPC. Este programa está subido y se puede consultar en https://www.tecnologia-informatica.es/esios/json.php

A parte de mostrar el precio por horas, cada vez que se carga en el navegador, el script crea un archivo llamado json.json ( archivo del tipo json ) necesario para que el nodeMcu obtenga los valores importantes ( modificado en este otro archivo->https://www.tecnologia-informatica.es/esios/crear-json.php

Lo primero que hace el archivo php es obtener los valores mediante una instrucción curl a la web de eiso.

$c = curl_init();

En este  primer archivo se obtienen los valores máximos, mínimos, hora valle, etc

Se crea un array del tipo

$datos = Array ("Precio_valle" => $minimo, "hora_valle" => $posicion_min, "hora_actual" => $hora_actual);
 

y luego dentro del mismo programa se genera el archivo json usando

$json = json_encode($datos);
$bytes = file_put_contents("json.json", $json);
echo "Se ha creado el archivo json";


Para no tener que recargar manualmente la página que crea el archivo json, se crea una tarea programada ( o cron ) dentro del servidor donde tenemos alojado nuestra web para que se haga de forma automática. De ésta manera, cada día a las 0 horas, se ejecuta https://www.tecnologia-informatica.es/esios/crear-json.php para crear el nuevo archivo json https://www.tecnologia-informatica.es/esios/json.json

Se entiende que a esa hora ya está los nuevos precios  de REE

Información completa sobre tareas programadas en OVH ->https://docs.ovh.com/es/hosting/web_hosting_tareas_automatizadas_cron/#creacion-de-una-tarea-automatizada

O. Encontramos el primer problema. Accedemos a la opción de log del hosting para comprobar que tal ha ido la tarea, si se ha ejecutado o no. Encontramos lo siguiente

[2021-07-30 00:57:02] ## OVH ## START - 2021-07-30 00:57:02.092341 executing: /homez.663/tecnolog/www/esios/json.php 
[2021-07-30 00:57:02] ## OVH ## ERROR command '/homez.663/tecnolog/www/esios/json.php' must be executable
[2021-07-30 00:57:02] 
[2021-07-30 00:57:02] ## OVH ## END - 2021-07-30 00:57:02.108735 exitcode: 255

O lo que es lo mismo, la cosa no ha ido bien ( exitcode: 255 -> error )

Hacemos consulta al personal de OVH de quitar los echo pero la cosa sigue igual.

Observamos la línea  -> must be executable <-  Vamos a poner las permisos  del archivo como 755, lo cual indica que es ejecutable por propietario, grupo y público

permisos de archivos

Solución:

Hemos cambiado los permisos del archivo que crea el json ( crear-json.php ) a 755 y el json.json, como se tiene que escribir, lo ponemos a 777.

Vemos en la imagen de la izquierda los dos archivos y sus permisos.

Comprobamos los logs del servidor y tenemos

 
[2021-08-05 00:57:02] ## OVH ## START - 2021-08-05 00:57:02.552727 executing: /usr/local/php7.0/bin/php /homez.663/tecnolog/www/esios/crear-json.php 
[2021-08-05 00:57:02] 
[2021-08-05 00:57:02] 
[2021-08-05 00:57:02] 
[2021-08-05 00:57:02] ## OVH ## END - 2021-08-05 00:57:03.009112 exitcode: 0

Esto significa que la tarea se ha ejecutado bien, pero no quiere decir que esté todo solucionado.

A pesar de que el cron funciona, no se crea el archivo json.

Vemos en -->https://www.enmimaquinafunciona.com/pregunta/144873/tarea-programada-ahorra-json-en-un-directorio-equivocado

que es necesario especificar la ruta de creación del json y por ello añadimos el código que se indica

$parseinfo = 'parseme.json';

$path = realpath(dirname(__FILE__)); // Esta es la diferencia fundamental. Tenemos que indicar en el cron la ruta para crear el artchivo

 $handle = fopen("$path/" . $parseinfo, 'w');

fwrite($handle, json_encode($res));
 Ahora sí funciona bien, pero claro, tenemos otra cosita que solucionar, que se nos ha pasado.

En el panel de control de los clientes de OVH donde se crean la tarea programada, hemos puesto como hora de ejecución las 0 horas. Se supone que las 0 son las 0 pero si vemos más arriba, la tarea se ha creado a las [2021-08-05 00:57:02]
Si nuestro programa  lee la hora a las 0 horas y 10 minutos, y el cron se ejecuta a las 00:57, significa que vamos a tomar la hora del día anterior.

Volvemos a hacer un cambio y ponemos que la tarea se ejecute todos los días a las 23:00

No entramos más en este asunto porque son tecnologías amplias que por ahora no son objetivo de la práctica

Una vez creado todo el sistema de gestión de la hora valle dentro de nuestro servidor pasamos a las tareas de IOT con NodeMcu
 

Versión 1. Ya tenemos nuestro primer archivo donde de forma reiterada consulta la hora real y la hora valle del archivo json.json.

Lo podemos descargar aquí  -> Termo eléctrico funcionando  en hora valle Versión 1

Tarea 1. Instalar el archivo en vuestro NodeMcu y cambiar el código de forma que el termo funcione una hora antes de empezar la hora valle y termine una hora después

Encontramos un problema. El archivo lo hemos comprobado pero vemos que pasado un cierto tiempo, la parte de la consulta de la hora la hace bien, pero la consulta al servidor donde tengo la página cae pasado cierto tiempo. Podemos sospechar de dos causas

1º Que hay algún problema con la función de arduino donde se indica :

 http.begin("http://www.tecnologia-informatica.es/esios/json.json");

2º Que el servidor esté protegido con peticiones tipo DDoS ( multitud de ataques a servidor para caerlo ).

Independientemente del motivo, no es buena idea hacer multitud de peticiones web. Vamos a indagar para guardar datos en algún archivo interno de NOdeMcu

Para este propósito tenemos este manual de ayuda

https://www.tecnologia-informatica.es/Instalar-el-filesystem-uploader-para-esp8266/

Tarea 2. Hacer la práctica del enlace anterior donde tenemos que mostrar en consola el texto de nuestro nombre junto al curso. Añadir algo más si queréis.

Nota. Incorporar watchdog al esp8266 requiere la arquitectura adecuada (-->https://www.arduino.cc/reference/en/libraries/watchdog/ )

Para el esp8266, tenemos info muy valiosa sobre la utilidad del whatdog. Necesario en nuestro proyecto porque pasada algunas horas hemos detectado que el sistema se para y vuelve a funcionar pasado cierto tiempo

watchdogEl watchdog puede paliar esto, reseteando el sistema si ocurre algún error.

La filosofía del watchdog ( perro guardián ) es establecer un sistema autónomo de restablecimiento del sistema en caso de no restaurarse de forma constante.

"Podemos decir que tenemos un perro que tenemos que acariciar cada cierto tiempo, y si se nos olvida, el perro nos ladrará"

En la imagen de la izquierda vemos como el micro manda una señal al watchdog cada cierto tiempo. Si se olvida de mandarla, el watchdog dará una seña por su salida que provocará el reseteo del sistema.

Esto lo debemos incorporar a nuestro proyecto para evitar que nuestro NodeMcu se "cuelge".

 Mas info en ->sigmdel.ca/michel/program/esp8266/arduino/watchdogs_en.html

 

Tenemos este archivo para trabajar con el watchdog en nodeMCU. Está bajado y modificado de la pagina de arriba

La fase 3 requiere incorporar un reloj para ir tomando la hora cada cierto tiempo y de esa forma actuar sobre la salida

En la fase 4, hemos realizado ligeras modificaciones  (Archivo 3 ) para que la consulta se haga a las 23 horas 30 minutos. También tenemos que modificar la tarea programada de nuestro servidor para que se actualice el archivo a las 22 horas y otro a las 23 horas. Como comprobamos que en el caso de OVH se hacen siempre al final de la hora, ( minuto 57 ) , lo vamos a poner a las 21 horas y otro a las 22 horas / este último se ejecuta sobre las 22.57, casi las 11 de la noche. Los alumnos debe hacer este cambio en sus archivos

 Integramos en sistema sonoff. Ver -> https://programarfacil.com/esp8266/domotica-sonoff-wifi-espurna/

 

 

 

 

 

Se requiere:

1º Módulo DS3231 AT24C32 IIC DS1302 
y
2º Pantalla TFT de 0,96, 1,3, 1,44, 1,8 pulgadas IPS 7P SPI HD 65K Color módulo LCD ST7735 / ST7789 conducir IC * 80*160*240*240 (no OLED)
 

Pasamos a crear el sistema solo con el reloj

https://simple-circuit.com/nodemcu-ds3231-ssd1306-rtc/

 

http://www.esp8266learning.com/wemos-ds3231-rtc-example.php

para el whatdog ver https://blog.bricogeek.com/noticias/arduino/como-utilizar-watchdog-con-arduino/

Segun se indica en https://esp8266-arduino-spanish.readthedocs.io/es/latest/faq/a02-my-esp-crashes.html, tenemos whatdog incluido en nuestro esp8266. No es necesario librería ?

 

Biblio

https://www.hispavila.com/funcionalidad-de-spiffs/

https://simple-circuit.com/nodemcu-esp8266-ds3231-rtc-st7789-tft/

ahorro de energía en termo: ->http://www.yubasolar.net/2015/03/ahorrar-en-el-termo-electrico.html

Cómo obtener valores post y get en esp8266->https://www.luisllamas.es/esp8266-servidor-parametros/

 

 

Proyectos para otros alumnos

 

1º  Sistema de riego IOT ->https://www.youtube.com/watch?v=Jw1j8ZlIV2I ( tenemos el programa dentro del video ) el codigo ino->https://github.com/jeagudo/meteohuerto/blob/master/RiegoESP8266FireBase.ino

Es necesario el manual de arriba sobre app inventor junto a este que dejo sobre  firebase->https://desarrolloweb.com/manuales/manual-firebase.html

2º Seguidor de nevera->https://create.arduino.cc/projecthub/hackershack/make-an-autonomous-follow-me-cooler-7ca8bc?ref=platform&ref_id=424_trending___&offset=12

3º Estación meteorológica ->https://microcontrollerslab.com/esp8266-send-sensor-readings-google-firebase-android-app/ ( utiliza app inventor, firebase y nodemcu )

4º  Apertura de puerta con NodeMcu, firebase y creator.kodular.io.

En este caso, al necesitar conexión firebase vamos a encontrar un problema de conexión con la firebase causada por una librería, donde tenemos que añadir el fingerprint adecuado

Para solucionar el problema, ver ->https://www.youtube.com/watch?v=ZZ5JvSA-Ed8
grc fogerprint https://www.grc.com/fingerprints.htm

2º Usaremos mejor creator kodular, que es muy parecido a app inventor, pero que nos permite trabajar con la conexíon firebase con el error de autentificación.

3º Tanto el código para empezar a trabajar y desarrollar como la apk ( hay que trabajar sobre ello para depurar errores y mejorar la aplicación ), la tenemos en esta carpeta

 

 

Diseño PCB Principios básicos de antenas

Ciclo de Grado Medio Instalaciones de Telecomunicaciones. Ies Mare Nostrum. Málaga