Aller au contenu

Steven

Membres confirmés
  • Compteur de contenus

    4 062
  • Inscription

  • Dernière visite

Réputation sur la communauté

2 113 Excellent

1 abonné

À propos de Steven

  • Rang
    Maitre Yoda du forum
  • Date de naissance 18/04/1971

Profile Information

  • Sexe :
    Homme
  • Ville :
    Valleiry, Haute-Savoie
  • Intéret :
    Domotique, Fitness et programmation
  • Box
    Home Center 2
  • Version
    4.154 Beta

Visiteurs récents du profil

2 268 visualisations du profil
  1. Steven

    Simulation de présence : Votre avis

    Hi, This script is just a working dead project There is many simulator available so I stopped mine.
  2. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    Qu'ils ne sont relié à rien.
  3. Steven

    Station météo NetAtmo

    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)
  4. Steven

    HC2 - 4.510 - Stable - 02/08/2018

    Surtout pour les 21° :-)
  5. Steven

    Simulation de présence : Votre avis

    Vu le nombre de simulateurs présents rien que sur ce forum, j'ai décidé de mettre un terme à ce projet.
  6. Steven

    HC2 - 4.510 - Stable - 02/08/2018

    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.
  7. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    C'est tout bon, merci les gars.
  8. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    Retour de vacances oblige ... désolé pour le délai. google.php
  9. Steven

    Support Gea

    Il faut utiliser le inc+(#value#)
  10. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    Petite correction de ma part ... seul @Lazer et @Barelle on du mérite. Perso, je n'ai rien fait du tout.
  11. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    Sur Synology, aller dans Serveur Web, Serveurs PHP, double click sur le serveur PHP desiré et activer curl.
  12. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    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
  13. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    @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.
  14. Steven

    Support Gea

    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.
  15. Steven

    HC2 & HCL - 4.503 - BETA - 28/06/2018

    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é.
×