[Tuto]Météo developer.forecast.io

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

[Tuto]Météo developer.forecast.io

Message par fratton »

Sur le même principe que j'avais récupéré la météo sur Yahoo, mais qui n'existe plus, voici un script pour la météo developer.forecast.io

il vous faut aussi PHP5, sur Raspberry :

Code : Tout sélectionner

sudo apt-get update
sudo apt-get install php5
Dans domoticz, créer les capteurs virtuels et récupérer leur numéro d'index IDX.

Il faut créer un compte gratuit sur le site https://developer.forecast.io/ qui va vous générer l'URL qui va bien, pour 300 requêtes par jour.
Moi j'actualise 1 fois toutes les 5 minutes donc 24x60/5= 288 requêtes.

Je récupère plein de chose : température Humiditée et Pression atmosphèrique, vent avec direction, pluie, Ozone et Nuages
temp.JPG
temp.JPG (21.05 Kio) Consulté 5766 fois
mesures.JPG
mesures.JPG (42.23 Kio) Consulté 5766 fois
Ozone.JPG
Ozone.JPG (19.84 Kio) Consulté 5766 fois
nuages.JPG
nuages.JPG (18.89 Kio) Consulté 5766 fois
script php :

Code : Tout sélectionner

<?php
// Adresse et port de Domoticz
$IPPORT="192.168.1.10:8080";
$URLFORECAST="https://api.forecast.io/forecast/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/40.000000,4.000000?units=ca&lang=fr&exclude=hourly,minutely,daily,alerts,flags";

echo "===== forecast.io ====="."\n";
$json_string = file_get_contents($URLFORECAST);
$parsed_json = json_decode($json_string, true);

$present_date = date("d.m.y - H:i:s");
echo $present_date."\n";
$h = date('H');
$day=date("d");
$month=date("m");
$year=date("Y");
$ref = mktime($h,0,0,$month,$day,$year);
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['currently'];
$time = $parsed_json['time'];
echo date('c',$time)."\n";
$summary = $parsed_json['summary'];
echo $summary."\n";
$temperature = round($parsed_json['temperature'],1);
echo $temperature."°C\n";
$apparentTemperature = round($parsed_json['apparentTemperature'],1);
echo $apparentTemperature."°C\n";
$humidity = $parsed_json['humidity']*100;
echo $humidity."%\n";
$windSpeed = round($parsed_json['windSpeed'],1);
echo $windSpeed."km/h\n";
$windBearing = $parsed_json['windBearing'];
echo $windBearing."°\n";
$pressure = round($parsed_json['pressure']);
echo $pressure."hpa\n";
$precipIntensity = round($parsed_json['precipIntensity'],2);
echo $precipIntensity."ml intensité\n";
$precipProbability = $parsed_json['precipProbability']*100;
echo $precipProbability."% precipitation\n";
$cloudCover = $parsed_json['cloudCover']*100;
echo $cloudCover."% nuages\n";
$ozone = $parsed_json['ozone'];
echo $ozone."DU Ozone\n";
$icon = $parsed_json['icon'];
echo $icon."\n";
if ($icon=="") {
        exit("ERREUR DE DONNEES RECUPEREE");
};

// Capteur de température Humiditée et Pression atmosphèrique dans Domoticz
/*
json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=TEMP;HUM;HUM_STAT;BAR;BAR_FOR
The above sets the parameters for a Temp+Humidity+Barometer device
IDX = id of your device (This number can be found in the devices tab in the column "IDX")
TEMP = Temperature
HUM = Humidity
HUM_STAT = Humidity status
BAR = Barometric pressure
BAR_FOR = Barometer forecast

Barometer forecast can be one of:
0 = No info
1 = Sunny
2 = Partly cloudy
3 = Cloudy
4 = Rain
*/
$IDX=191;

switch($icon) {
    case "":
        $rBaro=0;
        break;
    case "clear-day":
        $rBaro=1;
        break;
    case "clear-night":
        $rBaro=1;
        break;
    case "rain":
        $rBaro=4;
        break;
    case "snow":
        $rBaro=4;
        break;
    case "sleet":
        $rBaro=3;
        break;
    case "wind":
        $rBaro=0;
        break;
    case "fog":
        $rBaro=3;
        break;
    case "cloudy":
        $rBaro=3;
        break;
    case "partly-cloudy-day":
        $rBaro=2;
        break;
    case "partly-cloudy-night":
        $rBaro=2;
        break;
    default:
        $rBaro=0;
}

$majdomoticz="http://$IPPORT/json.htm?type=command&param=udevice&idx=$IDX&nvalue=0&svalue=$temperature;$humidity;0;$pressure;$rBaro";
echo $majdomoticz."\n";
echo file_get_contents($majdomoticz);


// Capteur de vent
/*
json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=WB;WD;WS;WG;22;24
IDX = id of your device (This number can be found in the devices tab in the column "IDX")
WB = Wind bearing (0-359)
WD = Wind direction (S, SW, NNW, etc.)
WS = Wind speed [km/h]
WG = Gust [km/h]
22 = Temperature
24 = Temperature Windchill
*/
$rDirec=$windBearing;
if ($rDirec < 11.25) { $dir = "N"; }
elseif ($rDirec >= 11.25 && $rDirec < 33.75) { $dir = "NNE"; }
elseif ($rDirec >= 33.75 && $rDirec < 56.25) { $dir = "NE"; }
elseif ($rDirec >= 56.25 && $rDirec < 78.75) { $dir = "ENE"; }
elseif ($rDirec >= 78.75 && $rDirec < 101.25) { $dir = "E"; }
elseif ($rDirec >= 101.25 && $rDirec < 123.75) { $dir = "ESE"; }
elseif ($rDirec >= 123.75 && $rDirec < 146.25) { $dir = "SE"; }
elseif ($rDirec >= 146.25 && $rDirec < 168.75) { $dir = "SSE"; }
elseif ($rDirec >= 168.75 && $rDirec < 191.25) { $dir = "S"; }
elseif ($rDirec >= 191.25 && $rDirec < 213.75) { $dir = "SSW"; }
elseif ($rDirec >= 213.75 && $rDirec < 236.25) { $dir = "SW"; }
elseif ($rDirec >= 236.25 && $rDirec < 258.75) { $dir = "WSW"; }
elseif ($rDirec >= 258.75 && $rDirec < 281.25) { $dir = "W"; }
elseif ($rDirec >= 281.25 && $rDirec < 303.75) { $dir = "WNW"; }
elseif ($rDirec >= 303.75 && $rDirec < 326.25) { $dir = "NW"; }
elseif ($rDirec >= 326.25 && $rDirec < 348.75) { $dir = "NNW"; }
else { $dir = "N"; }

$IDX=192;
$majdomoticz="http://$IPPORT/json.htm?type=command&param=udevice&idx=$IDX&nvalue=0&svalue=$windBearing;$dir;$windSpeed;0;$temperature;$apparentTemperature";
echo $majdomoticz."\n";
echo file_get_contents($majdomoticz);

/* Pluie */
$IDX=193;
$majdomoticz="http://$IPPORT/json.htm?type=command&param=udevice&idx=$IDX&nvalue=0&svalue=$precipIntensity;$precipIntensity";
echo $majdomoticz."\n";
echo file_get_contents($majdomoticz);

/* Ozone */
$IDX=194;
$majdomoticz="http://$IPPORT/json.htm?type=command&param=udevice&idx=$IDX&nvalue=0&svalue=$ozone";
echo $majdomoticz."\n";
echo file_get_contents($majdomoticz);

/* Nuages */
$IDX=195;
$majdomoticz="http://$IPPORT/json.htm?type=command&param=udevice&idx=$IDX&nvalue=0&svalue=$cloudCover";
echo $majdomoticz."\n";
echo file_get_contents($majdomoticz);
?>
le sh qui appel le script php (pour le lancer à la main):

Code : Tout sélectionner

#!/bin/bash
cd /home/pi/domoticz_scripts/meteo
sudo php5 forecast.php > /tmp/forecast.log
Le cron qui appel le sh:

Code : Tout sélectionner

*/5 * * * * sudo /bin/bash /home/pi/domoticz_scripts/meteo/meteo.sh >/dev/null 2>&1
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
Répondre