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:
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:
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...