Aller au contenu

couillerot

Membres confirmés
  • Compteur de contenus

    1 511
  • Inscription

  • Dernière visite

  • Jours gagnés

    69

Messages posté(e)s par couillerot

  1. existe t-il un moyen (surement d'ailleurs) pour récupérer une série de variable ?

     

    pour expliquer grossièrement mon propos :

     

    for i = 1, 11 do
      variable[i] = tonumber(self:getVariable("variable"[i]))
    end

    Stef

  2. WeatherBit.fqaCe QA récupère les données météo issues du site WeatherBit.io

    Du fait que ce QA est du type weather provider, vous pouvez le substituer à la source météo par défaut de la box YR Weather (panneau General / Principal / Capteurs Principaux / source de la météo)

    La mise à jour des données se fait toutes les 5 minutes.

     

    Au niveau de la température et de l'humidité, vous pouvez dorénavant soit récupérer les données de WeatherBit, soit issues de vos propres modules.

    Dans le cas ou vous souhaitez obtenir les valeurs (température ou/et humidité) via vos propres modules, il suffit de renseigner dans le tableau des variables l'id de votre (vos) module(s) de température et/ou humidité ("temp_id" / "humidity_id"). Si vous renseignez la valeur "0" ce seront les données de WeatherBit qui seront récoltées.

     

    Image.jpg.0ac3f935e00c03ae5a6e13d669c43c5d.jpg

     

    Installation

    Il vous faut d’abord obtenir une « clé » (key) que vous obtiendrez en vous inscrivant gratuitement sur le site Weatherbit.io

    Renseignez alors le key_id dans le panneau des variables.

     

    Pour l’installation des icons, il suffit de suivre l’ordre pré établi (de id_icon1 à id_icon11) selon la représentation ci-dessous :

     

    639815976_prsentationicons.jpg.9cd7da4940fa4d7fbd58edfc3c6f5237.jpg

     

    Pour récupérer l’id d’un icon :

    après avoir téléversé l’icon, vous faites un clic droit dessus et sélectionner « Ouvrir l’image dans un nouvel onglet ». Dans l’onglet, il devrait s’afficher une phrase du style : « User(id_icon).png

    Bien noter pour chaque icon son id correspondant pour pouvoir le renseigner par la suite dans le tableau des variables…

    ----------------------------------------------------------------------------------
    
    -----------------------------------------------------------------------------------
    
    -------------------- QA WEATHERBIT / com.fibaro.weather ---------------------------
    
    --------------- Stephane Couillerot 2021 pour domotique-fibaro.fr -----------------
    
    -----------------------------------------------------------------------------------
    
    -----------------------------------------------------------------------------------
    
    ------- indiquez dans le panneau des variables votre latitude / longitude ---------
    
    -----------et votre key id qui vous est attribuéz en vous inscrivant --------------
    
    ---------------------gratuitement sur le site WeatherBit.io -----------------------
    
    -----------------------------------------------------------------------------------
    
    -----------------------------------------------------------------------------------
    
    ----
    
    function QuickApp:onInit()
    
         self:loop()
    
    end
    
    
    
    function QuickApp:loop()
    
    lat = self:getVariable("latitude")
    
    lon = self:getVariable("longitude")
    
    key_id = self:getVariable("key_id")
    
    Var_Heure = os.date("%d.%m.%Y à %H:%M")
    
    lev = api.get("/settings/info").sunriseHour
    
    lever = string.gsub(lev, ":", "h")
    
    couch = api.get("/settings/info").sunsetHour
    
    coucher = string.gsub(couch, ":", "h")
    
    local http = net.HTTPClient()
    
    --https://api.weatherbit.io/v2.0/current?lat=46.91&lon=4.75&lang=fr&key=1b4a660be61e4285bf3a06c4165f7270
    
    http:request("https://api.weatherbit.io/v2.0/current?lat="..lat.."&lon="..lon.."&lang=fr&key="..key_id, {
    
        options = {
    
            method = 'GET'
    
                  },
    
        success = function(response)
    
            if response.status == 200 then
    
                if response.data and response.data ~= "" then
    
                    local jsonTable = json.decode(response.data)
    
                        gfx = jsonTable.data[1].weather.code
    
                        aujourdhui = tostring(os.date("%w", os.time()))
    
                        dat = jsonTable.data[1].ob_time
    
                        codeweather = jsonTable.data[1].weather.code
    
                        jour = string.sub(dat, 9, 10)
    
                        mois = string.sub(dat, 6, 7)
    
                        city = jsonTable.data[1].city_name
    
                        citycode = jsonTable.data[1].country_code
    
                        codeicon = tonumber(gfx)
    
                                           
    
    -----------------------------------------------------------------------------
    
    -------------------- MISE A JOUR ICON COM.FIBARO.WEATHER --------------------  
    
    -----------------------------------------------------------------------------                                  
    
    if codeweather >= tonumber("300") and codeweather <= tonumber("522") then condition = "rain" end
    
    if codeweather >= tonumber("800") and codeweather <= tonumber("801") then condition = "clear" end
    
    if codeweather == tonumber("900") then condition = "unknown" end
    
    if codeweather >= tonumber("600") and codeweather <= tonumber("623") then condition = "snow" end
    
    if codeweather >= tonumber("200") and codeweather <= tonumber("233") then condition = "storm" end
    
    if codeweather >= tonumber("802") and codeweather <= tonumber("804") then condition = "cloudy" end
    
    if codeweather >= tonumber("700") and codeweather <= tonumber("751") then condition = "fog" end
    
    
    
    -----------------------------------------------------------------------------
    
    ---------------------------- MISE A JOUR ICON QA ----------------------------  
    
    -----------------------------------------------------------------------------
    
    
    
    id_icon1 = tonumber(self:getVariable("id_icon1"))
    
        id_icon2 = tonumber(self:getVariable("id_icon2"))
    
           id_icon3 = tonumber(self:getVariable("id_icon3"))
    
                id_icon4 = tonumber(self:getVariable("id_icon4"))
    
                    id_icon5 = tonumber(self:getVariable("id_icon5"))
    
                        id_icon6 = tonumber(self:getVariable("id_icon6"))
    
                            id_icon7 = tonumber(self:getVariable("id_icon7"))
    
                                id_icon8 = tonumber(self:getVariable("id_icon8"))
    
                                    id_icon9 = tonumber(self:getVariable("id_icon9"))
    
                                        id_icon10 = tonumber(self:getVariable("id_icon10"))
    
                                            id_icon11 = tonumber(self:getVariable("id_icon11"))
    
    if codeicon == tonumber("610") then self:updateProperty("deviceIcon", id_icon1) end
    
        if codeicon >= tonumber("803") and codeicon <= tonumber("804") then self:updateProperty("deviceIcon", id_icon2) end
    
            if codeicon >= tonumber("700") and codeicon <= tonumber("751") then self:updateProperty("deviceIcon", id_icon3) end
    
                if codeicon >= tonumber("500") and codeicon <= tonumber("522") then self:updateProperty("deviceIcon", id_icon4) end
    
                    if codeicon >= tonumber("601") and codeicon <= tonumber("623") then self:updateProperty("deviceIcon", id_icon5) end
    
                        if codeicon == tonumber("600") then self:updateProperty("deviceIcon", id_icon6) end
    
                    if codeicon == tonumber("800") then self:updateProperty("deviceIcon", id_icon7) end
    
                if codeicon >= tonumber("801") and codeicon <= tonumber("802") then self:updateProperty("deviceIcon", id_icon8) end
    
            if codeicon >= tonumber("300") and codeicon <= tonumber("302") then self:updateProperty("deviceIcon", id_icon9) end
    
        if codeicon >= tonumber("230") and codeicon <= tonumber("233") then self:updateProperty("deviceIcon", id_icon10) end
    
    if codeicon >= tonumber("200") and codeicon <= tonumber("202") then self:updateProperty("deviceIcon", id_icon11) end
    
    
    
    
    ------------------------------------------------------------------------------              
    
    -------------------------- CONSTRUCTION DES TABLES ---------------------------
    
    ------------------------------------------------------------------------------
    
    week = {["0"] = "DIMANCHE", ["1"] = "LUNDI", ["2"] = "MARDI", ["3"] = "MERCREDI", ["4"] = "JEUDI", ["5"] = "VENDREDI", ["6"] = "SAMEDI"}
    
    month = {["01"] = "JANVIER", ["02"] = "FEVRIER", ["03"] = "MARS", ["04"] = "AVRIL", ["05"] = "MAI", ["06"] = "JUIN", ["07"] = "JUILLET", ["08"] = "AOUT", ["09"] = "SEPTEMBRE", ["10"] = "OCTOBRE", ["11"] = "NOVEMBRE", ["12"] = "DECEMBRE"}
    
    
    
    ------------------------------------------
    
    ----- RECUPERATION DES DONNEES METEO -----
    
    ------------------------------------------
    
    
    
    ---- Récupération des 2 varaibles température / Humidity ----
    
    tempid = self:getVariable("temp_id")
    
    humid = self:getVariable("humidity_id")
    
    ---- Température ----
    
    if tostring(tempid) > tostring("0") then
    
            temp = fibaro.getValue(tonumber(tempid), "value")
    
            roomnametemp = fibaro.getRoomNameByDeviceID(tonumber(tempid))
    
        else
    
            temp = jsonTable.data[1].app_temp
    
            roomnametemp = tostring("WeatherBit")
    
    end
    
    ---- Humidité ----
    
    if tostring(humid) > tostring("0") then
    
            humidite = fibaro.getValue(tonumber(humid), "value")
    
            roomnamehum = fibaro.getRoomNameByDeviceID(tonumber(humid))
    
        else
    
            humidite = jsonTable.data[1].rh
    
            roomnamehum = tostring("WeatherBit")
    
    end
    
    ---- Vent ----
    
    win = jsonTable.data[1].wind_spd
    
    winder = tonumber(win) * 3.6
    
    windspeed = string.format("%.1f", tostring(winder))
    
    ---- Divers ----
    
    descript = jsonTable.data[1].weather.description
    
    precip = jsonTable.data[1].precip
    
    snow = jsonTable.data[1].snow
    
    winddir = jsonTable.data[1].wind_cdir
    
    uv = jsonTable.data[1].uv
    
    pression = jsonTable.data[1].pres
    
    rosee = jsonTable.data[1].dewpt
    
    
    
    local conditionCodes = {
    
            unknown = 3200,
    
            clear = 32,
    
            rain = 40,
    
            snow = 38,
    
            storm = 666,
    
            cloudy = 30,
    
            fog = 20,
    
        }
    
    
    
    local conditionCode = conditionCodes[condition]
    
    if conditionCode then
    
            self:updateProperty("ConditionCode", conditionCode)
    
            self:updateProperty("WeatherCondition", condition)
    
            self:updateProperty("Temperature", tonumber(temp))
    
            self:updateProperty("Wind", tonumber(windspeed))
    
            self:updateProperty("Humidity", tonumber(humidite))
    
    end
    
         
    
    ------------------------------------------------------------------------------
    
    --------------------------- CONSTRUCTION DES LABELS --------------------------
    
    ------------------------------------------------------------------------------
    
    self:updateProperty("log", ""..temp.. " °c")
    
    self:updateView("labelCity", "text", "METEO DU "..week[tostring(aujourdhui)].." "..jour.. " "..month[mois].." "..os.date("%Y"))
    
    self:updateView("label1", "text", descript.."\r\rTempérature : "..temp.. "°c\r\rHumidité relative : "..humidite.." %\rPluie : "..string.format("%.1f", precip).." mm | Neige : "..string.format("%.1f", snow).." mm/h\rVent : "..windspeed.." km/h ("..winddir..")\rIndex UV (0-11+) : "..string.format("%.1f", uv).."\rPression atmosphérique : "..string.format("%.0f", pression).." mb\rPoint de rosée : "..rosee.." °c\rLever du soleil : "..lever.."\rCoucher du soleil : "..coucher)
    
    self:updateView("labelinfos", "text", "Source température : "..roomnametemp.. "\rSource humidité : "..roomnamehum)
    
    self:updateView("labelMAJ", "text", "Station de "..city.." ("..citycode..") | MAJ le "..Var_Heure)
    
            else
    
                fibaro:debug("Error : empty response data")
    
                end
    
            else
    
                fibaro:debug("Error : status=" .. tostring(response.status))
    
        end
    
    end,
    
                error = function(err)
    
                fibaro:debug("Error : " .. err)
    
        end
    
    })    
    
                fibaro.setTimeout(1000 * 60 * 5, function() -- MAJ 5 minutes
    
            self:loop()
    
        end)
    
    end



     

     

    Version 1.1

    - pour la température et l'humidité, ce sont soient les données de Weatherbit soient les valeurs de vos propres modules.

    - changement de l'icon selon les conditions météo.

    - indication de la source de la temp et de l'humidité ("nom de la pièce"  ou WeatherBit)

     

    Version 1.2

    - QA Reconnu comme weather provider

    - récupération auto des coordonnées latitude et longitude

    - Vérification que les id des modules de température et/ou Humidité appartiennent aux types appropriés

     

    Version 2.0

    Voir message de @jojo :

     

    WeatherBit.fqa

     

    WeatherBit.fqa

     

     

    Bonne installation !

     

    Stef

     

     

     

     

     

    Icon1.png.9095ea486804eba5b84ef78ac38bed88.pngIcon2.png.36279e375b31924cd8c3c2ace78ba95d.pngIcon3.png.908d5997d4756911f2d56f107e68e6cb.pngIcon4.png.f305c179ee006da6ed0e673d17f4763f.pngIcon5.png.e19741bb3c2ad143b52686961831ae42.pngIcon6.png.a0a58b42d295854cf7853ea342702f5c.pngIcon7.png.489a62ac33f06436740abbbd30d0d6e1.pngIcon8.png.a2551268eb9632fb74fde3491610f5da.pngIcon9.png.96212d3fd9f23c42e665bd851dc15e2f.pngIcon10.png.7d9b08d1f556b86b1a79eec9d080c59a.pngIcon11.png.00edc83a7bcde906a855aa2669095190.png

     

    icon_1.png.1f30ef6f0dcc5d211ac70572ec1aa652.pngicon_2_bis.png.81be1cf62fb4ced87bb9ab3d29eadbf2.pngicon_3.png.55a324076a402f202784bba286953e3b.pngicon_4.png.b73079691cd31c200fbeb679d03798cb.pngicon_5.png.0105b37ed7f7b5ee9748cc169ece0aff.pngicon_6.png.bda40e61278a6af09a79eea43d8b0a96.pngicon_7.png.d07bc425715af54f7258c54feb81e4d9.pngicon_8.png.e800a00a1d63fa53033a19eca3aafd77.pngicon_9.png.4b2c48d25f750018b6027165039070c8.pngicon_10.png.6c0c87f964ba7ecc19c623b4f5f6b707.pngicon_11.png.ada38da4faad5903a17b3109e3847808.png

    • Like 2
  3. Ce QA récupère les données de prévisions météo sur 5 jours du site WeatherBit.

    Mise a jour du QA toutes les 2 heures.

     

     

    Image.thumb.jpg.cbdd428f3d58ef103516df2e9fd1e22e.jpg

     

    Installation

    Il vous faut d’abord obtenir une « clé » (key) que vous obtiendrez en vous inscrivant gratuitement sur le site Weatherbit.io

    renseignez alors la variables key_id dans le panneau.

     

    Pour l’installation des icons, il suffit de suivre l’ordre pré établi (de id_icon1 à id_icon11) selon la représentation ci-dessous :

     

    639815976_prsentationicons.jpg.9cd7da4940fa4d7fbd58edfc3c6f5237.jpg

     

    Pour récupérer l’id d’un icon :

    après avoir téléversé l’icon, vous faites un clic droit dessus et sélectionner « Ouvrir l’image dans un nouvel onglet ». Dans l’onglet, il devrait s’afficher une phrase du style : « User(id_icon).png

    Bien noter pour chaque icon son id correspondant pour pouvoir le renseigner par la suite dans le tableau des variables…

     

    Bonne installation !

     

    Version 1.2

    - Récupération auto des coordonnées de latitude et longitude de la box pour déterminer votre localité.

     

    Previsions_Meteo.fqa

     

     

     

    Icon1.png.655d1106973d562241cd34b91896cf84.pngIcon2.png.c6ac5ca09f44e6e91b37908de3547550.pngIcon3.png.22721b5836295c5bed498de2db47d675.pngIcon4.png.fb26b682c8833e67837e63989eb6c1eb.pngIcon5.png.cc3a078ae104d7b82c39459043a454cc.pngIcon6.png.2258b33b29d57f6bb58fad0b52c5cab5.pngIcon7.png.23c9c525353e1402631e7f291ab70f7c.pngIcon8.png.48eb5199e5c9436d3ef12b3740c67aa5.pngIcon9.png.ac2006dcc0b2966aba2675069ddeeaaf.pngIcon10.png.bfae4b82f635529a56af4e9e95707325.pngIcon11.png.28768882687ad293a5c023eeec17bcb9.png

     

    • Like 4
  4. il me semble (comme la HC2) que c'est sur l'appli mobile que les balises HTML ne fonctionnent pas.

     

    j'ai laissé tomber d'inclure le QA prévisions météo type Weather : pas assez pertinent car le QA ne se met à jour que toutes les 24h... (auparavant WeatherBit permettait une maj toute les 3 heures sur 5 jours).

    je peaufine le QA pour qu'il soit accessible et paramétrable facilement au plus grand nombre.

     

    meteo.thumb.jpg.c2df2208dc873754af1108ecf716021e.jpg

     

     

     

    Stef

  5. en fait dans mon QA Weatherbit, je récupère le numéro du jour (de dimanche à samedi / de 0 à 6) via os.date("%w") et vu qu'il n'existe pas dans la console, je soupçonne qu'il récupère l'info dans l'horloge... et vu que celle-ci est désynchronisée et bien le changement de jour ne s'opère pas à l'heure dite. (avec quelquefois plusieurs heures de décalage)

     

    Stef

  6. Merci Lazer pour ton aide car j'ai bientôt fini mon QA WeatherBit avec gestion auto de l'arrosage :74:

     

    il me reste encore à fignoler quelques bricoles et surtout l'intégrer en tant que fibaro.weather

     

    Stef

     

     

     

    eee40" comme valeur à "data"

    weatherbit_wall.jpg

    • Like 1
  7. {"status_code":429,"status_message":"Your request count (513) is over the allowed limit of 500 per day - Upgrade your key, or retry after 477.41666666667 minutes"}

     

    rebelotte ! :2:

     

    Stef

    • Haha 1
  8. finalement, sur le debug j'arrive obtenir quelquechose :

    debug.jpg.26db77603c7f500892283a3537a3d0e6.jpg

     

    cependant, je souhaite aller justement dans la table data / table 

     

    dans le tableau des variables, j'arrive bien à récupérer quelques donnée mais la table data est vide...

     

    debug.thumb.jpg.01d60b8aefeca28d92e4e94eea1fb499.jpg

     

    une piste, peut-être... je sèche !

     

    voici le morceau de code :

     

    self.http:request("http://api.weatherbit.io/v2.0/forecast/daily?city_id=3027642&lang=fr&key=e1fc285d7350412c80504c0670faba05", {
       	    success = function(response)
            if response.status == 200 then
                if response.data and response.data ~= "" then
                  
         		    local jsonTable = json.decode(response.data)
                   	local k, v
    				for k, v in pairs(jsonTable) do
                    	print("key = " .. k .. " - type(v) = " .. type(v))
                        self:setVariable(k,v)
                    end

     

    Stef

     

  9. d'après le début de ton code, je vois que tu allumes, tu l'éteints après 6s et de suite tu l'allumes de nouveau. Pour faire simplement du On/Off, tu devrais déjà supprimer ton 2ème fibaro.call(171,"turnOn") pour qu'il reste en position Off. 

     

    Stef

    • Like 1
  10. ne serait pas simplement un problème lié aux variables locales qui ne peuvent être appelées que dans dans leur propre QA (sans faire intervenir l'artillerie lourde), à contrario des VG ?

     

    Stef

×
×
  • Créer...