Julien Lemare Posté(e) le 15 septembre 2015 Signaler Posté(e) le 15 septembre 2015 De rien ;-) c'est le code brut sur cette v1 la. Je suis en train de revoir le tout en ce moment ^^ Envoyé depuis la Station Spatiale Internationale
domo Posté(e) le 15 novembre 2015 Signaler Posté(e) le 15 novembre 2015 merci pour le partage et des icones
mikael2235 Posté(e) le 7 septembre 2016 Signaler Posté(e) le 7 septembre 2016 Merci pour le VD, ça fonctionne bien ! Après se pose la question de previsions ... sont elle fiables ? mais c'est un autre debat !
redbeard28 Posté(e) le 3 décembre 2016 Signaler Posté(e) le 3 décembre 2016 Bonsoir, Fonctionne parfaitement pour moi. seul regret, Fibaro ne laisse pas faire d'import massif d'icones... Merci aux dev.
Fredric Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 Bonjour, Perso à un souci avec ce VD,? il indique -273°C sur toutes les prévision?
Berale64 Posté(e) le 12 juin 2018 Signaler Posté(e) le 12 juin 2018 C'est le zéro absolu, comme le VD !!!! 1
yoim Posté(e) le 21 janvier 2019 Signaler Posté(e) le 21 janvier 2019 Fonctionne toujours aussi bien. Vu les problemes de Weather sur la nouvelle version HC2. Je vais l'utiliser pour mes variables temperatures exterieur
Twentycents Posté(e) le 26 juin 2019 Signaler Posté(e) le 26 juin 2019 Hello, on rajoute le VD et c'est finit ? ou on doit faire des trucs encore :p
pepite Posté(e) le 26 juin 2019 Auteur Signaler Posté(e) le 26 juin 2019 Bonjour, Faut rajouter les icones ;-) Sinon, tu peux aller voir le VD/scene récent de Dragoniacs, WeatherBit 1
yoim Posté(e) le 29 août 2019 Signaler Posté(e) le 29 août 2019 @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 ?
Sakkhho Posté(e) le 31 août 2019 Signaler Posté(e) le 31 août 2019 (modifié) effectivement ca marche plus, pourtant rien ne semble avoir changer sur leur site https://www.prevision-meteo.ch/services/json/paris le json est toujours accessible mais c'est passé en HTTPS non ? Modifié le 31 août 2019 par Sakkhho
Franco268 Posté(e) le 8 septembre 2019 Signaler Posté(e) le 8 septembre 2019 ça ne fonctionne plus chez moi non plus depuis le 23/08 Quand j’essaie d'afficher le json sur le debug de la box. J’obtiens ceci:
mikael2235 Posté(e) le 9 septembre 2019 Signaler Posté(e) le 9 septembre 2019 Idem pour moi !! Site web innacesdible !
Franco268 Posté(e) le 9 septembre 2019 Signaler Posté(e) le 9 septembre 2019 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.
pepite Posté(e) le 9 septembre 2019 Auteur Signaler Posté(e) le 9 septembre 2019 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, } })
pepite Posté(e) le 9 septembre 2019 Auteur Signaler Posté(e) le 9 septembre 2019 Mais honnetement, jeter un oeil ici ;-) 1
mikael2235 Posté(e) le 18 septembre 2019 Signaler Posté(e) le 18 septembre 2019 Merci pour ce tuto météo, Je l'ai suivi et en 30 minutes tout est configuré et fonctionne bien !
yoim Posté(e) le 18 septembre 2019 Signaler Posté(e) le 18 septembre 2019 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.
Dragoniacs Posté(e) le 18 septembre 2019 Signaler Posté(e) le 18 septembre 2019 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 2
Dragoniacs Posté(e) le 19 septembre 2019 Signaler Posté(e) le 19 septembre 2019 Je viens de publier une V3.0 avec les icônes 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
Rem's Posté(e) le 23 septembre 2019 Signaler Posté(e) le 23 septembre 2019 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 !!
Franco268 Posté(e) le 24 septembre 2019 Signaler Posté(e) le 24 septembre 2019 Regarde ce qu’il y a dans ta variable difftime. A priori elle est vide et elle ne devrait pas
Rem's Posté(e) le 24 septembre 2019 Signaler Posté(e) le 24 septembre 2019 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 ??
yoim Posté(e) le 25 septembre 2019 Signaler Posté(e) le 25 septembre 2019 @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.
Rem's Posté(e) le 29 septembre 2019 Signaler Posté(e) le 29 septembre 2019 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", "");
Messages recommandés