Forum eedomus
http://forum.eedomus.fr/

[Script Raspberry] Thermomètre / Hygromètre Xiaomi Mijia
http://forum.eedomus.fr/viewtopic.php?f=50&t=7463
Page 1 sur 1
Auteur:  P@t [ 17 Sep 2018 21:59 ]
Sujet du message:  [Script Raspberry] Thermomètre / Hygromètre Xiaomi Mijia

Bonjour à tous,

Voici un petit script à installer sur un Raspberry Pi 3 qui permet grâce au bluetooth intégré du Raspberry de communiquer avec le thermomètre connecté Xiaomi. Le script renvoit au format xml la température et l'humidité.

Commencez par créer un fichier xiaomi_temp_sensor.php sur le serveur web de votre raspberry et copiez ce code:
Code : Tout sélectionner
<?php

$device = $_GET['device'];
$adapter = 'hci0';
$output_file = realpath(dirname(__FILE__)).'/xiaomi_temp_sensor.cache'; // chemin du fichier cache
$cache_time = 480; // 8 minutes

if (empty($device))
{
   die('device argument is missing...');
}

if (!file_exists($output_file) or time() - filemtime($output_file) > $cache_time)
{
   $command = "gatttool --device=$device --adapter=$adapter --char-write-req -a 0x10 -n 0100 --listen > $output_file 2>&1 & echo $!";
   exec($command, $op);
   $pid = (int)$op[0];

   if(empty($pid)) die;

   sleep(10);
   exec("kill -9 $pid", $op);
}

$result = file_get_contents($output_file);

$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml .= '<xiaomi>';

preg_match_all('/value: (.*?)\n/', $result, $matches);

if (!empty($matches))
{
   $hex = str_replace(' ', '', $matches[1][0]);
   $str = '';
    for($i=0;$i<strlen($hex);$i+=2)
   {
      $str .= chr(hexdec(substr($hex,$i,2)));
   }

   if (preg_match('/T=([0-9\.]+)/', $str, $match))
   {
      $xml .= '<temperature>'.$match[1].'</temperature>';
   }

   if (preg_match('/H=([0-9\.]+)/', $str, $match))
   {
      $xml .= '<humidity>'.$match[1].'</humidity>';
   }
}

$xml .= '</xiaomi>';

header("Content-type: text/xml");
echo $xml;

?>


Ensuite, créez un capteur HTTP sur votre box eedomus et renseignez les paramètres suivants:
xiaomi1.png
xiaomi1.png (24.21 Kio) Consulté 2720 fois

Modifiez les paramètres VAR ainsi:
- VAR1 : adresse IP du raspberry
- VAR2 : addresse bluetooth de votre capteur xiaomi

Vous pourrez trouver l’adresse du capteur à l'aide de la recherche bluetooth de votre téléphone par exemple, ou en installant une application prévue à cette effet. Vous pouvez également lancer la commande suivante sur votre rapberry:
Code : Tout sélectionner
sudo hcitool lescan

Le capteur ne nomme normalement MJ_HT_V1 et l'adresse commence par 4C:65:A8....

Il ne vous reste plus qu'à créer un deuxième capteur HTTP pour l'hygrométrie, en changeant simplement le type de capteur, l'unité et le chemin xpath:
xiaomi2.png
xiaomi2.png (24.03 Kio) Consulté 2716 fois


Bons tests!

PS: je vais voir avec la team s'il n'y aurait pas moyen d'utiliser ce script directement sur la box eedomus avec un dongle bluetooth dans ce genre...
Auteur:  anne-marie [ 18 Sep 2018 07:38 ]
Sujet du message:  Re: [Script Raspberry] Thermomètre / Hygromètre Xiaomi Mijia

P@t a écrit:PS: je vais voir avec la team s'il n'y aurait pas moyen d'utiliser ce script directement sur la box eedomus avec un dongle bluetooth dans ce genre...

Ce serait top! :D
Auteur:  galaksy2001 [ 19 Sep 2018 07:30 ]
Sujet du message:  Re: [Script Raspberry] Thermomètre / Hygromètre Xiaomi Mijia

Merci pour le partage. L'intégration du bluetooth à la box serait un grand +.
Page 1 sur 1 Le fuseau horaire est UTC+1 heure