Aller au contenu

Recommended Posts

@jimbo007be, je l'utilise depuis plus d'un an, c'est une très bonne station météo, fiable, petite, design, extensible, elle a beaucoup de choses pour elle. Mais, car il y a un toujours mais: L' API n'est pas disponible en local se qui oblige à  passer obligatoirement par une connexion internet lors des échanges peut être un jour les Dev de chez NetAtmo prendrons en compte les nombreuses réclamations à  ce sujet ! En attendant nous faisons avec ;). De plus, l'authentification OAuth2 (http://fr.wikipedia.org/wiki/OAuth) pose quelques petits problèmes à  notre HC2 :angry: , je m'explique: A ce jour le HC2 n'est pas compatible avec le protocole https pour l’émission de requêtes et pour  l'appi de la NetAtmo il faut HTTPS. J'ai bien essayé des chemins détournés notamment avec mon Framework Lua mais l'Api ne veut toujours rien savoir (je ne perd pas espoir :D).

 

Conclusion l'emploi d'un script externe est par conséquent obligatoire entre l'Api NetAtmo et le HC2 et Il y a de nombreux scripts php sur le web pour cela (cf. article de Pascal du blog domotique-info). Perso étant très technos Microsoft j' ai réalisé ma passerelle en C# disponible soit par webservice hébergé sur mon micro serveur HP, soit sur une petite box maison (en test) réalisée à  base de FEZ Cerberus de GHI Electronics. J'ai aussi un autre projet en cours, je vous en reparlerais :).

 

Félicitation pour cet achat que tu ne regretteras pas ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Moi qui voulait acheter leur nouveau Thermostat (avec API) pour ma chaudière.

Si c'est le même binzz d'api non local, alors je laisse tomber ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

Krikroff : j'avais effectivement vu le soucis mais bon, le produit a vraiment l'air chouette alors je me suis laissé tenter ... je vais essayer d'héberger le script php sur mon Synology ... je suis a priori plus MS aussi mais bon ... à  la limite, si tu veux bien me filer ta version, je peux le mettre sur un des mes IIS au bureau :)

 

Domodial : j'avais aussi commandé le thermostat mais j'ai annulé ... j'espère trouver une solution plus compatible avec HC2 

 

j'avais posé la question concernant l'éventuelle disparition de la société et de l'impact sur l'utilisation des produits ... ils m'ont répondu que si il devait y avoir un soucis, les logiciels seraient rendus open-source ... bon, je sais pas si on doit y croire ... mais c'est vrai que la station meteo est vraiment superbe :)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour le chauffage j'ai des radiateurs j'utilise des têtes Danfoss, ça marche très bien.

Et pour rester dans le sujet, j'ai également la station netatmo, aucun regret ça marche nickel.

Partager ce message


Lien à poster
Partager sur d’autres sites

je suis a priori plus MS aussi mais bon ... à  la limite, si tu veux bien me filer ta version, je peux le mettre sur un des mes IIS au bureau :)

 

Pas de soucis pour partager ma version, je dois juste faire quelques modifications dessus pour pouvoir te la passer ...

Partager ce message


Lien à poster
Partager sur d’autres sites

krikroff :

j'ai réussi àfaire fonctionner le script php sur mon synology ... par contre je ne suis pas très doué pour les devices virtuels :)

tu pourrais faire un screenshot du tien pour voir ce que ca donne ? :)

Partager ce message


Lien à poster
Partager sur d’autres sites

oui c'est ce tuto que j'ai suivi ... :)

le script php retourne toutes les valeurs de la sonde intérieur ou extérieur ... c'est surtout que je ne sais pas trop quel est la plus belle manière de les afficher :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici les modifications que j'ai apporté au code de i-magin (publié avec son accord):

Cf. http://www.domotique-fibaro.fr/index.php/topic/262-empêcher-une-function-de-bloquer-un-script/?p=2468

 

Edit: mise à  jour du code du Main() pour renforcer la prévention des erreurs type T_END, Unknown etc..

 

NetAtmo Périphérique virtuel

--[[
%% autostart
%% properties
%% globals
--]]

fibaro:debug("process start");

selfId = fibaro:getSelfId();

local domaine = "www.xxxxxxxxxx.com";

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

--ne charger en mémoire uniquement que à  la premiere execution
if(refreshUI==nil) then
function refreshUI(temp, hum, press, co2, bruit)
  fibaro:call(selfId,"setProperty","ui.temperature.value",temp);
  fibaro:call(selfId,"setProperty","ui.humidite.value",hum);
  fibaro:call(selfId,"setProperty","ui.pression.value",press);
  fibaro:call(selfId,"setProperty","ui.co2.value",co2);
  fibaro:call(selfId,"setProperty","ui.bruit.value",bruit);  
end;
end
--ne charger en mémoire uniquement que à  la premiere execution
if(getExt==nil) then
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?intext=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

--ne charger en mémoire uniquement que à  la premiere execution
if(getInt==nil) then  
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?intext=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

local function main()
  -- demande au service web les informations...
  local resInt, resExt = false, false;
  local status, err = pcall(function () resInt = getInt(); end);
  fibaro:debug("Récupération des données interieurs: " .. tostring(resInt));
  if (status == false) then
    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érieurs : " .. tostring(resExt));
  if (status == false) then
    fibaro:debug("err: "..tostring(err or 'n.c'));
  end
  -- affichage infos dans module virtuel         
  refreshUI(
    temperature_interieure.." °C / "..temperature_exterieure.." °C",
    humidite_interieure.." % / "..humidite_exterieure.." %",
    pression.." mbar",
    co2.." ppm",
    bruit.." dB"
  );
  -- tempo de 30 secondes
  fibaro:sleep(30*60*1000);
end

-- lance le script à  chaque loop
main();

- La sortie DEBUG pour la mise en évidence la gestion des erreurs...

gallery_3_20_2085.png

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

merci m'sieur !

je vois que tu testes si tu es à  la première exécution sur script avant chaque fonction ... je suppose que cela veut dire que ça pourrait provoquer une espèce de "surcharge" de la mémoire si tu ne le fais pas ?

 

par contre tu ne fais pas ce test dans le cas de ton script de surveillance du main loop ... oubli ? pas nécessaire ? ou bien tu as trouvé ça par après ? :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui je test la première exécution, pour effectivement ne pas surcharger la mémoire et aussi et surtout moins d'occupation processeur car le LUA en bon langage de script doit tout interpréter à  la volée et comme ça vient... Le main loop garde tout en mémoire tant qu 'il n'a pas  été réinitialisé donc pas la peine de lui proposer un code qu'il a déjà  en mémoire.

 

Pas mis dans le script surveillance du main loop car:

 

1. je ne le fait pas en permanence, juste dans mes scripts importants...

2. le "script surveillance du main loop" était juste pour mettre en évidence que le main loop tourne rond ou pas ! D’ailleurs, sur mon HC2 j'en suis à  7787 boucles depuis 129 heures et 48 minutes sans plantage ...

 

Tout ça pour dire que, c'est sur il y a des plantages, mais il y a aussi souvent des solutions pour éviter cela... En revanche j'attends toujours le support du HTTPS pour pouvoir tout faire depuis le HC2 sans passer par un php ou un .aspx :angry: , c'est malin maintenant je suis énervé :lol:

Partager ce message


Lien à poster
Partager sur d’autres sites

mise à  jour du code du Main() pour renforcer la prévention des erreurs type T_END, Unknown etc..

gallery_3_20_5812.png

 

local function main()
  -- demande au service web les informations...
  local resInt, resExt = false, false;
  local status, err = pcall(function () resInt = getInt(); end);
  fibaro:debug("Récupération des données interieurs: " .. tostring(resInt));
  if (status == false) then
    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érieurs : " .. tostring(resExt));
  if (status == false) then
    fibaro:debug("err: "..tostring(err or 'n.c'));
  end
  -- affichage infos dans module virtuel         
  refreshUI(
    temperature_interieure.." °C / "..temperature_exterieure.." °C", 
    humidite_interieure.." % / "..humidite_exterieure.." %", 
    pression.." mbar", 
    co2.." ppm", 
    bruit.." dB"
  );
  -- tempo de 30 secondes
  fibaro:sleep(30*1000);
end
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Ohh!! faut pas voir le mal partout, j'avais juste mis à30 minutes car comme i-magin àla gentillesse de me laisser utiliser les données de sa station je ne voulais pas abuser ! ça marche aussi avec 30 secondes ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Non, tempo de 30 sec.

 

edit: ha oui le premier code c'est 30 min ^^.

Partager ce message


Lien à poster
Partager sur d’autres sites

LOL

c'était juste pour confirmer que le sleep est en millisecondes :)

aucune mauvaise intention de ma part je le jure :)

 

de toute manière pour la netatmo, elle fait un refresh toutes les 10 minutes je crois et donc pas la peine d'aller rechercher les données plus souvent .... d'ailleurs je crois avoir lu quelque part qu'on risquait meme des ennuis si on se connecte trop souvent ... 

Partager ce message


Lien à poster
Partager sur d’autres sites

Il me semble que le refresh du NetAtmo c'est toutes les 5 minutes, àconfirmer car par certain de moi ! I-Magin fait un refresh avec un tempo de 6 minutes.

Partager ce message


Lien à poster
Partager sur d’autres sites

Je confirme la fréquence des enregistrements faits par netatmo : 5mn

Partager ce message


Lien à poster
Partager sur d’autres sites

Petite news intéressante netatmo s'ouvre àl'IFTTT

http://www.pcinpact.com/news/85537-netatmo-station-meteo-souvre-aux-autres-objets-connectes-avec-ifttt.htm

Ceci pourrai s'intégrer àterme dans la domotique, je ne sais pas encore comment mais je crois que certains vont avoir de bonnes idées

Partager ce message


Lien à poster
Partager sur d’autres sites

krikroff bonjour

 

ton module fonctionne super.

 

petite question: peut on récupérer les valeurs de Netatmo (avec ton module virtuel) pour déclencher des  scènes? et comment (récupération des valeurs invisible dans mes scènes).

Partager ce message


Lien à poster
Partager sur d’autres sites

×