- Code : Tout sélectionner
<?php /************************************************************************************* ** ** Script Meteo du Jour pour eedomus ** ** Script qui permet de recuperer au format XML les parametres des previsions ** de la meteo du jour de l'endroit ou se trouve votre box Eedomus ** ** - Ville (//ville), texte ** - Date de la mesure (//dateupdate), texte ** - Temp mini estimée du jour (//tmin), integer °c ** - Temp maxi estimée du jour (//tmax), integer °c ** - Temp moy estimée du jour (//tmoy), integer °c ** - Condition méteo estimée du jour (//condition), texte ** - Vitesse max du vent estimée du jour(//ventmax), integer km/h ** - Humidite moyenne estimée du jour (//hygmoy), integer % ** - Visibilite moyenne estimée du jour (//vismoy). integer km ** rajouts indice 1.1 ** - Température mesurée ressentie (//tress), integer °c ** - Température mesurée actuelle (//tact), integer °c ** - Pression atm actuelle (//pressact), integer mb ** - Vitesse du vent actuelle (//ventact), integer km/h ** - Direction du vent mesurée actuelle (//dirvent), texte ** - Direction du vent mesurée actuelle (//dirventdeg), integer ° ** - humidité mesurée actuelle (//hygact), integer % ** - pluviométrie mesurée actuelle (//pluieact), integer mm ** - pluviométrie estimée moy du jour (//pluiemoy), integer mm ** - visibilité mesurée actuelle (//visact), integer km ********* ** ** L'URL est de la forme : ** http://localhost/script/?exec=meteodujour.php&key=[VAR1]&city=[VAR2] ** ** La meteo du jour est recherchee sur le site https://www.apixu.com ** L'inscription sur le site (gratuite) est necessaire pour obtenir sa cle (Key). ** La clé nous autorise 5000 demande par mois (environ 7 par heure) ** Je conseille donc une scrutation par heure ** La météo sera faite pour l'endroit ou se trouve la box Eedomus (detection ** automatique à partir de l'adresse IP Publique) * ** ** [VAR1] : Doit contenir la cle ** [VAR2] : Peut contenir la ville (en option car la ville est en principe détectée par l'IP) ** ** XPath : doit contenir la donnée souhaitée (ex : //ville pour avoir la ville) ** ** ********* ** ** Evolution des versions : ** ** 2017-10-03 (Merguez07 & Mashuble) : V1.0 - Version initiale ** 2017-11-13 Merguez07 : V1.1 modifications suivantes ** * rajout des mesures suivantes: ** - Température mesurée ressentie (°c) ** - Température mesurée actuelle (°c) ** - Pression atm actuelle (mb) ** - Vitesse du vent actuelle (km/h) ** - Direction du vent mesurée actuelle (texte) ** - Direction du vent mesurée actuelle (°) ** - Humidité mesurée actuelle (%) ** - Pluviométrie mesurée actuelle (mm) ** - Pluviométrie estimée moy du jour (mm) ** - Visibilité mesurée actuelle (km) ** 2017-11-14 Merguez07 : V1.2 petite correction de dernière minute ** 2017-11-27 Merguez07 : V1.3 modif du script pour que un seul capteur interroge le site ** pour tous les autres afin d'eviter la saturation des requetes ** avant la fin du mois (5000 requetes max par mois) ** le capteur qui interroge le site lancera le script ainsi : ** http://localhost/script/?exec=meteodujour.php&key=[VAR1] ** Les autres capteurs lanceront le script ainsi: ** http://localhost/script/?exec=meteodujour.php **2017-12-08 Merguez07 : V1.4 Modif de l'icone pour le rendre international **2017-12-11 Merguez07 : V1.5 correction retrait d'espace avant 2 liens HTTP **2018-01-11 Merguez07 : V1.6 rajout de la ville en VAR2 car parfois elle est mal détectée par l'IP **2018-01-11 Merguez07 : V1.7 correction d'un bug sur la ville **2018-02-27 Merguez07 : V1.8 Correction bug dans le fichier json suite à modif 1.7 **2018-03-06 Merguez07 : V1.9 SUite à pb non debuggé sur fichier Json modif du script **************************************************************************************/
// On recupere la cle $key = getArg('key', false, NULL); $ville=getArg('city', false, NULL); $periph_id=getArg('eedomus_controller_module_id');
// On recupere le path $url = "http://localhost/api/get?action=periph.caract&show_config=1&periph_id=$periph_id"; $arrValue = sdk_json_decode(utf8_encode(httpQuery($url,'GET'))); $path=utf8_decode($arrValue["body"]["XPATH"]); // On recupere la meteo if ($path=="//condition") {
// Recherche de l'adresse IP publique $url="http://ip-api.com/json"; $jsonResponse = httpQuery($url); $content = sdk_json_decode($jsonResponse,true); $monippublique=$content[query];
//la localisation se fera par VAR2 sinon par IP $localisation = $monippublique; if ($ville!=" ") { $localisation = $ville; } // on interroge le site APIXU.com $url_meteo = "http://api.apixu.com/v1/forecast.json?key=" . $key . "&q=" . $localisation. "%20&days=1"; $jsonResponse = httpQuery($url_meteo); $content = sdk_json_decode($jsonResponse,true);
// conversion vent mph-->km/h $vent=$content[forecast][forecastday][0][day][maxwind_kph];////indice 1.1
// calcul des indices Beaufort if ($vent<1) $beaufort=0; if ($vent>=1 and $vent<6) $beaufort=1; if ($vent>=6 and $vent<12) $beaufort=2; if ($vent>=12 and $vent<20) $beaufort=3; if ($vent>=20 and $vent<29) $beaufort=4; if ($vent>=29 and $vent<39) $beaufort=5; if ($vent>=39 and $vent<50) $beaufort=6; if ($vent>=50 and $vent<62) $beaufort=7; if ($vent>=62 and $vent<75) $beaufort=8; if ($vent>=75 and $vent<89) $beaufort=9; if ($vent>=89 and $vent<103) $beaufort=10; if ($vent>=103 and $vent<118) $beaufort=11; if ($vent>=118) $beaufort=12;
// sauvegarde des données pour ne pas réinterroger le site pour chaque capteur saveVariable('BEAUFORT',$beaufort); saveVariable('VILLE',$content[location][name]); saveVariable('DATEUPDATE',$content[current][last_updated]); saveVariable('TRESS',$content[current][feelslike_c]); saveVariable('TACT',$content[current][temp_c]); saveVariable('TMIN',$content[forecast][forecastday][0][day][mintemp_c]); saveVariable('TMAX',$content[forecast][forecastday][0][day][maxtemp_c]); saveVariable('TMOY',$content[forecast][forecastday][0][day][avgtemp_c]); saveVariable('CONDITION',$content[forecast][forecastday][0][day][condition][text]); saveVariable('PRESSACT',$content[current][pressure_mb]); saveVariable('VENTACT',$content[current][wind_kph]); saveVariable('VENTMAX',$vent); saveVariable('DIRVENT',$content[current][wind_dir]); saveVariable('DIRVENTDEG',$content[current][wind_degree]); saveVariable('HYGACT',$content[current][humidity]); saveVariable('HYGMOY',$content[forecast][forecastday][0][day][avghumidity]); saveVariable('PLUIEACT',$content[current][precip_mm]); saveVariable('PLUIEMOY',$content[forecast][forecastday][0][day][totalprecip_mm]); saveVariable('VISACT',$content[current][vis_km]); saveVariable('VISMOY',$content[forecast][forecastday][0][day][avgvis_km]); }
// Generation du XML sdk_header('text/xml'); $xml = '<?xml version="1.0" encoding="UTF-8"?>'; $xml .= '<meteodujour>'; $xml .= '<status>ok</status>'; $xml .= '<ville>' . loadVariable('VILLE') . '</ville>'; $xml .= '<dateupdate>' . loadVariable('DATEUPDATE') . '</dateupdate>';//date de dernière mise à jour des valeurs $xml .= '<tress>' . loadVariable('TRESS') . '</tress>'; // indice 1.1 température ressentie $xml .= '<tact>' . loadVariable('TACT') . '</tact>';//indice 1.1 température actuelle $xml .= '<tmin>' . loadVariable('TMIN') . '</tmin>';// température min prévue $xml .= '<tmax>' . loadVariable('TMAX') . '</tmax>';//température max prévue $xml .= '<tmoy>' . loadVariable('TMOY') . '</tmoy>';//température moyenne prévue $xml .= '<condition>' . loadVariable('CONDITION') . '</condition>'; $xml .= '<pressact>' . loadVariable('PRESSACT') . '</pressact>';//indice 1.1 pression actuelle $xml .= '<ventact>' . loadVariable('VENTACT') . '</ventact>';//indice 1.1 vent actuel $xml .= '<ventmax>' . loadVariable('VENTMAX') . '</ventmax>';// vent max prévu dans la journée $xml .= '<beaufort>' . loadVariable('BEAUFORT') . '</beaufort>';// beaufort max prévu dans la journée $xml .= '<dirvent>' . loadVariable('DIRVENT') .'</dirvent>'; //indice 1.1 $xml .= '<dirventdeg>' . loadVariable('DIRVENTDEG') .'</dirventdeg>';//indice 1.1 $xml .= '<hygact>' . loadVariable('HYGACT') . '</hygact>'; // indice 1.1 humidité actuelle $xml .= '<hygmoy>' . loadVariable('HYGMOY') . '</hygmoy>';// hygrométrie moyenne prévue $xml .= '<pluieact>' . loadVariable('PLUIEACT') . '</pluieact>'; // indice 1.1 quantité de pluie actuelle $xml .= '<pluiemoy>' . loadVariable('PLUIEMOY') . '</pluiemoy>'; // indice 1.1 quantité de pluie prévue $xml .= '<visact>' . loadVariable('VISACT') . '</visact>'; // indice 1.1 visibilité actuelle $xml .= '<vismoy>' . loadVariable('VISMOY') . '</vismoy>';// vibilité moyenne prévue $xml .= '</meteodujour>';
echo $xml;
?>
|