Obtendo dados de nossa Xiaomi Smart Scale com Raspberry Pi

Si tienes la báscula Xiaomi Smart Scale sigue los pasos de este documento y podrás leer tu peso desde una Raspberry Pi, conectando por bluetooth almacenaremos en una base de datos de MySQL los registros, y así si queremos podemos explotarlos super fácil con Grafana! Os iré dejando una serie de documentos que creo son muy interesantes para obtener información de distintos dispositivos que controlan nuestra vida y visualizarlo de una forma super chula!

 

Base de dados,

Portanto, precisaremos de uma Raspberry Pi com Raspbian instalado e atualizado. Depois, se não tivermos um servidor de base de dados, devemos instalar o MySQL e o cliente de forma opcional para gerir a BD, caso contrário, muito facilmente, se quisermos administrar bases remotas deste equipamento de forma remota, poderemos fazê-lo a partir de um Windows com HeidiSQL. Nada mau, para instalar o MySQL:

[Código-fonte]sudo apt-get install mysql-server mysql-client[/Código-fonte]

 

Após a instalação, já nos podemos conectar ao nosso MySQL, criar uma Base de dados, e criar uma Tabela onde iremos armazenar os registos de pesagem, que é muito simples, digamos que tem 2 Campos, um inicial que será onde se guarda o peso chamado ‘peso’ Como você não pôde, e outro chamado ‘created_at’ que será preenchido com a data quando o script for executado. Fazemo-lo com:

[Código-fonte]mysql -u raiz -p
create database NOME_BASE_DADOS;

CREATE TABLE `NOME_TABELA` (
`peso` DECIMAL(4,2) NÃO NULO,
'created_at' TIMESTAMP NOT NULL PADRÃO CURRENT_TIMESTAMP NA ATUALIZAÇÃO CURRENT_TIMESTAMP
)
;
[/Código-fonte]

 

E é isto que teremos criado, Sim? A nossa tabela onde vamos armazenar todo o nosso peso! E em pouco tempo poderemos analisar e ver se engordamos ou não!!!

 

Bluetooth,

Após preparar a BD, Agora vamos configurar o acesso Bluetooth da nossa Raspberry Pi à balança Xiaomi Smart Scale, Vamos instalar os requisitos para usar Bluetooth com Python, Executando:

[Código-fonte]sudo apt-get install bluez python-bluez python-mysqldb[/Código-fonte]

 

Antes de ir mais longe, Se não estivermos a usar uma Raspberry Pi 3, Teremos de ligar um pequeno dongle Bluetooth para poder conectar à balança, Para verificar se está tudo pronto, Executamos o seguinte comando que nos deverá devolver o endereço MAC do nosso dispositivo Bluetooth se a Pi o reconheceu:

[Código-fonte]hcitool dev[/Código-fonte]

 

Podemos tentar escanear e ver que dispositivos Bluetooth encontramos com:

[Código-fonte]hcitool scan[/Código-fonte]

 

Script,

Devemos criar o seguinte script em Python que será o que liga à nossa balança, o script que vos apresento é uma modificação de este no GitHub. No meu caso, chamá-lo-ei lee_bascula.py:

[Código-fonte]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)

medido_anterior = 0

try:
while True:
returnedList = blescan.parse_events(sock, 1)
Se Len(returnedList) > 0:
(Mac, uuid, major, minor, txpower, rssi) = returnedList[0].fender(‘,’, 6)
# ALTERAR O ENDEREÇO MAC
if mac == '88':0f:10:XX:XX:XX’ and uuid[0:22] == ‘01880f1096ab190d161d18′:
measunit = uuid[22:24]
medido = int((uuid[26:28] + uuid[24:26]), 16) * 0.01

unidade = ”

if measunit.startswith((’03’, 'b3')): unidade = 'lbs'’
if measunit.startswith(('12', 'b2')): unidade = 'jin'’
if measunit.startswith(('22', 'a2')): unidade = 'Kg'’ ; medido = medido / 2

if unidade:
if medido != medido_anterior:
imprimir("measured : %s %s" % (medido, unidade))
medido_anterior = medido
importar 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) VALORES (%s) """,(medido))
db.commit()
time.sleep(2)

exceto KeyboardInterrupt:
sys.exit(1)[/Código-fonte]

 

Se nos atentarmos bem ao script, com algumas modificações vais tê-lo a correr rapidamente! Deverás alterar o endereço MAC da tua balança, a palavra-passe do utilizador root do MySQL, o nome da base de dados e pouco mais! Podemos testar a execução com o seguinte comando, que ficará à escuta de alguém se pesar, irá mostrar cada pesagem cada vez que subires à balança e, além de indicar numa mensagem o peso, irá guardá-lo na base de dados MySQL que lhe estamos a indicar. Tentar:

[Código-fonte]sudo python /home/pi/lee_balanca.py[/Código-fonte]

 

E agora, se tudo correr bem, devemos garantir que, quando a Raspberry Pi reiniciar, o script seja carregado diretamente e esteja pronto! fazemo-lo com o cron e adicionamos:

[Código-fonte]crontab -e

@reboot sudo python /home/pi/lee_bascula.py[/Código-fonte]

 

Gráfico,

se nos lembrarmos, neste documento anterior, vimos como configurar o Grafana, se o tiveres instalado, ótimo, pois vamos utilizá-lo para visualizar os dados e criar painéis incríveis! e se não o tiveres instalado… recomendo que o instales, pois vamos usá-lo, segue os passos desse documento para o instalar numa máquina (virtual) dedicada ou mesmo na própria Raspberry Pi.

 

após ter o Grafana configurado, o habitual a fazer é criar um novo Dashboard, en este simple ejemplo haremos uno de tipo gráfica 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. Mas antes de tudo, debemos crear un origen de datos de tipo MySQL para hacer consultas desde nuestros Dashboards. Para fazer isso,, desde “Fontes de dados” Vamos clicar em “Adicionar” y añadimos una conexión a nuestro servidor de MySQL que es la Raspberry, configuramos la conexión de forma correta y grabamos con “Salvar & Teste”,

 

Ahora ya podemos crear nuestro Dashboard, le añadimos un Panel de tipo Graph, y lo editamos al pulsar en su título, cambiamos todo como nos interese, Cores, información, ejes… pero en la pestaña de “Métricas” deberemos colocar la SELECT que hará la consulta a la BD, especificamos algo como:

[Código-fonte]SELECIONAR
UNIX_TIMESTAMP(created_at) Então time_sec,
peso como valor,
"Peso" como métrica
DE basculami
ONDE $__timeFilter(created_at)
ORDER BY created_at, time_sec ASC[/Código-fonte]

 

 

E nada, se mexeres un pouco verás que podes facer uns gráficos fixes, É claro, precisas preencher a tabela com registos, entón dá tempo ao tempo!!! Este post como vos digo é um primeiro passo para uma maravilha que vamos poder fazer, juntando todas as peças do puzzle… vemos-nos em breve, Cuidem-se!!

 

Postagens recomendadas

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Não hesite em contactar-me, Vou tentar ajudá-lo sempre que puder, Compartilhar é viver ;) . Desfrute de documentos!!!