Aller au contenu

Messages recommandés

  • 2 mois après...
  • 9 mois après...
  • 2 mois après...
  • 1 an après...
  • 7 mois après...
Posté(e)

Fonctionne toujours aussi bien. Vu les problemes de Weather sur la nouvelle version HC2. Je vais l'utiliser pour mes variables temperatures exterieur ;)

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

Bonjour,

 

Faut rajouter les icones ;-)

Sinon, tu peux aller voir le VD/scene récent de Dragoniacs, WeatherBit

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

@pepite

 

Encore une mauvaise nouvelle sur la meteo. Apres les plugins officiels qui ne fonctionnent plus.

 

Sur ton plugin meteo, je pense que maintenant il demande une clef token sur www.prevision-meteo.ch

 

Ca fonctionne plus depuis le 23/08.

 

Tu en penses quoi ?

  • 2 semaines après...
Posté(e)

En fait, c’est la méthode d’acces au site qui ne fonctionne pas. J’ai essayé via un navigateur via https et j’arrive à obtenir le fichier.

mais je ne sais pas comment faire du https avec la HC2.

Posté(e)

Bonjour,

 

Pour faire du https, faut passer par une scene, pas de https avec un VD.

 

Comme ceci par exemple :

--[[
%% properties
%% events
%% globals
--]]

local id_vd = xxx

local http = net.HTTPClient()
http:request("https://www.data.gouv.fr/fr/datasets/r/000ae493-9fa8-4088-9f53-76d375204036", {  
    success = function(response)
      if response.status == 200 then
        if response.data and response.data ~= "" then
          fibaro:setGlobal("VacancesScolaire", response.data)
          fibaro:call(id_vd, "pressButton", "1")
          fibaro:debug("Success")
        else
          fibaro:debug("Error : empty response data")
        end
      else
        fibaro:debug("Erreur : status=" .. tostring(response.status) .." Message : " .. tostring(response.data))
      end
    end,
    error = function(err)
      fibaro:debug("Erreur : " .. err)
    end,
    options = {
      method = 'GET',
      timeout = 3000,
      headers = {['content-type']='application/json'},
      checkCertificate = false,
    }
})
  • 2 semaines après...
Posté(e)

Le plugin Weatherbit fonctionne bien aussi de mon coté. Par contre il n'y a pas d'icones meteo en fonction du temps sur celui-ci. C'est dommage ... Il faudrait essayer de les intégrer.

Posté(e)
Le plugin Weatherbit fonctionne bien aussi de mon coté. Par contre il n'y a pas d'icones meteo en fonction du temps sur celui-ci. C'est dommage ... Il faudrait essayer de les intégrer.
C'est une idée, je vais regarder comment faire ça

Envoyé de mon SM-A530F en utilisant Tapatalk

  • Like 2
Posté(e)

Je viens de publier une V3.0 avec les icônes :60:

Par contre, les icônes ne s'affichants toujorus pas sur l'appli FIBARO, j'ai du ajouter un slider de choix en bas du VD :huh:

 

 

Posté(e)

bonjour à tous,

 

j'essaye de refaire cet ingénieur VD .... seulement j'ai une erreur line 179 :

 

[DEBUG] 23:20:23: Index1 Deb:09.02.2019 Fin:25.02.2019 Date:23.09.2019
[DEBUG] 23:20:23: Index1 Deb:06.04.2019 Fin:23.04.2019 Date:23.09.2019
[DEBUG] 23:20:23: Index1 Deb:06.07.2019 Fin:02.09.2019 Date:23.09.2019
[DEBUG] 23:20:23: Pas en vacance aujourd'hui
[ERROR] 23:20:23: line 179: bad argument #1 to 'difftime' (number expected, got nil)

auriez-vous une idée ?? d'avance merci du coup de main !!

Posté(e)

Merci Franco268 pour ta réponse

En fait je n'avais pas cette variable !!!!

Je viens de la rajouter (variable simple, sans majuscule).

 

 

[ERROR] 18:33:55: line 179: bad argument #1 to 'difftime' (number expected, got nil)
Mais toujours pas

Une idée ??

Posté(e)

@Rem's Si je comprends bien tu veux mettre ce module avec la correction https ? Si c'est bien ca, post ton code et je vais essayer de comprendre cette erreur.

 

 

Posté(e)

Mais en fait, c'est un VD pour les vacances scolaires que je cherche à faire fonctionner !!! Je ne sais pas pourquoi j'ai poster ici (je vais me faire engueuler par les admin)

A toute fins utiles voici le code que j'ai :

 

 

-- --------------------------------------------------------------------------------------------------------------
-- Check that one and only one instance is in memory
-- --------------------------------------------------------------------------------------------------------------
local selfId = fibaro:getSelfId();
local icon = fibaro:get (selfId, "deviceIcon");

if ((not Vacances) or (Vacances.errors >= 5)) then

    Vacances =
    {
        departement = "13",
        varglobal   = "VacScolaire",
        varglobalJ  = "VacScolaireJ",
        varglobalJ1 = "VacScolaireJ1",
        errors = 0
    }

    -- --------------------------------------------------------------------------------------------------------------
    -- URL
    -- --------------------------------------------------------------------------------------------------------------
      Vacances.url = "telechargement.index-education.com"

    -- --------------------------------------------------------------------------------------------------------------
    -- Optenir le fichier XML
    -- --------------------------------------------------------------------------------------------------------------
    Vacances.getXml = function()
        local URL = Net.FHttp(Vacances.url)
        response, status, errorCode = URL:GET("/vacances.xml")
        return Vacances.iif(response ~= nil, Vacances.newParser().ParseXmlText(response), "")
    end

    -- --------------------------------------------------------------------------------------------------------------
    -- Rechercher la zone par rapport au numéro de département
    -- --------------------------------------------------------------------------------------------------------------
    Vacances.getZone = function(xmlTable)
        if (xmlTable) then
            if (not xmlTable.root) then
                Vacances.errors = Vacances.errors+1
                return ""
            end
            local academies = xmlTable.root.academies
            for i in pairs(academies:children()) do
                local academie = academies.academie
                local zone = academie["@zone"]
                local nom = academie["@libelle"]
                for j in pairs(academie:children()) do
                    local dep = academie.departement[j]
                    if (type(dep) ~= "nil") then
                        if (academie.departement[j]["@numero"] == Vacances.departement) then
                            fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LabelZone.value", "["..zone.."] " .. nom)
                            return zone, nom
                        end
                    else
                        if (academie.departement["@numero"] == Vacances.departement) then
                            fibaro:call(fibaro:getSelfId(), "setProperty", "ui.LabelZone.value", "["..zone.."] " .. nom)
                            return zone, nom
                        end
                    end
                end
            end
        end
        return ""
    end

    -- --------------------------------------------------------------------------------------------------------------
    -- Rechercher le libellé d'une période de vacances
    -- --------------------------------------------------------------------------------------------------------------
    Vacances.getLibelle = function(xmlTable, num)
        if (xmlTable) then
            if (not xmlTable.root) then
                Vacances.errors = Vacances.errors+1
                return ""
            end
            local libelles = xmlTable.root.libelles
            for i in pairs(libelles:children()) do
                if (libelles.libelle["@id"] == num) then
                      local l = libelles.libelle:value()
                      for k = 1, string.len(l)-1 do
                        local c = string.sub(l, k, k)
                        local d = string.byte(c)
                    end
                    return libelles.libelle:value():gsub(string.char(235), "ë"):gsub(string.char(233), "é")
                end
            end
        end
        return ""
    end

    -- --------------------------------------------------------------------------------------------------------------
    -- Obtenir les dates futures des vacances par rapport à la zone
    -- --------------------------------------------------------------------------------------------------------------
    Vacances.getDatesFuture = function(xmlTable, zone, dateparam)
        fibaro:debug("date="..dateparam)
        fibaro:debug("date claire="..os.date("%d.%m.%Y", dateparam))
        fibaro:debug("date="..os.time())
        if (xmlTable) then
            if (not xmlTable.root) then
                Vacances.errors = Vacances.errors+1
                return ""
            end
            local calendrier = xmlTable.root.calendrier
            local index = 1
            local envacance = false
            local envacanceJ1 = false
            for i in pairs(calendrier:children()) do
                local zonecal = calendrier.zone
                if (zonecal["@libelle"] == zone) then
                    for j in pairs(zonecal:children()) do
                        local datedeb = Vacances.getDateFormat(zonecal.vacances[j]["@debut"])
                        local datefin = Vacances.getDateFormat(zonecal.vacances[j]["@fin"])
                        if index < 9 then
                            fibaro:debug("Index"..index.." Deb:"..os.date("%d.%m.%Y", datedeb).." Fin:"..os.date("%d.%m.%Y", datefin).." Date:"..os.date("%d.%m.%Y", dateparam))
                            if (dateparam > datedeb and dateparam < datefin) then
                                local msg = os.date("%d.%m.%Y", datedeb) .. " - " .. os.date("%d.%m.%Y", datefin)  .. " | " ..Vacances.getLibelle(xmlTable, zonecal.vacances[j]["@libelle"])
                                fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..index..".value", msg)
                                fibaro:debug("en période de vacance = oui")
                                envacance = true
                                if index == 1 then
                                    fibaro:log("Prochaines vacances : "..msg)
                                end
                                index = index + 1
                            elseif (datedeb > dateparam) then
                              local msg = os.date("%d.%m.%Y", datedeb) .. " - " .. os.date("%d.%m.%Y", datefin)  .. " | " ..Vacances.getLibelle(xmlTable, zonecal.vacances[j]["@libelle"])
                              fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..index..".value", msg)
                              if (not envacance and index == 1) then
                                    fibaro:log("Prochaines vacances : "..msg)
                                savedatedeb=datedeb
                              end
                              index = index + 1
                            end
                            if (dateparam+24*60*60 > datedeb and dateparam+24*60*60 < datefin) then
                                envacanceJ1 = true
                            end
                        end
                    end
                    if envacance == true then
                        fibaro:debug("En vacance aujour'hui")
                        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label0.value", "En vacances")
                        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label10.value", "OUI")
                        VG:traiter(Vacances.varglobal, "0")
                        VG:traiter(Vacances.varglobalJ, "OUI")
                    else
                        fibaro:debug("Pas en vacance aujourd'hui")
                        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label0.value", "Dans " .. Vacances.delai(savedatedeb, dateparam) .. " jours"  )
                        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label10.value", "NON")
                        VG:traiter(Vacances.varglobal, Vacances.delai(savedatedeb, dateparam).."")
                        VG:traiter(Vacances.varglobalJ, "NON")
                    end
                    if envacanceJ1 == true then
                        fibaro:debug("En vacance demain")
                        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label11.value", "OUI")
                        VG:traiter(Vacances.varglobalJ1, "OUI")
                    else
                        fibaro:debug("Pas en vacance demain")
                        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label11.value", "NON")
                        VG:traiter(Vacances.varglobalJ1, "NON")
                    end
                    for i = index, 9 do
                        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..i..".value", "")
                    end
                    return
                end
            end
        end
    end

    -- --------------------------------------------------------------------------------------------------------------
    -- Transforme une date en string en date exploitable
    -- --------------------------------------------------------------------------------------------------------------
    Vacances.getDateFormat = function(sdate)
        year,month,day = sdate:match("(%d+).(%d+).(%d+)")
        return os.time({day=day,month=month,year=year,hour=0,min=0,sec=0})
    end

    -- --------------------------------------------------------------------------------------------------------------
    -- Calcule le nombre de jours entre 2 dates
    -- --------------------------------------------------------------------------------------------------------------
    Vacances.delai = function(dated, dateparam)
        diff = os.difftime(dated, dateparam)
        return math.floor(diff / (60*60*24))
    end

    -- -------------------------------------------------------------------------------------------------------------
    -- Test the condition and return true or false param depending of the result
    -- param : condition (condition to test)
    --            iftrue (result to return of condition if true)
    --            iftfalse (result to return of condition if false)
    -- -------------------------------------------------------------------------------------------------------------
    Vacances.iif = function(condition, iftrue, iffalse)
        if (condition) then
            return iftrue
        end
        return iffalse
    end

  -- -------------------------------------------------------------------------------------------------------------
  -- Variables Globales
  -- -------------------------------------------------------------------------------------------------------------
  -- Description :
  --    Fonctions permettant la manipulation des
  --    variables globales
  -- -------------------------------------------------------------------------------------------------------------
  -- Version du firmeware : 4.x
  -- Destination : Scénarios
  -- source : steven
  -- lien : https://gea.piccand.me/doku.php/vg
  -- -------------------------------------------------------------------------------------------------------------
  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}

    -- -------------------------------------------------------------------------------------------------------------
    -- This is a modified version of Corona-XML-Module by Jonathan Beebe which in turn
    -- is based on Alexander Makeev's Lua-only XML parser .
    -- see https://github.com/Cluain/Lua-Simple-XML-Parser
    -- -------------------------------------------------------------------------------------------------------------
    Vacances.newParser = function()

        parseXml = {}

        parseXml.FromXmlString = function(value)
            value = string.gsub(value, "&#x([%x]+)%;",
            function(h)
                return string.char(tonumber(h, 16))
            end);
            value = string.gsub(value, "&#([0-9]+)%;",
            function(h)
                return string.char(tonumber(h, 10))
            end);
            value = string.gsub(value, "\"", "\"");
            value = string.gsub(value, "'", "'");
            value = string.gsub(value, ">", ">");
            value = string.gsub(value, "<", "<");
            value = string.gsub(value, "&", "&");
            return value;
        end

        parseXml.ParseArgs = function(node, s)
            string.gsub(s, "(%w+)=([\"'])(.-)%2", function(w, _, a)
                node:addProperty(w,  parseXml.FromXmlString(a))
            end)
        end

        parseXml.ParseXmlText = function(xmlText)
            local stack = {}
            local top = parseXml.newNode()
            table.insert(stack, top)
            local ni, c, label, xarg, empty
            local i, j = 1, 1
            while true do
                ni, j, c, label, xarg, empty = string.find(xmlText, "<(%/?)([%w_:]+)(.-)(%/?)>", i)
                if not ni then break end
                local text = string.sub(xmlText, i, ni - 1);
                if not string.find(text, "^%s*$") then
                    local lVal = (top:value() or "") .. parseXml.FromXmlString(text)
                    stack[#stack]:setValue(lVal)
                end
                if empty == "/" then -- empty element tag
                    local lNode = parseXml.newNode(label)
                    parseXml.ParseArgs(lNode, xarg)
                    top:addChild(lNode)
                elseif c == "" then -- start tag
                    local lNode = parseXml.newNode(label)
                    parseXml.ParseArgs(lNode, xarg)
                    table.insert(stack, lNode)
                    top = lNode
                else -- end tag
                    local toclose = table.remove(stack) -- remove top
                    top = stack[#stack]
                    if #stack < 1 then
                        error("XmlParser: nothing to close with " .. label)
                    end
                    if toclose:name() ~= label then
                        error("XmlParser: trying to close " .. toclose.name .. " with " .. label)
                    end
                    top:addChild(toclose)
                end
                i = j + 1
            end
            local text = string.sub(xmlText, i);
            if #stack > 1 then
                error("XmlParser: unclosed " .. stack[#stack]:name())
            end
            return top
        end

        parseXml.newNode = function(name)
            local node = {}
            node.___value = nil
            node.___name = name
            node.___children = {}
            node.___props = {}
            function node:value() return self.___value end
            function node:setValue(val) self.___value = val end
            function node:name() return self.___name end
            function node:setName(name) self.___name = name end
            function node:children() return self.___children end
            function node:numChildren() return #self.___children end
            function node:addChild(child)
                if self[child:name()] ~= nil then
                    if type(self[child:name()].name) == "function" then
                        local tempTable = {}
                        table.insert(tempTable, self[child:name()])
                        self[child:name()] = tempTable
                    end
                    table.insert(self[child:name()], child)
                else
                    self[child:name()] = child
                end
                table.insert(self.___children, child)
            end
            function node:properties() return self.___props end
            function node:numProperties() return #self.___props end
            function node:addProperty(name, value)
                local lName = "@" .. name
                if self[lName] ~= nil then
                    if type(self[lName]) == "string" then
                        local tempTable = {}
                        table.insert(tempTable, self[lName])
                        self[lName] = tempTable
                    end
                    table.insert(self[lName], value)
                else
                    self[lName] = value
                end
                table.insert(self.___props, { name = name, value = self[name] })
            end
            return node
        end
        return parseXml;
    end
end

-- -------------------------------------------------------------------------------------------------------------
-- RUN
-- -------------------------------------------------------------------------------------------------------------
fibaro:debug("Lecture du fichier distant ...")
local xmlTable = Vacances.getXml()
if (Vacances.errors > 0) then
    time = "Erreur : " .. Vacances.errors
    fibaro:debug(time)
else
    fibaro:debug("Recherche de la zone pour le département : " .. Vacances.departement .. " ...")
    local zone, nom = Vacances.getZone(xmlTable)
    fibaro:debug(Vacances.departement .. " ==> [" .. zone .. "] " .. nom)
    Vacances.getDatesFuture(xmlTable, zone, os.time())
end
fibaro:call(selfId, "setProperty", "currentIcon", icon);
fibaro:call(784, "setProperty", "ui.status.value", "");

×
×
  • Créer...