Obtenint dades de la nostra bàscula Xiaomi Smart Scale amb Raspberry Pi
Si tens la bàscula Xiaomi Smart Scale segueix els passos d'aquest document i podràs llegir el teu pes des d'una Raspberry Pi, connectant per bluetooth emmagatzemarem en una base de dades de MySQL els registres, i així si volem podem explotar-los super fàcil amb Grafana! Us aniré deixant una sèrie de documents que crec són molt interessants per obtenir informació de diferents dispositius que controlen la nostra vida i visualitzar-lo d'una forma super xiula!
Base de dades,
Per tant, necesitaremos una Raspberry Pi con Raspbian instalado i actualizado. Luego si no tenemos un servidor de base de dades hem d'instal·lar MySQL i el client de manera opcional para gestionar la BD, si no, muy fàcilment si volem administrar bases remotes d'aquest equip de forma remota podrem hacerlo des d'un Windows con HeidiSQL. Bé, para instalar MySQL:
[sourcecode]sudo apt-get install mysql-server mysql-client[/sourcecode]
Després de la instal·lació, ya nos podem connectar a nostre MySQL, crear una Base de dades, i crear una Tabla on emmagatzemarem els registres de pesatge, que és muy sencilla, digamos tiene 2 camps, una inicial que serà on se guarde el pes anomenat 'peso’ com no, i un altre anomenat 'created_at’ que se rellenarà amb la data quan execute el script. Lo hacemos con:
[sourcecode]mysql -u root -p
crear NOMBRE_BASE_DATOS de base de dades;
CREAR TAULA 'NOMBRE_TABLA' (
'PESO' DECIMAL(4,2) NOT NULL,
'created_at' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
;
[/sourcecode]
Y esto és lo que habremos creado, si? Nuestra tabla donde guardarem tot el nostre peso! i amb poc temps podrem analitzar i veure si engordem o no!!!
Bluetooth,
Tras dejar preparada la BD, ara configurarem l'accés de bluetooth de la nostra Raspberry Pi a la bàscula Xiaomi Smart Scale, installarem els requisits per utilitzar bluetooth amb Python, executant:
[sourcecode]sudo apt-get install bluez python-bluez python-bluez python-mysqldb[/sourcecode]
Abans de seguir, si no estem usando una Raspberry Pi 3, deberemos connectle un petit dongle bluetooth para poder connectarse a la bàscula, para verificar que lo tenemos listo, executamos el següent comandament que hauríem de devolver la direcció MAC del nostre dispositiu bluetooth si ho ha reconegut la Pi:
[sourcecode]hcitool dev[/sourcecode]
podem provar a escanear i veure què dispositius bluetooth trobem con:
[sourcecode]hcitool escanejar[/sourcecode]
Script,
Hem de crear el següent script de Python que serà el que connecti a la nostra bàscula, el script que us poso és una modificació de aquest a GitHub. En el meu cas el cridaré lee_bascula.py:
[sourcecode]importar blescan
import sys
import time
importar bluetooth._bluetooth com bluez
dev_id = 0
sock = bluez.hci_open_dev(dev_id)
blescan.hci_le_set_scan_parameters(sock)
blescan.hci_enable_le_scan(sock)
measured_anterior = 0
intent:
while True:
returnedList = blescan.parse_events(sock, 1)
if len(returnedList) > 0:
(mac, uuid, major, minor, txpower, rssi) = returnedList[0].split(‘,’, 6)
# CANVIAR L'ADREÇA MAC
if mac == '88:0f:10:XX:XX:XX’ i uuid[0:22] == ‘01880f1096ab190d161d18′:
measunit = uuid[22:24]
measured = int((uuid[26:28] + uuid[24:26]), 16) * 0.01
unit = ”
if measunit.startswith((’03’, 'b3')): unit = 'lbs'’
if measunit.startswith(('12', 'b2')): unit = 'jin'’
if measunit.startswith(('22', 'a2')): unit = 'Kg'’ ; measured = measured / 2
if unit:
if measured != measured_anterior:
print("measured : %s %s" % (measured, unit))
measured_anterior = measured
import MySQLdb
db = MySQLdb.connect("127.0.0.1","root","CONTRASEÑA_ROOT_MYSQL","NOMBRE_BASE_DATOS")
cursor = db.cursor()
cursor.execute("""INSERT INTO NOMBRE_TABLA (peso) VALUES (%s) """,(measured))
db.commit()
time.sleep(2)
except KeyboardInterrupt:
sys.exit(1)[/sourcecode]
Si nos fijamos bien en el script con realizar un par de modificaciones lo vas a tener corriendo enseguida! Deberás cambiar la dirección MAC de tu báscula, la contraseña del usuario root de MySQL, el nombre de la BD y poco más! Podemos probar a ejecutarlo con el siguiente comando que se quedará a la escucha de que alguien se pese, mostrará cada pesaje cada vez que te subas a la báscula y a parte de decirte en un mensaje el peso, lo meterá en la BD de MySQL que le estamos diciendo. Provar:
[sourcecode]sudo python /home/pi/lee_bascula.py[/sourcecode]
I ara, si todo va bien, hem de fer que quan la Raspberry Pi es reiniciï carregui directament l'script i el tinguem llest! ho fem amb cron i afegim:
[sourcecode]crontab -e
@reboot sudo python /home/pi/lee_bascula.py[/sourcecode]
Gràfiques,
si ens recordem, en aquest document previ, vam veure com muntar Grafana, si el tens desplegat genial ja que l'utilitzarem per visualitzar les dades i fer-nos uns panells increïbles! I si no el tens instal·lat… et recomano que l'instal·lis ja que l'utilitzarem, segueix els passos d'aquest document per instal·lar-lo en una màquina (virtual) dedicada o fins i tot sobre la mateixa Raspberry Pi.
Després de tenir Grafana muntat, el habitual que haurem de fer és crear un nou Dashboard, en aquest simple exemple haremos uno de tipo gràfic que hará una consulta a la BD de MySQL para mostrarnos los registros que tenemos almacenados, luego cada uno personalizará el gráfico a su gusto. Però abans de res, debemos crear un origen de dades de tipo MySQL para hacer consultas desde nuestros Dashboards. Per a això, des de “Data Sources” polsarem en “Add” y añadimos una connexió a nuestro servidor de MySQL que és la Raspberry, configuramos la connexió de forma correcta y grabamos con “Save & Test”,
Ahora ya podem crear nuestro Dashboard, le añadimos un Panel de tipo Graph, y lo editamos al pulsar en el seu títol, canviamos todo como ens interessa, colors, información, ejes… pero en la pestaña de “Metrics” deberemos colocar la SELECT que hará la consulta a la BD, especificamos alguna cosa como:
[sourcecode]SELECT
UNIX_TIMESTAMP(created_at) as time_sec,
peso com a valor,
"Peso" as metric
DE Basculami
ON __timeFilter $(created_at)
ORDER BY created_at, time_sec ASC[/sourcecode]
I res, després de remenar una mica veuràs que et pots fer uns gràfics xulos, això sí, necessites omplir la taula amb registres, així que dona temps al temps!!! Aquest post, com us dic, és un primer pas cap a una meravella que podrem fer, ajuntant totes les peces del trencaclosques… ens veiem aviat, cuidar-vos molt!!











































