04-30-2020, 05:52 AM
oui tu as plusieurs solutions avec le connecteur http
- 1 - tu utilises la fonction oauth (oauth2), dans ce cas avec clientid et clientsecret, adresse de validation de la connection , tu dois renseigner une adresse de retour du côté de celui qui reçoit la requête (http://L’IP de votre box lifedomus locale :8080/Domobox/OAuth) , si ce n'est pas le cas alors le retour oauth va n'importe ou et ==> connexion impossible
- 2 - tu utilises login et pwd et tu es en basic et tu renseigne dans domaine le bout de l'adresse qui va être toujours utilisée comme base (donc sans /login à la fin)
j'ai noté que pour certains site la fonction oauth implémenté dans LD ne fonctionne pas (surement parce que pas de respect de toutes les fonctionnalités des protocoles de dialogue d'un côté ou de l'autre)
éviter de mettre une trame d'initialisation dans le connecteur parce que vous ne pouvez pas utiliser le parseur json pour traiter le retour à ce stade.
pour voir ce qui se passe dans vos commandes - actionner la fonction de listen du connecteur qui permet d'avoir la trame json de retour après chaque commande / requête
ensuite tout se passe dans l'équipement associé au connecteur :
les commandes que vuos nommez comme vous voulez : peuvent être en ascii ou js
si en ascii : mettre la partie de la commande sans la base ==> /get_list_device
si en js : alors command='/get_list_device';
si ascii pas de possibilité d'ajouter des instructions js dans la partie commande , sinon passer en js , par exemple si vous voulez faire ldprint("lancement de la commande toto")
et si on est pas en GET mais en POST alors ==> JS pour remplir les entêtes et paramètres de la requête
pour traiter le retour json (celui que l'on voit avec la fonction listen coché dans le connecteur)
2 solutions:
1 - ajout du code parseur json dans le connecteur lui-même , dans ce cas ce code est executé dans toutes les commandes de tous les équipements associés au connecteur
2 - on code "Parseur JS de la commande" , là on peut mettre son code de récupération et traitement spécifique de la trame json de cette commande, ça remplace le code du de décodage de la trame retour du connecteur pour cette commande. donc à utiliser si le code de traitement est spécifique à la commande ou pendant la phase de mise au point.
note : la méthode 2 est interprétée systématiquement et complètement au moment de la validation / sauvegarde et ça prend un certains temps avant de récupérer la main, dans la méthode 1 c'est juste la syntaxe qui est "contrôlée"
exemple de quelques traitement :
ou plus complexe :
- 1 - tu utilises la fonction oauth (oauth2), dans ce cas avec clientid et clientsecret, adresse de validation de la connection , tu dois renseigner une adresse de retour du côté de celui qui reçoit la requête (http://L’IP de votre box lifedomus locale :8080/Domobox/OAuth) , si ce n'est pas le cas alors le retour oauth va n'importe ou et ==> connexion impossible
- 2 - tu utilises login et pwd et tu es en basic et tu renseigne dans domaine le bout de l'adresse qui va être toujours utilisée comme base (donc sans /login à la fin)
j'ai noté que pour certains site la fonction oauth implémenté dans LD ne fonctionne pas (surement parce que pas de respect de toutes les fonctionnalités des protocoles de dialogue d'un côté ou de l'autre)
éviter de mettre une trame d'initialisation dans le connecteur parce que vous ne pouvez pas utiliser le parseur json pour traiter le retour à ce stade.
pour voir ce qui se passe dans vos commandes - actionner la fonction de listen du connecteur qui permet d'avoir la trame json de retour après chaque commande / requête
ensuite tout se passe dans l'équipement associé au connecteur :
les commandes que vuos nommez comme vous voulez : peuvent être en ascii ou js
si en ascii : mettre la partie de la commande sans la base ==> /get_list_device
si en js : alors command='/get_list_device';
si ascii pas de possibilité d'ajouter des instructions js dans la partie commande , sinon passer en js , par exemple si vous voulez faire ldprint("lancement de la commande toto")
et si on est pas en GET mais en POST alors ==> JS pour remplir les entêtes et paramètres de la requête
pour traiter le retour json (celui que l'on voit avec la fonction listen coché dans le connecteur)
2 solutions:
1 - ajout du code parseur json dans le connecteur lui-même , dans ce cas ce code est executé dans toutes les commandes de tous les équipements associés au connecteur
2 - on code "Parseur JS de la commande" , là on peut mettre son code de récupération et traitement spécifique de la trame json de cette commande, ça remplace le code du de décodage de la trame retour du connecteur pour cette commande. donc à utiliser si le code de traitement est spécifique à la commande ou pendant la phase de mise au point.
note : la méthode 2 est interprétée systématiquement et complètement au moment de la validation / sauvegarde et ça prend un certains temps avant de récupérer la main, dans la méthode 1 c'est juste la syntaxe qui est "contrôlée"
exemple de quelques traitement :
Code :
// fichier get_siteId.js
// l'identification sur le site SOMFY à été traitée par le connecteur
// tout démarre ici , la première chose est de récupérer l'identifiant du site SOMFY via la commande 'getsiteId'
try {
var obj_somfy = JSON.parse(trame);
} catch (e) {
ldprint("Error parse JSON: " + e.message);
}
ldprint('get_siteId.js');
// on écrit un message dans 'message_retour_somfy' pour suivre ce qui se passe
// et on met à jour un compteur qui sert pour déclencher l'automate d'enchainement somfy,
// qui va émettre une requête (par la suite 'get_list_device') pour récupérer les données stockées sur le site SOMFY
label = obj_somfy[0].label;
// identifiant du site - on va le stocker dans l'équipement somfy message et aussi dans une variable générale de CS
// attention on doit mettre les variables de retour (general_site_id et somfy_compteur) dans un autre équipement que celui qui déclenche la commande get_siteID
// sinon il y a conflit entre l'éxecution par l'équipement déclencheur et l'automate qui doit capter la modification du compteur pour se déclencher
general_site_id = obj_somfy[0].id;
somfy_compteur = parseInt(somfy_compteur) + 1;
message_retour_somfy = "retour Ok de l'identifiant du site SOMFY: " + label;
// pour débug
ldprint('general_site_id = ' + general_site_id);
ldprint('label: ' + label);
ou plus complexe :
Code :
try {
var obj = JSON.parse(trame);
} catch (e) {
ldprint("Error parse JSON: " + e.message);
}
function get_temps_text(text) {
// retourne le texte du temps qui est associé au code_temps
text = text.substring(text.indexOf(',') + 1 , text.indexOf(';'));
return text;
}
function get_temps_icon(text) {
// retourne l'icon à utiliser du temps qui est associé au code_temps
text = text.substring(text.indexOf(';') + 1);
return text;
}
function translate_dir_vent (dir_vent_degre){
// transposition entre les ° de la rose des vents et les positions cardinales plus simples à comprendre
if (dir_vent_degre < 12) {dirvent_cardinal = "N"}
else if (dir_vent_degre < 33) {dirvent_cardinal = "NNE"}
else if (dir_vent_degre < 57) {dirvent_cardinal = "NE"}
else if (dir_vent_degre < 80) {dirvent_cardinal = "ENE"}
else if (dir_vent_degre < 102) {dirvent_cardinal = "E"}
else if (dir_vent_degre < 124) {dirvent_cardinal = "ESE"}
else if (dir_vent_degre < 147) {dirvent_cardinal = "SE"}
else if (dir_vent_degre < 170) {dirvent_cardinal = "SSE"}
else if (dir_vent_degre < 192) {dirvent_cardinal = "S"}
else if (dir_vent_degre < 214) {dirvent_cardinal = "SSO"}
else if (dir_vent_degre < 237) {dirvent_cardinal = "SO"}
else if (dir_vent_degre < 260) {dirvent_cardinal = "OSO"}
else if (dir_vent_degre < 282) {dirvent_cardinal = "O"}
else if (dir_vent_degre < 304) {dirvent_cardinal = "ONO"}
else if (dir_vent_degre < 327) {dirvent_cardinal = "NO"}
else if (dir_vent_degre < 350) {dirvent_cardinal = "NNO"}
else {dirvent_cardinal = "N"}
return dirvent_cardinal;
}
// table de correspondance entre les codes temps, les libellés, les images à afficher - par exemple '0' correspond à Soleil, '4' correspond à Nuageux
var table_libelle_text_icon =[
"0,Soleil;forcast_32.png",
"1,Peu nuageux;forcast_30.png",
"2,Ciel voilé;forcast_34.png",
"3,Nuageux;forcast_28.png",
"4,Très nuageux;forcast_26.png",
"5,Couvert;forcast_28.png",
"6,Brouillard;forcast_19.png",
"7,Brouillard givrant;forcast_19.png",
"8,rien;forcast_.png",
"9,rien;forcast_.png",
"10,Pluie faible;forcast_9.png",
"11,Pluie modérée;forcast_11.png",
"12,Pluie forte;forcast_12.png",
"13,Pluie faible verglaçante;forcast_9.png",
"14,Pluie modérée verglaçante;forcast_9.png",
"15,Pluie forte verglaçante;forcast_12.png",
"16,Bruine;forcast_19.png",
"17,rien;forcast_.png",
"18,rien;forcast_.png",
"19,rien;forcast_.png",
"20,Neige faible;forcast_15.png",
"21,Neige modérée;forcast_13.png",
"22,Neige forte;forcast_14.png",
"23,rien;forcast_.png",
"24,rien;forcast_.png",
"25,rien;forcast_.png",
"26,rien;forcast_.png",
"27,rien;forcast_.png",
"28,rien;forcast_.png",
"29,rien;forcast_.png",
"30,Pluie et neige mêlées faibles;forcast_5.png",
"31,Pluie et neige mêlées modérées;forcast_5.png",
"32,Pluie et neige mêlées fortes;forcast_7.png",
"33,rien;forcast_.png",
"34,rien;forcast_.png",
"35,rien;forcast_.png",
"36,rien;forcast_.png",
"37,rien;forcast_.png",
"38,rien;forcast_.png",
"39,rien;forcast_.png",
"40,Averses de pluie locales et faibles;forcast_9.png",
"41,Averses de pluie locales;forcast_11.png",
"42,Averses locales et fortes;forcast_12.png",
"43,Averses de pluie faibles;forcast_9.png",
"44,Averses de pluie;forcast_11.png",
"45,Averses de pluie fortes;forcast_12.png",
"46,Averses de pluie faibles et fréquentes;forcast_9.png",
"47,Averses de pluie fréquentes;forcast_11.png",
"48,Averses de pluie fortes et fréquentes;forcast_12.png",
"49,rien;forcast_.png",
"50,rien;forcast_.png",
"51,rien;forcast_.png",
"52,rien;forcast_.png",
"53,rien;forcast_.png",
"54,rien;forcast_.png",
"55,rien;forcast_.png",
"56,rien;forcast_.png",
"57,rien;forcast_.png",
"58,rien;forcast_.png",
"59,rien;forcast_.png",
"60,Averses de neige localisées et faibles;forcast_15.png",
"61,Averses de neige localisées;forcast_13.png",
"62,Averses de neige localisées et fortes;forcast_14.png",
"63,Averses de neige faibles;forcast_15.png",
"64,Averses de neige;forcast_13.png",
"65,Averses de neige fortes;forcast_14.png",
"66,Averses de neige faibles et fréquentes;forcast_15.png",
"67,Averses de neige fréquentes;forcast_13.png",
"68,Averses de neige fortes et fréquentes;forcast_14.png",
"69,rien;forcast_.png",
"70,Averses de pluie et neige mêlées localisées et faibles;forcast_5.png",
"71,Averses de pluie et neige mêlées localisées;forcast_7.png",
"72,Averses de pluie et neige mêlées localisées et fortes;forcast_7.png",
"73,Averses de pluie et neige mêlées faibles;forcast_7.png",
"74,Averses de pluie et neige mêlées;forcast_5.png",
"75,Averses de pluie et neige mêlées fortes;forcast_5.png",
"76,Averses de pluie et neige mêlées faibles et nombreuses;forcast_5.png",
"77,Averses de pluie et neige mêlées fréquentes;forcast_5.png",
"78,Averses de pluie et neige mêlées fortes et fréquentes;forcast_5.png",
"79,rien;forcast_.png",
"80,rien;forcast_.png",
"81,rien;forcast_.png",
"82,rien;forcast_.png",
"83,rien;forcast_.png",
"84,rien;forcast_.png",
"85,rien;forcast_.png",
"86,rien;forcast_.png",
"87,rien;forcast_.png",
"88,rien;forcast_.png",
"89,rien;forcast_.png",
"90,rien;forcast_.png",
"91,rien;forcast_.png",
"92,rien;forcast_.png",
"93,rien;forcast_.png",
"94,rien;forcast_.png",
"95,rien;forcast_.png",
"96,rien;forcast_.png",
"97,rien;forcast_.png",
"98,rien;forcast_.png",
"99,rien;forcast_.png",
"100,Orages faibles et locaux;forcast_17.png",
"101,Orages locaux;forcast_17.png",
"102,Orages fort et locaux;forcast_3.png",
"103,Orages faibles;forcast_17.png",
"104,Orages;forcast_17.png",
"105,Orages forts;forcast_3.png",
"106,Orages faibles et fréquents;forcast_17.png",
"107,Orages fréquents;forcast_17.png",
"108,Orages forts et fréquents;forcast_3.png",
"109,rien;forcast_.png",
"110,rien;forcast_.png",
"111,rien;forcast_.png",
"112,rien;forcast_.png",
"113,rien;forcast_.png",
"114,rien;forcast_.png",
"115,rien;forcast_.png",
"116,rien;forcast_.png",
"117,rien;forcast_.png",
"118,rien;forcast_.png",
"119,rien;forcast_.png",
"120,Orages faibles et locaux de neige ou grésil;forcast_14.png",
"121,Orages locaux de neige ou grésil;forcast_7.png",
"122,Orages locaux de neige ou grésil;forcast_7.png",
"123,Orages faibles de neige ou grésil;forcast_7.png",
"124,Orages de neige ou grésil;forcast_7.png",
"125,Orages de neige ou grésil;forcast_7.png",
"126,Orages faibles et fréquents de neige ou grésil;forcast_7.png",
"127,Orages fréquents de neige ou grésil;forcast_7.png",
"128,Orages fréquents de neige ou grésil;forcast_7.png",
"129,rien;forcast_.png",
"130,Orages faibles et locaux de pluie et neige mêlées ou grésil;forcast_7.png",
"131,Orages locaux de pluie et neige mêlées ou grésil;forcast_7.png",
"132,Orages fort et locaux de pluie et neige mêlées ou grésil;forcast_5.png",
"133,Orages faibles de pluie et neige mêlées ou grésil;forcast_5.png",
"134,Orages de pluie et neige mêlées ou grésil;forcast_5.png",
"135,Orages forts de pluie et neige mêlées ou grésil;forcast_5.png",
"136,Orages faibles et fréquents de pluie et neige mêlées ou grésil;forcast_5.png",
"137,Orages fréquents de pluie et neige mêlées ou grésil;forcast_5.png",
"138,Orages forts et fréquents de pluie et neige mêlées ou grésil;forcast_5.png",
"139,rien;forcast_.png",
"140,Pluies orageuses;forcast_17.png",
"141,Pluie et neige mêlées à caractère orageux;forcast_17.png",
"142,Neige à caractère orageux;forcast_14.png",
"143,rien;forcast_.png",
"144,rien;forcast_.png",
"145,rien;forcast_.png",
"146,rien;forcast_.png",
"147,rien;forcast_.png",
"148,rien;forcast_.png",
"149,rien;forcast_.png",
"150,rien;forcast_.png",
"151,rien;forcast_.png",
"152,rien;forcast_.png",
"153,rien;forcast_.png",
"154,rien;forcast_.png",
"155,rien;forcast_.png",
"156,rien;forcast_.png",
"157,rien;forcast_.png",
"158,rien;forcast_.png",
"159,rien;forcast_.png",
"160,rien;forcast_.png",
"161,rien;forcast_.png",
"162,rien;forcast_.png",
"163,rien;forcast_.png",
"164,rien;forcast_.png",
"165,rien;forcast_.png",
"166,rien;forcast_.png",
"167,rien;forcast_.png",
"168,rien;forcast_.png",
"169,rien;forcast_.png",
"170,rien;forcast_.png",
"171,rien;forcast_.png",
"172,rien;forcast_.png",
"173,rien;forcast_.png",
"174,rien;forcast_.png",
"175,rien;forcast_.png",
"176,rien;forcast_.png",
"177,rien;forcast_.png",
"178,rien;forcast_.png",
"179,rien;forcast_.png",
"180,rien;forcast_.png",
"181,rien;forcast_.png",
"182,rien;forcast_.png",
"183,rien;forcast_.png",
"184,rien;forcast_.png",
"185,rien;forcast_.png",
"186,rien;forcast_.png",
"187,rien;forcast_.png",
"188,rien;forcast_.png",
"189,rien;forcast_.png",
"190,rien;forcast_.png",
"191,rien;forcast_.png",
"192,rien;forcast_.png",
"193,rien;forcast_.png",
"194,rien;forcast_.png",
"195,rien;forcast_.png",
"196,rien;forcast_.png",
"197,rien;forcast_.png",
"198,rien;forcast_.png",
"199,rien;forcast_.png",
"200,rien;forcast_.png",
"201,rien;forcast_.png",
"202,rien;forcast_.png",
"203,rien;forcast_.png",
"204,rien;forcast_.png",
"205,rien;forcast_.png",
"206,rien;forcast_.png",
"207,rien;forcast_.png",
"208,rien;forcast_.png",
"209,rien;forcast_.png",
"210,Pluie faible intermittente;forcast_9.png",
"211,Pluie modérée intermittente;forcast_11.png",
"212,Pluie forte intermittente;forcast_12.png",
"213,rien;forcast_.png",
"214,rien;forcast_.png",
"215,rien;forcast_.png",
"216,rien;forcast_.png",
"217,rien;forcast_.png",
"218,rien;forcast_.png",
"219,rien;forcast_.png",
"220,Neige faible intermittente;forcast_15.png",
"221,Neige modérée intermittente;forcast_13.png",
"222,Neige forte intermittente;forcast_14.png",
"223,rien;forcast_.png",
"224,rien;forcast_.png",
"225,rien;forcast_.png",
"226,rien;forcast_.png",
"227,rien;forcast_.png",
"228,rien;forcast_.png",
"229,rien;forcast_.png",
"230,Pluie et neige mêlées;forcast_7.png",
"231,Pluie et neige mêlées;forcast_7.png",
"232,Pluie et neige mêlées;forcast_7.png",
"233,rien;forcast_.png",
"234,rien;forcast_.png",
"235,Averses de grêle;forcast_18.png"]
// City infos
var City = new Array();
City = obj.city;
code_commune = City.insee;
code_postal = City.cp;
latitude = City.latitude;
longitude = City.longitude
elevation = City.altitude;
nom_commune = City.name;
// update time - l'heure de la prise d'info du capteur de météo concept
if (obj.update) {
update_time = obj.update;
ldprint("update_time: " + update_time)
}
// ephemeride du jour
if (obj.ephemeride)
{
var Ephemeride = new Array ();
Ephemeride = obj.ephemeride;
if (Ephemeride.day == 0)
{
lever_soleil_j0 = Ephemeride.sunrise;
coucher_soleil_j0 = Ephemeride.sunset;
duree_jour_j0 = Ephemeride.duration_day;
diff_duree_jour_j0 = Ephemeride.diff_duration_day;
phase_lune_j0 = Ephemeride.moon_phase;
}
if (Ephemeride.day == 1)
{
lever_soleil_j1 = Ephemeride.sunrise;
coucher_soleil_j1 = Ephemeride.sunset;
}
if (Ephemeride.day == 2)
{
lever_soleil_j2 = Ephemeride.sunrise;
coucher_soleil_j2 = Ephemeride.sunset;
}
if (Ephemeride.day == 3)
{
lever_soleil_j3 = Ephemeride.sunrise;
coucher_soleil_j3 = Ephemeride.sunset;
}
}
// Forecasts
else if (obj.forecast) { // test si on a des données météo sur les heures
var Forecast_ = new Array(); // variable générale pour les données 'jour' ou 'heure'
// c'est la requête horaire, traitement de ce qui est spécifique à la requête heure
Forecast_ = obj.forecast;
// infos horaires
if (Forecast_[0].temp2m) // c'est la requête horaire, traitement de ce qui est spécifique à la requête heure
{
var Forecast_hour_now = new Array(); // variable pour stocker les données de l'heure courante
// les infos
// c'est la requête horaire, traitement de ce qui est spécifique à la requête heure
// on récupère toutes les valeurs à exploiter plus tard
Forecast_hour_now = Forecast_[0]; // on prend la première valeur qui est la valeur courante
datetime = Forecast_hour_now.datetime;
jour = datetime.substr(8, 2) + "-" + datetime.substr(5, 2) + "-" + datetime.substr(0, 4); // formatage de la date du jour sous la forme jj-mm-aaaa
heure = datetime.substr(datetime.indexOf('T') + 1, 5); // on prend juste l'heure et les minutes
vent10m = Forecast_hour_now.wind10m;
rafale10m = Forecast_hour_now.gust10m;
dirvent10m = Forecast_hour_now.dirwind10m;
dirvent = translate_dir_vent (Forecast_hour_now.dirwind10m);
cumulpluie = Forecast_hour_now.rr10;
cumulpluiemax = Forecast_hour_now.rr1;
probapluie = Forecast_hour_now.probarain;
probagel = Forecast_hour_now.probafrost;
probabrouillard = Forecast_hour_now.probafog;
probavent70 = Forecast_hour_now.probawind70;
probavent100 = Forecast_hour_now.probawind100;
rafalevent = Forecast_hour_now.gustx;
// traitement de la tendance météo
code_temps = Forecast_hour_now.weather; // le code temps va permettre de prendre le libellé dans la table table_libelle_text_icon
libelle_temps = get_temps_text(table_libelle_text_icon[code_temps]); // on va chercher le libellé du temps
icon_temps = get_temps_icon(table_libelle_text_icon[code_temps]); // on va chercher l'icone du temps
retour_requete = "heure";
// temperature_h0 = Forecast_hour_now.temp2m; // température courante à 2m du sol
for (i = 0; i < Forecast_.length - 1 & i < 4; i++){
eval("temperature_h"+i+" = Forecast_["+i+"].temp2m"); // température h+x à 2m du sol
eval("hour_h"+i+" = Forecast_["+i+"].datetime.substr(Forecast_["+i+"].datetime.indexOf('T') + 1, 5)"); // heure
}
humidite_h0 = Forecast_hour_now.rh2m; // humidité à 2m du sol
tsol10 = Forecast_hour_now.tsoil1; // température du sol entre 0 et 10cm
tsol40 = Forecast_hour_now.tsoil2; // température du sol entre 10 et 40cm
iso0 = Forecast_hour_now.iso0;
rafaleorage = Forecast_hour_now.gustx;
if ( status_jour_nuit == "nuit") // on est avant le levé et après le couché on va ajouter une différence entre nuit et jour dans la requête heure
{
if (libelle_temps == "Soleil") {libelle_temps = "Claire"}
libelle_temps = "Nuit " + libelle_temps; // comme requête heure, on ajoute une différence entre nuit et jour
icon_temps = "nuit_" + icon_temps; // comme requête heure, on ajoute une différence entre nuit et jour
}
// on est dans la requête heure et on va construire une liste pour afficher les prévisions des prochaines heures, à utiliser avec le widget List de audio dans DS
Forecast_xhours = new Array();
Forecast_xhours[1] = new Array();
// entête de la liste pour avoir les labels des données restituées
Forecast_xhours[1][0] = 0;
Forecast_xhours[1][1] = " Heure - T° - % humidité - Vent - Tendance" ; // format du contenu de la liste
// construction des données par jour
for (i = 0; i < Forecast_.length - 1; i++) // on va prendre toutes les heures - attention comme on décale d'un index ligne il faut éviter d'aller trop loin
{
j = i + 1; // la 1ère ligne correspond aux données de l'heure courante, déjà affichées
k = j + 1; // comme la 1ère ligne est réservée aux libéllés on commence à la ligne 2
Forecast_xhours[k] = new Array();
Forecast_xhours[k][0] = j;
datetime_xhours = Forecast_[j].datetime;
Forecast_xhours[k][1] = datetime_xhours.substr(datetime_xhours.indexOf('T') + 1, 5); // on prend juste l'heure et les minutes
Forecast_xhours[k][1] += " - " + Forecast_[j].temp2m + "°c"; // température mini en °c
Forecast_xhours[k][1] += " - " + Forecast_[j].rh2m + "%"; // pluviométrie en %
Forecast_xhours[k][1] += " - " + Forecast_[j].wind10m + "km/h"; // vent en km/h
temp_code_temps = Forecast_[j].weather;
Forecast_xhours[k][1] += " - " + get_temps_text(table_libelle_text_icon[temp_code_temps]); // tendance météo pour cette journée
}
ldprint("libelle_temps: " + libelle_temps); // pour s'assurer que l'on fait fait les bonnes conversions
}
//infos jour
if (Forecast_[0].tmin) { // c'est la requête jour, traitement de ce qui est spécifique à la requête
retour_requete = "jour"
// séquence pour les données spécifiques du jour (day: 0) et qu'on ne stocke que pour le jour
vent10m_j0 = Forecast_[0].wind10m;
rafale10m_j0 = Forecast_[0].gust10m;
dirvent10m_j0 = Forecast_[0].dirwind10m;
dirvent_j0 = translate_dir_vent (Forecast_[0].dirwind10m);
cumulpluie_j0 = Forecast_[0].rr10;
cumulpluiemax_j0 = Forecast_[0].rr1;
probapluie_j0 = Forecast_[0].probarain;
probagel_j0 = Forecast_[0].probafrost;
probabrouillard_j0 = Forecast_[0].probafog;
probavent70_j0 = Forecast_[0].probawind70;
probavent100_j0 = Forecast_[0].probawind100;
rafalevent_j0 = Forecast_[0].gustx;
ensoleillement_j0 = Forecast_[0].sun_hours;
cumulevaporation_j0 = Forecast_[0].etp;
// séquence pour les données qu'on va stocker individuellement pour les 4 jours (day:0 à day:3)
for (i = 0; i < 4; i++)
{
// boucle pour les données des jours 0 à 3
eval("tempmin_j" + i + "= Forecast_["+i+"].tmin"); // température minimum du jour
eval("tempmax_j" + i + "= Forecast_["+i+"].tmax"); // température maximum du jour
eval("probapluie_j" + i + "= Forecast_["+i+"].probarain"); // pluie en % du jour
eval("vent_j" + i + "= Forecast_["+i+"].wind10m"); // vent du jour
eval("cumulpluie_j" + i + "= Forecast_["+i+"].rr10"); // pluie en mm du jour
eval("jour_j" + i + "= Forecast_["+i+"].datetime.substr(8, 2) + '-' + Forecast_["+i+"].datetime.substr(5, 2) + '-' + Forecast_["+i+"].datetime.substr(0, 4)"); // reconstruction de la date
temp_code_temps = Forecast_[i].weather; // variable temporaire à chaque itération change de valeur
temp_text_temps = get_temps_text(table_libelle_text_icon[temp_code_temps]);
temp_icon_temps = get_temps_icon(table_libelle_text_icon[temp_code_temps]);
eval("libelle_temps_j" + i + "= temp_text_temps"); // tendance météo ce jour
eval("icon_temps_j" + i + "= temp_icon_temps"); // image pour ce jour
}
// on est dans la requête jour et on va construire une liste pour afficher les prévisions des prochains jours, à utiliser avec le widget List de audio dans DS
Forecast_xdays = new Array();
Forecast_xdays[1] = new Array();
// entête de la liste pour avoir les labels des données restituées
Forecast_xdays[1][0] = 0;
Forecast_xdays[1][1] = "Date - T° min - T° max - mm Pluie - % Pluie - Vent - Tendance" ; // format du contenu de la liste
// construction des données par jour
for (i = 0; i < Forecast_.length - 1; i++) // on va prendre tous les jours - attention comme on décale d'un index ligne il faut éviter d'aller trop loin
{
j = i + 1; // la 1ère ligne correspond aux données du jour, déjà affichée
k = j + 1; // comme la 1ère ligne est réservée aux libéllés on commence à la ligne 2
Forecast_xdays[k] = new Array();
Forecast_xdays[k][0] = j;
datetime_xdays = Forecast_[j].datetime;
Forecast_xdays[k][1] = datetime_xdays.substr(8, 2) + "-" + datetime_xdays.substr(5, 2) + "-" + datetime_xdays.substr(0, 4); // reconstruction de la date
Forecast_xdays[k][1] += " - " + Forecast_[j].tmin + "°c"; // température mini en °c
Forecast_xdays[k][1] += " - " + Forecast_[j].tmax + "°c" // température max en °c
Forecast_xdays[k][1] += " - " + Forecast_[j].rr10 + "mm"; // pluviométrie en mm
Forecast_xdays[k][1] += " - " + Forecast_[j].probarain + "%"; // pluviométrie en %
Forecast_xdays[k][1] += " - " + Forecast_[j].wind10m + "km/h"; // vent en km/h
temp_code_temps = Forecast_[j].weather;
Forecast_xdays[k][1] += " - " + get_temps_text(table_libelle_text_icon[temp_code_temps]); // tendance météo pour cette journée
}
}
}
else { // on est entre 00:00 et 59:59 et il n'y a pas de retour sur h+1 et h+2 , alors on construit avec des valeurs ""
retour_requete = "heure";
temperature_h1 = ""; // température h+1 à 2m du sol
temperature_h2 = ""; // température h+2 à 2m du sol
temperature_h3 = ""; // température h+3 à 2m du sol
// on est dans la requête heure et on va construire une liste vide
Forecast_xhours = new Array();
Forecast_xhours[1] = new Array();
// entête de la liste pour avoir les labels des données restituées
Forecast_xhours[1][0] = 0;
Forecast_xhours[1][1] = " Heure - T° - % humidité - Vent - Tendance" ; // format du contenu de la liste
}