Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'météo'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Annonces et suggestions
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Autres Solutions Domotiques
  • La HC2 et ses périphériques
    • La Home Center pour les nuls
    • Home Center 2 & Lite
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Alarme & Vidéo-surveillance
    • Multimédia
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets...)
    • Eclairage
    • Applications Smartphones et Tablettes
    • English Section
  • Les objets connectés
    • Les Assistants Vocaux
  • Fibaro's Awards
    • Membre du mois
    • Jeux concours & Cadeaux
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

1 résultat trouvé

  1. Dragoniacs

    Infos Météo avec Weatherbit

    Bonjour à tous, Suite à la disparition de l'API Wunderground, je me suis permise de reprendre en partie le YAMS de @sebcbien, en utilisant également le travail de @Dgille, afin de nous concocter un nouveau VD de gestion météo. Cela surtout pour me permettre de faire de nouveau parler mon lapin Codes sources : https://www.domotique-fibaro.fr/topic/6446-yams-wu-yet-another-meteo-station-wunderground-version/ https://www.domotique-fibaro.fr/topic/13120-météo-avec-weatherbitio/ Prérequis Ouvrir un compte sur le site https://www.weatherbit.io/ Dans vos paramètres de compte, vous devrez récupérer votre clé pour pourvoir utiliser les API Installation Importez le VD. WeatherBit_V3_0.vfib Créez une nouvelle scène, et collez le code suivant : --[[ %% autostart %% properties %% globals --]] ------------------------------------------------------------------------------- -- SCENE REALISEE PAR DRAGONIACS POUR www.domotique-fibaro.fr -- UTILISATION LIBRE DE DROITS -- MERCI A Dgille & Sebcbien POUR LES CODES DONT JE ME SUIS FORTEMENT INSPIREE -- VERSION 3.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- PARAMETRES DE L UTILISATEUR ------------------------------------------------------------------------------- WBApikey = "xxxxxxxxxxxxxxxxxxxxx" -- API Key WeatherBit WBCityid = "" -- Code ville, sinon vide pour latitude longitude de la HC2 WBlang = "fr" WDelai = 30 -- Période d'actualisation en minute (minimum 2, max 45) WD_VD = 876 -- Préciser l'ID du VD WeatherBit WPushMatin = "07:00" -- Heure d'envoi des infos le matin, laisser vide si pas de push WPushSoir = "17:00" -- Heure d'envoie des infos le soir, laisser vide si pas de push WPushDemain = "21:00" -- Heure d'envoi des infos du lendemain, laisser vide si pas de push WPush_type = {"SMS","Push","eMail"} -- Préciser le type de notification souhaitée WPush_Email = 2 -- Préciser le numéro de user qui doit recevoir les email WPush_Phone = 592 -- Préciser le numéro du téléphone qui doit recevoir les push WPush_VG = "Pushover" -- Préciser nom de la variable globale utilisée dans le VD de SMS WPush_VD = "" --Préciser l'ID du VD de SMS, ou laisser vide si pas besoin WPush_VD_button = "" --Préciser le numéro du bouton d'action du VD de SMS, ou laisser vide si pas besoin WPush_Prio = "0" --Si vous utiliser le VD Pushover avec gestion des priorités, préciser le niveau de priorité choisi ------------------------------------------------------------------------------- -- FIN DES PARAMETRES UTILISATEUR ------------------------------------------------------------------------------- -- On évite la surcharge if fibaro:countScenes() > 1 then fibaro:abort() end -- Déclaration des variables globales function Declaration_VG(variable) if fibaro:getGlobalValue(variable) == nil then local created = false local data = {name = variable, value = tostring("{}")} response, status = api.post("/globalVariables", data) -- If creation successful, then return created=true if (status == 201) then fibaro:debug("Global variable " .. variable .. " created") created = true else fibaro:debug("Failed to create global variable " .. variable .. "!"); end end end -- Traductions des jours function Jours(J) if J > 6 then J = 0 end local Nom_jour = {"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"} return Nom_jour[J+1] end -- Gestion des arrondis pour l'afichage & le speak function round(num, numDecimalPlaces) local mult = 10^(numDecimalPlaces or 0) if tonumber(num) ~= nil then num = tonumber(num) else num = 0 end return math.floor(num * mult + 0.5) / mult end -- Mise à jour des tableaux API function getResponseData(Vglobal, url, method, body, func) local http = net.HTTPClient() http:request(url, { options = { method = method, headers = { ["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/64.0", ["Content-Type"] = "application/json", }, data = body }, success = function(response) fibaro:debug(" Analyse de la réponse du site..") fibaro:sleep(10*1000) if (response.status==200) then fibaro:setGlobal(Vglobal,response.data) fibaro:debug("Mise à jour réussie")-- : .. "..fibaro:getGlobalValue(Vglobal)) VD_Update() else fibaro:debug ("Erreur de récupération des données :"..response.status) fibaro:abort() end end, error = function(err) fibaro:debug("Erreur.."..response.status) fibaro:abort() end, }) end -- Boucle principale function Update() -- Construction de l'URL local url_today, url_tomorrow if (WBCityid=="" )then fibaro:debug ("Pas de code ville - Utilisation de la localisation de la HC2") local loc=api.get("/settings/location") url_today = "https://api.weatherbit.io/v2.0/current?lat="..loc.latitude.."&lon="..loc.longitude.."&lang="..WBlang.."&key="..WBApikey url_tomorrow = "https://api.weatherbit.io/v2.0/forecast/daily?lat="..loc.latitude.."&lon="..loc.longitude.."&lang="..WBlang.."&key="..WBApikey else fibaro:debug ("Utilisation du code ville fourni.") url_today = "https://api.weatherbit.io/v2.0/current?city_id="..WBCityid.."&lang="..WBlang.."&key="..WBApikey url_tomorrow = "https://api.weatherbit.io/v2.0/forecast/daily?city_id="..WBCityid.."&lang="..WBlang.."&key="..WBApikey end fibaro:debug ("Envoie de la requête URL vers WeatherBit") fibaro:debug ("Appel de l'URL du jour...") getResponseData("weatherbit_today",url_today, "GET", nil) fibaro:debug ("Appel de l'URL des prévisions...") getResponseData("weatherbit_tomorrow",url_tomorrow, "GET", nil) fibaro:sleep(10*1000) setTimeout(function() Update() end,WDelai*60*1000 -13*1000) end function VD_Update() -- Récupération des données et actualisation des labels fibaro:debug ("Actualisation des labels") local today_datas = fibaro:getGlobal("weatherbit_today") local tomorrow_datas = fibaro:getGlobal("weatherbit_tomorrow") if today_datas~="{}" and tomorrow_datas~="{}" then jsonTable0 = json.decode(today_datas) jsonTable1 = json.decode(tomorrow_datas) --Récupération des icones local icone = {[0] = "",[1] = "",[2] = "",[3] = "",} if tonumber(fibaro:getValue(WD_VD,"ui.slideAFF.value"))>50 then icone = { [0] = "<img src=https://www.weatherbit.io/static/img/icons/".. jsonTable0.data[1].weather.icon ..".png height='50' width='50' align=middle>", [1] = "<img src=https://www.weatherbit.io/static/img/icons/".. jsonTable1.data[1].weather.icon ..".png height='50' width='50' align=middle>", [2] = "<img src=https://www.weatherbit.io/static/img/icons/".. jsonTable1.data[2].weather.icon ..".png height='50' width='50' align=middle>", [3] = "<img src=https://www.weatherbit.io/static/img/icons/".. jsonTable1.data[3].weather.icon ..".png height='50' width='50' align=middle>", } end --Mise à jour des labels du VD --fibaro:call(WD_VD,"setProperty","currentIcon","") fibaro:call(WD_VD,"setProperty","ui.lblMAJ.value",icone[0] .. jsonTable0.data[1].city_name .." | ".. jsonTable0.data[1].ob_time) fibaro:call(WD_VD,"setProperty","ui.lblTemp.value","T° Ressentie: ".. jsonTable0.data[1].app_temp .."°C | "..jsonTable0.data[1].rh .."% Humidité") fibaro:call(WD_VD,"setProperty","ui.lblVent.value","Vent: ".. math.floor(jsonTable0.data[1].wind_spd*3.600) .." km/h | Pluie : ".. round(jsonTable0.data[1].precip,0) .." mm/h") fibaro:call(WD_VD,"setProperty","ui.lblCiel.value",icone[1]..Jours(tonumber(os.date("%w"))) .." : ".. jsonTable0.data[1].weather.description) fibaro:call(WD_VD,"setProperty","ui.lblPrevi.value",round(jsonTable1.data[1].min_temp,0) .."°C/".. round(jsonTable1.data[1].max_temp,0) .."°C | ".. round(jsonTable1.data[1].precip,0) .."mm | ".. math.floor(jsonTable1.data[1].wind_spd*3.600) .."Km/h (".. jsonTable1.data[1].wind_cdir ..")") fibaro:call(WD_VD,"setProperty","ui.lblCiel2.value",icone[2]..Jours(tonumber(os.date("%w")+1)) .." : ".. jsonTable1.data[2].weather.description) fibaro:call(WD_VD,"setProperty","ui.lblPrevi2.value",round(jsonTable1.data[2].min_temp,0) .."°C/".. round(jsonTable1.data[2].max_temp,0) .."°C | ".. round(jsonTable1.data[2].precip,0) .."mm | ".. math.floor(jsonTable1.data[2].wind_spd*3.600) .."Km/h (".. jsonTable1.data[2].wind_cdir ..")") fibaro:call(WD_VD,"setProperty","ui.lblCiel3.value",icone[3]..Jours(tonumber(os.date("%w")+2)) .." : ".. jsonTable1.data[3].weather.description) fibaro:call(WD_VD,"setProperty","ui.lblPrevi3.value",round(jsonTable1.data[3].min_temp,0) .."°C/".. round(jsonTable1.data[3].max_temp,0) .."°C | ".. round(jsonTable1.data[3].precip,0) .."mm | ".. math.floor(jsonTable1.data[3].wind_spd*3.600) .."Km/h (".. jsonTable1.data[3].wind_cdir ..")") fibaro:call(WD_VD,"setProperty","ui.lblMAJVD.value","Mise à jour: "..os.date("%d/%m").." "..os.date("%H:%M")) -- Définition des textes audio today_speach = Jours(tonumber(os.date("%w"))) .." : " .. jsonTable1.data[1].weather.description .. ". " .." Température entre ".. round(jsonTable1.data[1].min_temp,0) .." et ".. round(jsonTable1.data[1].max_temp,0) .." degrès. " .." Vent de ".. math.floor(jsonTable1.data[1].wind_spd*3.600) .." kilomètres par heure, en provenance ".. jsonTable1.data[1].wind_cdir_full ..". " .." Précipitations de ".. round(jsonTable1.data[1].precip,0) .. " milimètres. " tomorrow_speach = Jours(tonumber(os.date("%w"))+1) .." : " .. jsonTable1.data[2].weather.description .. ". " .." Température entre ".. round(jsonTable1.data[2].min_temp,0) .." et ".. round(jsonTable1.data[2].max_temp,0) .." degrès. " .." Vent de ".. math.floor(jsonTable1.data[2].wind_spd*3.600) .." kilomètres par heure, en provenance ".. jsonTable1.data[2].wind_cdir_full ..". " .." Précipitations de ".. round(jsonTable1.data[2].precip,0) .. " milimètres. " fibaro:setGlobal("wbit_today_sp",today_speach) fibaro:setGlobal("wbit_tomorrow_sp",tomorrow_speach) else fibaro:debug("Variable vide, on relance la scène") end end -- Gestion des notifications function Notification(message,param) local message = message or "<vide>" for _, notif in ipairs(param) do -- Envoi Push if notif == "Push" and WPush_Phone ~="" then fibaro:debug("Envoi du push") fibaro:call(WPush_Phone,"sendPush",message) -- Envoi Email elseif notif == "eMail" and WPush_Email~="" then fibaro:debug("Envoi du mail") fibaro:call(WPush_Email,"sendEmail","Infos WeatherBit",message) -- Envoi SMS elseif notif == "SMS" and WPush_VG~="" then if WPush_Prio ~="" then message = "&"..WPush_Prio.."&"..message end fibaro:debug("Envoi du SMS") fibaro:setGlobal(WPush_VG, message) if WPush_VD ~="" then fibaro:call(WPush_VD,"pressButton",WPush_VD_button) end end end end -- Boucle des notifications selon l'heure & la demande function envoi_Push() -- Récupération des données et actualisation des labels local today_speach = fibaro:getGlobal("wbit_today_sp") local tomorrow_speach = fibaro:getGlobal("wbit_tomorrow_sp") if WPushMatin ~="" and os.date("%H:%M") == WPushMatin then fibaro:debug("Envoie du push matin") Notification(today_speach,WPush_type) end if WPushSoir ~="" and os.date("%H:%M") == WPushSoir then fibaro:debug("Envoie du push soir") Notification(today_speach,WPush_type) end if WPushDemain ~="" and os.date("%H:%M") == WPushDemain then fibaro:debug("Envoie du push demain") Notification(tomorrow_speach,WPush_type) end setTimeout(function() envoi_Push() end,60*1000) end fibaro:debug("Scene activée") Update() envoi_Push() N'oubliez pas d'inscrire votre clé. Vous pouvez mettre le code de votre ville (à trouver sur le site de WeatherBit), ou laisser le champ vide pour utiliser la postition de la HC2. Les variables globales son créées par la scène. Dans le mainloop du VD, il faut préciser le numéro de la scène et la fréquence de mise à jour. Et sourtout, n'oubliez pas d'utiliser les icônes, gentillement mises à dispo par @Did Nota : pour ceux qui utilisent le VD SONOS, il faut remplacer la ligne qui était utilisée avec le YAMS Wunderground local meteo_day = fibaro:getGlobalValue("Meteo_Day_Speech") par local meteo_day = fibaro:getGlobalValue("wbit_today_sp") Publication de la V2.0 : - Possibilité d'utiliser des notifications - Other minor fixes Publication de la V2.1 - Résolution de divers bugs sur la gestion des variables globales & API - Allègement du code Publication de la V2.2 - Amélioration des textes audio - Optimisation de la scène - Résolution des bugs des précipitations & round Publication de la V2.3 - Correction d'un bug sur les jours (merci Barelle) - Optimisation du code (tout se fait dans la scène) Publication de la V2.4 - Correction des bugs de mise à jour des labels & pushs Publication de la V3.0 - Ajout dans le VD de 2 modes d'affichage : PC ou mobile; pour pouvoir ajouter les icônes météo Si vous avez déjà installé le VD en version V2.0, remplacez simplement le code du main loop par celui ci , ou laissez vide. Ce code n'est pas obligatoire pour assurer le fonctionnement du VD, il ne fait que créer les variables globales et assurer que la scène tourne bien (peut être remplacé par le WATCHDOG en surveillant le message "Mise à jour réussie" toutes les 35 min) Pour la V3.0, il faut ajouter aussi un slider en bas, ayant pour nom: slideAFF ------------------------------------------------------------------------------- -- VD REALISE PAR DRAGONIACS POUR www.domotique-fibaro.fr -- UTILISATION LIBRE DE DROITS -- MERCI A Dgille & Sebcbien POUR LES CODES DONT JE ME SUIS FORTEMENT INSPIREE -- VERSION 3.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- -- PARAMETRAGE UTILISATEUR ------------------------------------------------------------------------------- local WSceneId = 629 -- Id de la scéne pour actualisation de la météo ------------------------------------------------------------------------------- -- FIN DU PARAMETRAGE UTILISATEUR ------------------------------------------------------------------------------- local VD = fibaro:getSelfId() -- Déclaration des variables globales function Declaration_VG(variable,valeur) if fibaro:getGlobalValue(variable) == nil then local created = false local data = {name = variable, value = tostring(valeur)} response, status = api.post("/globalVariables", data) -- If creation successful, then return created=true if (status == 201) then fibaro:debug("Global variable " .. variable .. " created") created = true else fibaro:debug("Failed to create global variable " .. variable .. "!"); end end end Declaration_VG("weatherbit_today","{}") Declaration_VG("weatherbit_tomorrow","{}") Declaration_VG("wbit_today_sp","") Declaration_VG("wbit_tomorrow_sp","") -- Lance la scene d'actualisation if fibaro:countScenes(WSceneId) < 1 then fibaro:debug("Lancement de la scène WeatherBit") fibaro:startScene(WSceneId) end --Changement du mode d'affichage local position = tonumber(fibaro:getValue(VD,"ui.slideAFF.value")) if position ~= 1 and position <= 50 then fibaro:call(VD,"setSlider",11,1) fibaro:debug("Ajout des icones....") fibaro:killScenes(WSceneId) fibaro:startScene(WSceneId) else if position ~= 99 and position > 50 then fibaro:call(VD,"setSlider",11,99) fibaro:debug("Ajout des icones....") fibaro:killScenes(WSceneId) fibaro:startScene(WSceneId) end end
×