Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'script'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

15 résultats trouvés

  1. Je vous propose le script suivant qui émule la méthode "fibaro.call" moyennent quelques ajustements: Version 1.0.0 La prise en charge de callbacks (success, error) Le support du retard d'action (actuellement proposée par l' API mais non visible depuis la méthode intégrée call) Code lisible: -- Name: callAction -- Description: Trigger an action of the specified device -- Arg1: id [number] Device id -- Arg2: actionName [string] Action name -- Arg3: params [array] { delay [number], args [array] (option), success [function] (option), error [function] (option) } -- Return: nothing function callAction(id, actionName, params) local url = "http://127.0.0.1:11111/api/devices/" .. id .. "/action/" .. actionName local headers = { ["content-type"] = "application/json;charset=UTF-8", ["X-Fibaro-Version"] = "2", ["Cache-Control"] = "no-cache, no-store" } params = params or {delay=0, args={}} local args = params.args if (#args==0) then args = {{}} end assert(tonumber(params.delay), "callAction(id, actionName, delay, ...), delay argument must be an integer") local delay = tonumber(params.delay or 0) if (delay < 0) then delay = 0 end local arguments = { args = args, delay = delay } local http = net.HTTPClient({ timeout = 20000 }) http:request(url, { options = { headers = headers, method = "POST", data = json.encode(arguments) }, success = function(status) if (params.success ~= nil and type(params.success) == "function") then params.success(status.status, status.data) end end, error = function(error) if (params.error ~= nil and type(params.error) == "function") then params.error(error) end end }) end Version minifiée: Taux de compression du code: 48.53% function callAction(a,b,c)local d="http://127.0.0.1:11111/api/devices/"..a.."/action/"..b;local e={["content-type"]="application/json;charset=UTF-8",["X-Fibaro-Version"]="2",["Cache-Control"]="no-cache, no-store"}c=c or{delay=0,args={}}local f=c.args;if#f==0 then f={{}}end;assert(tonumber(c.delay),"callAction(id, actionName, delay, ...), delay argument must be an integer")local g=tonumber(c.delay or 0)if g<0 then g=0 end;local h={args=f,delay=g}local i=net.HTTPClient({timeout=20000})i:request(d,{options={headers=e,method="POST",data=json.encode(h)},success=function(j)if c.success~=nil and type(c.success)=="function"then c.success(j.status,j.data)end end,error=function(k)if c.error~=nil and type(c.error)=="function"then c.error(k)end end})end Un exemple d'utilisation pour illustrer: local params = { delay = 0, args = {"arg1", "arg2"}, success = function(status, data) print("success") print(status) end, error = function(error) print("error") end } -- Arg1: id [number] Device id -- Arg2: actionName [string] Action name -- Arg3: params [array] { delay [number], args [array] (option), success [function] (option), error [function] (option) } callAction(946, "turnOff", params) A venir dans une prochaine version: Sécurisation de l’exécution (via pcall) Une action poussée sur plusieurs périphériques Plusieurs actions poussées sur un périphérique Amusez-vous bien
  2. Dogwhite

    Script test piles des modules Fibaro

    Bonjour, J'ai trouvé et testé ce script en cherchant sur le net. Fonction : test des piles de vos modules Fibaro. Auteur : boomx Source : http://www.siio.com/general/software/easy-lua-scripts-part-1-battery-check-12255/
  3. jjacques68

    aide script PHP

    Bonjour tout le monde... Voilà je me mets tout doucement à faire des scripts php. Là dans l'immédiat serait de faire que la HC2 se coupe lorsque mon synology s'éteint à cause d'une alerte de l'UPS. J'en suis au stade où j'arrive à l'éteindre automatiquement quand le syno s'éteint... (hyper simple mais c'est un début ) Mais je galère comme un fou pour développer ! Vous avez pas une idée d'outil pour programmer en php sur un poste de dev (Windows) avec un debug, possibilité de faire des pauses, ... ? un vrai outil quoi, mais simple !! actuellement j'ai le service "Web Station" actif dans le syno avec mon script placé dans le bon répertoire. J'édite le .php avec Notepad++, mais pour le tester je passe dans le syno via la planificateur de tâche où je lance manuellement le script ... c'est lourd !!! avec le retour d'erreur par mail - horrible !! en cherchant sur le net j'ai trouvé Wamp, EasyPHP (semble assez compliqué) ou des sites qui permettent de tester en ligne... (bof...) merci pour votre retour !
  4. Bonsoir à tous, je je recherche une méthode pour exploiter les données de mes 4 pinces admperemetrique de l'IPX 800. je crois savoir qu'il faut passer par une base de données, et incrémenter celles des relevés console, mais mes connaissances s'arrêtent la ... je suis preneur d'un coup de main .... d'avance merci à tous
  5. Rem's

    Domotiser Mon Cumulus

    Bonjour à tous, Dans l'immédiat, je ne vais pas utiliser le contacteur Jour/Nuit. Je voudrai mettre au "cul" un module, mais lequel ...? Mon cumulus fait 300 L, pour une puissance de 3000 Watt. D'avance merci de vos conseils.
  6. Rem's

    Fonction Inverse

    Bonjour àtous, Je n'arrive pas àéditer cette même fonction avec un dimmer. if ( tonumber(ButtonPressed) == 3) then local inverse = {"turnOn", "turnOff"} fibaro:call(442, inverse[tonumber(fibaro:getValue(442, "value")) + 1]) fibaro:debug("Bt 2 : Lampe de chevet Rémy") Est-ce possible, si Oui, merci pour votre aide.
  7. Rem's

    Scene Zapping Tv

    Bonsoir à tous, Pour faire simple, je m'en sors pas .... !! Cette scene est un chiffon, issue de block convertie en Lua, avec ma sauce rajoutée dessus (ne venez pas manger ma cuisine .... indigeste !!) Aurait-il une âme charitable pour me démêler cette affaire. Je voudrai qu'aux heures dites cela actionne le VD de la free-télec, pour Zapper (da'illeurs j'ai appelé cette cène zapping TV ...!!!) De plus, je voudrai qu'à 12h, pour TLMVP et pour le 20h, si la TV n'est pas allumée, alors quelques appuis en plus pour, power (attente 10 sec), Ok (attente 3 sec), la chaine TV. --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "16:20") ) ) and ( fibaro:getGlobalValue("TV") == "On" ) then -- fibaro:call(56, "pressButton", "11") fibaro:debug("Cas° 1, TV déjà allumée") else -- fibaro:call(56, "pressButton", "1") -- Freebox power fibaro:sleep(10*1000); -- fibaro:call(56, "pressButton", "15") fibaro:sleep(3*1000) -- fibaro:call(56, "pressButton", "11") -- BFM TV fibaro:debug("Cas N° 2, TV déjà éteinte") fibaro:debug("TLMVP") end end local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "16:22") ) ) then -- fibaro:call(101, "pressButton", "22") fibaro:sleep(6*1000); -- fibaro:call(105, "pressButton", "4") fibaro:debug("12/45 M6") end local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "12:58") ) ) then -- fibaro:call(101, "pressButton", "5") fibaro:sleep(6*1000); -- fibaro:call(105, "pressButton", "1") fibaro:debug("Journal du 13H") end local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "19:57") ) ) and ( fibaro:getGlobalValue("TV") == "On" ) then -- fibaro:call(56, "pressButton", "8") fibaro:debug("Cas° 1, TV déjà allumée") fibaro:debug("Journal de 20h") else -- fibaro:call(56, "pressButton", "1") -- Freebox power fibaro:sleep(10*1000); -- fibaro:call(56, "pressButton", "15") fibaro:sleep(3*1000) -- fibaro:call(56, "pressButton", "8") -- BFM TV fibaro:debug("Cas N° 2, TV déjà éteinte") fibaro:debug("Journal de 20h") end local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "12:08") ) ) and ( fibaro:getGlobalValue("TV") == "On" ) then -- fibaro:call(56, "pressButton", "11") fibaro:debug("Cas° 1, TV déjà allumée") else -- fibaro:call(56, "pressButton", "1") -- Freebox power fibaro:sleep(10*1000); -- fibaro:call(56, "pressButton", "15") fibaro:sleep(3*1000) -- fibaro:call(56, "pressButton", "11") -- BFM TV fibaro:debug("Cas N° 2, TV déjà éteinte") fibaro:debug("TLMVP") end local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "16:20") ) ) then -- fibaro:call(101, "pressButton", "22") fibaro:sleep(6*1000); -- fibaro:call(105, "pressButton", "4") fibaro:debug("12/45 M6") end local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "16:22") ) ) then -- fibaro:call(101, "pressButton", "5") fibaro:sleep(6*1000); -- fibaro:call(105, "pressButton", "1") fibaro:debug("Journal du 13H") end local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "19:57") ) ) and ( fibaro:getGlobalValue("TV") == "On" ) then -- fibaro:call(56, "pressButton", "8") fibaro:debug("Cas° 1, TV déjà allumée") fibaro:debug("Journal de 20h") else -- fibaro:call(56, "pressButton", "1") -- Freebox power fibaro:sleep(10*1000); -- fibaro:call(56, "pressButton", "15") fibaro:sleep(3*1000) -- fibaro:call(56, "pressButton", "8") -- BFM TV fibaro:debug("Cas N° 2, TV déjà éteinte") fibaro:debug("Journal de 20h") end fibaro:sleep(60*1000); end D'avance merci pour le coup de main ....
  8. Voici un script pour l'extension Greasemonkey de Firefox afin de faciliter le login sur l'interface Web de notre box préférée : Remplissage automatique du compte admin Focus sur le champs Mot de passe Il ne reste plus qu'à taper le mot de passe, et appuyer sur la touche Entrée. Dans le panneau des extensions de Firefox, rechercher et installer Greasemonkey : Sur la gauche, cliquer sur le nouvelle section Scripts utilisateur, puis sur Nouveau Script... : Rentrer les informations suivantes : Nom : Fibaro HC2 Espace de nom : http://www.domotique-fibaro.fr Description : Remplie automatiquement le champ login avec le compte admin et met le focus sur le champs password Inclus : http://*/fibaro/*/home/login.html* Dans la fenêtre de l'éditeur qui s'ouvre, copier/coller le code suivant : // ==UserScript== // @name Fibaro HC2 // @namespace http://www.domotique-fibaro.fr // @description Remplie automatiquement le champ login avec le compte admin et met le focus sur le champs password // @include http://*/fibaro/*/home/login.html* // @version 1.0 // @grant none // ==/UserScript== var inputlogin = document.querySelectorAll("input#login"); inputlogin[0].value = "admin"; var inputpassword = document.getElementById("pwd"); inputpassword.focus(); Enregistrer et fermer la fenêtre, le script apparait : Aller sur la fenêtre de connexion de la box, qui devrait ressembler à ceci : Il ne reste plus qu'à taper le mot de passe, et appuyer sur la touche Entrée. Théoriquement, ce script doit également fonctionner pour l'extension Tampermonkey de Chrome (testé par @crazymonster999). Pour ceux qui voudraient aller plus loin et automatiser complètement le login (et qui n'ont pas peut de laisser leur mot de passe en clair dans le script) voir le message de @crazymonster999 plus bas dans cette page.
  9. Bonjour, Je débute dans les scripts lua et je me prends la tête depuis quelques jours sur un cas qui doit faire sourire les experts... Bref, c'est très simple... Je souhaterai enclencher à 23h et déclencher à 01h une scène et ceci tous les jours. Grâce aux différents tutos et docs trouvés sur le net, j'ai réussi à poser un script.. mais il est exécuté uniquement au démarrage de la box ou manuellement. Est-ce que vous pourriez m'indiquer ce qu'il manque pour qu'il soit exécuté automatiquement tous les jours. Mon script: --[[ %% autostart %% properties %% globals --]] local currentDate = os.date("*t") --stock la date et heure actuelle du système sous forme d'un tableau à l'intérieur de la variable currentDate fibaro:debug('Heure actuelle:' ..currentDate.hour) if (currentDate['hour'] >= 23 or currentDate['hour'] < 01) then fibaro:call(8, 'turnOn') else fibaro:call(8, 'turnOff') end Merci d'avance pour votre support ;-)
  10. Bonjour, A nouveau une question existentielle : J'entends souvent "parler" sur le forum de "Main loop" (je connaît déjà cet élément de programmation, et ma question ne concerne donc pas son rôle et son placement dans un script) 1) Peut-elle (ou doit-elle) exister sous la forme d'une structure de programmation unique, qui serait l'ossature de tout le fonctionnement (lire : qui comporterait plein de petits scripts - routines et sous-routines) du HC2 ? 2) Dans ce cas, où la placer ? Dans "Scènes" ? 3) Ou est-elle seulement la boucle principale des scripts associés aux modules, dans "Scènes"... boucle pouvant bien sà»r ne pas être explicitement dénommée "Main". Je penche pour cette dernière interprétation, compte tenu du "guidage" au sein du HC2 pour opérer de cette manière, ainsi que des nombreux exemples présentés. Je pense que dans ce cas, les scènes associées aux modules ou autres entités ont leur "propre vie" (bien qu'il ne s'agisse pas de vrais threads au sens propre du terme). Bon, je cause, je cause... Je me mets au boulot, ça sera plus constructif.
  11. Steven

    Pluviométrie Avec Netatmo

    PLUVIOMETRIE (ET ARROSAGE) AVEC NETATMO firmware 4.x seulement Partie 1 : récupérer l'historique Netatmo est une station météo sur laquelle vous pouvez brancher un "pluviomètre" de la même marque. Afin d'exploiter les données de ce pluviomètre et vous pouvez utiliser l'application Netatmo ou son site web. Vous pouvez aussi installer le plugin Netatmo fourni par Fibaro. Ce dernier vous affichera uniquement les données à l'instant précis ou vous être entrain de le regarder. Nous, nous voulons allez plus loin, nous voulons connaitre les quantités de pluie ayant eu lieu depuis : 1 jour, 1 semaine, 1 mois, cela dans l'optique de pouvoir gérer correctement notre arrosage. Pour ce faire, il existe un grand nombre de script PHP, Google Script qui permet de gérer cela .. mais ... depuis la v4.x, Fibaro nous fait bénéficier de la librairie net.httpClient dans une scène et cette librairie nous permet de récupérer des données via HTTPS, ce qui auparavant n'était pas possible depuis notre HC2. Alors vu que nous avons, aujourd'hui, tout le nécessaire pour attaquer notre Netatmo directement depuis notre HC2, pourquoi s'en priver Les données recueillies par votre Netatmo sont mis à diposition via des API que vous pouvez interroger quand bon vous semble à la seul condition d'avoir un compte Développeur Netatmo (ne vous inquiéter pas, vous n'aurez pas beson de développer, ni de répondre à des questions étranges). Pour vous inscrire, c'est donc ici : https://auth.netatmo.com/fr-FR/access/signup Suite à votre enregistrement, vous allez obtenir : un id (exemple : 45b1931d19665803515b571c) un code secret (exemple : lyRkJXZLIM8xShACtmQjsCQV4U3djL08Zq1hUStbUJ4) Ces informations + votre login et mot de passe vont permettre d'accéder à vos informations. Voici donc le script nécessaire, à vous de l'importer dans une nouvelle scène et de modifier les 4 premières lignes. local n_client_id = "45b1931d19665803515b571c" local n_client_secret = "lyRkJXZLIM8xShACtmQjsCQV4U3djL08Zq1hUStbUJ4" local n_username = "______________@_____.com" local n_password = "password" local hc2_module_virtuel = 139 -- le module virtuel "Pluie" local debug = true -- affiche ou non les message dans la console local long_lat_adjust = 0.1 -- ajustement de la distance pour trouvé un pluviomètre local version = 2.0 -- ------------------------------------------------------------------------ -- NE PAS TOUCHER -- ------------------------------------------------------------------------ local force_use_rain_public = false local loc = api.get("/settings/location") local lat_ne = loc.latitude + long_lat_adjust local lon_ne = loc.longitude + long_lat_adjust local lat_sw = loc.latitude - long_lat_adjust local lon_sw = loc.longitude - long_lat_adjust local token = "" local int_id = "" local ext_id = "" local ext_bat = 0 local rain_id = "" local rain_bat = 0 local temperature_interieure = -1000 local temperature_exterieure = -1000 local co2 = -1000 local humidite_interne = -1000 local humidite_externe = -1000 local pression = -1000 local bruit = -1000 local rains = {hour = -1000, day = -1000, week = -1000, month = -1000} -- ------------------------------------------------------------------------ -- Exécuté après chaque requète HTTP -- ------------------------------------------------------------------------ function afterHttpRequest() if (temperature_interieure > -1000) then end if (temperature_exterieure > -1000) then end if (co2 > -1000) then end if (humidite_interne > -1000) then end if (humidite_externe > -1000) then end if (pression > -1000) then end if (bruit > -1000) then end if (rains["hour"] > -1000) then if (rains["hour"] == -1) then fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblHeure.value", "n/a") else fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblHeure.value", " "..rains["hour"]) end end if (rains["day"] > -1000) then if (rains["day"] == -1) then fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblJour.value", "n/a") else fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblJour.value", " "..rains["day"]) end end if (rains["week"] > -1000) then if (rains["week"] == -1) then fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblSemaine.value", "n/a") else fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblSemaine.value", " "..rains["week"]) end end if (rains["month"] > -1000) then if (rains["month"] == -1) then fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblMois.value", "n/a") else fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblMois.value", " "..rains["month"]) end end end -- ------------------------------------------------------------------------ -- Affichage dans la console -- ------------------------------------------------------------------------ function log(message, force) force = force or false if (debug or force) then print(__convertToString(message)) end end -- ------------------------------------------------------------------------ -- Retourne le niveau de batterie en pourcent -- ------------------------------------------------------------------------ function calcBat(bat, ext) local max = 6000 local min = 4200 if (ext) then max = 6000 min = 3600 end if (bat > max) then bat = max end return math.floor(bat * 100 / max) end -- ------------------------------------------------------------------------ -- Arrondi -- ------------------------------------------------------------------------ local function roundToNthDecimal(num, n) local mult = 10^(n or 0) return math.floor(num * mult + 0.5) / mult end -- ------------------------------------------------------------------------ -- Interrogation de l'API -- ------------------------------------------------------------------------ function getResponseData(url, body, func) local http = net.HTTPClient() http:request(url, { options = { method = 'POST', headers = { ["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8" }, data = body }, success = function(response) func(json.decode(response.data)) afterHttpRequest() end, error = function(response) log(" ERROR !!! " .. url, true) end, }) end -- ------------------------------------------------------------------------ -- Mesures de l'unité interne -- ------------------------------------------------------------------------ function getMesuresInt() getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&scale=max&type=Temperature,CO2,Humidity,Pressure,Noise&date_end=last", function(data) log("----------========== Module intérieur ==========----------") temperature_interieure = data.body[1].value[1][1] co2 = data.body[1].value[1][2] humidite_interne = data.body[1].value[1][3] pression = data.body[1].value[1][4] bruit = data.body[1].value[1][5] log("temperature_interieure = " .. temperature_interieure) log("co2 = " .. co2) log("humidite_interne = " .. humidite_interne) log("pression = " .. pression) log("bruit = " .. bruit) end ) end -- ------------------------------------------------------------------------ -- Mesure de l'unité externe -- ------------------------------------------------------------------------ function getMesuresExt() getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&module_id="..ext_id.."&scale=max&type=Temperature,Humidity&date_end=last", function(data) log("----------========== Module extérieur ==========----------") temperature_exterieure = data.body[1].value[1][1] humidite_externe = data.body[1].value[1][2] log("temperature_exterieure = " .. temperature_exterieure) log("humidite_externe = " .. humidite_externe) end ) end -- ------------------------------------------------------------------------ -- Obtention des informations sur un pluviomètre proche -- ------------------------------------------------------------------------ function getRainNear() getResponseData("https://api.netatmo.net/api/getpublicdata","access_token="..token .. "&lat_ne="..lat_ne.."&lon_ne="..lon_ne.."&lat_sw="..lat_sw.."&lon_sw="..lon_sw, function(data) --log(data) rains["week"] = -1 rains["month"] = -1 rains["hour"] = -1 rains["day"] = -1 log("----------========== D e v i c e s =========----------") for _, v in pairs(data.body) do for l, w in pairs(v.measures) do if (type(w.rain_24h) ~= "nil") then rains["day"] = w.rain_24h rains["hour"] = w.rain_60min end end end if (rains["day"] == -1000) then log("Impossible de trouver un pluviomètre à proximité, augmentez [long_lat_adjust]", true) else log("Pluie jour : " .. rains["day"]) log("Pluie heure : " .. rains["hour"]) end end ) end -- ------------------------------------------------------------------------ -- Mesure du détecteur de pluie historique -- ------------------------------------------------------------------------ function getMesuresRain(duree, variable) local now = os.time(); getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&module_id="..rain_id.."&scale=1hour&type=sum_rain&real_time=true&date_begin="..os.date("!%c", (now - duree)), function(data) log("----------========== Pluie histo ==========----------") local cumul = 0 for k, v in pairs(data.body) do for l, w in pairs(v.value) do cumul = cumul + w[1] end end cumul = roundToNthDecimal(cumul, 2) rains[variable] = cumul log("rain["..variable.."] = " .. rains[variable]) end ) end -- ------------------------------------------------------------------------ -- Obtention des informations sur les devices -- ------------------------------------------------------------------------ function getDevices() getResponseData("https://api.netatmo.net/api/devicelist","access_token="..token, function(data) log("----------========== D e v i c e s =========----------") for _, v in pairs(data.body.modules) do if (v.data_type[1] == "Rain") then rain_id = v._id rain_bat = calcBat(v.battery_vp, true) else ext_id = v._id ext_bat = calcBat(v.battery_vp, true) end end int_id = data.body.devices[1]._id getMesuresInt() getMesuresExt() if (rain_id ~= "" and not force_use_rain_public) then getMesuresRain(60 * 60, "hour") getMesuresRain(60 * 60 * 24, "day") getMesuresRain(60 * 60 * 24 * 7, "week") getMesuresRain(60 * 60 * 24 * 30, "month") else getRainNear() end end ) end -- ------------------------------------------------------------------------ -- Authentification -- ------------------------------------------------------------------------ function auth(nextFunction) local request_body = "grant_type=password&client_id=" .. n_client_id .. "&client_secret=" .. n_client_secret .. "&username=" .. n_username .. "&password=" .. n_password .. "&scope=read_station" getResponseData("https://api.netatmo.net/oauth2/token", request_body, function(data) token = data.access_token log(token) nextFunction() end ) end auth(getDevices) log("Last request : " .. os.date("%x - %X"), true) si vous avez l'âme d'un développeur ou d'un aventurier, la méthode à modifier est afterHttpRequest() sinon, rendez-vous au post suivant. P.S. Merci à @PITP2 pour son support. Edit : nouvelle version du script. Si ce dernier détecte que vous n'avez pas de pluviomètre, il va rechercher un pluviomètre à proximité de chez vous (uniquement les relevés de la dernière heure et jour). La distance de recherche peux être adaptée en ajustant la variable long_lat_adjust (0.1 par défaut). Il s'agit du cercle de recherche en latitude/longitude autour de chez vous.
  12. Compatible uniquement 4.x (pour la 3.60 ... c'est ICI ... merci DMK2424) L'idée est de générer automatiquement le tableau d'ID utilisé dans GEA ou autres scripts. Ainsi, il sera possibile à chaque mise à jour de votre HC2, de simplement relancer le générateur, copier le résultat dans GEA et vos ID seront donc remis à jour. Voici le tableau dont je parle : local id = { --inconnu LUA_SNIPPETS = 141, --Garage OREGON = 128, SURPRESSEUR = 118, CAMERA = 123, PORTE_GARAGE = 238, DETECTEUR_PORTE = 112, PORTE_GARAGE_GARAGE = 64, --Jardin TEMPERATURE = 69, SEISMOMETRE = 71, HUMIDITE = 261, DETECTEUR = 68, NETATMO = 137, PLUVIOMETRE = 262, LUMINOSITE = 70, LAMPE_OUEST = 234, PLUIE = 139, COIN_REPAS = 14, PRESSION_ATMOSPHERIQ = 258, TERRASSE = 160, METEOALERTE = 150, ARROSAGE = 158, NETATMO_EXTERIEUR = 260, --Local Technique LIVEBOX = 251, IPX800_RELAIS = 106, PORTE_LOCAL = 56, VMC_DOUBLE_FLUX = 114, LAVE_LINGE = 120, PLAFONNIER = 54, PASSERELLE_NETATMO = 135, PASSERELLE_ZIBASE = 126, --Entrée CAMERA_ENTREE = 129, DETECTEUR_ENTREE = 5, LUMINOSITE_ENTREE = 7, SEISMOMETRE_ENTREE = 8, PLAFONNIER_ENTREE = 10, PORTE_ENTREE = 58, TEMPERATURE_ENTREE = 6, --Cuisine SIRENE = 200, BRITA__FILTRE_ = 131, CUISINE = 237, CAPTEUR_FUMEE = 46, ALARME_FUMEE = 48, FRIGO = 52, TEMPERATURE_CUISINE = 47, LAVE_VAISSELLE = 50, TABLETTE = 176, --Chambre parentale SECHE_SERVIETTE = 60, --Salon CHAUFFAGE = 104, HUMIDITE_SALON = 257, CO2 = 256, NETATMO_SALON = 255, SONOMETRE = 259, POELE = 34, OREGON_SALON = 127, TV = 39, HIFI = 42, BLUE_RAY = 41, OPENKAROTZ = 133, ROMBA = 43, LUMIERE_SALON = 107, PRISE_LIBRE = 44, BRISE_SOLEIL = 105, WI = 40, KAROTZ = 134, NETATMO_SALON_SALON = 136, --Chambres PLAFONNIER_KENDRA = 23, PLAFONNIER_NORA = 18, TEMPERATURE_CHAMBRES = 147, FENETRE_NORA = 143, FENETRE_KENDRA = 145, OREGON_CHAMBRES = 138, FENETRE_NOLAN = 149, PLAFONNIER_NOLAN = 21, --Couloir PORTE_TERRASSE = 153, APLIQUE_ESCALIER = 25, TEMPERATURE_AU_SOL = 155, SPOTS = 230, LEDS_ESCALIER = 27, --Divers ANDROID_FILES = 162, IMPERIHOME = 208, TYPE_DE_JOURNEE = 110, EVENEMENTS = 173, NETATMO_DIVERS = 253, CLOCK_SYNC = 252, UPDATE_NOTIFIER_1_0_6 = 206, AGENDA = 178, MY_BATTERIES = 130, VACANCES_SCOLAIRES = 151, } Ce générateur ce base sur les noms des modules et des pièces que vous avez déclarer. Il va donc parcourir tous vos modules, prendre leur nom et le transformer (majuscule, suppression caractères spéciaux, ...). Si le nom existe deux fois, il va le suffixer du nom de la pièces (ex : DETECTEUR_GARAGE). Donc, si comme moi, vous ne changer pas régulièrement le nom de vos modules, ce générateur va vous permettre de gagner quelques précieuses minutes. Usage ... simple, copier le code ci-dessous et lancer le script avec le bouton "start". Une fois le script terminé, il va vous affiché le tableau dans la fenêtre de debug, il ne vous suffira plus que de le copier dans vos scripts. Il est possible de spécifier les ID ou type de module que vous ne voulez pas prendre en compte. Vous pouvez aussi préciser si vous souhaiter prendre en compte les modules caché ou mort. Voici donc le script dans sa globalité : --[[ %% properties %% globals --]] local hidden = false --- true pour exporter les devices cachés local dead = false -- true pour exporter les devices morts local excludeType = {"com.fibaro.zwaveDevice", "weather", "HC_user", "iOS_device", "com.fibaro.voipUser"} local excludeID = {} local devicesJSon = api.get("/devices") local devices = {} local names = {} local rooms = {} function addName(name, roomname) if (type(names[name]) == "nil") then names[name] = true return name else return addName(name.."_"..roomname, roomname) end end function getRooms() local roomsJSon = api.get("/rooms") rooms[0] = "inconnu" for k, v in ipairs(roomsJSon) do rooms[v.id] = v.name end end function rename(name, roomname) local name = name:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_") local roomname = roomname:upper():gsub("[éêèà«]", "E"):gsub("EE", "E"):gsub("[à»à¼ù]", "U"):gsub("UU", "U"):gsub("[à âà¤]", "A"):gsub("AA", "A"):gsub("[à¶ô]", "O"):gsub("OO", "O"):gsub("[îà¯]", "I"):gsub("II", "I"):gsub("%W", "_") return addName(name, roomname) end getRooms() for k, v in pairs(devicesJSon) do local doit = (hidden or v.visible) and (dead or not v.dead) if (doit) then for h, w in pairs(excludeType) do if (v.type == w) then doit = false end end if (doit) then for h, w in pairs(excludeID) do if (v.id == w) then doit = false end end end end if (doit) then table.insert(devices, v) end end table.sort(devices, function(a, return a.roomID<b.roomID end) local result = "<BR><BR>-- IDs générés le : " .. os.date("%d/%m/%y à %X") local room = -1 local lastinfo = ""; result = result .. "<BR><BR>local id = {" for k, v in ipairs(devices) do if (room ~= v.roomID) then room = v.roomID result = result .. "<BR>--"..rooms[v.roomID].."<BR>" end lastinfo = rename(v.name, rooms[v.roomID]) result = result .. lastinfo .. " = " .. v.id .. ", " end result = result .. "<BR>}" result = result .. "<BR>" result = result .. "<BR>-- usage :" result = result .. "<BR>-- fibaro:getValue(id[\""..lastinfo .."\"], \"value\")" result = result .. "<BR>-- GEA.add(id[\""..lastinfo .."\"], 30, \"\")" print(result) Il ne vous restera plus qu'à utiliser les ID ainsi fibaro:getValue(id["DETECTEUR_GARAGE"], "value") GEA.add(id["DETECTEUR_GARAGE"], -1, "La porte du garage est entrain de s'ouvrir") ATTENTION : Les déclencheurs doivent et devront toujours être changé par vos soins ATTENTION 2 : Si vous ne comprenez pas l'usage de ce script, c'est sà»rement parce que vous n'en avez pas l'utilité Icone by @Did (Merci)
  13. Rem's

    Code Lua Avec Plage Horaire

    Bonsoir a tous, J'essaye de faire fonctionner cette scène, mais je dois avoir une erreur quelque part ... Help Please ... --[[ %% properties %% globals --]] local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "22:49") ) ) then fibaro:call(131, "turnOn"); fibaro:call(43, "turnOn"); fibaro:call(2, "sendDefinedSMSNotification", "3366162XXXX", "10"); fibaro:debug("Allumage lumières") end if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "22:50") ) ) then fibaro:call(131, "turnOff"); fibaro:call(43, "turnOff"); fibaro:call(2, "sendDefinedSMSNotification", "33661620092", "9"); fibaro:debug("Extinction limières") end fibaro:sleep(60*1000);
  14. Je me souviens que la demande avait été faite, mais je ne me souviens pas d'une éventuelle réponse. Dans le cas ou je me trompe, ce morceau de code ne servira peut-être jamais function turnIt(mode) -- On parcours les 350 premiers modules for i = 1, 1000 do -- Si un module est de type Eclairage local ret = fibaro:get(i, 'isLight') if (type(ret) == "string" and string.find(ret, "1" )) then -- On l'allume ou l'éteint fibaro:call(i, mode) end end end turnIt("turnOn") --turnIt("turnOff") turnIt("turnOf") permet donc d'allumer tout les modules de type "Eclairage", turnIt("turnOff") en revanche, permet de tout éteindre.
  15. Moicphil

    Plugin Freebox V6

    Voila un super plugin pour les possesseurs d'une freebox V6 ! Vous connaissez tous l'auteur, puisqu'il est présent sur le forum...il s'agit de Krikroff ! Au passage, j'ai adoré la rédaction du sujet, présentation...etc. Je tiens personnellement à te féliciter pour le travail que tu fais pour les possesseurs d'une HC2. Nous t'attendons ici JC pour commenter ton plugin... Sans plus attendre...voici le lien de l'article : http://domotique-info.fr/2014/01/home-center-2-lua-freebox-avec-krikroff/
×