doblanch Posté(e) le 22 mai 2018 Signaler Posté(e) le 22 mai 2018 Il y a 18 heures, flechg a dit : Bonjour, moi j'ai tout refait, pour tout inclure, pas uniquement le vent il faut créer une scene : --[[ %% properties %% autostart %% events %% globals --]] local n_client_id = "xxx" local n_client_secret = "xxx" local n_username = "xxx" local n_password = "xxx" local hc2_module_virtuel = 202 -- 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 ventRafaleDirection = -1000 local ventDirection = -1000 local ventVitesse = -1000 local ventRafaleVitesse = -1000 local temperature_chambre = -1000 local humidite_chambre = -1000 local CO2_chambre = -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) fibaro:setGlobal('netatmoTempInt',temperature_interieure) fibaro:call(204, "setProperty", "ui.Label3.value", ""..temperature_interieure) log("co2 = " .. co2) fibaro:setGlobal('netatmoCO2Int',co2) fibaro:call(209, "setProperty", "ui.Label1.value", ""..co2) log("humidite_interne = " .. humidite_interne) fibaro:setGlobal('netatmoHumInt',humidite_interne) fibaro:call(204, "setProperty", "ui.Label1.value", ""..humidite_interne) log("pression = " .. pression) fibaro:setGlobal('netatmoPressionInt',pression) fibaro:call(205, "setProperty", "ui.Label1.value", ""..pression) log("bruit = " .. bruit) fibaro:call(204, "setProperty", "ui.Label2.value", ""..bruit) fibaro:setGlobal('netatmoBruitInt',bruit) end ) end -- ------------------------------------------------------------------------ -- Mesure de l'unité chambre -- ------------------------------------------------------------------------ function getMesuresChambre() getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id="..int_id.."&module_id="..ext_id.."&scale=max&type=Temperature,Humidity,CO2&date_end=last", function(data) log("----------========== Module chambre ==========----------") temperature_chambre = data.body[1].value[1][1] humidite_chambre = data.body[1].value[1][2] CO2_chambre = data.body[1].value[1][3] log("CO2_chambre = " .. CO2_chambre) fibaro:setGlobal('netatmoCO2Chambre',CO2_chambre) fibaro:call(210, "setProperty", "ui.Label1.value", ""..CO2_chambre) log("temperature_chambre = " .. temperature_chambre) fibaro:setGlobal('netatmoTempChambre',temperature_chambre) fibaro:call(206, "setProperty", "ui.Label1.value", ""..temperature_chambre) log("humidite_chambre = " .. humidite_chambre) fibaro:setGlobal('netatmoHumChambre',humidite_chambre) fibaro:call(203, "setProperty", "ui.Label1.value", ""..humidite_chambre) fibaro:debug("test10"); end ) end -- ------------------------------------------------------------------------ -- Mesure de l'unité Vent -- ------------------------------------------------------------------------ function getMesuresVent() log("vent") getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id=".."70:ee:50:02:ef:ee".."&module_id=".."06:00:00:00:16:c6".."&scale=max&type=GustAngle,WindAngle,WindStrength,GustStrength&date_end=last", -- getResponseData("https://api.netatmo.net/api/getmeasure?access_token=56c1c3e445a1e38b02a0a0e5|2b5f449d5d224136cb0e701a59452485&device_id=70:ee:50:02:ef:ee&module_id=02:00:00:02:dd:34&scale=max&type=Temperature,Humidity&date_end=last", function(data) log("----------========== Module vent ==========----------") ventRafaleDirection = data.body[1].value[1][1] ventDirection = data.body[1].value[1][2] ventVitesse =data.body[1].value[1][3] ventRafaleVitesse = data.body[1].value[1][4] log("ventRafaleDirection = " .. ventRafaleDirection) log("ventDirection = " .. ventDirection) log("ventVitesse = " .. ventVitesse) log("ventRafaleVitesse = " .. ventRafaleVitesse) fibaro:setGlobal('netatmoVentDir',ventDirection) fibaro:setGlobal('netatmoVentRaftDir',ventRafaleDirection) fibaro:setGlobal('netatmoVentvitesse',ventVitesse) fibaro:setGlobal('netatmoVentRafVit',ventRafaleVitesse) fibaro:call(21, "setProperty", "ui.Label1.value", ventVitesse .. " Km/h") fibaro:call(21, "setProperty", "ui.Label2.value", ventRafaleDirection .. " °") fibaro:call(21, "setProperty", "ui.Label3.value", ventRafaleVitesse .. " Km/h") fibaro:call(21, "setProperty", "ui.Label4.value", ventRafaleDirection .. " °") -- log("humidite_exterieur = " .. humidite_externe) --fibaro:call(207, "setProperty", "ui.Label1.value", ""..humidite_externe) end ) end -- ------------------------------------------------------------------------ -- Mesure de l'unité exterieur -- ------------------------------------------------------------------------ function getMesuresExt() log("test") getResponseData("https://api.netatmo.net/api/getmeasure","access_token="..token.."&device_id=".."70:ee:50:02:ef:ee".."&module_id=".."02:00:00:02:dd:34".."&scale=max&type=Temperature,Humidity&date_end=last", -- getResponseData("https://api.netatmo.net/api/getmeasure?access_token=56c1c3e445a1e38b02a0a0e5|2b5f449d5d224136cb0e701a59452485&device_id=70:ee:50:02:ef:ee&module_id=02:00:00:02:dd:34&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_exterieur = " .. temperature_exterieure) fibaro:setGlobal('netatmoTempExt',temperature_exterieure) fibaro:call(208, "setProperty", "ui.Label1.value", ""..temperature_exterieure) log("humidite_exterieur = " .. humidite_externe) fibaro:setGlobal('netatmoHumExt',humidite_externe) fibaro:call(207, "setProperty", "ui.Label1.value", ""..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(); -- debug("token" .. token) 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]) fibaro:setGlobal("pluieHeure",rains["hour"]) 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() getMesuresChambre() getMesuresVent() 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) 1
flechg Posté(e) le 22 mai 2018 Signaler Posté(e) le 22 mai 2018 Merci pour ton aide je regarde ca ce soir quand je rentre cdt
domo Posté(e) le 22 mai 2018 Signaler Posté(e) le 22 mai 2018 merci @doblanch pour le partage de ta scene tu pourrais partager ton code lua pour le VD correspondent a cette scene merci
flechg Posté(e) le 22 mai 2018 Signaler Posté(e) le 22 mai 2018 @doblanch Merci tout fonctionne j ai un peu modifié le code afin d'avoir que le vent mais cela peut être utile de tout avoir sur un module encore merci car j ai perdu quelques cheveux avec cette histoire
doblanch Posté(e) le 23 mai 2018 Signaler Posté(e) le 23 mai 2018 en fait pour les VD il faut reprendre le code et les labels, il n'y a rien de particulier dans le VD. je les ai mis en pieces jointes. Historique_Pluie.vfib Vent.vfibParametre_ interieur.vfibT° _Exterieur.vfib
doblanch Posté(e) le 23 mai 2018 Signaler Posté(e) le 23 mai 2018 Il y a 8 heures, flechg a dit : @doblanch Merci tout fonctionne j ai un peu modifié le code afin d'avoir que le vent mais cela peut être utile de tout avoir sur un module encore merci car j ai perdu quelques cheveux avec cette histoire cool que ca ai pu servir a quelqu'un , j'y avais passé un peu de temps ! 1
Yannick Posté(e) le 15 janvier 2019 Signaler Posté(e) le 15 janvier 2019 Salut à tous, je suis passé en 4.53 et depuis la 4.5x je n'ai plus de remontée sur cela scène. Il me mets une erreur de certificat. J'ai vu quelque chose sur un topic, je crois que c'était sur le topic d'une version de firmware mais je ne sais plus où. Y a t'il une astuce ? Merci
Lorenzo Posté(e) le 17 mars 2019 Signaler Posté(e) le 17 mars 2019 Le 15/01/2019 à 14:02, Yannick a dit : Salut à tous, je suis passé en 4.53 et depuis la 4.5x je n'ai plus de remontée sur cela scène. Il me mets une erreur de certificat. J'ai vu quelque chose sur un topic, je crois que c'était sur le topic d'une version de firmware mais je ne sais plus où. Y a t'il une astuce ? Merci il faut remplacer le code par : 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, checkCertificate = false }, success = function(response) func(json.decode(response.data)) end }) end --> en fait il faut ajouter checkCertificate = false
domo Posté(e) le 17 mars 2019 Signaler Posté(e) le 17 mars 2019 merci pour le renseignement ça fonctionne mais j'ai une erreur quelqu'un peut me dire à cause de quoi merci [DEBUG] 19:59:54: Intégration Module Anémomètre NETATMO demarré[DEBUG] 19:59:54: Compte Netatmo Connecté...[DEBUG] 19:59:55: Recherche du Module...[DEBUG] 19:59:56: Thermomètre 02:00:00:1b:2d:e0 Trouvé![DEBUG] 19:59:57: Thermomètre 03:00:00:02:9d:94 Trouvé![DEBUG] 19:59:57: Anémomêtre 06:00:00:02:56:a2 Trouvé![DEBUG] 19:59:57: Pluviomêtre 05:00:00:04:5a:34 Trouvé![DEBUG] 19:59:57: 2019-03-17 19:59:55.540652 [ fatal] LUA error: /opt/fibaro/scenes/281.lua:63: attempt to call global 'calcBat' (a nil value)
flacon030 Posté(e) le 6 juillet 2020 Signaler Posté(e) le 6 juillet 2020 (modifié) Bonjour Je reviens vers vous car le vd de ce liens ne fonctionne plus chez moi depuis un moment https://www.siio.de/netatmo-windmesser-ins-fibaro-homecenter-2-integrieren-so-gehts/ J'ai l’erreur suivante [DEBUG] 18:59:10: netatmo-Windsensor Integration v.1.0 gestartet.[DEBUG] 18:59:10: 2020-07-06 18:59:09.724388 [ fatal] LUA error: /usr/share/lua/5.2/json/decode/util.lua:35: unexpected character @ character: 1 0:1 [H] line:[DEBUG] 18:59:10: H Modifié le 6 juillet 2020 par flacon030
flacon030 Posté(e) le 23 août 2020 Signaler Posté(e) le 23 août 2020 Je me réponds a moi même J'avais pas actualisé les client ID et client secret de la page netatmo https://dev.netatmo.com/ Je n'avais plus les bonnes clefs cela fonctionne a nouveau
flacon030 Posté(e) le 2 octobre 2020 Signaler Posté(e) le 2 octobre 2020 (modifié) Bonjour J'ai a nouveau un probleme récurant avec la scène qui interroge le module vent [DEBUG] 23:25:50: 2020-10-01 23:25:50.885448 [ fatal] LUA error: /opt/fibaro/scenes/208.lua:80: attempt to index field 'body' (a nil value) ou encore [DEBUG] 00:16:55: 2020-10-04 00:16:55.734663 [ fatal] LUA error: /opt/fibaro/scenes/208.lua:56: attempt to index field 'body' (a nil value) d’où peut venir l'erreur Le module scène fonctionne quelques heures, voir quelques jours puis j'ai cette erreur Je suis obliger de stopper puis de la relancer pour que cela puisse fonctionner Modifié le 4 octobre 2020 par flacon030
flacon030 Posté(e) le 5 octobre 2020 Signaler Posté(e) le 5 octobre 2020 personne pour un petit coup de main? oui bien y a t'il une autre solution pour utiliser ce module netatmo? car franchement il n'a jamais fonctionner comme il faut dans mon HC2
flacon030 Posté(e) le 17 octobre 2020 Signaler Posté(e) le 17 octobre 2020 Bon je pense avoir trouvé la solution https://www.siio.de/netatmo-regen-windmesser-im-fibaro-homecenter-2/ Il y a une amélioration de la connexion a netatmo sur le liens ci dessus J'ai a la base la version du VD qui ne gère que le module vent Depuis il y a eu une autre version qui gère en plus le module pluie (que je n'arrive pas a faire fonctionner), mais dont la connexion a netatmo a été amélioré Citation Correctif: le script ne plante plus si l'API ne peut pas être atteint par netatmo, mais émet à la place un message d'erreur quels que soient les paramètres de débogage
flacon030 Posté(e) le 17 octobre 2020 Signaler Posté(e) le 17 octobre 2020 (modifié) Bonjour a tous Je tente de faire fonctionner le pluviomètre dans une VD a partir d"une scène qui collecte les information depuis cela https://www.siio.de/netatmo-regen-windmesser-im-fibaro-homecenter-2/ La partie anémomètre fonctionne comme il faut La partie pluviomètre ne fonctionne pas J'ai cette erreur [DEBUG] 11:06:12: 2020-10-17 11:06:12.618045 [ fatal] LUA error: /opt/fibaro/scenes/208.lua:178: attempt to concatenate global 'int_id' (a nil value) La ligne 170 est la suivante 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 - dauer)), La question est quel sont les variables a créer pour la pluie? j'ai créer cela mais je ne suis pas sur que cela soit les bonnes rain_day rain_hour rain_month rain_week voici mon code que j'ai en partie traduit et modifier Citation --[[ %% properties %% autostart %% globals --]] -- ------------------------------------------------------------------------ --ADAPTER CES DONNÉES -- ------------------------------------------------------------------------ local client_id = '' local client_secret = '' local username = '' local password= '' local refresh = 300 local debug = 1 local vd_ID = 776 --ID de la scéne virtuel -- ------------------------------------------------------------------------ -- NE PAS TOUCHER -- ------------------------------------------------------------------------ local token = '' local request_body = '' local rains = {hour = -1000, day = -1000, week = -1000, month = -1000} local sourceTrigger = fibaro:getSourceTrigger() Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end DebugError = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end Debug( 'orange', 'intégration du module complémentaire netatmo a démarré.' ) Debug( 'white', 'Les données sont mises à jour toutes les 5 minutes. Si debug = 0, rien est débogué' ) function oAuth(nextFunction) local request_body = 'grant_type=password&client_id=' .. client_id .. '&client_secret=' .. client_secret .. '&username=' .. username .. '&password=' .. password .. '&scope=read_station' getResponseData('https://api.netatmo.net/oauth2/token', request_body, function(data) if (data.access_token ~= nil) then token = data.access_token if (debug == 1) then Debug( 'green', 'oAuth 2.0 effectué.' ) end getDevices() fibaro:call(vd_ID, 'pressButton', '9') else DebugError( 'red', 'oAuth 2.0 konnte nicht durchgeführt werden! Bitte die Anmeldedaten überprüfen') end end ) setTimeout(oAuth, refresh*1000); end function getResponseData(url, body, func) local http = net.HTTPClient() http:request(url, { options = { checkCertificate = false, method = 'POST', headers = { ['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' }, data = body }, success = function(response) func(json.decode(response.data)) end }) end function getDevices() getResponseData('https://api.netatmo.net/api/devicelist','access_token='..token, function(data) if (data.body ~= nil) then if (debug == 1) then Debug( 'green', 'Recherche des capteurs netatmo...' ); end for _, v in pairs(data.body.modules) do --fibaro:debug('Tabelle auslesen') if (v.data_type[1] == 'Rain') then rain_id = v._id if (debug == 1) then Debug( 'green', 'Capteur de pluie N° ' ..rain_id.. ' trouvé...' ); end if rain_id ~= nil then getSumRain(60 * 60, 'hour') getSumRain(60 * 60 * 24, 'day') getSumRain(60 * 60 * 24 * 7, 'week') getSumRain(60 * 60 * 24 * 30, 'month') end elseif (v.data_type[1] == 'Temperature') then extern_id = v._id if (debug == 1) then Debug('orange', 'Capteur extérieur N° ' .. extern_id .. ' trouvé...') end elseif (v.data_type[1] == 'Wind') then wind_id = v._id if (debug == 1) then Debug( 'green', 'Capteur de vent N° ' ..rain_id.. ' trouvé...' ); end if wind_id ~= nil then getmeasureWind() end end int_id = data.body.devices[1]._id end else DebugError( 'red', 'Echec lecture liste périphériques! Veuillez attendre la prochaine exécution') end end ) end function getmeasureWind() request_body_wind = 'access_token='..token..'&device_id='..int_id..'&module_id='..wind_id..'&scale=max&type=WindStrength,WindAngle,GustStrength,GustAngle&date_end=last' getResponseData('https://api.netatmo.net/api/getmeasure', request_body_wind, function(getData) if (getData.body ~= nil) then if (debug == 1) then Debug( 'green', 'anémomètre est lu ...' ); end WindStrength = getData.body[1].value[1][1] WindAngle = getData.body[1].value[1][2] GustStrength = getData.body[1].value[1][3] GustAngle= getData.body[1].value[1][4] if (debug == 1) then Debug( 'green', 'Vitesse du vent: ' .. WindStrength .. ' km/h' ); Debug( 'green', 'Direction du vent: ' .. WindAngle .. ' °') Debug( 'green', 'Rafales de vent: ' .. GustStrength .. ' km/h') Debug( 'green', 'Direction rafales de vent: ' .. GustAngle .. ' °') end if fibaro:getGlobalValue('windstaerke') ~= nil then fibaro:setGlobal('windstaerke', WindStrength) else DebugError( 'red', 'Variable windstaerke Force du vent introuvable. Veuillez la créer') end if fibaro:getGlobalValue('windrichtung') ~= nil then fibaro:setGlobal('windrichtung', WindAngle) else DebugError( 'red', 'Variable windrichtung Direction du vent introuvable. Veuillez la créer') end if fibaro:getGlobalValue('boenstaerke') ~= nil then fibaro:setGlobal('boenstaerke', GustStrength) else DebugError( 'red', 'Varible boenstaerke introuvable. Veuillez la créer') end if fibaro:getGlobalValue('boenrichtung') ~= nil then fibaro:setGlobal('boenrichtung', GustAngle) else DebugError( 'red', 'Variable boenrichtung Direction du vent introuvable. Veuillez la créer') end if (debug == 1) then Debug( 'green', 'La lecture de anémomètre terminée.' ); end else DebugError( 'red', 'Appel API non effectué! API non disponible! Veuillez attendre la prochaine exécution.') end end ) end function getSumRain(dauer, 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 - dauer)), function(data) local sum_rain = 0 for k, v in pairs(data.body) do for l, w in pairs(v.value) do sum_rain = sum_rain + w[1] end end if fibaro:getGlobalValue('rain_' ..variable) ~= nil then fibaro:setGlobal('rain_' ..variable, sum_rain) else DebugError( 'red', 'Varible rain_' ..variable.. ' pas trouvé. Veuillez créer ') end if (debug == 1) then fibaro:debug('Regenmenge: ' ..sum_rain.. ' mm2 (' .. variable .. ')') end end ) end if (sourceTrigger["type"] == "autostart") then oAuth(); end Modifié le 18 octobre 2020 par flacon030 Sujet fusionné
Did Posté(e) le 17 octobre 2020 Signaler Posté(e) le 17 octobre 2020 Tu devrais cacher tes identifiants au début de ta scène si tu ne veux pas avoir de problèmes.
flacon030 Posté(e) le 18 octobre 2020 Signaler Posté(e) le 18 octobre 2020 Pas faux merci, c'est fait
flacon030 Posté(e) le 18 octobre 2020 Signaler Posté(e) le 18 octobre 2020 (modifié) J'avance doucement Je viens de trouver une dernier version ci dessous qui fonctionne presque après quelques modifications pour la connexion (ajouter "checkCertificate = false") function getResponseData(url, body, func) local http = net.HTTPClient() http:request(url, { options = { checkCertificate = false, method = 'POST', headers = { ['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' }, data = body }, success = function(response) func(json.decode(response.data)) end }) end Je me connecte a netatmo La relève des capteur se fait Je peut les lire dans le VD les valeurs relevés Mais les valeurs pour la pluie sont toutes les même que se soit pour: l'heure, le jour, la semaine, le mois Tous est a 51,106 C'est un bug de netatmo oui bien de la scène? --[[ %% properties %% autostart %% globals --]] -- ------------------------------------------------------------------------ --ADAPTER CES DONNÉES -- ------------------------------------------------------------------------ local client_id = '' local client_secret = '' local username = '' local password= '' local vd_ID = 776 --ID de la scéne virtuel local max_counter = 4 local refresh = 300 local debug = 1 ------------------------------------------------------ -- AB HIER NICHTS MEHR ANPASSEN local token = '' local request_body = '' local rains = {hour = -1000, day = -1000, week = -1000, month = -1000} local sourceTrigger = fibaro:getSourceTrigger() Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end DebugError = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end Debug( 'orange', 'netatmo v.2.0 (NEW API) - Autostart' ) Debug( 'white', 'Refresh-Time: ' ..(refresh/60) ) function globalVar(var,val) local http = net.HTTPClient() http:request("http://127.0.0.1:11111/api/globalVariables", { options = { method = 'POST', headers = {}, data = '{"name":"'..var..'","value":"'..val..'"}', timeout = 10000 }, success = function(response) local result = response.data; if response.status == 200 or response.status == 201 then fibaro:debug('Status: ' ..response.status.. ' - Variable ' ..var.. ' wurde angelegt') else fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert') end end, error = function(err) fibaro:debug('[ERROR] ' .. err) end }) end function oAuth(nextFunction) local request_body = 'grant_type=password&client_id=' .. client_id .. '&client_secret=' .. client_secret .. '&username=' .. username .. '&password=' .. password .. '&scope=read_station' getResponseData('https://api.netatmo.net/oauth2/token', request_body, function(data) if (data.access_token ~= nil) then token = data.access_token --fibaro:debug(token) if (debug == 1) then Debug( 'green', 'oAuth 2.0 durchgeführt.' ) end getDevices() else DebugError( 'red', 'oAuth 2.0 konnte nicht durchgeführt werden! Bitte die Anmeldedaten überprüfen') end end ) setTimeout(oAuth, refresh*1000); end function getResponseData(url, body, func) local http = net.HTTPClient() http:request(url, { options = { checkCertificate = false, method = 'POST', headers = { ['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' }, data = body }, success = function(response) func(json.decode(response.data)) end }) end function getDevices() getResponseData('https://api.netatmo.net/api/getstationsdata','access_token='..token, function(data) if (data.body ~= nil) then if (debug == 1) then Debug( 'green', 'netatmo Sensoren werden gesucht...' ); end --fibaro:debug(data.body.modules.data_type[1]) for _, v in pairs(data.body.devices) do int_id = v._id Debug( 'green', 'Mainstation: ' ..int_id.. ' erkannt.' ) local counter = 1 while (counter < max_counter) do if (v.modules[counter].data_type[1] == 'Rain') then rain_id = v.modules[counter]._id if (debug == 1) then Debug( 'green', 'Regensensor ' ..rain_id.. ' erkannt.' ) end if rain_id ~= nil then getSumRain(60 * 60, 'hour') getSumRain(60 * 60 * 24, 'day') getSumRain(60 * 60 * 24 * 7, 'week') getSumRain(60 * 60 * 24 * 30, 'month') end elseif (v.modules[counter].data_type[1] == 'Wind') then wind_id = v.modules[counter]._id if (debug == 1) then Debug( 'green', 'Windmesser ' ..wind_id.. ' erkannt.' ); end if wind_id ~= nil then getmeasureWind() end end counter = counter + 1 fibaro:sleep(3*1000) end end else DebugError( 'red', 'device-list konnte nicht abgefragt werden! Bitte nächsten Durchlauf abwarten') end end ) end function getmeasureWind() request_body_wind = 'access_token='..token..'&device_id='..int_id..'&module_id='..wind_id..'&scale=max&type=WindStrength,WindAngle,GustStrength,GustAngle&date_end=last' getResponseData('https://api.netatmo.net/api/getmeasure', request_body_wind, function(getData) if (getData.body ~= nil) then WindStrength = getData.body[1].value[1][1] WindAngle = getData.body[1].value[1][2] GustStrength = getData.body[1].value[1][3] GustAngle= getData.body[1].value[1][4] if (debug == 1) then Debug( 'green', 'Windgeschwindigkeit: ' .. WindStrength .. ' km/h' ); end if fibaro:getGlobalValue('windstaerke') ~= nil then fibaro:setGlobal('windstaerke', WindStrength) else DebugError( 'red', 'Varible windstaerke nicht gefunden. Wird erstellt.') globalVar('windstaerke', WindStrength) end if fibaro:getGlobalValue('windrichtung') ~= nil then fibaro:setGlobal('windrichtung', WindAngle) else DebugError( 'red', 'Varible windrichtung nicht gefunden. Wird erstellt.') globalVar('windrichtung', WindAngle) end if fibaro:getGlobalValue('boenstaerke') ~= nil then fibaro:setGlobal('boenstaerke', GustStrength) else DebugError( 'red', 'Varible boenstaerke nicht gefunden. Wird erstellt.') globalVar('boenstaerke', GustStrength) end if fibaro:getGlobalValue('boenrichtung') ~= nil then fibaro:setGlobal('boenrichtung', GustAngle) else DebugError( 'red', 'Varible boenrichtung nicht gefunden. Wird erstellt.') globalVar('boenrichtung', GustAngle) end else DebugError( 'red', 'API-Call konnte nicht durchgeführt werden! API nicht erreichbar! Bitte nächsten Durchlauf abwarten.') end end ) end function getSumRain(dauer, 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 - dauer)), function(data) local sum_rain = 0 for k, v in pairs(data.body) do for l, w in pairs(v.value) do sum_rain = sum_rain + w[1] end end if fibaro:getGlobalValue('rain_' ..variable) ~= nil then fibaro:setGlobal('rain_' ..variable, sum_rain) else DebugError( 'red', 'Varible rain_' ..variable.. ' nicht gefunden. Wird erstellt.') globalVar('rain_' ..variable, sum_rain) end if (debug == 1) then fibaro:debug('Regenmenge: ' ..sum_rain.. ' mm2 (' .. variable .. ')') end end ) end if (sourceTrigger['type'] == 'autostart') then oAuth(); end Modifié le 18 octobre 2020 par flacon030
Messages recommandés