Fredric Posté(e) le 4 mai 2015 Signaler Posté(e) le 4 mai 2015 pour ma part, dans le 16, j'ai bien reçu la notification MeteoAlerte16 Danger crue-Danger
cboubou Posté(e) le 4 mai 2015 Signaler Posté(e) le 4 mai 2015 Au temps pour moi. Je pensais que le MV aller me retourner la nature de la vigilance "Orages" mais en effet, si cela n'est pas indiqué dans le XML, le MV ne va pas le deviner.
zozotte Posté(e) le 24 juillet 2015 Signaler Posté(e) le 24 juillet 2015 Bonjour, Pour ceux qui veulent, j'ai rajouté la récupération du commentaire de l'entete vigilance et transformé l'url en un timestamp. Zozotte MeteoAlerte_-_31.vfib 1
pepite Posté(e) le 24 juillet 2015 Signaler Posté(e) le 24 juillet 2015 Super idee zozotte, peux tu mettre une capture du VD stp ? Merciiii
matthieu Posté(e) le 24 juillet 2015 Signaler Posté(e) le 24 juillet 2015 Merci zozotte pour ces deux belles features et merci Steven pour ce superbe module
BenjyNet Posté(e) le 28 août 2015 Signaler Posté(e) le 28 août 2015 Je déterre le topic mais ça se met àjour chez vous ? Parce que moi j'ai l'impression que le main loop n'appuie pas sur le bouton
mprinfo Posté(e) le 28 août 2015 Signaler Posté(e) le 28 août 2015 Euh ben je sais pas trop je regarde pas vraiment Envoyé de mon SM-G900F en utilisant Tapatalk
joesab Posté(e) le 29 août 2015 Signaler Posté(e) le 29 août 2015 viens de l'installer ànouveau, ne fonctionne pas chez moi. soit mauvais paramétrage, soit ne fonctionne pas,
BenjyNet Posté(e) le 29 août 2015 Signaler Posté(e) le 29 août 2015 Bah moi ça fonctionne si j'appuie sur le bouton rafraîchir. Sinon non, c'est mort
mprinfo Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 Moi j'ai celui de steven il fonctionne j'ai cela dans le main loop Regarde bien si tu as bien le bon numéro de bouton car en changeant de place les étiquettes ou boutons on oublie de mettre a jour le pressButton local nbHeure = 12 local i = 0 while true do if (i >= (nbHeure*2) or i == 0) then i = 0 fibaro:call(fibaro:getSelfId(), "pressButton", "5") end fibaro:sleep(30*60*1000) i = i + 1 end
BenjyNet Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 (modifié) Ah ouais j'ai déjàpas la même chose (je suis con moi aussi, j'avais même pas vu que ça n'appuyait pas sur le bon bouton !) ! local nbHeure = 6 local i = 0 while true do if (i >= nbHeure or i == 0) then i = 0 fibaro:call(fibaro:getSelfId(), "pressButton", "4") end fibaro:sleep(60*60*1000) i = i + 1 end Modifié le 30 août 2015 par BenjyNet
BenjyNet Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 Bon c'est corrigé et maintenant j'ai ça, pfff : [DEBUG] 10:26:37: Problème d'accès au données ... tentative dans 10mn
mprinfo Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 MDR je me suis déjàfais avoir aussi Envoyé de mon SM-G900F en utilisant Tapatalk
BenjyNet Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 Mouais sauf que la page xml n'existe plus Il y a une autre adresse valide ?
mprinfo Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 Chez moi cela fonctionne comme je t'ai dis j'ai le code de steven -- -------------------------------------------------------------------------------------------------------------- -- MeteoAlerte est est script qui va vérifier les alertes méteo du site vigilance.meteofrance.com -- Le site retournant des informations XML, le script va donc les parser. -- Author = "Steven Piccand" -- Version = "V1.40" -- V1.10 - Isolation des éventuelles erreurs -- V1.20 - Envoi possible sur plusieurs smartphones -- V1.30 - Correction problème Main Loop -- V1.40 - Correction status plus ajout personnalisation icone -- V2.00 - Ajout du risque (nouveauté de Météofrance -- -------------------------------------------------------------------------------------------------------------- if (not MeteoAlerte) then MeteoAlerte = {} -- !!! VOS PARAMETRES !!! MeteoAlerte.dep = "54" -- votre département local IdTel = fibaro:getGlobal("TelPascal") fibaro:debug("ID du tel : "..IdTel) MeteoAlerte.smartphone = {IdTel} -- {70,71} vos portables ou envoyé la notification push en cas d'alerte MeteoAlerte.niveauAlerte = 3 -- le niveau minimum d'alerte pour être notifié MeteoAlerte.globalvariable = "" -- Nom de la variable globale a renseigné -- -------------------------------------------------------------------------------------------------------------- -- Obtient le XML et le retourne sous forme de table LUA -- -------------------------------------------------------------------------------------------------------------- MeteoAlerte.getXml = function() local MeteoAlerteURL = Net.FHttp("vigilance.meteofrance.com"); response, status, errorCode = MeteoAlerteURL:GET("/data/NXFR34_LFPW_.xml"); fibaro:debug("Status : "..status.." - ErrorCode : "..errorCode) return MeteoAlerte.iif(response ~= nil, MeteoAlerte.newParser().ParseXmlText(response), "") end -- -------------------------------------------------------------------------------------------------------------- -- Va chercher les valeurs du départements -- Modifie les valeurs des labels -- Envoi un push si nécessaire -- Met a jour une variable globale -- -------------------------------------------------------------------------------------------------------------- MeteoAlerte.getData = function() local messages = {"<inconnu>", "Aucune", "Attention", "Danger", "!! EXCEPTIONNEL !!"} local risques = {"Pas de vigilance particulière", "Vent violent", "Pluie-innondation", "Orages", "Innondation", "Neige-Verglas", "Canicule", "Grand-froid", "Avalanche", "Vagues-submersion"} local icones = {-1, -1, -1, -1, -1} local result = 0 local risque = 0 local crue = 0 local xmlTable = MeteoAlerte.getXml() if (xmlTable) then local evs = xmlTable.cartevigilance for i in pairs(evs:children()) do if (evs:children()[i]:name() == "datavigilance") then if (evs:children()[i]["@dep"] == MeteoAlerte.dep) then result = tonumber(evs:children()[i]["@couleur"]) fibaro:debug("Vigilance trouvée : " .. result) if (#evs:children()[i]:children() > 0) then for j = 1, #evs:children()[i]:children() do if (evs:children()[i]:children()[j]:name() == "crue") then crue = tonumber(evs:children()[i]:children()[j]["@valeur"]) fibaro:debug("Crue trouvée : ".. crue) elseif (evs:children()[i]:children()[j]:name() == "risque") then risque = tonumber(evs:children()[i]:children()[j]["@valeur"]) fibaro:debug("Risque trouvée : ".. risque) end end end end end end end fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblVigilance.value", messages[result+1]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCrue.value", messages[crue+1]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRisque.value", risques[risque+1]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblUrl.value", "http://vigilance.meteofrance.com/") local icone_id = icones[math.max(result+1, crue+1)] if (icone_id > -1) then fibaro:debug("Icone " .. icone_id) fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone_id); end fibaro:log("Dernière mise àjour : " .. os.date("%c")) fibaro:debug("Vérification envoi par push") if (result >= MeteoAlerte.niveauAlerte or crue >= MeteoAlerte.niveauAlerte) then fibaro:debug("Envoi nécessaire") if (type(MeteoAlerte.smartphone) == "table") then for i = 1, #MeteoAlerte.smartphone do fibaro:call(MeteoAlerte.smartphone[i], "sendPush", "MeteoAlerte [".. MeteoAlerte.dep .." = " .. messages[result+1] .. "] | [crue = " .. messages[crue+1] .. "] | [risque = " .. risques[risque+1].."]") end end end if (result and MeteoAlerte.globalvariable and MeteoAlerte.globalvariable ~= "") then fibaro:setGlobal(MeteoAlerte.globalvariable, tostring(result)) end return true end -- ------------------------------------------------------------------------------------------------------------- -- Teste la condition et retourne la valeur true ou false -- ------------------------------------------------------------------------------------------------------------- MeteoAlerte.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- ------------------------------------------------------------------------------------------------------------- -- Ceci est une version modifiée de Corona-XML-Module par Jonathan Beebe qui a son tour -- est basée sur Alexander Makeev's Lua-only XML parser . -- see https://github.com/Cluain/Lua-Simple-XML-Parser -- ------------------------------------------------------------------------------------------------------------- MeteoAlerte.newParser = function() parseXml = {} parseXml.FromXmlString = function(value) value = string.gsub(value, "([%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, "&", "&"); 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 -- ------------------------------------------------------------------------------------------------------------- -- Démarrage du script -- ------------------------------------------------------------------------------------------------------------- fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblVigilance.value", "...") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCrue.value", "...") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRisque.value", "...") if (not pcall(function() MeteoAlerte.getData() end)) then local max_retry = 5 local i = 0 while (not stop) do fibaro:debug("Problème d'accès au donn��es ... tentative dans 10mn") fibaro:sleep(10*60*1000) if (not pcall(function() MeteoAlerte.getData() end)) then i = i + 1 if (i >= max_retry) then stop = true end else stop = true end end end
BenjyNet Posté(e) le 30 août 2015 Signaler Posté(e) le 30 août 2015 Ouais, le truc de zozotte ne fonctionne pas puisqu'il n'y a pas de vigilance et donc pas de commentaire. Faut rajouter un test
zozotte Posté(e) le 1 septembre 2015 Signaler Posté(e) le 1 septembre 2015 Désolée, j'étais en vacances et effectivement, quand il n'y a pas le commentaire, ca bug... J'attends qu'il y ait a nouveau un commentaire pour comparer les xml et modifier.
BenjyNet Posté(e) le 1 septembre 2015 Signaler Posté(e) le 1 septembre 2015 Tiens, tu l'as avec le texte là.
zozotte Posté(e) le 12 septembre 2015 Signaler Posté(e) le 12 septembre 2015 et voila avec la correction. A priori maintenant ca devrait marcher ! Dites moi MeteoAlerte_-_31 (2).vfib 1
BenjyNet Posté(e) le 12 septembre 2015 Signaler Posté(e) le 12 septembre 2015 Zozotte tu peux poster juste les lignes que t'as changé ?
zozotte Posté(e) le 15 septembre 2015 Signaler Posté(e) le 15 septembre 2015 Bouton vérifier: -- -------------------------------------------------------------------------------------------------------------- -- MeteoAlerte est est script qui va vérifier les alertes méteo du site vigilance.meteofrance.com -- Le site retournant des informations XML, le script va donc les parser. -- Author = "Steven Piccand" -- Version = "V1.40" -- V1.10 - Isolation des éventuelles erreurs -- V1.20 - Envoi possible sur plusieurs smartphones -- V1.30 - Correction problème Main Loop -- V1.40 - Correction status plus ajout personnalisation icone -- V2.00 - Ajout du risque (nouveauté de Météofrance -- -------------------------------------------------------------------------------------------------------------- if (not MeteoAlerte) then MeteoAlerte = {} -- !!! VOS PARAMETRES !!! MeteoAlerte.dep = "31" -- votre département MeteoAlerte.smartphone = {43} -- {70,71} vos portables ou envoyé la notification push en cas d'alerte MeteoAlerte.niveauAlerte = 3 -- le niveau minimum d'alerte pour être notifié MeteoAlerte.globalvariable = "" -- Nom de la variable globale a renseigné MeteoAlerte.commentaire = false -- -------------------------------------------------------------------------------------------------------------- -- Obtient le XML et le retourne sous forme de table LUA -- -------------------------------------------------------------------------------------------------------------- MeteoAlerte.getXml = function() local MeteoAlerteURL = Net.FHttp("vigilance.meteofrance.com"); response, status, errorCode = MeteoAlerteURL:GET("/data/NXFR34_LFPW_.xml"); return MeteoAlerte.iif(response ~= nil, MeteoAlerte.newParser().ParseXmlText(response), "") end -- -------------------------------------------------------------------------------------------------------------- -- Va chercher les valeurs du départements -- Modifie les valeurs des labels -- Envoi un push si nécessaire -- Met a jour une variable globale -- -------------------------------------------------------------------------------------------------------------- MeteoAlerte.getData = function() local messages = {"<inconnu>", "Aucune", "Attention", "Danger", "!! EXCEPTIONNEL !!"} local risques = {"<aucun>", "Vent violent", "Pluie-innondation", "Orages", "Innondation", "Neige-Verglas", "Canicule", "Grand-froid", "Avalanche", "Vagues-submersion"} local icones = {-1, -1, -1, -1, -1} local result = 0 local risque = 0 local crue = 0 local commentaire = "" local xmlTable = MeteoAlerte.getXml() if (xmlTable) then local evs = xmlTable.cartevigilance for i in pairs(evs:children()) do if (evs:children()[i]:name() == "datavigilance") then if (evs:children()[i]["@dep"] == MeteoAlerte.dep) then result = tonumber(evs:children()[i]["@couleur"]) fibaro:debug("Vigilance trouvée : " .. result) if (#evs:children()[i]:children() > 0) then for j = 1, #evs:children()[i]:children() do if (evs:children()[i]:children()[j]:name() == "crue") then crue = tonumber(evs:children()[i]:children()[j]["@valeur"]) fibaro:debug("Crue trouvée : ".. crue) elseif (evs:children()[i]:children()[j]:name() == "risque") then risque = tonumber(evs:children()[i]:children()[j]["@valeur"]) fibaro:debug("Risque trouvée : ".. risque) end end end end elseif (evs:children()[i]:name() == "entetevigilance") then for j in pairs(evs:children()[i]:children()) do if (evs:children()[i]:children()[j]:name() == "vigilancecommentaire") then commentaire = evs:children()[i]:children()[j]["@texte"] MeteoAlerte.commentaire = true else end end end end end fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblVigilance.value", messages[result+1]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCrue.value", messages[crue+1]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRisque.value", risques[risque+1]) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCommentaire.value", commentaire) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRefresh.value", os.date("%d/%m %H:%M")) local icone_id = icones[math.max(result+1, crue+1)] if (icone_id > -1) then fibaro:debug("Icone " .. icone_id) fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icone_id); end fibaro:log("Dernière mise à jour : " .. os.date("%c")) fibaro:debug("Vérification envoi par push") if (result >= MeteoAlerte.niveauAlerte or crue >= MeteoAlerte.niveauAlerte) then fibaro:debug("Envoi nécessaire") if (type(MeteoAlerte.smartphone) == "table") then for i = 1, #MeteoAlerte.smartphone do fibaro:call(MeteoAlerte.smartphone[i], "sendPush", "MeteoAlerte [".. MeteoAlerte.dep .." = " .. messages[result+1] .. "] | [crue = " .. messages[crue+1] .. "] | [risque = " .. risques[risque+1].."]") end end end if (result and MeteoAlerte.globalvariable and MeteoAlerte.globalvariable ~= "") then fibaro:setGlobal(MeteoAlerte.globalvariable, tostring(result)) end return true end -- ------------------------------------------------------------------------------------------------------------- -- Teste la condition et retourne la valeur true ou false -- ------------------------------------------------------------------------------------------------------------- MeteoAlerte.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- ------------------------------------------------------------------------------------------------------------- -- Ceci est une version modifiée de Corona-XML-Module par Jonathan Beebe qui a son tour -- est basée sur Alexander Makeev's Lua-only XML parser . -- see https://github.com/Cluain/Lua-Simple-XML-Parser -- ------------------------------------------------------------------------------------------------------------- MeteoAlerte.newParser = function() parseXml = {} parseXml.FromXmlString = function(value) value = string.gsub(value, "([%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, "&", "&"); 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 -- ------------------------------------------------------------------------------------------------------------- -- Démarrage du script -- ------------------------------------------------------------------------------------------------------------- fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblVigilance.value", "...") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCrue.value", "...") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRisque.value", "...") if (not pcall(function() MeteoAlerte.getData() end)) then local max_retry = 5 local i = 0 while (not stop) do fibaro:debug("Problème d'accès au données ... tentative dans 10mn") fibaro:sleep(10*60*1000) if (not pcall(function() MeteoAlerte.getData() end)) then i = i + 1 if (i >= max_retry) then stop = true end else stop = true end end end
domo Posté(e) le 19 septembre 2015 Signaler Posté(e) le 19 septembre 2015 salut à tous petite question bête comment vous faites pour trouver id du téléphone
BenjyNet Posté(e) le 19 septembre 2015 Signaler Posté(e) le 19 septembre 2015 Avec le hc2toolkit de krikroff
domo Posté(e) le 19 septembre 2015 Signaler Posté(e) le 19 septembre 2015 Sous Windows je pari et avec un mac ?
Messages recommandés