El controlador eedomus está cosechando un gran éxito en el mundo de la domótica DIY, también en nuestro país, y eso se debe sin duda a que se trata de un controlador muy abierto, que permite integrar muchos dispositivos y servicios más allá de la tecnología Z-Wave.
En recientes artículos sobre eedomus, hemos ido aprendiendo mucho sobre las opciones más avanzadas de esta plataforma, como la posibilidad de implementar scripts en PHP y las funciones básicas de la API eedomus.
En Domótica Doméstica, tenemos la suerte de disponer de un foro muy activo en nuestro idioma sobre domótica DIY, donde centenares de usuarios comparten a diario su experiencia con distintos controladores domóticos, entre ellos el controlador eedomus.
El usuario del foro @Margu ha tenido la amabilidad de redactar y compartir para los usuarios del foro primero y ahora para los lectores del blog, un completísimo manual donde nos explica paso a paso cómo crear un script en PHP para integrar en nuestro controlador eedomus la información meteorológica que pone a nuestra disposición el servicio online AEMET.
Aunque no tengas ni idea de programar en PHP, siguiendo este manual conseguirás integrar la información meteorológica de AEMET en eedomus. Seguro que te interesa…
Desde Domótica Doméstica agradecemos a @Margu el tiempo que ha dedicado a este interesantísimo proyecto y el haber compartido con los usuarios de nuestro foro y nuestros lectores la experiencia que ha adquirido en el desarrollo de scripts para eedomus y sobre todo en este caso de la implementación de los datos de AEMET en eedomus.
Sin más preámbulos, reproducimos a continuación su valioso manual.
Mostrar las condiciones meteorológicas en eedomus ofrecidas por la página de AEMET
En este tutorial crearemos un script PHP para tener la información meteorológica ofrecida por la página de AEMET. Para ello, necesitamos conocer el código de municipio que la AEMET ha asignado a nuestra localidad.
Entramos en la página de AEMET, introducimos el nombre de nuestro municipio y pulsamos en la lupa.
Una vez que hemos entrado en la página de predicción del municipio, nos fijamos en la linea que pone: Descargar XML de la predicción detallada de “municipio”.
Al pichar sobre dicha linea, vemos que contiene un enlace que abre una nueva página con la información meteorológica en XML.
En esta página obtenemos el código del municipio y la url desde la que obtener los datos para integrar en eedomus. El código son los números que aparecen al final, antes de .xml.
Tambien podemos obtener el código del municipio en la barra de dirección url. El código son los últimos cinco números.
Si nos fijamos en el archivo XML, vemos que en la etiqueta <prediccion> tenemos la predicción meteorológica para siete días. Además dentro de cada día se divide en diversos periodos. Hay diversas etiquetas <dia fecha=”fecha”> que cambian todos los días. Sacar la información desde aquí desde eedomus es algo complicado.
Para que resulte más sencillo alimentar eedomus con los datos de Aemet, vamos a crear un script php. Tengo que avisar que este script no se puede alojar dentro del controlador eedomus. Debemos guardarlo en otro dispositivo como un NAS, una Raspberry Pi u otro disposivo que permita tener un servidor web. El motivo es el siguiente: el controlador eedomus usa un lenguaje php simplificado y algunas de las instrucciones que vamos a usar no son soportadas por el lenguaje php de eedomus.
A continuación vemos el código del script php:
[plain]
<?php
// Calculamos la hora actual y hacemos los ajustes para poder encajar en el periodo de tiempo del archivo //xml de aemet.
$Hora = date(“H”)+1;
$p = 0; //Variable para calcular el periodo del dia[0] (hoy).
$p1 = 0; //Variable para calcular el periodo en temperatura y humedad relativa. if ($Hora <= 6) { $p=$p+3; }
if ($Hora > 6 && $Hora <= 12 ) { $p=$p+4;$p1=$p1+1; }
if ($Hora > 12 && $Hora <= 18 ) { $p=$p+5;$p1=$p1+1; }
if ($Hora > 18) { $p=$p+6;$p1=$p1+2; }
// Consultamos el archivo xml de aemet y recogemos los datos.
$url = ‘http://www.aemet.es/xml/municipios/localidad_47186.xml’; $tiempo = simplexml_load_file($url);
// Si valor cielo es nulo ajustamos con el siguiente periodo. $cielo = $tiempo->prediccion->dia[0]->estado_cielo[$p]; $sig = $p;
while ($cielo == “”) {
$sig=$sig+1;
$cielo = $tiempo->prediccion->dia[0]->estado_cielo[$sig];
}
// Ajustamos el icono del cielo en funcion del dia y la noche. Aemet lo contempla pero no lo usa. // Primero comprobamos si el codigo no tiene una n, si es asi comprobamos la hora y ajustamos.
$hayn = strpos($cielo,’n’);
if ($hayn === false) { if ($Hora-1 <= 7 || $Hora-1 >= 10 ) { $cielo=$cielo+”n”; } } // Generamos un xml personalizado con las condiciones actuales.
header(“Content-type: text/xml”);
echo “<?xml version=’1.0′ encoding=’UTF-8′?>n”;
echo “<aemet>nt”;
echo “<poblacion>nt”;
echo $tiempo->nombre;echo”nt”;
echo “</poblacion>nt”;
echo “<provincia>nt”;
echo $tiempo->provincia;echo”nt”;
echo “</provincia>nt”;
echo “<probprecipitacion>nt”;
echo $tiempo->prediccion->dia[0]->prob_precipitacion[$p];echo”nt”; echo “</probprecipitacion>nt”;
echo “<cotanieve>nt”;
// Si no se aplica la cota nieve cambiamos el resultado para que no sea nulo. $nieve = $tiempo->prediccion->dia[0]->cota_nieve_prov[$p];
if ($nieve == “”) {$nieve = “-1″;}
echo $nieve;echo”nt”;
echo “</cotanieve>nt”;
echo “<cielo>nt”;
echo $cielo;echo”nt”;
echo “</cielo>nt”;
echo “<viento>ntt”;
echo “<direc>ntt”;
echo $tiempo->prediccion->dia[0]->viento[$p]->direccion;echo”ntt”; echo “</direc>ntt”;
echo “<vel>ntt”;
echo $tiempo->prediccion->dia[0]->viento[$p]->velocidad;echo”ntt”; echo “</vel>ntt”;
echo “</viento>nt”;
echo “<tempmax>nt”;
echo $tiempo->prediccion->dia[0]->temperatura->maxima;echo”nt”;
echo “</tempmax>nt”;
echo “<tempmin>nt”;
echo $tiempo->prediccion->dia[0]->temperatura->minima;echo”nt”;
echo “</tempmin>nt”;
echo “<temp>nt”;
echo $tiempo->prediccion->dia[0]->temperatura->dato[$p1];echo”nt”;
echo “</temp>nt”;
echo “<humedad>nt”;
echo $tiempo->prediccion->dia[0]->humedad_relativa->dato[$p1];echo”nt”; echo “</humedad>nt”;
echo “<uv>nt”;
echo $tiempo->prediccion->dia[0]->uv_max;echo”nt”;
echo “</uv>n”;
echo “</aemet>n”;
?>
[/plain]
Debemos buscar las siguientes líneas:
[plain]
// Consultamos el archivo xml de aemet y recogemos los datos.
$url = ‘http://www.aemet.es/xml/municipios/localidad_XXXXX.xml’;
[/plain]
Tenemos que modificar esta última línea y cambiar el código de municipio por el que hemos buscado antes en la página de Aemet.
El script tiene líneas de comentario que explican un poco qué hace el script.
Resumiendo, el script obtiene la hora actual y realiza unos ajustes para poder recoger los datos del periodo correspondiente a dicha hora.
Recoge los datos desde la página de Aemet.
En ocasiones el estado de cielo para un periodo que ofrece la página de Aemet está en blanco. Si esto ocurre busca el valor del siguiente periodo y lo guarda (esto pasa sobre todo con el pronóstico de las noches).
Aunque como se puede ver en el enlace: http://www.aemet.es/es/eltiempo/prediccion/municipios/ayuda AEMET tiene iconos para el día y la noche. Todavía no he visto que usen los iconos de noche, así que dependiendo de las horas, el script corrige esto.
Para mostrar los datos actuales buscamos los datos del primer día, es decir el día 0. Si quisiéramos buscar los datos de mañana, cambiaríamos todas las líneas en las que aparece dia[0] por dia[1].
Por último generamos una visualización en XML para mostrar el resultado:
Como se puede ver, ahora es más fácil recoger esta información en eedomus que con el archivo XML que proporciona Aemet.
Iniciamos sesión en eedomus. Pulsamos en configuración/Añadir o eliminar un periférico/Añadir otro tipo de periférico/Sensor http:
En este ejemplo vamos a crear un sensor que nos indique el estado del cielo. Rellenamos los distintos campos con la siguiente información:
- [Uso]: Otro indicador
- [Tipo de datos]: Lista de valores
- [URL de la demanda]: Url del dispositivo que contiene el script.
En mi caso uso una Raspberry Pi con apache. Es barata y consume muy poco.
- [Ruta XPATH]: Según el script que hemos creado la ruta seria: /aemet/cielo
Pulsamos en “Guardar y seguir editando”.
La lista de valores que usaremos es la siguiente:
11 – Despejado
11n – Despejado noche 12 Poco nuboso
12n – Poco nuboso noche
13 – Intervalos nubosos
13n – Intervalos nubosos noche
14 – Nuboso
14n – Nuboso noche
15 – Muy nuboso
16n – Muy nuboso
16 – Cubierto
16n – Cubierto
17 – Nubes altas
17n – Nubes altas noche
23 – Intervalos nubosos con lluvia
23n – Intervalos nubosos con lluvia noche
24 – Nuboso con lluvia
24n – Nuboso con lluvia noche
25 – Muy nuboso con lluvia
25n – Muy nuboso con lluvia
26 – Cubierto con lluvia
26n – Cubierto con lluvia
33 – Intervalos nubosos con nieve
33n – Intervalos nubosos con nieve noche
34 – Nuboso con nieve
34n – Nuboso con nieve noche
35 – Muy nuboso con nieve
35n – Muy nuboso con nieve
36 – Cubierto con nieve
36n – Cubierto con nieve
43 – Intervalos nubosos con lluvia escasa
43n – Intervalos nubosos con lluvia escasa noche
44 – Nuboso con lluvia escasa
44n – Nuboso con lluvia escasa noche
45n – Muy nuboso con lluvia escasa
46n – Cubierto con lluvia escasa
51 – Intervalos nubosos con tormenta
51n – Intervalos nubosos con tormenta noche
52 – Nuboso con tormenta
52n – Nuboso con tormenta noche
53 – Muy nuboso con tormenta
53n – Muy nuboso con tormenta
54 – Cubierto con tormenta
54n – Cubierto con tormenta
61 – Intervalos nubosos con tormenta y lluvia escasa
61n – Intervalos nubosos con tormenta y lluvia escasa noche 62 Nuboso con tormenta y lluvia escasa
62n – Nuboso con tormenta y lluvia escasa noche
63 – Muy nuboso con tormenta y lluvia escasa
63n – Muy nuboso con tormenta y lluvia escasa 64 Cubierto con tormenta y lluvia escasa 64n Cubierto con tormenta y lluvia escasa
71 – Intervalos nubosos con nieve escasa
71n – Intervalos nubosos con nieve escasa noche 72 Nuboso con nieve escasa
72n – Nuboso con nieve escasa noche
73 – Muy nuboso con nieve escasa
73n – Muy nuboso con nieve escasa 74 Cubierto con nieve escasa 74n Cubierto con nieve escasa
Los iconos tienen el nombre del Valor Bruto, así nos será más fácil identificar el icono. Pulsando sobre la imagen, podemos cambiar el icono.
Para identificarlo, ponemos el cursor encima de un icono y nos fijamos en la parte inferior del navegador. Veremos una línea que pone algo similar a: javascript.setImage(‘user/xxxx/11.png’):
El valor bruto es 11, al final de la línea pone 11.png. Bien… es el icono que busco. Con paciencia y poco a poco seguimos creando la lista de valores.
A continuación, dejo la lista de valores para el índice de radiación ultravioleta y el viento.
Índice UV
1 – Bajo
2 – Bajo
3 – Moderado
4 – Moderado
5 – Moderado
6 – Alto
7 – Alto
8 – Muy Alto
9 – Muy Alto
10 – Muy Alto
11 – Extremadamente Alto
+11 – Extremadamente Alto
Índice Viento:
C – Calma
E – Este
N – Norte
NE – Nordeste
NO – Noroeste
O – Oeste
S – Sur
SE – Sudeste
SO – Suroeste
Con el script tendremos la información meteorológica de otras en nuestra eedomus ofrecida por AEMET.
También podemos obtener esta información de otras páginas meteorológicas, seguramente de forma más fácil.
Si quieres más información, conseguir iconos, descargarte el script y conseguir ayuda adicional sobre cómo integrar AEMET en tu eedomus, consulta este hilo del foro de Domótica Doméstica.
Hola buenas, quiero intentar integrar la prediccion en el eedomus y me encuentro con el primer problema:
Como lo guardo quando dices:
. Debemos guardarlo en otro dispositivo como un NAS, una Raspberry Pi u otro disposivo que permita tener un servidor web.
En que formato lo debo guardar?
Me sirve un disco duro que tengo en la red de casa donde tambien tengo conectado el eedomus? es un WD My cloud.
Gracias!
Hola. No, un disco en red no sirve. Tiene que ser un servidor web. Por eso explicamos que tiene que ser en una Raspberry Pi o un NAS. Si tienes un servidor web online también valdría, por supuesto.
Me puedes ayudar? un NAS es mucho dinero, una Raspberry Pi no tengo ni idea de como empezar con ella y con un servidor web valdria? sabes si existen de gratuitos?
Una cosa, yo a mi WD My cloud puedo acceder des de el mbl o por explorador web, ahun asi no sirve, no?
Gracias!