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/
Estos datos los gestiona esios, dependiente de REE, que publica los
precios de la electricidad pvpc ( Mercado regulado )
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 )
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)
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
λ 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:
1º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
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 = f o p e n("$path/" . $parseinfo, 'w'); ( quitar espacios que hay en f o p e n )
f w r i t e($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
2º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
El 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
3ºLa fase 3 requiere incorporar un reloj para ir tomando la hora cada cierto tiempo y de esa forma actuar sobre la salida
4º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
5º
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