Aller au contenu

Steven

Membres confirmés
  • Compteur de contenus

    4 434
  • Inscription

  • Dernière visite

  • Jours gagnés

    201

Tout ce qui a été posté par Steven

  1. Pour ceux ou celles qui souhaiterais interfacer leur Home Center avec Tasker (Outil d'automatisation sous Android), voici un tuto pour vous aider (TUTO). Il vous suffira d’intégrer les 5 tâches comme décrit dans le tuto, de renseigné l'adresse de votre Home Center afin de pouvoir : Allumer un périphérique Éteindre un périphérique Interroger l’état d’un périphérique Interroger un module virtuel Interroger une propriété d’un périphérique ou module virtuel Connaître la consommation d’un périphérique (adapté au relevé de consommation) Démarrer un scène Connaître la liste et ID de tout vos périphériques. L'idée est de pouvoir demander à tasker d'effectuer des opérations avec un langage simple : "Allumer Prise Cuisine" en lieu et place de "http://<HC2 ip address>/api/callAction?deviceID=4&name=turnOff " qui est moins compréhensif et moi naturel Avec cela vous allez pouvoir, entre autre, piloter votre HC via SMS, secouez votre téléphone pour tout allumer, retourner votre téléphone pour éteindre, ... Le système est composé de 5 tâches : Une pour traduit le langage "simple" en demande HC Une pour exécuter les actions Une pour interrogé vos périphériques Une pour tester votre configuration Une pour regrouper tout cela. Usage : J'ai essayé de simplifier un maximum Vous renseignez une variable %HC_REQUEST avec votre demande par exemple "Consommation Frigo" Vous exécuter la tâche : HC Traiter Demande C'est tout ... le résultat sera stocké dans la variable %HC_RESULT que vous pourrez exploiter à votre guise. (Exemple : Flash %HC_RESULT donnera une petite popup affichant "Frigo consommation=43.8W") La syntaxe est donc <action> <nom du périphérique ou son ID> Un des autre avantage d'un langage "naturel" est de pouvoir intégrer très facilement cela avec un système de reconnaissance vocal tel que AutoVoice pour les amoureux de la parole. Pour les technos : Il y a du code JavaScript la derrière qui interroge votre HC et exploite le JSON afin de trouver les ID des périphériques. Exemple "Consommation frigo", le nom "frigo" est cherché dans le json afin de pouvoir déterminer son id (exemple 32) puis on effectuer une requeste afin d'obtenir le json du device 32. Après, on parse le tout pour trouver valueSensor. Voilà pour plus d'information, c'est directement sur le tuto. Amusez-vous bien
  2. Steven

    De Paw Vers La Hc2

    Voilà: ICI
  3. Steven

    Support Gea

    Ta réponse est sà»rement ici : http://www.domotique-fibaro.fr/index.php/topic/934-erreur-403-sauvegarde-de-sc%C3%A8ne/ ou ici : http://www.domotique-fibaro.fr/index.php/topic/1375-403-access-forbidden/ En gros, soit tu n'es pas admin, soit tu as l'alarme d'activée
  4. Steven

    Offre Flash Netatmo

    I'm back (désolé mais j'aime bien les weekend) Allez, on attaque ... ton erreur est là dedans .. lequel, je sais pas mais c'est là , j'ai fait des tests pour y arrivé, des recherches poussées, 72 heures non-stop, sans boire ni manger, ni ... ok ok, on se calme : var hc2_ip = "www.xxxxxxxxxx.xxxxxxx"; var hc2_login = "xxxxxxxxxx"; var hc2_password = "xxxxxxxxxxxx"; var hc2_module_virtuel = 106; Allez, on va trouver. A la fin du script du devait y trouver ceci function doIt() { try { auth() getDevices() getMesuresInt() if (ext_id != "") getMesuresExt() if (rain_id != "") getMesuresRain() log() toHC2() } catch (e) { // Ca ira surement mieux la prochaine fois } } .Que tu vas remplacer par function doIt() { try { auth() getDevices() getMesuresInt() if (ext_id != "") getMesuresExt() if (rain_id != "") getMesuresRain() log() toHC2() } catch (e) { Logger.log("Gwendal fait que des bêtises , des bêtises quand t'es pas là : " + e ); } } Ensuite tu relances doIt et tu regardes encore le log (tu commence à le connaitre par coeur ?) S'il te dit que l'erreur est : Erreur DNS : Tu connais même pas ton adresse externe . hahaha.. hihihi.. pffft Code renvoyé : 401 .. t'es un gros naze qui connait pas son mot de passe ou son login ... nah.nah.nah.nhair Code renvoyé : 404 .. Il est parti ou ton module virtuel ? En vacances. Ouch, je suis en forme aujourd'hui et bien évidemment, il faut prendre cela au 10.12345E niveaux.
  5. Steven

    Offre Flash Netatmo

    Pourrais tu me copier tout le log au complet... dans un fichier joint Attention de ne pas laisser apparaître ton login / mot de passe.
  6. Dans mon exemple plus haut je t'ai donner le code pour récupérer la valeur du slider.
  7. Steven

    Offre Flash Netatmo

    Celle où on voit son id
  8. Steven

    Offre Flash Netatmo

    Tu arrives me faire un capture de ton module virtuel ?
  9. Steven

    Meteoalerte

    @Gwendal Il y a une bonne explication ici FORUM FIBARO :: Search http://forum.fibaro.com/search.php?search_author=leon&sid=9cac8f29955ead11536902261289d7e0
  10. Steven

    Meteoalerte

    @lolomail C'est le même que quelques post plus haut sauf qu'àla ligne 39 il faut enlever les "", juste avant "danger".
  11. Je l'aime déjà Contrairement àcertains responsables sur ce forum morbide et sans vie
  12. Steven

    Support Gea

    En effet impossible de flinguer un truc aussi mort que cela. Tu as oublié de préciser que hier soir, j'étais àmon repas de famille annuel et que j'ai du planter tout mes convives.
  13. Steven

    Offre Flash Netatmo

    Si tu es sûr des paramètres que tu as saisi, je vois rien de bloquant. Dans un navigateur si tu tappe http://login:password@www.xxxxx.no-ip.org/api/devices?id=41 qu'est-ce que tu as comme retour ?
  14. Tu traites ma femme de vache ou de chèvre ? Ok je l'avais bien mérité ton post
  15. J'ai cru que tu avais besoin d'un sleep entre le getValue et le debug :-) Entre le call et le getValue, comme tu le dis, cela semble compréhensif.
  16. Steven

    Meteoalerte

    Version 1.40 Correction du status relevé par JM13 Ajout de la possibilité de personnalisé l'icone selon le status en cours (demandé par Gwendal) Merci JM13 pour avoir pointé le problème. Si tu n'as pas d'affichage c'est que justement du est dans le mode "" qui aurait dà» être "danger". Attention, il faut relativisé l’appellation "danger" fournie par Météo France ;( Personnellement, je viens d'adopter ton icône Tu n'aurais pas la même mais avec beaucoup beaucoup de pluie ... cela correspondrait mieux à chez moi
  17. Steven

    Meteoalerte

    Je me suis posé la même question en rajoutant les icones ... je vais rechercher pourquoi j'avais fait cela mais il ce peux que cela soit une erreur de ma part
  18. nil correspond à rien "" correspond à une chaîne de caractère vide. Donc local MaVariable = nil if (MaVariable == nil) then fibaro:debug("Ma variable est rien, nada, un trou noir") else fibaro:debug("Ma variable existe et contient : " .. MaVariable) end Surprenant que tu ailles besoin d'un sleep, c'est extrêmement rare. local MaVariable = fibaro:getValue(xx, 'value') fibaro:debug('Valeur de la variable:' .. MaVariable) -- OU fibaro:debug('Valeur :' .. fibaro:getValue(xx, 'value')) -- Ne doivent pas nécessiter de sleep, sinon c'est qu'il y a un soucis :-(
  19. Tu l'auras voulu ... ta mission de ce jour .. créer ce module virtuel : Quand tu bouges le slider, ce dernier affiche sa valeur dans le label du dessus. Code derrière le slider : local id_de_ce_mv = fibaro:getSelfId() -- Permet de récupéré l'identifiant du module virtuel local valeur_du_slider = fibaro:getValue(id_de_ce_mv, "ui.Slider1.value") -- Permet de récupérer la valeur du slider "Slider1" du module virtuel fibaro:call(id_de_ce_mv, "setProperty", "ui.Label1.value", valeur_du_slider) -- Permet de modifier la valeur du label "Label1" du module en cours -- On lui assigne la valeur du slider contenu dans valeur_du_slider .. Explication en image :
  20. Définition, il faut éviter Lyon, déjàmoicphil, maintenant toi ;-) J'ai été àLyon l'année dernière... Mais petite question : Maintenant, vous avez enfin l'électricité ?
  21. Steven

    Meteoalerte

    Allez, je t'aide Remplace le code qui est derrière le bouton [Vérifier] par celui-ci : -- -------------------------------------------------------------------------------------------------------------- -- 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.30" -- V1.10 - Isolation des éventuelles erreurs -- V1.20 - Envoi possible sur plusieurs smartphones -- V1.30 - Correction problème Main Loop -- -------------------------------------------------------------------------------------------------------------- if (not MeteoAlerte) then MeteoAlerte = {} -- !!! VOS PARAMETRES !!! MeteoAlerte.dep = 74 -- votre département MeteoAlerte.smartphone = {70} -- {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"); 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 icones = {-1, -1, -1, -1, -1, -1} local result = 0 local crue = 0 local xmlTable = MeteoAlerte.getXml() if (xmlTable) then local evs = xmlTable.cartevigilance for i in pairs(evs:children()) do for j in pairs(evs:children()[i]) do if (evs:children()[i]:name() == "datavigilance") then for k in pairs(evs:children()[i]:properties()) do if (tonumber(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 crue = tonumber(evs:children()[i]:children()[1]["@valeur"]) fibaro:debug("Crue trouvéee : ".. crue) 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.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] .. "]") end end end if (result and MeteoAlerte.globalvariable and MeteoAlerte.globalvariable ~= "") then fibaro:setGlobal(MeteoAlerte.globalvariable, 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", "...") 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 . . Ensuite ligne 40 : local icones = {-1, -1, -1, -1, -1, -1} Remplace les -1 par le numéro de tes icônes (de inconnu à exceptionnel). Si tu n'as pas d'icône laisse le -1. Si jamais cela ne fonctionnait pas, appel fredo
  22. Steven

    Meteoalerte

    Oui tu peux ;-)
  23. Salut seb, 1) GEA.add(......, {{"Portable", 90}, {"Portable", 120}} Permet de spécifier pour chaque action le/les portables qui seront notifié. Les portables déclarés dans GEA.portables ne seront pas notifiés. Cela permet donc de remplacer temporairement les portables à exploiter. 2) Impossible avec GEA. GEA ne s'active que toutes les X secondes (30 secondes par défaut) afin de ne pas trop charger la HC2. Il ne peux rien faire à moins de 30 secondes d'intervalle. Ce qu'il faut faire dans des cas pareil c'est, éventuellement, utilisé GEA pour lancer un scénario qui va dimmer ta lampe chaque secondes dans un thread (tâche) à part. 3) C'est déjà faisable mais tordu --1er clique sur l'interrupteur des toilette, la variable globale "Toilette" passe à 1 --2ème clique sur l'interrupteur la variable passe à 2 GEA.add(id["TOILETTE"], -1, "", {{"Global", "Toilette", "1"}, {"If", {{"Global", "Toilette", ""}}}}) GEA.add(id["TOILETTE"], -1, "", {{"Global", "Toilette", "2"}, {"If", {{"Global", "Toilette", "1"}}}}) -- Un seul clique alors on éteint après 5 minutes et remet la variable à "" GEA.add(id["TOILETTE"], 5*60, "", {{"If", {{"Global", "Toilette", "1"}}}, {"Global", "Toilette", ""}}) -- Deuxième clique alors on éteint après 10 minutes et remet la variable à "" GEA.add(id["TOILETTE"], 10*60, "", {{"If", {{"Global", "Toilette", "2"}}}, {"Global", "Toilette", ""}}) Voilà ... bien à toi.
  24. On a le droit au emballage de préservatif ?
  25. Sa seule intelligence Edit : artificielle bien sà»re. .. Je sors, c'est pour taquiner.
×
×
  • Créer...