Aller au contenu

sebcbien

Membres confirmés
  • Compteur de contenus

    4 189
  • Inscription

  • Dernière visite

  • Jours gagnés

    85

Tout ce qui a été posté par sebcbien

  1. sebcbien

    Support Gea

    plutôt @pepite
  2. Je dois dire que je suis étonné du peu d'intérêt suscité par ces scripts... ?? Rien que l'amélioration de la récupération des valeurs netatmo me semblait intéressant pour la communautés, mais ça n'en a pas trop l'air. Bizzare
  3. Petit script permettant de se réveiller en douceur. J'avais fait ce script il y a déjà pas mal de temps, il me permettait de déclencher l'allumage en douceur dans ma chambre et dans celle des enfant dès que le réveil sonnait. Avec le script ALARM de Steven et son GEA, j'en ai profité pour l'améliorer. Maintenant le script se lance soit via mon révei, soit via le Virtual Device ALARM de Steven et GEA Ce script permet de: - choisir la durée de l'allumage des lampes (en minutes) - détecte ces conditions individuellement pour chaque chambre: - Si une lampe est déjà allumée, elle est exclue de l'allumage (évite de passer de 100% à 5% lorsque le script démarre et que l'on est déjà levé) - Si on modifie une lampe elle est exclue (extinction ou allumage à 100% par exemple) - Si toutes les lampes ont été modifiées, fin du script - allumer mon routeur Wifi de l'étage (qui est coupé s'il n'y a pas de mouvement détecté pendant 30 minutes) Depuis ce script, je gagne 15 minutes au lit le matin, plus besoin de réveil qui gueule et les enfants sont réveillés en douceur et de bonne humeur (et moi aussi ) Le voici: Pour ajouter ou supprimer des lampes, je pense que le script parle de lui mème, il suffit de supprimer/modifier/ajouter les lignes Question copyright, je pense l'avoir fait complètement seul (il y a longtemps que je l'ai, et franchement je ne me souvient plus de sa genèse) --[[ %% properties 1277 value %% globals --]] -------------------------------------------------- -- Sweet Wakeup -- Gradually dim up lights, excluding already on lights or modified during the wakeup -- Sebastien Jauquet -- Mars 2015 -------------------------------------------------- local id = { LAMPE_CH_THOMAS = 41, LAMPE_DRESSING = 42, LAMPE_CH_PARENTS = 47, LAMPE_CH_EMILIEN = 58, REVEIL_1_SEB = 1277, PRISE_ROUTEUR_1ER = 22 } local cycle = 30 --duration (in minutes) of the complete cycle of wakeup local dim = 5 -- dimming starting value (5=5%) local startSource = fibaro:getSourceTrigger(); -- launch script if started trough device in the header or "manually"/trough an other script if (( tonumber(fibaro:getValue(id["REVEIL_1_SEB"], "value")) > 0 ) or startSource["type"] == "other") then -- Always execute actions on this/those device(s): fibaro:call(id["PRISE_ROUTEUR_1ER"], "turnOn"); -- If one light is not turned off, disable it from the wakeup loop if(tonumber(fibaro:getValue(id["LAMPE_CH_THOMAS"], "value")) ~= 0 ) then id["LAMPE_CH_THOMAS"] = 0; fibaro:debug("LAMPE_CH_THOMAS Desactivated"); end if(tonumber(fibaro:getValue(id["LAMPE_DRESSING"], "value")) ~= 0 ) then id["LAMPE_DRESSING"] = 0; fibaro:debug("LAMPE_DRESSING Desactivated"); end if(tonumber(fibaro:getValue(id["LAMPE_CH_PARENTS"], "value")) ~= 0 ) then id["LAMPE_CH_PARENTS"] = 0; fibaro:debug("LAMPE_CH_PARENTS Desactivated"); end if(tonumber(fibaro:getValue(id["LAMPE_CH_EMILIEN"], "value")) ~= 0 ) then id["LAMPE_CH_EMILIEN"] = 0; fibaro:debug("LAMPE_CH_EMILIEN Desactivated"); end -- Main wakeup loop while dim < 91 do -- set dim value to all dimmers (excluding disabled: Id["xxx"] not equal to 0) if (id["LAMPE_CH_THOMAS"] ~= 0) then fibaro:call(id["LAMPE_CH_THOMAS"], "setValue", dim) end if (id["LAMPE_DRESSING"] ~= 0) then fibaro:call(id["LAMPE_DRESSING"], "setValue", dim) end if (id["LAMPE_CH_PARENTS"] ~= 0) then fibaro:call(id["LAMPE_CH_PARENTS"], "setValue", dim) end if (id["LAMPE_CH_EMILIEN"] ~= 0) then fibaro:call(id["LAMPE_CH_EMILIEN"], "setValue", dim) end fibaro:debug("Set Dimmers Value at: " .. dim) fibaro:sleep(cycle*3000); -- Check if dimmer value modified, then disable it from the wakeup loop if ((id["LAMPE_CH_THOMAS"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_THOMAS"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_THOMAS"] = 0; fibaro:debug("LAMPE_CH_THOMAS Desactivated"); end; end; if ((id["LAMPE_DRESSING"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_DRESSING"], "value")) - dim) ~= 0 ) then id["LAMPE_DRESSING"] = 0; fibaro:debug("LAMPE_DRESSING Desactivated"); end; end; if ((id["LAMPE_CH_PARENTS"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_PARENTS"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_PARENTS"] = 0; fibaro:debug("LAMPE_CH_PARENTS Desactivated"); end; end; if ((id["LAMPE_CH_EMILIEN"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_EMILIEN"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_EMILIEN"] = 0; fibaro:debug("LAMPE_CH_EMILIEN Desactivated"); end; end; if id["LAMPE_CH_THOMAS"] == 0 and id["LAMPE_DRESSING"] == 0 and id["LAMPE_CH_PARENTS"] == 0 and id["LAMPE_CH_EMILIEN"] == 0 then fibaro:debug("All Dimmer Values Modified, stopping script"); fibaro:abort(); end dim = dim +5 end -- end of wakeup, set dimmers to max value fibaro:call(id["LAMPE_CH_THOMAS"], "setValue", 99); fibaro:call(id["LAMPE_DRESSING"], "setValue", 99); fibaro:call(id["LAMPE_CH_PARENTS"], "setValue", 99); fibaro:call(id["LAMPE_CH_EMILIEN"], "setValue", 99); end
  4. sebcbien

    Support Gea

    ce sont les valeurs par défaut. Si tu spécifie la variable, celle-ci à priorité Dans ton exxemple, version four sera à true
  5. sebcbien

    Support Gea

    CA MARCHE !!!! :-))) 'rci m'sieu !
  6. sebcbien

    Support Gea

    Changer les deux lignes sans changer de version gea ne sert probablement a rien. Sent From my Vic20
  7. sebcbien

    Support Gea

    Fais une recherche sur regex dans ce fil. Et je te conseille de mettre àjour avec la dernière version. Sent From my Vic20
  8. sebcbien

    Support Gea

    Quelle version as-tu ? Essaye de désactiver les regex. On avait eu un problème similaire il y a un mois. Sent From my Vic20
  9. sebcbien

    Support Gea

    Lol, "LA" bonne nouvelle... :-p Sent From my Vic20
  10. sebcbien

    Support Gea

    Merci Steven pour ces précisions. Je vais retenter, j'ai peut être fait une double erreur, mais le fait que le slider bougeait bien me semble bizzare. Malheureusement je ne peux pas faire de tests de mon côté avant ce week-end. @971jmd, pas de mouvement de slider chez toi alors ? Sent From my Vic20
  11. sebcbien

    Support Gea

    Regarde dans github dans ma signature, tu auras une vue sur toutes les versions Sent From my Vic20
  12. sebcbien

    Support Gea

    OK, super, merci beaucoup. Et avec gea ça ne va pas pour toi ? Bizarre. En tout cas c mieux que moi ou rien ne marche. Sent From my Vic20
  13. sebcbien

    Support Gea

    OK et si tu le fait bouger via un autre bouton du virtual device ? Il bouge le slider et execute le debug ? Sent From my Vic20
  14. sebcbien

    Support Gea

    Toi si tu met un script dans ton slider, exemple: fibaro:debug("test") Il est exécuté si gea modifie le slider ? Sent From my Vic20
  15. sebcbien

    Support Gea

    Chez moi dans les deux cas le slider bouge mais lance pas le script du slider. Je suis en 3.6 et toi ? Sent From my Vic20
  16. sebcbien

    Support Gea

    Merci ! Sent From my Vic20
  17. sebcbien

    Support Gea

    Oui peut etre, mais alors a quoi ser la fonction gea slider !?! Ici j'utilise gea pour bouger le slider, le slider bouge bien, mais le script du slider ne s'exécute pas. Sent From my Vic20
  18. sebcbien

    Support Gea

    Oui c connu, les modifications de variables ne sont pas prises en compte si elles sont modifiées manuellement... Sent From my Vic20
  19. sebcbien

    Support Gea

    Bonjour, personne ne peut me dire s'il a le problème ou pas ? MerciSent From my Vic20
  20. Petit être, mais jamais testé et je ne suis pas prêt de passer en v4 avec les lenteurs de gea... Sent From my Vic20
  21. sebcbien

    Support Gea

    Bonjour, j'essaye d'utiliser un slider avec gea mais je rencontre le problème suivant: si je slide "a la main" sur mon virtual device, tout va bien, le code du slider est exécuté (réglage du volume de ma chaîne hifi). Par contre si je demande a gea (ou a un autre script lua) de definir le slider de volume, je vois le slider bouger mais le code du slider n'est pas exécuté !?! Une idée ? C'est un comportement normal ? Merci ! Sent From my Vic20
  22. Je suis occupé a faire une liste de courses. J'ai une Satel integra. J'ai un problème de liaison zwave avec mon garage, alors je pensais prendre les fils du capteur d'ouverture de la porte du garage et le transformer en bus. Je pourrai alors mettre un ACU100 qui est une mini centrale avec 8 outputs et 4 zones et un module ABAX avec télécommande a retour d'État... Ça me permettrais de commander porte, éclairage et d'avoir un deuxième capteur pour savoir si la porte est complètement ouverte. Si vous avez des suggestions Sent From my Vic20
  23. Petite amélioration: si netatmo renvoie une des donnée fausse, le push vers emon CMS n'est pas réalisé. ceci permet de ne pas avoir des graphiques qui passent à 0, il n'y aura simplement pas de valeur et si le prochain essai se passe bien, le graphique continuera comme si de rien était. Un push vers le smartphone peut être fait lorsque l'erreur ci-dessus est détectée. voici le code modifié: ----------------------------------------------------------------------------------------- -- YAGDA - yet another graphic data analyser V2.3 -- Retreive Netatmo values for more than 2 modules, compute CO2 and push to EmonCMS -- Sebastien Jauquet -- Février 2015 -- Thanks to cedriclocqueneux, krikroff, i-magin and all contibutors to the netatmo code ----------------------------------------------------------------------------------------- -- Instructions: -- Create an free emoncms.org account -- Retrieve your Write API Key from it -- Create a Global variable (undefined) -> CO2_Max_Value to store the max value of CO2 of the house - if you dont need this, set CO2 to false (default: 0) -- Install my netatmo.php in your webserver and write his address in the ip Address of this module -- for each value you want to be pushed to emoncms, modify the section -- Push To EMONCMS -- below -- Create a block scene or use gea to click this button each 10 minutes (to avoid rejection from the api of Netatmo) -- V2.01 -- First released version -- V2.2 -- doesn't push to emonCMS if netatmo query return false -- V2.3 -- added push message to phone if error local id = { PHONE_NEXUS_5 = 53, PHONE_NEXUS_4 = 104 } local EmonCMS_Prefix = "NETATMO_" -- prefix of the id of the inpus to be created in emoncms (convenient for testing to not alter current feeds) local PushToEmonCMS = true -- true = push to emoncms - false = do not push local selfId = fibaro:getSelfId(); local thismodule=fibaro:getSelfId() local domaine = fibaro:get(selfId, 'IPAddress') local PushItem local DoNotPush_Error = false local activatePush = true; -- activate push (when problem detected ) local ID_Smartphones = {id["PHONE_NEXUS_5"]}; -- list of device receiving Push local CO2_Max_Value_Local = 0 -- if you dont need this, set CO2 to false (default: 0) local emoncms = Net.FHttp("emoncms.org",80) local emoncms_api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -- your EMONCMS WRITE api Key EmonCMS = {}; if (temperature_exterieure==nil) then temperature_exterieure = ""; end if (humidite_exterieure==nil) then humidite_exterieure = ""; end if (temperature_interieure==nil) then temperature_interieure = ""; end if (humidite_interieure==nil) then humidite_interieure = ""; end if (co2==nil) then co2 = ""; end if (pression==nil) then pression = ""; end if (bruit==nil) then bruit = ""; end if (temperature_int_mod2==nil) then temperature_int_mod2 = ""; end if (humidite_int_mod2==nil) then humidite_int_mod2 = ""; end if (co2_mod2==nil) then co2_mod2 = ""; end if (temperature_int_mod3==nil) then temperature_int_mod3 = ""; end if (humidite_int_mod3==nil) then humidite_int_mod3 = ""; end if (co2_mod3==nil) then co2_mod3 = ""; end if (temperature_int_mod4==nil) then temperature_int_mod4 = ""; end if (humidite_int_mod4==nil) then humidite_int_mod4 = ""; end if (co2_mod4==nil) then co2_mod4 = ""; end if(refreshUI==nil) then -- Loads in memory only the first occurence function refreshUI(ext, bruit, titre, tempmod, co2mod, humidmod, lastupdate, laststatus) fibaro:call(selfId,"setProperty","ui.ext.value",ext); fibaro:call(selfId,"setProperty","ui.bruit.value",bruit); fibaro:call(selfId,"setProperty","ui.titre.value",titre); fibaro:call(selfId,"setProperty","ui.tempmod.value",tempmod); fibaro:call(selfId,"setProperty","ui.co2mod.value",co2mod); fibaro:call(selfId,"setProperty","ui.humidmod.value",humidmod); fibaro:call(selfId,"setProperty","ui.lastupdate.value",lastupdate); fibaro:call(selfId,"setProperty","ui.laststatus.value",laststatus); end; end pushMessage = function (sendPush) if (activatePush) then for i=1, #ID_Smartphones do fibaro:call(tonumber(ID_Smartphones[i]), 'sendPush', sendPush); fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", "orange", "Push message ("..sendPush..") sent to mobile: "..tonumber(ID_Smartphones[i]), "span")); end end end if(getExt==nil) then -- Loads in memory only the first occurence function getExt(retry) retry = retry or 0 -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo extérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=ext"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_exterieure = result.body[1].value[1][1] or "n.c"; humidite_exterieure =result.body[1].value[1][2] or "n.c"; -- variable globale pour info sms local msg = "Température extérieure : "..temperature_exterieure.."°C"; fibaro:setGlobal("tempext", msg); return true; else fibaro:debug("Netatmo EXT: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo EXT: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo EXT:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getInt(tonumber(retry+1)); else return false; end end; end if(getInt==nil) then -- Loads in memory only the first occurence function getInt(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=int"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_interieure = result.body[1].value[1][1] or "n.c"; humidite_interieure = result.body[1].value[1][3] or "n.c"; co2 = result.body[1].value[1][2] or "n.c"; pression = result.body[1].value[1][4] or "n.c"; bruit = result.body[1].value[1][5] or "n.c"; -- variable globale pour info sms fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod2==nil) then -- Loads in memory only the first occurence function getMod2(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod2"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod2 = result.body[1].value[1][1] or "n.c"; humidite_int_mod2 = result.body[1].value[1][2] or "n.c"; co2_mod2 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod2: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod2: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod2:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod3==nil) then -- Loads in memory only the first occurence function getMod3(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod3"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod3 = result.body[1].value[1][1] or "n.c"; humidite_int_mod3 = result.body[1].value[1][2] or "n.c"; co2_mod3 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod3: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod3: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod3:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod4==nil) then -- Loads in memory only the first occurence function getMod4(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod4"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod4 = result.body[1].value[1][1] or "n.c"; humidite_int_mod4 = result.body[1].value[1][2] or "n.c"; co2_mod4 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod4: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod4: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod4:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end function EmonCMS:Push(payloademon) payloademon = "/input/post.json?json={" .. EmonCMS_Prefix .. payloademon .. "}&apikey=" .. emoncms_api_key response, status, errorCode = emoncms:GET(payloademon); fibaro:debug("Payload: " .. payloademon) ; fibaro:debug("response: " .. response .. " Status: " .. status .. " errorcode: " .. errorCode) ; fibaro:sleep(500); end local function main() -- retrieve values from netatmo.php local resInt, resExt, resMod2, resMod3, resMod4 = false, false, false, false, false; local status, err = pcall(function () resInt = getInt(); end); fibaro:debug("Récupération des données intérieures: " .. tostring(resInt)); if (status == false) then DoNotPush_Error = true; fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resExt = getExt(); end); fibaro:debug("Récupération des données extérieures : " .. tostring(resExt)); if (status == false) then DoNotPush_Error = true; fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod2 = getMod2(); end); fibaro:debug("Récupération des données intérieures Mod2: " .. tostring(resMod2)); if (status == false) then DoNotPush_Error = true; fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod3 = getMod3(); end); fibaro:debug("Récupération des données intérieures Mod3: " .. tostring(resMod3)); if (status == false) then DoNotPush_Error = true; fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod4 = getMod4(); end); fibaro:debug("Récupération des données intérieures Mod4: " .. tostring(resMod4)); if (status == false) then DoNotPush_Error = true; fibaro:debug("err: "..tostring(err or 'n.c')); end if DoNotPush_Error == false then refreshUI( "Ext: "..temperature_exterieure.." °C - "..humidite_exterieure.." % - "..pression.." mbar", "Bruit Rez: "..bruit.." dB", "Rez - Emilien - Thomas - Parents", temperature_interieure.." - "..temperature_int_mod2.." - "..temperature_int_mod3.." - "..temperature_int_mod4.." °C ", co2.." - "..co2_mod2.." - "..co2_mod3.." - "..co2_mod4.." ppm", humidite_interieure.." - "..humidite_int_mod2.." - "..humidite_int_mod3.." - "..humidite_int_mod4.." % ", os.date("%H:%M"), tostring(resInt).." "..tostring(resExt).." "..tostring(resMod2).." "..tostring(resMod3).." "..tostring(resMod4) ); -- Push To EMONCMS -- if PushToEmonCMS == true then payloademon = "temperature_exterieure:"..temperature_exterieure EmonCMS:Push(payloademon); payloademon = "humidite_exterieure:".. humidite_exterieure EmonCMS:Push(payloademon); payloademon = "pression:".. pression EmonCMS:Push(payloademon); payloademon = "bruit:".. bruit EmonCMS:Push(payloademon); payloademon = "temperature_interieure_Rez:".. temperature_interieure EmonCMS:Push(payloademon); payloademon = "temperature_int_mod2_Emilien:".. temperature_int_mod2 EmonCMS:Push(payloademon); payloademon = "temperature_int_mod3_Thomas:".. temperature_int_mod3 EmonCMS:Push(payloademon); payloademon = "temperature_int_mod4_Parents:".. temperature_int_mod4 EmonCMS:Push(payloademon); payloademon = "humidite_interieure_Rez:".. humidite_interieure EmonCMS:Push(payloademon); payloademon = "humidite_int_mod2_Emilien:".. humidite_int_mod2 EmonCMS:Push(payloademon); payloademon = "humidite_int_mod3_Thomas:".. humidite_int_mod3 EmonCMS:Push(payloademon); payloademon = "humidite_int_mod4_Parents:".. humidite_int_mod4 EmonCMS:Push(payloademon); payloademon = "co2_Rez:".. co2 EmonCMS:Push(payloademon); payloademon = "co2_mod2_Emilien:".. co2_mod2 EmonCMS:Push(payloademon); payloademon = "co2_mod3_Thomas:".. co2_mod3 EmonCMS:Push(payloademon); payloademon = "co2_mod4_Parents:".. co2_mod4 EmonCMS:Push(payloademon); end -- Compute Value MAX CO2 Maison (For VMC Speed VD) if CO2_Max_Value_Local == false then fibaro:debug("not calculating nor storing CO2 Max Value") else CO2_Max_Value_Local = co2 if CO2_Max_Value_Local < co2_mod2 then CO2_Max_Value_Local = co2_mod2 end if CO2_Max_Value_Local < co2_mod3 then CO2_Max_Value_Local = co2_mod3 end if CO2_Max_Value_Local < co2_mod4 then CO2_Max_Value_Local = co2_mod4 end fibaro:setGlobal("CO2_Max_Value", CO2_Max_Value_Local ) fibaro:debug("CO2_Max_Value: ".. CO2_Max_Value_Local ) end else fibaro:debug("push error") pushMessage("Error with netatmo device. resInt:" .. tostring(resInt).." resExt:"..tostring(resExt).." resMod2:"..tostring(resMod2).." resMod3:"..tostring(resMod3).." resMod4:"..tostring(resMod4)); end end main();
  24. Réservé EmonCMS exemple de mes tableaux sur emoncms: Affichage des valeurs remontées par ma VMC et gestion de la vitesse de la vmc en fonction de la teneur de CO2 dans la maison
  25. réservé PHP Comme vous le remarquerez, ajouter une station modifie l'ordre des modules, ceci permettra de les retrouver facilement: Permet de renvoyer les noms, id et ordre des modules disponibles sur l'API netatmo: http://XXXXXXXXXXXXXXXXXXX/netatmo/netatmo.php?parameter=names permet de renvoyer le json de netatmo complet: http://XXXXXXXXXXXXXX/netatmo/netatmo.php?parameter=json permet de renvoyer la liste de tous les modules sélectionnés: http://XXXXXXXXXXXXXX/netatmo/netatmo.php?parameter=selected_modules permet de renvoyer les valeurs du module 3: http://XXXXXXXXXXXXXX/netatmo/netatmo.php?parameter=mod3 Exemple de requète pour la page avec le json viewer intégré: http://XXXXXXXXXXXXXXX/netatmo/netatmo.php?parameter=json_viewer Capture d'écran du json viewer intégré, très pratique piour la première configuration et pour débugger ! Voici le code php à mettre sur votre serveur web dans un sous répertoire netatmo, le fichier s'appelant netatmo.php. N'oubliez pas les permissions d'usage. Voici le répertoire contenant le jsoneditor: jsoneditor.zip, à décompresser dans un répertoire jsoneditor (dans le répertoire netatmo) <?php //ini_set('display_errors', false); //set_exception_handler('ReturnError'); $parameter=$_GET['parameter']; $password="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // netatmo password $username="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // netatmo username $app_id = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // netatmo $app_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // netatmo $token_url = "https://api.netatmo.net/oauth2/token"; $postdata = http_build_query( array( 'grant_type' => "password", 'client_id' => $app_id, 'client_secret' => $app_secret, 'username' => $username, 'password' => $password ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $response = file_get_contents($token_url, false, $context); $params = null; $params = json_decode($response, true); $api_url = "https://api.netatmo.net/api/getuser?access_token=" . $params['access_token']; $requete = file_get_contents($api_url); $url_devices = "https://api.netatmo.net/api/devicelist?access_token=" . $params['access_token']; $resulat_device = file_get_contents($url_devices); $json_devices = json_decode($resulat_device,true); $json_objects = json_decode($resulat_device); $module_interne = $json_devices["body"]["devices"][0]["_id"]; $module_externe = $json_devices["body"]["modules"][1]["_id"]; $module_interne2 = $json_devices["body"]["modules"][2]["_id"]; $module_interne3 = $json_devices["body"]["modules"][3]["_id"]; $module_interne4 = $json_devices["body"]["modules"][4]["_id"]; // --------------------- debuging -------------------------- // if ($parameter == "json") { echo $resulat_device; } if ($parameter == "json_viewer") { print(' <html> <style type="text/css"> body { font: 11pt arial; } #jsoneditor { width: 800px; height: 2000px; } </style> <head> <title><YAGDA></title> </head> <body> '); echo "nombre de devices: " . count($json_devices["body"]["devices"]) . "<br>"; for ($i = 0; $i <= count($json_devices["body"]["devices"]) - 1; $i++) { echo "Station Name: " . $json_devices["body"]["devices"][$i]["station_name"]; echo " - Device No: " . $i ." id: " . $json_devices["body"]["devices"][$i]["_id"] . " Name: " . $json_devices["body"]["devices"][$i]["module_name"] . "<br>"; } echo "<br>nombre de modules: " . count($json_devices["body"]["modules"]) . "<br>"; for ($i = 0; $i <= count($json_devices["body"]["modules"]) - 1; $i++) { echo "Parent Device: " . $json_devices["body"]["modules"][$i]["main_device"]; echo " - Module No: " . $i ." id: " . $json_devices["body"]["modules"][$i]["_id"] . " Name: " . $json_devices["body"]["modules"][$i]["module_name"] . "<br>"; } print(' <br> <link rel="stylesheet" type="text/css" href="jsoneditor/jsoneditor.css"/> <script src="jsoneditor/jsoneditor.js"></script> <div id="jsoneditor"></div> <script> var container = document.getElementById(\'jsoneditor\'); var options = { mode: "view" }; var json = '); echo $resulat_device; print(' var editor = new jsoneditor.JSONEditor(container, options, json); </script> '); } if ($parameter == "names") { echo "nombre de devices: " . count($json_devices["body"]["devices"]) . "<br>"; for ($i = 0; $i <= count($json_devices["body"]["devices"]) - 1; $i++) { echo "Station Name: " . $json_devices["body"]["devices"][$i]["station_name"]; echo " - Device No: " . $i ." id: " . $json_devices["body"]["devices"][$i]["_id"] . " Name: " . $json_devices["body"]["devices"][$i]["module_name"] . "<br>"; } echo "<br>nombre de modules: " . count($json_devices["body"]["modules"]) . "<br>"; for ($i = 0; $i <= count($json_devices["body"]["modules"]) - 1; $i++) { echo "Parent Device: " . $json_devices["body"]["modules"][$i]["main_device"]; echo " - Module No: " . $i ." id: " . $json_devices["body"]["modules"][$i]["_id"] . " Name: " . $json_devices["body"]["modules"][$i]["module_name"] . "<br>"; } } if ($parameter == "selected_modules") { echo "Selected Modules: <br>"; echo "mod interne ----- (int): " . $module_interne . "<br>"; echo "mod externe ---- (ext): " . $module_externe . "<br>"; echo "mod interne2 (mod2): " . $module_interne2 . "<br>"; echo "mod interne3 (mod3): " . $module_interne3 . "<br>"; echo "mod interne4 (mod4): " . $module_interne4 . "<br>"; } if ($parameter == "int") { $url_mesures_internes = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&device_id=" . $module_interne . "&scale=max&type=Temperature,CO2,Humidity,Pressure,Noise&date_end=last"; $mesures_internes = file_get_contents($url_mesures_internes); echo $mesures_internes ; } if ($parameter == "ext") { $url_mesures_externes = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_externe . "&scale=max&type=Temperature,Humidity&date_end=last"; $mesures_externes = file_get_contents($url_mesures_externes); echo $mesures_externes ; } if ($parameter == "mod2") { $url_mesures_internes2 = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_interne2 . "&scale=max&type=Temperature,Humidity,CO2&date_end=last"; $mesures_internes2 = file_get_contents($url_mesures_internes2); echo $mesures_internes2 ; } if ($parameter == "mod3") { $url_mesures_internes3 = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_interne3 . "&scale=max&type=Temperature,Humidity,CO2&date_end=last"; $mesures_internes3 = file_get_contents($url_mesures_internes3); echo $mesures_internes3 ; } if ($parameter == "mod4") { $url_mesures_internes4 = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_interne4 . "&scale=max&type=Temperature,Humidity,CO2&date_end=last"; $mesures_internes4 = file_get_contents($url_mesures_internes4); echo $mesures_internes4 ; } ?> Prochaine étape, permettre d'envoyer en paramètre une valeur json à renvoyer. exemple: http://XXXXXXXXXXXXXX/netatmo/netatmo.php?parameter=json_query&value=["body"]["devices"][0]["_id"] Retournerais un json contenant la réponse Là mes faibles connaissances en php bloquent un peu :-/
×
×
  • Créer...