Si nous avons appris quelque chose au fil des ans, c’est que les hackers aiment savoir à quelle température il fait. Sérieusement. Une promenade dans les archives de Hackaday permet de découvrir un nombre impressionnant de gadgets sur mesure pour enregistrer, afficher et transmettre les conditions actuelles. Des stations météorologiques extérieures à un ESP8266 avec un DHT11 soudé, l’état de la technique ne manque pas si vous souhaitez commencer à collecter vos propres données environnementales.

Maintenant, évidemment, nous sommes de grands fans de bricolage ici, c’est en quelque sorte le point de tout le site Web. Mais il est indéniable qu’il peut être difficile de concurrencer les économies d’échelle, en particulier lorsqu’il s’agit de marchandises importées. Même le pirate informatique le plus expérimenté aurait du mal à construire quelque chose comme le Xiaomi LYWSD03MMC. Pour aussi peu que 4 USD chacun, vous disposez d’un capteur écoénergétique élégant avec un écran LCD intégré qui diffuse la température et l’humidité actuelles via Bluetooth Low Energy.

Vous pourriez probablement construire le vôtre… mais pourquoi?

C’est à peu près la plate-forme idéale pour mettre en place un système de surveillance de l’environnement dans toute la maison, à l’exception d’un détail: il est conçu pour fonctionner dans le cadre du système domotique de Xiaomi, et pas nécessairement des configurations piratées que des gens comme nous ont à la maison . Mais c’était avant qu’Aaron Christophel ne se lance dans l’affaire.

Nous avons d’abord annoncé le mois dernier son projet ambitieux de création d’un micrologiciel open source pour ces capteurs à faible coût et, sans surprise, cela a suscité beaucoup d’intérêt. Après tout, les gens prenant des pièces de matériel existantes, les améliorant et partageant comment ils l’ont fait avec le monde est un principe fondamental de cette communauté.

Croyant qu’un projet aussi bien conçu méritait un second regard, et franchement parce que je voulais commencer à surveiller les conditions dans ma propre maison à bon marché, j’ai décidé de commander un pack de thermomètres Xiaomi et de plonger.

Installation du micrologiciel

L’un des aspects les plus attrayants du micrologiciel «ATC» d’Aaron est sa facilité d’installation. Vous vous attendez à ce que quelque chose comme cela nécessite de casser le boîtier et de connecter un adaptateur USB à UART, et pendant que vous pouvez Suivez cette voie si vous en avez besoin, 99% des utilisateurs utiliseront l’outil de clignotement extrêmement intelligent «Web Bluetooth».

En théorie, vous devriez pouvoir installer le micrologiciel ATC à partir de n’importe quel ordinateur exécutant un navigateur Web suffisamment moderne, mais votre kilométrage peut varier avec une telle fonctionnalité de pointe. Mon bureau Linux ne pouvait pas du tout se connecter aux thermomètres et l’essayer sur un Chromebook ne fonctionnait qu’occasionnellement. Votre meilleur pari sera probablement un smartphone ou une tablette, et je n’ai eu aucun problème à faire clignoter plusieurs thermomètres à l’aide de mon Pixel 4a.

Au total, le processus de clignotement prend un peu moins d’une minute. Après avoir tiré sur l’onglet à l’arrière du thermomètre, vous appuyez sur «Connecter» sur le clignotant et attendez qu’il apparaisse sur la liste des périphériques Bluetooth locaux. Après la connexion, vous devez appuyer sur le bouton «Activer», qui établit apparemment la connexion sécurisée requise par le micrologiciel d’origine avant de permettre une mise à niveau par voie hertzienne (OTA).

Une fois le processus d’activation terminé, vous sélectionnez un binaire du micrologiciel, appuyez sur «Démarrer le clignotement» et attendez que l’indicateur de progression passe à 100%. Cela prend environ 30 secondes pour terminer, et ensuite le thermomètre devrait immédiatement redémarrer dans le nouveau firmware. S’il ne se réveille pas après le processus de clignotement, Aaron dit que vous pouvez simplement retirer la batterie et qu’elle devrait se régler d’elle-même. Je suis passé par ce processus plusieurs fois maintenant sans jamais avoir besoin de tirer une batterie, donc vraisemblablement c’est un problème assez rare.

Si vous en avez besoin, le même processus peut être utilisé pour remettre le micrologiciel d’origine sur l’appareil. Aaron n’a pas d’image de firmware stock dans le référentiel GitHub (susceptible d’éviter une réclamation de droit d’auteur) mais dans la documentation, il vous explique comment vous pouvez en extraire une copie à partir d’un fichier de mise à jour officiel.

Maintenant, le lecteur le plus soucieux de la sécurité peut se demander si cela signifie qu’un nerd militant peut faire le tour des thermomètres Xiaomi des gens. Malheureusement, c’est le cas. Cet outil permettra à toute personne à portée Bluetooth de faire clignoter ce qu’elle veut sur le Xiaomi LYWSD03MMC, qu’il ait ou non un firmware personnalisé installé. Cela dit, il a déjà été mentionné d’ajouter une sorte de mécanisme d’authentification au micrologiciel ATC pour se défendre contre de telles attaques; ce qui le rend nettement plus sécurisé que le firmware d’origine.

Être à l’aise

L’outil de flashage Web n’installe pas seulement le micrologiciel ATC, il fournit également une interface facile à utiliser pour le configurer. Après vous être connecté à l’appareil, faites simplement défiler un peu vers le bas et appuyez simplement sur les différentes options pour les activer ou les désactiver.

La première chose que j’ai faite a été de désactiver l’étrange visage souriant de l’ASCII, et étant un païen américain, j’ai également changé l’affichage en Fahrenheit. Le fait que vous puissiez entrer des valeurs de décalage pour la température et l’humidité est pratique, bien que cela puisse devenir inutile à l’avenir, car Aaron dit qu’une routine d’étalonnage plus robuste est sur la liste TODO.

Afficher le niveau de la batterie à l’écran est une fonctionnalité intéressante activée par défaut, mais personnellement, je l’ai désactivée. Le problème est que le pourcentage de batterie et l’humidité relative doivent partager le plus petit ensemble de chiffres en bas à droite de l’écran LCD. Ils vont et viennent toutes les cinq secondes environ, ce qui en pratique semble juste assez rapide pour qu’il soit parfois difficile de savoir lequel vous regardez. De plus, lorsque la batterie CR2032 à l’intérieur est censée durer jusqu’à un an, ai-je vraiment besoin de voir le niveau de la batterie si souvent?

J’étais un peu confus par « Intervalle de publicité » au début. J’ai supposé que ce serait la fréquence à laquelle le thermomètre envoie un paquet BLE, mais en pratique, il les envoie toutes les quelques secondes, peu importe ce que vous modifiez ce paramètre. Qu’est-ce que ce paramètre réellement changements est la fréquence à laquelle les données de température diffusées sont mises à jour. La valeur par défaut est d’une minute, vous devez donc vous attendre à obtenir une vingtaine de paquets qui contiendront les mêmes valeurs de température et d’humidité avant d’être actualisés. La définition de l’intervalle de mise à jour à 10 secondes vous donnerait des données plus granulaires, mais probablement au détriment de la durée de vie de la batterie.

Constructions personnalisées

Bien qu’Aaron n’entre pas trop dans les détails sur la page du projet, il est assez facile de compiler votre propre firmware pour le thermomètre qui peut ensuite être flashé avec l’outil Web. Sous Linux, tout ce que j’avais à faire était d’extraire l’archive tar de Xiaomi Telink TLSR825X et d’ajouter le répertoire à ma variable d’environnement $ PATH. À partir de là, j’ai pu construire le firmware ATC et commencer à fouiller dans le code.

Les noms personnalisés ne sont qu’à quelques lignes de code.

Si vous êtes dans la programmation C de bas niveau, il existe un certain nombre de problèmes dans le référentiel GitHub sur lesquels vous pourriez probablement aider. Il semble que le principal en ce moment est d’établir un stockage flash persistant, ce qui ouvrirait la voie à la possibilité de conserver la configuration lors des changements de batterie et de fonctionnalités plus avancées telles que l’enregistrement de la température locale.

Pour mes propres besoins, il était assez facile de trouver la partie du code qui modifie le nom de l’appareil Bluetooth. Si vous allez les parsemer partout dans la maison, voir quelque chose comme «ATC_BEDROOM» sera certainement plus utile que le schéma de dénomination par défaut qui utilise les derniers caractères de l’adresse MAC.

Extraire les données

Maintenant pour être clair, tu ne le fais pas avoir besoin pour installer le firmware d’Aaron pour utiliser les données de ces thermomètres dans vos propres projets. Il existe au moins un outil qui vous permet d’extraire la température, l’humidité et le niveau de batterie des capteurs de la boîte, et ils sont également pris en charge dans ESPHome. Mais le problème avec le firmware d’origine est que vous devez vous connecter à chaque capteur pour lire ses données, ce qui est un processus lent et gourmand en énergie. L’une des principales améliorations du micrologiciel d’Aaron est que les données sont constamment diffusées en clair comme une publicité BLE; ce qui signifie que tout appareil à proximité peut renifler les valeurs directement sans établir de connexion ou d’appairage.

À cette fin, il existe quelques packages qui méritent d’être examinés. Au moment d’écrire ces lignes, il y a une pull request pour ajouter la prise en charge du firmware ATC à aioblescan, un simple outil Python 3 qui videra les données des paquets BLE vers le terminal. Un petit script vous permettrait d’analyser facilement la sortie d’aioblescan et de mélanger les informations comme bon vous semble.

J’ai également eu de la chance avec py-bluetooth-utils, une bibliothèque conçue pour travailler avec les publicités BLE. Sur la base de quelques exemples inclus avec le projet, j’ai mis au point ce script minimal qui devrait vous aider à démarrer:


#!/usr/bin/env python3
import sys
from datetime import datetime
import bluetooth._bluetooth as bluez

from bluetooth_utils import (toggle_device, enable_le_scan,
							 parse_le_advertising_events,
							 disable_le_scan, raw_packet_to_str)

# Use 0 for hci0
dev_id = 0 
toggle_device(dev_id, True)

try:
	sock = bluez.hci_open_dev(dev_id)
except:
	print("Cannot open bluetooth device %i" % dev_id)
	raise

# Set filter to "True" to see only one packet per device
enable_le_scan(sock, filter_duplicates=False)

try:
	def le_advertise_packet_handler(mac, adv_type, data, rssi):
		data_str = raw_packet_to_str(data)
		# Check for ATC preamble
		if data_str[6:10] == '1a18':
			temp = int(data_str[22:26], 16) / 10
			hum = int(data_str[26:28], 16)
			batt = int(data_str[28:30], 16)
			print("%s - Device: %s Temp: %sc Humidity: %s%% Batt: %s%%" % 
			     (datetime.now().strftime("%Y-%m-%d %H:%M:%S"), mac, temp, hum, batt))

	# Called on new LE packet
	parse_le_advertising_events(sock,
								handler=le_advertise_packet_handler,
								debug=False)
# Scan until Ctrl-C
except KeyboardInterrupt:
	disable_le_scan(sock)

Simplement fais-le

Si tu ne peux pas dire, je vraiment comme le firmware personnalisé d’Aaron Christophel pour le Xiaomi LYWSD03MMC. Pour autant que je sache, il n’y a absolument aucune raison de ne pas l’installer si vous avez déjà certains de ces thermomètres. Dans son état actuel, il vous donne un meilleur contrôle sur le matériel et ce que vous pouvez en faire, et les fonctionnalités actuellement en cours de planification promettent d’aller encore plus loin. Être capable d’enregistrer localement les données de température sur le thermomètre et de les télécharger via BLE à une date ultérieure est certainement quelque chose à surveiller.

Pour aussi bon marché que ces petits thermomètres, je vous recommande vivement d’en ajouter quelques-uns à votre prochaine commande de pièces. Même si vous n’avez pas encore d’idée en tête pour eux, je ne serais pas surpris si quelque chose vous venait après avoir passé un après-midi à pirater leur firmware.

LAISSER UN COMMENTAIRE

Rédigez votre commentaire !
Entrez votre nom ici