Xiaomi Mi Flora i ogólnie BLE
Dzień dobry w ten pochmurny i deszczowy dzień!
Mimo że deszczowo, ale w domu sucho. A jak sucho, to i kwiatki podlewać trzeba.
A do tego się przyda Xiaomi mi flora - czujnik wilgoci, temperatury oraz światła. Ten wpis zacząłem pisać jakieś pół roku temu i tak sobie wisiał nie skończony (poradniki jak czujnik połączyć z Domoticz są również na innych blogach, więc parcia nie było), ale pod kątem mojego kolejnego wpisu postanowiłem go skończyć.
Wpis oparty jest na Raspberry Pi 3, czyli Bluetooth mamy już na pokładzie.
Po wpisaniu
apt-cache policy bluez
dostaniemy zapewne informację wersji 5.23. Trochę stara, nie obsługuje Bluetooth Low Energy. Musimy zainstalować nowszą, przynajmniej 5.3x
Po pierwsze oczywiście, jak zawsze
apt-get update
apt-get upgrade
i instalujemy potrzebne bilbioteki
sudo apt-get install libglib2.0-dev libdbus-1-dev libical-dev libreadline-dev libudev-dev
Później
cd /home/pi
Na moment pisania przeze mnie aktualna wersja bluez to 5.47
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.47.tar.gz
tar -xvf bluez-5.47.tar.gz
cd bluez-5.47
Ustawiamy zmienne systemowe
sudo ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-tools --disable-test --disable-systemd --enable-deprecated
I kompilujemy wersję
sudo make all
sudo apt-get install python-bluez python-requests
sudo cp attrib/gatttool /usr/bin/
lub (wykonanie obu nie zaszkodzi)
sudo cp attrib/gatttool /usr/local/bin/
export PATH=$PATH:~/bluez-5.47/attrib/
I ściągamy kod odpowiedzialny za komunikację z Mi Flora
Kopiujemy folder do folderu ze skryptami Domoticz.
cp -R ~/miflora/ ~/domoticz/scripts/python/miflora
I lecimy dalej:
Dla pewności restartujemy
Później sprawdzamy jaki jest adres MAC naszego modułu Bluetooth
sudo hcitool lescan
Kopiujemy adres MAC naszego modułu Bluetooth, za chwilę się przyda.
W międzyczasie przygotujmy Domoticz. Dodajemy, w sekcji Hardware czujnik MiFlora, jako Dummy.
Następnie, do niego tworzymy Virtual Sensors. Cztery, tak jak poniżej. Uważajcie na typy.
I teraz ważny moment - edycja pliku konfiguracyjnego dla Mi Flora.
sudo nano /home/pi/domoticz/scripts/python/miflora/domoticz.py
Najpierw adres serwera i swoje dane logowania:
domoticzserver = "192.168.1.200:80"
domoticzusername = "User"
domoticzpassword = "YourPassword"
I na samym końcu możecie zastąpić przykładowe czujniki Waszym adresem MAC i IDX założonych czujników w Domoticz.
Działa!
NIC nie stoi na przeszkodzie, aby skrypt rozszerzyć o odczyt wartości baterii. Dodatkowo, osobiście zrealizowałem kiedyś skrypt sprawdzający obecność domowników na podstawie urządzeń Bluetooth - w moim przypadku opaski, ale w sumie każde urządzenie z Bluetooth da się pod to zaadaptować. Nie podobał mi się jednak dość mały zasięg sygnału Bluetooth. Możliwości jednak są!
Życzę powodzenia w ich odkrywaniu.
Mimo że deszczowo, ale w domu sucho. A jak sucho, to i kwiatki podlewać trzeba.
A do tego się przyda Xiaomi mi flora - czujnik wilgoci, temperatury oraz światła. Ten wpis zacząłem pisać jakieś pół roku temu i tak sobie wisiał nie skończony (poradniki jak czujnik połączyć z Domoticz są również na innych blogach, więc parcia nie było), ale pod kątem mojego kolejnego wpisu postanowiłem go skończyć.
Wpis oparty jest na Raspberry Pi 3, czyli Bluetooth mamy już na pokładzie.
Po wpisaniu
apt-cache policy bluez
Po pierwsze oczywiście, jak zawsze
apt-get update
apt-get upgrade
i instalujemy potrzebne bilbioteki
sudo apt-get install libglib2.0-dev libdbus-1-dev libical-dev libreadline-dev libudev-dev
Później
cd /home/pi
Na moment pisania przeze mnie aktualna wersja bluez to 5.47
wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.47.tar.gz
tar -xvf bluez-5.47.tar.gz
cd bluez-5.47
Ustawiamy zmienne systemowe
sudo ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-tools --disable-test --disable-systemd --enable-deprecated
I kompilujemy wersję
sudo make all
sudo apt-get install python-bluez python-requests
sudo cp attrib/gatttool /usr/bin/
lub (wykonanie obu nie zaszkodzi)
sudo cp attrib/gatttool /usr/local/bin/
export PATH=$PATH:~/bluez-5.47/attrib/
I ściągamy kod odpowiedzialny za komunikację z Mi Flora
cd ~ && git clone https://github.com/Tristan79/miflora.git
Kopiujemy folder do folderu ze skryptami Domoticz.
cp -R ~/miflora/ ~/domoticz/scripts/python/miflora
I lecimy dalej:
sudo aptitude install python3 python3-pip
sudo pip3 install pygatt
sudo pip3 install requests
Wchodzimy do folderu bluez:
cd bluez-5.47/
I wykonujemy
cd bluez-5.47/
I wykonujemy
sudo tools/btmgmt le on
sudo tools/btmgmt connectable on
sudo tools/btmgmt power on
Dla pewności restartujemy
sudo hciconfig hci0 down
sudo hciconfig hci0 up
hciconfig
Później sprawdzamy jaki jest adres MAC naszego modułu Bluetooth
sudo hcitool lescan
Kopiujemy adres MAC naszego modułu Bluetooth, za chwilę się przyda.
W międzyczasie przygotujmy Domoticz. Dodajemy, w sekcji Hardware czujnik MiFlora, jako Dummy.
Następnie, do niego tworzymy Virtual Sensors. Cztery, tak jak poniżej. Uważajcie na typy.
I teraz ważny moment - edycja pliku konfiguracyjnego dla Mi Flora.
sudo nano /home/pi/domoticz/scripts/python/miflora/domoticz.py
Najpierw adres serwera i swoje dane logowania:
domoticzserver = "192.168.1.200:80"
domoticzusername = "User"
domoticzpassword = "YourPassword"
I na samym końcu możecie zastąpić przykładowe czujniki Waszym adresem MAC i IDX założonych czujników w Domoticz.
print("\n1: Salon")
update("C4:7C:8D:62:A9:57","132","133","134","135")
update("C4:7C:8D:62:A9:57","132","133","134","135")
i sprawdzamy
sudo /usr/bin/python3 /home/pi/domoticz/scripts/python/miflora/domoticz.py
Pozostaje wrzucić do cron, aby skrypt automatycznie się wykonywał, na przykład co godzinę.
sudo /usr/bin/python3 /home/pi/domoticz/scripts/python/miflora/domoticz.py
Pozostaje wrzucić do cron, aby skrypt automatycznie się wykonywał, na przykład co godzinę.
crontab -e
@hourly sudo /usr/bin/python3 /home/pi/domoticz/scripts/python/miflora/domoticz.py
Działa!
NIC nie stoi na przeszkodzie, aby skrypt rozszerzyć o odczyt wartości baterii. Dodatkowo, osobiście zrealizowałem kiedyś skrypt sprawdzający obecność domowników na podstawie urządzeń Bluetooth - w moim przypadku opaski, ale w sumie każde urządzenie z Bluetooth da się pod to zaadaptować. Nie podobał mi się jednak dość mały zasięg sygnału Bluetooth. Możliwości jednak są!
Życzę powodzenia w ich odkrywaniu.
Działa :-)
OdpowiedzUsuńOczywiście :D U mnie od roku nieprzerwanie!
UsuńWitam czy można zmodyfikować skrypt w taki sposób aby odczytywał wartości z Xiaomi Mijia bluetooth temperature & humidity sensor
OdpowiedzUsuńCześć. Z tego co widzę, ludzie korzystają z https://github.com/pFenners/mijia-sensor-domoticz, dokładnie jest to opisane tutaj: https://www.facebook.com/groups/domoticzpl/permalink/2132673033632182/?hc_location=ufi
UsuńTeż bym chciał odczytywać z Xiaomi Mijia bluetooth temperature & humidity sensor ale wykonanie powyższych komend co którąś linię wywala mi błąd i raczej z tym nie ruszę, chyba, że ktoś podeśle coś może bardziej aktualnego...?
UsuńCześć. Jakie to błędy? Jeżeli o braku potrzebnych paczek - po prostu je doinstaluj.
UsuńCześć, ten powyżej anonimowy kmentarz był mój. Wówczas poradziłem sobie poprzez RPIEasy z tym połączniem. Ale to jest bardzo niestabilne i raczej nie działa. Generalnie chodzi mi o czujniki temperatury od xiaomi (nie mi flora). Tym razem przeszedłem przez całość bez błędów. Próbuję przerobić skrypt MiFlora by odczytywał mi jedynie temperaturę. Bazuję na wręcz gotowym https://github.com/pFenners/mijia-sensor-domoticz , ale jestem totalnie zielony i nie wiem jak sobie z tym poradzić. Wygląda to jakby na problem z kodowaniem w innej wersji phytona. Przy próbie uruchomienia dostaję: Deprecation Warning: encodestring() is a deprecated alias since 3.1, use encodebytes() Czy ktoś może poradził sobie z tym do końca i mógłby podpowiedzieć?
UsuńCześć. Ciężko mi już będzie pomóc, ponieważ przerzuciłem się całkowicie na Home Assistant...
Usuńdzis nie wiem czemu sie cos sypneło po wielu m-cach czy moze ktos wie co gdzie i jak :-(
OdpowiedzUsuńPatched: Error reading value retry after 5 seconds...
Patched: Error reading value retry after 5 seconds...
Patched: Error reading value