Dgille Posté(e) le 12 janvier 2019 Signaler Posté(e) le 12 janvier 2019 Bonjour à tous, voici une scène et un VD sans prétention pour accéder aux données météo de WeatherBit.io. Le paramétrage est simplissime, créer un compte sur le site et récupérer votre APIkey. En l'absence du code de la ville, la scène récupère les données de localisation de la HC2. Sinon, vous pouvez télécharger sur le site la liste des villes supportées et indiquer directement le code ville dans la variable WBCityid La scène est en manuel par défaut. Elle stocke bêtement la réponse json dans une VG. La langue de description de la météo est paramétrable (cf le site), mis en français par défaut. Deux solutions pour l'exploiter: - Vous la lancez via GEA et exploitez directement le JSON - Plus simple, vous installez le VD de ce post qui va lancer la scéne à une fréquence à définir (entre 2 et 45mn) et afficher les principales informations (vous pouvez compléter si nécessaire) pour exploitation par d'autres scènes/VD. Perso, je n'exploite que la température extérieure, mais tout est possible. Voici le code de la scène: --[[ %% properties %% events %% globals --]] -- DGILLE - V1 -- Quelques paramétres à fixer WBApikey = "xxxxxxxxxxxxxxx" -- API KEy Wetaher bit WBCityid ="" -- Code ville, sinon vide pour latitude longitude de la HC2 WBlang = "fr" -- un peu de code de Steven (Merci !!) VG={getValue=function(self,b)return fibaro:getGlobalValue(b)end,setValue=function(self,b,c)fibaro:setGlobal(b,c)end,getDateModification=function(self,b)return os.date("*t",fibaro:getGlobalModificationTime(b))end,supprimer=function(self,b)api.delete("/globalVariables/"..b)end,modifier=function(self,b,c,d)local e={}e.value=tostring(c)e.isEnum=false;if type(d)~="nil"then e.isEnum=true;e.enumValues=d end;api.put("/globalVariables/"..b,e)end,ajouter=function(self,b,c,d)local f=0;if type(d)~="nil"then f=1 end;api.post("/globalVariables",{name=b,isEnum=f})self:modifier(b,c,d)end,traiter=function(self,b,c,d)if fibaro:getGlobalValue(b)==nil then self:ajouter(b,c,d)elseif type(d)=="nil"then self:setValue(b,c)else self:modifier(b,c,d)end end,getInfo=function(self,b)return api.get("/globalVariables/"..b)end} function getResponseData(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..") if (response.status==200) then VG:setValue("weatherbit",response.data) 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 -- au boulot local url fibaro:debug ("Lancement de la scéne") VG:traiter("weatherbit", "") -- construction de l'URL if (WBCityid=="" )then fibaro:debug ("Pas de code ville - Utilisation de la localisation de la HC2") local loc=api.get("/settings/location") url = "https://api.weatherbit.io/v2.0/current?lat="..loc.latitude.."&lon="..loc.longitude.."&lang="..WBlang.."&key="..WBApikey else fibaro:debug ("Utilisation du code ville fourni.") url = "https://api.weatherbit.io/v2.0/current?city_id="..WBCityid.."&lang="..WBlang.."&key="..WBApikey end fibaro:debug ("appel de l'URL :"..url) getResponseData(url, "GET", nil) Pour paramétrer la VD, il suffit de lui indiquer dans la main loop l'ID de la scène créée précédemment. Voila, tout cela à été codé en 2h suite au mauvais fonctionnement des plugins YR Weather et Yahoo et fonctionne sans problème depuis plusieurs jours. Enjoy. WeatherBit.vfib 4
ebouilleur Posté(e) le 30 janvier 2019 Signaler Posté(e) le 30 janvier 2019 Salut, Merci pour ton module et ton code que je viens d'importer et de tester. ça fonctionne Par contre, comment fais-tu pour utiliser/connaitre le température dans une autre scène? c'est la variable "weatherbit"? si on veut récupéré l'état du ciel (genre ensoleillé) comment faire? Merci
Dgille Posté(e) le 30 janvier 2019 Auteur Signaler Posté(e) le 30 janvier 2019 Hello, facile, tu importes mon vd, tu repères son ID, ensuite, dans ta scène : fibaro:getValue( id_du_vd , "ui.temp.value") pour la température et ui.desc.value pour la description en clair ! enjoy!
ebouilleur Posté(e) le 30 janvier 2019 Signaler Posté(e) le 30 janvier 2019 Ok je vois, je passerai en mode LUA alors ^^ (j'ai tendance a faire en bloc, plus rapide et sans prise de tête) Merci en tout cas, mes volets font pouvoir de nouveaux s'ouvrir tout seul quand il fera beau dehors :)
Sakkhho Posté(e) le 17 mars 2019 Signaler Posté(e) le 17 mars 2019 Je ne vois pas les previsions de precipitations en "mm" avec cette api ? j'ai loupé qq chose ?
Dgille Posté(e) le 17 mars 2019 Auteur Signaler Posté(e) le 17 mars 2019 Bonjour, la scene fournie interrroge l api current, le champ precip donne les precipitations observėes. Pour obtenir les precipitations a venir, il faut utiliser l’api forecast, donc scene a modifier en conséquence.
ebouilleur Posté(e) le 17 mars 2019 Signaler Posté(e) le 17 mars 2019 Par contre Dgille, je ne sais pas si tu as constaté ou pas mais ça arrive que pendant 2-3 jours les info ne se mettent pas à jour... et je ne comprend pas pourquoi. La scène fonction bien (j'ai même rajouter des debug partout) et sur le VD, j'ai rajouter un champ avec la date de mise à jour (pour le VD du coup) et encore ce matin, il me disait que les info datait du 14/03 à 7h.. As-tu ce soucis? merci
Dgille Posté(e) le 17 mars 2019 Auteur Signaler Posté(e) le 17 mars 2019 Cela m est arrivé une fois, et relancer le VD regle le problème. J ai eu un pb d adsl en meme temps, je pense donc que c est un bug de la hc2 autour des VD. Tu peux mettre le watchdog de Lazer pour tenter de corriger.
Messages recommandés