Quelle température et hydrométrie dans ma maison : Xiaomi Mijia LYWSD03MMC - Partie 2

 bonjour les SMHOSYIENS 

PRÉSENTATION : 

Suite a l’article sur le Xiaomi Mijia LYWSD03MMC voici la partie 2 avec un enregistrement en base de donnée SQLITE3







EXPLICATION : 

Vous trouverez le code sur mon git

on commence bien-sur par déclarer le type de script

#!/bin/bash

on extrait le chemin du script

#extraction du chemin
dir=$(dirname $(readlink -f $0))

puis l’accès au fichier de log et base de donnée

# on crée un fichier pour les log
exec &>> $dir/log/mijia_com.log
# chemin de la base de donnée
sqlite_bd="$dir/bd/MIJIA.db"

on vérifie que l'on a bien les accès root

# on vérifie que l'on est en Root
if [[ $EUID -ne 0 ]];
then
echo "Ce script doit être exécuté avec les privilèges administrateur"
exit 1
fi

et voici la fonction de lecture des capteur inspiré du code de Fanjoe's

#function de lecture des donées

add_read()
{
#reception des variable de la fonction
MACadd="$1"
LOCadd="$2"

# activation du dongle bluetooth
hciconfig hci0 down
hciconfig hci0 up

# lecture de la Notification handle
hnd38=$(timeout 15 gatttool -b $MACadd --char-write-req --handle='0x0038'\
--value="0100" --listen | grep --max-count=1 "Notification handle")

if !([ -z "$hnd38" ])
then
#extraction de la valeur de temperature
temperature=${hnd38:39:2}${hnd38:36:2}
temperature=$((16#$temperature))
if [ "$temperature" -gt "10000" ];
then
temperature=$((-65536 + $temperature))
fi
temperature=$(echo "scale=1;$temperature/100" | bc)

#extraction de la valeur de d'humidité
humidity=${hnd38:42:2}
humidity=$((16#$humidity))

#lecture et extraction du pourcentage de la batterie
hnd1b=$(gatttool --device=$MACadd --char-read -a 0x1b)
# Characteristic value/descriptor: 63
battery=${hnd1b:33:2}
battery=$((16#$battery))

#texte pour le fichier de log
echo "$(date +"%d/%m/%y %H:%M:%S") - [SUCCES] [$LOCadd]"
#insertion des données dans la table ETAT_MODULE
sqlite3 $sqlite_bd "insert into ETAT_MODULE (MAC,LOC,TH,HD,BAT,TIME)\
values (\"$MACadd\",\"$LOCadd\",\"$temperature\",\"$humidity\",\"$battery\"\
,\"$(date +%s)\")"
else
#texte pour le fichier de log
echo "$(date +"%d/%m/%y %H:%M:%S") - [ERROR] [$LOCadd]"
fi

}

et une petite boucle pour lire tous les capteur présent dans la base de donnée MODULE

# Boucle de la bd MODULE pour lire les valeur
sqlite3 $sqlite_bd "select id from MODULE" | while read prkey; do
mac=$(sqlite3 $sqlite_bd "select MAC from MODULE where ID=$prkey")
loc=$(sqlite3 $sqlite_bd "select LOC from MODULE where ID=$prkey")
#on lance la fonction de lecture
add_read $mac $loc
#On n'est pas des bourrins on laisse une petite pause-café
sleep 1
done

vous trouverez le dossier mijia_bd contenant le script ainsi que lla base de donnée et le fichier de log

vérifier la présence de sqlite3 sur votre machine 

$sqlite3 -version
3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837balt1

si absent tapé la commande

$sudo apt-get install sqlite3


afin de modifier facilement la base de donées SQLITE3 je me sert sous UBUNTU de DB Browser for SQLite

il ne vous reste plus qu'a mettre vos mac et localisation dans la table "MODULE"


TEST :

une fois cela réalisé un petit test s'impose

$cd REPERTOIRE DE VOTRE SCRIPT

~/mijia$ sudo ./MIJIA_MULTI_BD.sh

Vous devriez voir le fichier de log et la base de donnée se remplir tada 👌



une fois que tous fonctionne il va bien falloir automatiser tous ça sauf si votre belle mère peut lancer la commande toutes les 5 minutes mais j'en doute

on va crée une tache cron sur le mode root

$ sudo crontab -e 

insérer cette ligne pour une interrogation toutes les 5 minutes

*/5 * * * * /home/VOTRE REPERTOIRE/mijia_bd/MIJIA_MULTI_BD.sh

Enregistrer en tapant ctrl+x

Votre script sera lancée automatiquement toutes les 5 minutes 

@+ les SMHOSYIENS

Commentaires