Capteurs météo yahoo en lua

bonjour,
Pour celles et ceux qui n’ont pas de sondes météo physiques et qui ne souhaitent pas utiliser celles fournies par forecast.io ou weather underground
voici un script permettant de récupérer les information de la nouvelle api de YAHOO.
L’API YAHOO nécessite un code WOEID. Pour trouver le code WOEID de votre lieu d’habitation, rendez vous sur : http://woeid.rosselliot.co.nz/
Malheureusement cette api ne donne pas les unités métriques (ou du moins je n’ai pas trouvé comment) il m’a donc fallu convertir les Fahrenheit et les miles (si vous savez comment formuler la requête pour des unités métriques je suis preneur)
temp yahoo

pour la création du capteur virtuel dans domoticz =>réglages=>matériel=>créer un capteur virtuel=> Temp+Humidité+Barometre
thb

D’autres informations sont disponible (notamment les infos de vent)
log yahoo
Je vous laisse la main pour modifier le script afin de les ajouter dans domoticz.
N’hésitez pas à nous décrire comment.

--[[
name : script_time_yahoo.lua
auteur : papoo
version : 1.00
maj : 10/08/2016
date : 10/08/2016
 Ce script a pour but de remonter les informations météo du site https://www.yahoo.com/news/weather/ sur domoticz 
]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local WOEID='608140'  --L'API yahoo nécessite un code WOEID. Pour trouver le code WOEID de votre lieu d'habitation, rendez vous sur : http://woeid.rosselliot.co.nz/

local dz_temp_hu_pre = 739   -- renseigner l'id du device Température Humidité et Pression atmosphérique associé si souhaité, sinon nil
local debugging = true     -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir

--------------------------------------------
----------- Fin variables à éditer ---------
-------------------------------------------- 
local indexArray=0   

--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
function voir_les_logs (s)
    if (debugging) then 
      if s ~= nil then
        print ("".. s .."");
      else
      print ("aucune valeur affichable");
      end
    end
end   

function round(value, digits)
  local precision = 10^digits
  return (value >= 0) and
      (math.floor(value * precision + 0.5) / precision) or
      (math.ceil(value * precision - 0.5) / precision)
end

function fahrenheit_to_celsius(fahrenheit, digits) 
    if fahrenheit ~= nil then
   return round((5/9) * (fahrenheit - 32), digits or 2)
   else
   print ("pas de fahrenheit a convertir en celsius");
   end
end
function miles_to_km(miles, digits) 
    if miles ~= nil then
   return round((miles * 1.609344), digits or 2)
   else
   print ("pas de miles a convertir en km");
   end
end

--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------

commandArray = {}
now=os.date("*t")

if now.min % 5 == 0 then  -- exécution toutes les 5 minutes
voir_les_logs("script_time_yahoo.lua",debugging)


      local fname ="/tmp/yahoo.xml"
      os.execute("curl 'http://query.yahooapis.com/v1/public/yql?q=select+*+from+weather.forecast+where+woeid=".. WOEID .."&format=xml' > ".. fname .." && chmod 777 " .. fname)
      
      
      -- voir_les_logs("Fichier local : " ..fname,debugging)
      local f = io.open(fname, "r")

          if f == nil then
          print("Error opening file '" .. fname .. "'.")
          os.exit(1)
          end
 
      local xml = f:read("*all")
               f:close()


   for instance in xml:gmatch("(.-)") do 
   
   local distance_unit, pressure_unit, speed_unit, temp_unit = instance:match('')
   local city, country, region = instance:match('')
   local wind_chill, wind_direction, wind_speed = instance:match('')
   local humidity, pressure= instance:match('')
   local temp = instance:match('
		
			

Laisser un commentaire