Cómo integrar la información meteorológica de AEMET en eedomus

    • En este manual paso a paso, te contamos cómo crear un script en PHP para integrar la información meteorológica de AEMET en eedomus.

    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.

    eedomus Plus - Vista de los conectores

    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.

    Script PHP para eedomus - Página de AEMET

    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”.

    Script en PHP para eedomus - AEMET

    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.

    AEMET en eedomus - Archivo 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.

    AEMET en eedomus - Código del archivo xml

    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:

    <?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”;

    ?>

    Debemos buscar las siguientes líneas:

    // Consultamos el archivo xml de aemet y recogemos los datos.
    $url = ‘http://www.aemet.es/xml/municipios/localidad_XXXXX.xml’;

    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:

    AEMET en eedomus - Visualización en xml

    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:

    AEMET en eedomus - Creación de un 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”.

    AEMET en eedomus - Configuración del sensor http

    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.

    AEMET en eedomus - Valores

    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’):

    AEMET en eedomus - Iconos

    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.

    Philippe

    Madrileño de adopción. Tecnófilo. Podcaster. Obsesionado por la domótica. Y unas cuantas cosas más, casi todas buenas. Keywords: viajes, libertad, amistad, amor, tecnología, pasión, equilibrio...


    Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *