-
Compteur de contenus
4 434 -
Inscription
-
Dernière visite
-
Jours gagnés
201
Tout ce qui a été posté par Steven
-
Hi, This script is just a working dead project There is many simulator available so I stopped mine.
-
Qu'ils ne sont relié à rien.
-
Tente avec cette version, netatmo avait changé quelques appels. Cette vesion fonctionne (hromis les API not found) qui n'ont pas d'impact. local n_client_id = "XXXX" local n_client_secret = "XXXX" local n_username = "XXXX" local n_password = "XXXX" local hc2_module_virtuel = 161 -- 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.01 -- ------------------------------------------------------------------------ -- 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 fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblTemp.value", temperature_exterieure .. "°C") end if (co2 > -1000) then fibaro:setGlobal("CO2", co2) end if (humidite_interne > -1000) then end if (humidite_externe > -1000) then fibaro:call(hc2_module_virtuel, "setProperty", "ui.lblHum.value", humidite_externe .. "%") 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) fibaro:startScene(41, { {param1 = "https://maker.ifttt.com/trigger/temperature/with/key/bsq3BICI2o2mAWSK8-X51l"}, {param2 = "POST"}, {param3 = 'application/json'}, {param4 = json.encode({["value1"]=temperature_interieure, ["value2"]=humidite_interne, ["value3"]=co2})}, }) 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 --fibaro:debug(v.module_name) if (v.data_type[1] == "Rain") then rain_id = v._id rain_bat = calcBat(v.battery_vp, true) elseif (v.module_name == "Module extérieur") then ext_id = v._id ext_bat = calcBat(v.battery_vp, true) end end int_id = data.body.devices[1]._id getMesuresInt() getMesuresExt() log(rain_id) 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)
-
Surtout pour les 21° :-)
-
Vu le nombre de simulateurs présents rien que sur ce forum, j'ai décidé de mettre un terme à ce projet.
-
Perso, le seul problème que j'ai constaté sur cette version est la météo : Heuuu, il fait 30° et la lune est partie depuis un moment 11h28.
-
C'est tout bon, merci les gars.
-
Retour de vacances oblige ... désolé pour le délai. google.php
-
Il faut utiliser le inc+(#value#)
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Petite correction de ma part ... seul @Lazer et @Barelle on du mérite. Perso, je n'ai rien fait du tout.
-
Sur Synology, aller dans Serveur Web, Serveurs PHP, double click sur le serveur PHP desiré et activer curl.
-
J'ai tenté rapidement avec GoJS une autre représentation pour voir les éléments par pièce ... c'est encore plus tordu que je pensais. Le plus fort est le maillage entre le jardin et l'entrée ... qui, de 1, sont à l'opposé de la maison et de 2 la boxe est centrée dans la maison. Donc cela part de la box sur le spot entrée qui est au Nord pour partir à l'opposé de la maison sur l'Arrosage qui est à l'opposé du rez-de-chaussé. Hummmm ... intéressant tout cela. EDIT : Ceci est entièrement basé sur le code fournit par @Barelle
-
@Barelle Je confirme aussi, génial merci. Cela m'a permis, aussi, de comprendre que le maillage est ... parfois ... tordu EDIT : Je me suis permis d'ajouter l'ouverture, sur double click, de la page de configuration : // initialize your network! var network = new vis.Network(container, data, options); network.on("doubleClick", function(params) { <?php echo "var url = 'https://" . $HC2Ip . "/fibaro/en/devices/configuration.html?id=';"; ?> window.open(url + this.getNodeAt(params.pointer.DOM),'_blank'); }); Attention, perso, je suis en httpS.
-
En tout cas, je confirme l'erreur avec la 4.503 ... celle-ci mérite bien le nom de "Béta" car j'ai pas mal d'erreur avec l'utilisation des APIs.
- 12 330 réponses
-
- 1
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Cela ne l'ai pas car GEA utilise un pcall et vérifie l'existence des VG au démarrage. Ce qui est bloquant, c'est lors de la migration si une variable a plus de 3 valeurs possible, Fibaro retourne comme quoi cette variable n'existe pas. Donc GEA qui check l'existence des variables globales au démarrage ne va pas démarrer et afficher comme quoi il n'a pas trouvé cette VG. Il suffit juste de recréer cette VG et le tour est joué.
-
-
Perso, j'ai des caméras de type FOSCAM et la détection de mouvement avec envoi sur URL n'a jamais vraiment fonctionné bien que cela devrait, normalement, le faire. J'ai palier à ce soucis en utilisant la détection depuis le Synology qui lui fonctionne correctement.
-
@pepite J'ai eu le soucis uniquement sur une VG qui avec 4 valeurs possibles, celles avec 3 ou moins n'ont pas posé de problème. @Indyana if (pcall(function() fibaro:setGlobal('MaVariable', 'MaValeur') end)) then -- tout va bien else --- erreur end -- Si tu ne souhaites pas traiter l'erreur tu peux faire directement pcall(function() fibaro:setGlobal('MaVariable', 'MaValeur') end)
-
Attention avec vos scripts. Si un ID ou une variable globale n'existe pas, le comportement actuel n'est pas le même que d'habitude. Voici un exemple ... pour info, l'erreur bloque l'exécution du script si ce dernier n'est pas protégé par un "pcall". [DEBUG] 22:07:03: Nb runs : 1 | id : 56 | G.Variable : Chauffage [DEBUG] 22:07:03: ---------------------------------------------- [DEBUG] 22:07:03: [DEBUG] 22:07:03: getValue Exist : 0s [DEBUG] 22:07:03: [1;31m2018-07-02 22:07:03.326661 [ error] API: Not found [DEBUG] 22:07:03: getValue Not Exist : 0s [DEBUG] 22:07:03: setValue : 0s [DEBUG] 22:07:03: getGlobal Exist : 0s [DEBUG] 22:07:03: [1;31m2018-07-02 22:07:03.342580 [ error] API: Not found [DEBUG] 22:07:03: getGlobal Not Exist : 0s [DEBUG] 22:07:03: setGlobal : 0s [DEBUG] 22:07:03: getType : 0s [DEBUG] 22:07:03: getName : 0s [DEBUG] 22:07:03: getRoomID : 0s [DEBUG] 22:07:03: [1;31m2018-07-02 22:07:03.419833 [ error] API: Not found [DEBUG] 22:07:03: getRoomName : 0s [DEBUG] 22:07:03: getSunrise : 0s [DEBUG] 22:07:03: [DEBUG] 22:07:03: ---------------------------------------------- [DEBUG] 22:07:03: ALL DONE A voir pour le getRoomName car il vérifie un ID de pièce existant. EDIT : fibaro:getRoomName(<ID DE LA PIECE>) semble définitivement mort.
-
Pour les soucis entre GEA et "API: Host not found (authoritative)" qui est bloquant. Voici ma solution : J'avais une variable globale "Lave_Linge" qui pouvait prendre les valeurs suivantes "RUNING, WAITING, PREPARATION et OFF" Elle provoquait l'erreur en question. J'ai supprimé cette variable et recréé sous le nom "LaveLinge", modifié mon GEA et tout est à nouvequ en ordre. Le problème ne semble pas venir du nom de la variable avec un "_" (j'en ai d'autre) mais probablement du nombre de valeurs possibles. Bref, le fait de la recréé avec les mêmes valeurs fonctionne à nouveau.
-
Ce test ne me plaît pas, il manque les accolades à la 1ère ligne et il faut bien sûr que la porte reste ouverte plus de 30s. Cela fonctionne très bien si on respecte la règle de "la même instance".
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
<= 0.3 est la même chose que < 0.4 soit {"Power-", 364, 0.4} Et si je ne me trompe pas, c'est 0.4 est non 0,4
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Il faudrait analyser tes lignes qui s'exécute toutes les minutes. Arriverais-tu nous faire un message concernant ces dernières s'il te plait.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
-
Je vais donc te mettre à contribution si tu as le temps. Pourrais-tu ajouter la ligne indiquée par -- CETTE LIGNE-- dans ton code et tester le #name# s'il te plait. o_r = {name="Or", optimize = true, keepValues = true, -- CETTE LIGNE --- getName=function(...) local args = {...} local name = "" for i = 1, #args do if (GEA.getOption(args[i]).check()) then name .. GEA.getOption(args[i]).getModuleName() .. " " end end return name end, -- FIN --- control=function(...) local args = {...} for i = 1, #args do if (type(GEA.getOption(args[i]))=="nil") then return false end end return true end, getValue=function(...) local args = {...} for i = 1, #args do if (GEA.getOption(args[i]).check()) then return true end end return false end, },
- 12 330 réponses
-
- 1
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :