2024. április 25., csütörtök

Gyorskeresés

CFW Xiaomi hőmérséklet és páratartalom mérőre

Írta: | Kulcsszavak: cfw . Xiaomi . LYWSD03MMC . hőmérő . páratartalom . telink . python . bluetooth . BLE

[ ÚJ BEJEGYZÉS ]

Ezen bejegyzésem apropóját a Hackaday-en megjelent blog bejegyzés inspirálta.

Aki nem ismerné még a Xiaomi ezen termékét annak röviden pár szóban leírom.
Egy kicsi LCD kijelzővel rendelkező hőmérséklet és páratartalom mérő eszközről van szó, ami BlueTooth-on keresztül kommunikál.

A kép bármennyire is azt sugallja, hogy jól mutat a nappaliban, de ez nem így van. Valójában nagyon pici eszközről van szó. Nappaliba én az e-inkes változatot javaslom, ha valaki ilyesmit szeretne.

Specifikációk:
Battery: 1db CR2032
Wireless Connection: Bluetooth 4.2 BLE
Hőmérséklet tartomány: 0C-tól +60C-ig
Páratartalom tartomány: 0% - 99%
Méret: (L x W x H): 4.30 x 4.30 x 1.25 cm
Súly: 0.0200 kg

Miért akar az ember egy működő dolgot megberhelni?
Egyrészt mert ezáltal jobban kézben lehet tartani az információt (legalábbis azt gondoljuk) és jobban személyre lehet szabni az eszköz működését és megnyílik a lehetőség, hogy a gyári app-on kívűl mással is hozzáférjünk az adatokhoz.
Ez jelen esetben annyit tesz, hogy
- a kizárólagos Celsius kijelzést meg tudjuk változtatni Farenheitre (ez nálunk nem feltétlen igény)
- van lehetőség offset állítására. (Kollégákkal 4 darabot rendeltünk. A hőmérséklet 1 fokon belül, a pára tartalom meg 5%-on belül szórt. Otthoni viszonylatban ezt egész jónak mondanám)
- frissítési gyakoriságot lehet változtatni. (A gyári érték azt hiszem 5 sec). Aaron leírása alapján én úgy értelmezem, hogy milyen gyakran olvassa ki a szenzor adatokat. De ettől függetlenül folyamatosan küldi a BLE csomagokat. De ezáltal lehet növelni az elem élettartamát
- a példa programok segítségével akár magunk is írhatunk applikációkat amik tudnak kapcsolódni a kütyühöz

Nos akkor nézzük, hogy mi is kell ahhoz CustomFW-t töltsünk rá.
Első sorban ajánlom a fejlesztő Aaron Christophel Youtube videóját megtekintésre: 4$ Xiaomi thermometer custom firmware LYWSD03MMC BLE TLSR8251

Ahogy a videóban is én is egy mobil okos telefon segítségével flasheltem meg a kis eszközt.
#1 - Töltsd le a ATC_Thermometer.bin -t
#2 - Nyisd meg TelinkFlasher.htm-t
#3 - Connect gomb (BT és a helyek legyen bekapcsolva)

Ha sikeres volt a Connect akkor a bekeretezett részben a hőmérőnkre vonatkozó adatokat olvashatunk.

#4 - Válasszuk ki az #1-es pontban letöltött ATC_Thermometer.bin -t
#5 - A Start Flashing gomb megnyomására elindul a flashelés. A 3-sal jelölt keretben követhetjük, hogy hol tart a folyamat.

#6 - Nálam ~70 másodpercig tartott a flashelés. Utána elem kivétellel újraindítottam és az ATC_ kezdetű eszköz már CFW-s ketyere.

Ha már itt tartunk akkor nézzük meg, hogy python segítségével hogyan tudjuk a szenzor adatokat kiolvasni.
Először is telepítsük a szükséges csomagokat. (Én Linux Mint 20-at használok)
sudo apt install bluetooth libbluetooth-dev
sudo python3 -m pip install pybluez
Töltsük le a bluetooth_utils.py-t és tegyük a munkakönyvtárunkba.
Python példakód:
#!/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)

Hozzászólások

(#1) aero.


aero.
veterán
LOGOUT blog

Nem gondoltam volna, hogy ezt is lehet. Nekem is van kettő, bár semmi értelmét nem látom a bluetooth-nak. Több időbe telik bekapcsolni a telefont es megnyitni az alkalmazást, mint ránézni.

:R

(#2) Adamyno válasza aero. (#1) üzenetére


Adamyno
tag

Van értelme, mert tudod integrálni smarthome-ba. Az más kérdés, hogy én erre a célra a Zigbeet preferálom.

- Indítsd újra a gépedet! - Az egészet? - Nem, a felét...

(#3) waccamár válasza aero. (#1) üzenetére


waccamár
senior tag

nekem van otthon 5, ott már rövidebb idő megnyitni az alkalmazást és megnézni egyszerre őket :D

(#4) sonar válasza aero. (#1) üzenetére


sonar
addikt

Igen, csak szemrevételezéssel nincsenek meg a historikus adatok.
Illetve ahogy írták többen is okos otthon szerverekbe is be lehet kötni (a gyári FW-t is)
Kolléga pl ennek segítségével vezérli otthon a párásítót a gyerekek szobájában.

A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!

(#5) Oldman2


Oldman2
veterán

Köszi!

(#6) aero. válasza sonar (#4) üzenetére


aero.
veterán
LOGOUT blog

Gondolom akkor a hub kezel bluetooth-t is?

(#7) sonar válasza aero. (#6) üzenetére


sonar
addikt

Igen.

A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.