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 scan[/sourcecode]

 

Script,

Debemos crear el siguiente script de Python que será el que conecte a nuestra báscula, el script que os pongo es una modificación de este en GitHub. En mi caso lo llamaré lee_bascula.py:

[sourcecode]import blescan
import sys
import time

import bluetooth._bluetooth as 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

try:
while True:
returnedList = blescan.parse_events(sock, 1)
if len(returnedList) > 0:
(mac, uuid, major, minor, txpower, rssi) = returnedList[0].split(‘,’, 6)
# CAMBIAR LA DIRECCION MAC
if mac == ’88:0f:10:XX:XX:XX’ and 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, debemos hacer que cuando la Raspberry Pi se reinicie pues cargue directamente el script y lo tengamos listo! lo hacemos con cron y añadimos:

[sourcecode]crontab -e

@reboot sudo python /home/pi/lee_bascula.py[/sourcecode]

 

Gràfiques,

Si nos acordamos, en este documento previo, vimos cómo montar Grafana, si lo tienes desplegado genial ya que lo vamos a utilizar para visualizar los datos y hacernos unos paneles increibles! Y si no lo tienes instaladote recomiendo que lo instales ya que lo vamos a usar, sigue los pasos de dicho documento para instalarlo en una máquina (virtual) dedicada o mismamente sobre la misma Raspberry Pi.

 

Tras disponer de Grafana montado, lo habitual que deberemos hacer es crear un nuevo 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!!

 

Posts recomanats

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dubtis a contactar amb mi, us intentareu ajudar sempre que pugui, compartir és viure ;) . Gaudir dels documents!!!