Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierMagdiBlog

RaspiCamAero : Aéronautique de loisir, caméra sur piste et informations METAR (màj déc 2016)

Par : Olivier
7 décembre 2016 à 15:43

materiel2

MàJ déc 2016 : changement de nom de domaine pour le projet qui devient www.cam-aero.eu

Il fait beau et chaud, les vacances d’été ne sont plus très loin. Le temps parfait pour les activités de plein air. Ca tombe bien, aujourd’hui je vais vous présenter un projet réalisé pour le site www.cam-aero.eu, en partenariat avec MagdiBlog.fr, qui ravira les amateurs d’aéronautique de loisir 🙂

L’objectif de ce projet est de doter tous les aérodromes d’un module caméra qui prend des photos de la piste et de la météo ambiante à intervalles réguliers tout en incrustant la date, l’heure et les informations météorologiques locales (telles que METAR, TAF, SIGMET) dans l’image.

Voici un aperçu d’une image d’un aérodrome dans la région de Brest :

IroiseAF-1024x768

L’ensemble des images de tous les aérodromes équipés sont collectées et stockées sur un serveur central. Toutes les images et informations météorologiques locales sont ensuite consultables par tous les membres ; ce qui leur permet de mieux préparer leurs vols, par exemple, en connaissant l’état de l’aérodrome de destination.

Un système collaboratif simple, économique, à la porté de tous (Le module s’installe sur une fenêtre avec une ventouse et nécessite une simple connexion Internet. L’installation du logiciel et sa configuration se font en une seule ligne de commande), qui permettra à tous les aérodromes de partager une vue de leur piste et leurs informations METAR facilement 🙂

Le système complet est réalisé avec des Raspberry Pi, sans composants particuliers :

N’hésitez pas à partager l’info et à promouvoir ce projet autour de vous 🙂

Je vous laisse découvrir le projet sur le site officiel : www.cam-aero.eu

L’article RaspiCamAero : Aéronautique de loisir, caméra sur piste et informations METAR (màj déc 2016) est apparu en premier sur MagdiBlog.

PiHomeDashscreen et domotique : températures et humidité

Par : Olivier
27 août 2015 à 09:26

PiHomeDashScreen_domotique_meteo

Quand j’ai débuté le projet PiHomeDashscreen il y a un peu plus de deux ans (déjà ?!?), j’avais déjà en tête de le relier, un jour, à un système domotique. En effet, ce type d’écran d’information domestique ne présente de réel intérêt que si les données affichées sont utiles au quotidien. Quoi de plus pertinent que des informations concernant la maison, les températures intérieures et extérieures, la consommation électrique, l’état de l’alarme anti intrusion, la vidéo-surveillance etc… ?

Aujourd’hui, nous allons voir comment exploiter les données de température et d’humidité d’une installation domotique à base de Raspberry Pi et Domoticz et les afficher sur notre PiHomeDashScreen. Cette méthode, qui se base sur l’API de Domoticz, est générique et peut s’appliquer à n’importe quel type de données ou module domotique (interrupteurs, sondes météo, capteur de luminosité, chauffage…).

Prérequis

IMG_8255Avant de pouvoir afficher la température et l’humidité de l’intérieur et l’extérieur de votre maison, vous devez au préalable :

Le matériel

Vous pouvez installer le PiHomeDashScreen et votre box Domoticz sur le même Raspberry Pi. Dans ce cas, voici le matériel minimum dont vous aurez besoin :

everspring_st814Vous pouvez utiliser n’importe quel sonde météo compatible z-wave comme les bien connues Everspring ST814.

Pour ma part j’utilise des sondes de température et d’humidité Oregon Scientific, réputées pour leur fiabilité. Pour pouvoir les faire fonctionner avec votre Pi et Domoticz vous devrez vous équiper en plus du module USB RFXtrx433.

Le PiHomeDashScreen

Une fois en possession de tout le matériel nécessaire, vous devrez donc avoir installé et configué le PiHomeDashScreen comme détaillé ici : http://www.magdiblog.fr/boa-pi-homedashscreen/1-raspberry-pi-home-dash-screen/

Domoticz

DomoticzVous devrez également avoir installé et configuré le module z-wave Razberry ou le module USB RFXtrx433 ainsi que Domoticz comme expliqué ici : http://www.magdiblog.fr/domotique/raspberrypi-razberry-rfxtrx433usb-domoticz-le-combo-parfait/

Récupération des données

A ce stade, tout devrait être fonctionnel et vous devriez avoir vos sondes de température opérationnelles dans Domoticz. Pour ma part, j’ai bien mes deux sondes Oregon avec la température et l’humidité comme on peut le voir dans la capture d’écran ci-dessous :

domoticz_sondes_temperature

Si vous n’avez pas vos sondes correctement détectées dans Domoticz c’est que vous avez loupé une étape. Il est inutile de poursuivre tant que tout n’est pas opérationnel, je vous invite donc à bien relire cet article : http://www.magdiblog.fr/domotique/raspberrypi-razberry-rfxtrx433usb-domoticz-le-combo-parfait/

Si tout est ok, alors la suite va se révéler très simple 🙂 En effet, Domoticz propose une API JSON qui permet, entre autres, d’accéder à toutes les données de vos équipements domotique et en particulier vos sondes de température.

Note : Vous trouverez la documentation complète de l’API JSON de Domoticz ici : https://www.domoticz.com/wiki/Domoticz_API/JSON_URL’s

La récupération des données se fait simplement avec une requête HTTP GET sous la forme d’une URL de type :

http://adresse_ip_du_pi:8080/json.htm?type=devices&rid=id_du_module

L’id des modules en question est visible directement dans Domoticz dans l’onglet « setup/devices » :

domoticz_sondes_temperature_ids

Dans cet exemple, j’ai donc ma sonde extérieure (Oregon Outside) avec l’id 116 et ma sonde intérieure (Oregon Inside) avec l’id 117.

Pour récupérer les données de la sonde extérieure par exemple, je vais donc utiliser l’URL suivante :

http://adresse_ip_du_pi:8080/json.htm?type=devices&rid=116

L’API Domoticz va renvoyer une série de données au format JSON :

{
 "ActTime" : 1440510947,
 "ServerTime" : "Aug 25 2015 15:55:47",
 "Sunrise" : "06:52:00",
 "Sunset" : "20:47:00",
 "result" : [
 {
 "AddjMulti" : 1.0,
 "AddjMulti2" : 1.0,
 "AddjValue" : 0.0,
 "AddjValue2" : 0.0,
 "BatteryLevel" : 100,
 "CustomImage" : 0,
 "Data" : "20.2 C, 56 %",
 "DewPoint" : "11.14",
 "Favorite" : 1,
 "HardwareID" : 2,
 "HardwareName" : "RFXCOM",
 "HaveTimeout" : false,
 "Humidity" : 56,
 "HumidityStatus" : "Comfortable",
 "ID" : "FB02",
 "LastUpdate" : "2015-08-25 15:55:13",
 "Name" : "Oregon Outside",
 "Notifications" : "false",
 "PlanID" : "0",
 "Protected" : false,
 "ShowNotifications" : true,
 "SignalLevel" : 5,
 "SubType" : "THGN122/123, THGN132, THGR122/228/238/268",
 "Temp" : 20.20,
 "Timers" : "false",
 "Type" : "Temp + Humidity",
 "TypeImg" : "temperature",
 "Unit" : 2,
 "Used" : 1,
 "XOffset" : "0",
 "YOffset" : "0",
 "idx" : "116"
 }
 ],
 "status" : "OK",
 "title" : "Devices"
}

Note : Les données renvoyées par l’API de Domoticz peuvent varier d’une sonde à une autre mais de manière générale vous devriez identifier rapidement les informations dont vous avez besoin.

Dans cet exemple, on repère facilement le champ « Data » qui contient à la fois la température en degrés Celsius et le taux d’humidité en pourcentage :

"Data" : "20.2 C, 56 %"

On repère également les champs « Humidity » et « Temp » qui présentent ces mêmes données de manière brut, c’est à dire sans unité (plus facile à traiter par la suite) :

"Humidity" : 56
[...]
"Temp" : 20.20

Maintenant que nous savons comment récupérer et identifier précisément les données qui nous intéressent, il ne nous reste plus qu’à créer un module pour notre PiHomeDashScreen 🙂

Code source à implémenter dans le PiHomeDashScreen

Comme pour la plupart des autres modules, il va nous falloir ajouter un conteneur dans la page d’index, puis déclarer les fonctions PHP et JavaScript qui se chargeront de récupérer et d’afficher les informations 🙂

Note : Pour plus d’information sur le fonctionnement des modules du PiHomeDashScreen, je vous invite à lire cet article : http://www.magdiblog.fr/boa-pi-homedashscreen/3-principe-de-base/

index.php

C’est parti ! On commence par le fichier index.php dans lequel il faut placer deux conteneurs principaux (intérieur et exterieur) puis deux sous-conteneurs température et humidité :

<div id="inside">
 In
 <div id="temp_in"></div>
 <div id="hum_in"></div>
</div>

<div id="outside">
 Out
 <div id="temp_out"></div>
 <div id="hum_out"></div>
</div>

style.css

On positionne les deux conteneurs principaux sur l’écran et on ajuste le style d’affichage de la température et de l’humidité :

div#inside
{
 width : 200px;
 height : 270px;
 right : 0px;
 bottom : 0px;
 position : absolute;
 padding : 5px;
 border : solid 0px #D33;
 z-index : 999;
 text-align : center;
 color : #555;
 font-size : 20px;
 font-weight : bold;
}

div#temp_in
{
 width : 200px;
 background-color : rgba(0, 0, 0, 1);
 text-align : center;
 font-size : 60px;
 padding : 0px;
 border : solid 0px #33D;
 margin : 0px auto;
}

div#hum_in
{
 width : 200px;
 background-color : rgba(0, 0, 0, 1);
 text-align : center;
 font-size : 50px;
 padding : 0px;
 border : solid 0px #33D;
 margin : 0px auto;
}

div#outside
{
 width : 200px;
 height : 170px;
 right : 220px;
 bottom : 100px;
 position : absolute;
 padding : 5px;
 border : solid 0px #D33;
 z-index : 999;
 text-align : center;
 color : #555;
 font-size : 20px;
 font-weight : bold;
}

div#temp_out
{
 width : 200px;
 background-color : rgba(0, 0, 0, 1);
 text-align : center;
 font-size : 60px;
 padding : 0px;
 border : solid 0px #33D;
 margin : 0px auto;
}

div#hum_out
{
 width : 200px;
 background-color : rgba(0, 0, 0, 1);
 text-align : center;
 font-size : 50px;
 padding : 0px;
 border : solid 0px #33D;
 margin : 0px auto;
}

span.hum_unit
{
 font-size : 25px;
}

javascript.js

Une seule fonction JavaScript pour récupérer la température et l’humidité des deux sondes :

/* temp */

var temp_timeout;

function temp () {
  $.ajax({
    async : false,
    type: "GET",
    dataType: "json",
    url: "./ajax.php",
    data: "block=temp",
    success: function(html){
      $("#temp_in").html(html.temp_in.temp);
      $("#temp_out").html(html.temp_out.temp);
      $("#hum_in").html(html.temp_in.hum);
      $("#hum_out").html(html.temp_out.hum);
    }
  });

  temp_timeout = setTimeout("temp()", 120000);
}

Note : Une actualisation de l’affichage toutes les deux minutes (120000 ms) est largement suffisante. On peut même pousser à dix minutes, les températures ne variants jamais très brutalement.

ajax.php

Comme pour les autres modules, il suffit d’ajouter l’appel à la bonne fonction PHP :

/////////////////////////////////////////////////
//  TEMP
/////////////////////////////////////////////////

if($block == 'temp'){
  echo tempAll ();
}

inc.php

Petite subtilité ici, nous séparons le travail en deux fonctions. La fonction tempAll() appellera la fonction temp() pour chaque sonde et renverra un array contenant l’ensemble des données. En procédant de la sorte, on factorise un peu le code et on rend plus facile l’ajout d’une troisième sonde.

C’est donc la fonction temp() qui se chargera de contacter l’API Domoticz comme expliqué en début d’article. On utilise pour cela cURL qui est un outil permettant de lancer des requêtes HTTP 🙂 On prendra soin d’adapter les ids des devices/sondes que l’on souhaite atteindre.

  /////////////////////////////////////////////////
  //  TEMP
  /////////////////////////////////////////////////

  function tempAll () {

    $datas = array();

    $temp_in = temp ('in');
    $temp_out = temp ('out');

    $datas['temp_in'] = $temp_in;
    $datas['temp_out'] = $temp_out;
    
    $datas = json_encode($datas);

    return $datas;
  }

  function temp ($location) {

    if($location == 'out') {
      $device_id = 116;
    }
    else if($location == 'in') {
      $device_id = 117;
    }
    else{
      $device_id = "X";
    }

    $url = "http://adresse_ip_domoticz:8080/json.htm?type=devices&rid=".$device_id;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
    $return = curl_exec($curl);
    curl_close($curl);
    $data = array('temp' => '', 'hum' => '');
    if(json_decode($return)->result[0]->Temp) {
      $data['temp'] = json_decode($return)->result[0]->Temp.'°';
    }
    else{
      $data['temp'] = json_decode($return)->result[0]->Temp.'°';
    }
    if(json_decode($return)->result[0]->Humidity){
      $data['hum']  = json_decode($return)->result[0]->Humidity.'<span class="hum_unit">%</span>';
    }
    return $data;
  }

Note : Les données renvoyées par l’API de Domoticz sont au format JSON. Il faut donc veiller à décoder ces données en utilisant la fonction json_decode(). Notez également que nous ré-encodons en JSON les données renvoyées par la fonction tempAll() grâce à la fonction json_encode(), afin qu’elles puissent être facilement lues par la fonction JavaScript.

Et voilà le résultat 🙂

PiHomeDashScreen_temperature_humidite

Le mot de la fin

Comme évoqué plus haut dans l’article, ce principe d’utilisation de l’API Domoticz avec le PiHomeDashScreen peut être décliné pour n’importe quel type de sonde (météo, luminosité, ouverture de porte, état des lumières, système d’alarme…).

Dans cet exemple j’ai utilisé deux sondes de température, mais il est tout à fait possible d’exploiter les données d’autant de sondes et capteurs que vous le souhaitez 🙂 On pourrait même envisager d’afficher un plan de la maison avec la température de chaque pièce par exemple.

A très bientôt pour la suite 🙂

image

L’article PiHomeDashscreen et domotique : températures et humidité est apparu en premier sur MagdiBlog.

❌
❌