Aller au contenu

Messages recommandés

Posté(e)

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

  • Like 4
  • 3 semaines après...
Posté(e)

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

Posté(e)

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!

Posté(e)

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 :)

  • 1 mois après...
Posté(e)

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.

 

Posté(e)

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

Posté(e)

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.

 

×
×
  • Créer...