Jak to chyba na Facebook’u piszą – Stoi w obliczu wyzwania…
Już nie pamiętam kiedy coś lutowałem.
Raspberry Pi, Domoticz, Smart home, Retro Gaming
Jakiś miesiąc temu znalazł się u mnie czujnik zalania wodą od Xiaomi. W sumie to przez dwa dni go nie otwierałem, bo myślałem, że poczta dostarczyła mi kolejny termometr. Po sprawdzeniu listy zakupów okazało się, że takowego nie zamawiałem, otworzyłem więc pudełko…
Co do Domoticz – czujnik działa jak na razie z wersją Beta, na którą się jeszcze nie zdecydowałem. W miarę możliwości postaram się ją sprawdzić i dopisać odpowiednie informacje. Wydaje się, że czekanie na kolejną wersję produkcyjną Domoticz może jeszcze potrwać. Pora chyba powoli myśleć nad przejściem do Home Assistant…
Po wyjęciu z pudełka – podstawka, czajnik oraz przejściówka – to jest niestety ciągle bolączka przesyłek z Chin… Kabel jest zawinięty w podstawce, można go rozwinąć.
Plastik bardzo przyjemny w dotyku, dobrze spasowany, stal w środku wydaje się dobra jakościowo. Na pewno trzeba będzie często czyścić i odkamieniać, ze względu na termometr zamontowany na dnie. Mamy 'twardą’ wodę, kamień się osadza dość szybko.
Ogólnie nie ma się co rozpisywać, włączamy Bluetooth w telefonie/tablecie, uruchamiamy aplikację i przechodzimy proces parowania. Ważną różnicą jest to, że (jak to z Bluetooth), sparować możemy z
Dodatkowo kilka opcji konfiguracyjnych do wyboru – czy podgrzewać wodę tylko po wybraniu przycisku oraz czy podgrzewać po wyjęciu i ponownym włożeniu do bazy.
Cudów nie ma – woda jest gorąca albo ciepła, tak jak chcecie. Jesteśmy bardzo zadowoleni.
Jedynym minusem jak dla mnie są chińskie opisy przycisków (wolałbym już obrazki) na uchwycie – trzeba pamiętać, że wrzątek bliżej rączki, podgrzewanie bliżej czajnika 😉
W końcu dotarł do nas Xiaomi Air Purifier 2. Udało się znaleźć go w dobrej cenie, wystarczyło poczekać 2 miesiące i już jest 😉 Smog na wsi nie jest tym, co tygrysy lubią najbardziej. Głównie chodzi o zdrowie dzieci.
Sprzęt, jak na Xiaomi przystało – dotarł w zwykłym pudle, bez setki kolorów, ale dobrze zapakowany. Miła niespodzianka – dostarczył go kurier.
Osobiście jestem bardzo zadowolony ze sprzętów tej marki. Działają niezawodnie, cechują się świetnym designem i łatwo się z nimi integrować.
Z tym oczyszczaczem jest podobnie – otwierasz, mówisz 'Ładne to’, włączasz, działa.
Po dodaniu do aplikacji (w standardowy dla nich sposób – podłączamy się do WiFi sprzętu i podajemy swoje dane WiFi) możemy od razu nim zarządzać.
Szybka aktualizacja 😉
I jesteśmy online!
Możemy oczywiście dodać widget do telefonu
Ale dobra, to było proste. Bardzo proste.
Teraz wypadałoby go zintegrować z Domoticz, to jest przecież moim głównym celem 😉
Według poradnika z forum Domoticz powinna zadziałać komenda jak poniżej.
sudo apt-get install npm sudo screen
Może i zadziałała, ale nie mogłem później zainstalować miio…
Jak się okazało – chodziło o wersję nodejs. Ruszamy więc z instalacją 'poprawnej’ wersji.
sudo curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash –
sudo apt-get install -y nodejs
I już można:
sudo npm install –save miio
sudo npm install -g miio
Teraz już zadziała 'discover’ – czyli wyszukiwanie kompatybilnych sprzętów.
sudo miio –discover –sync
Po jej wydaniu musicie zobaczyć IP oczyszczacza i jego status, jak poniżej:
Skoro jest, to jedziemy dalej! Do odważnych świat należy.
Poradniki różnie radzą, niektóre są bardziej skomplikowane, inne mniej. U mnie zadziałało to co poniżej.
Dodajemy skrypt, który będzie wysyłał komendy do oczyszczacza. Ja się uparłem i wszystkie wrzuciłem do folderu /scripts, ponieważ jest archiwizowany co noc.
sudo nano /home/pi/domoticz/scripts/airpurifier.js
#!/usr/bin/node
/* eslint-disable */
// Set path to node modules miio
const miio = require(’miio’);
// No need to change any lines in this section
var deviceip = process.argv[2];
var secondarg = process.argv[3];
var thirdarg = process.argv[4];
function exit() {
process.exit(-1);
}
// Power On (on / off specified as true or false)
if ( secondarg === „power” ) {
setTimeout(exit, 7000);
console.log(’Sending Power’, thirdarg, 'command’);
miio.device({
address: deviceip
}).then(device => {
return device.setPower(JSON.parse(thirdarg));
})}
// Status
if ( secondarg === „status” ) {
miio.device({
address: deviceip
}).then(device => {
stats = device.getProperties([ 'power’, 'mode’, 'aqi’, 'temperature’, 'humidity’ ])
console.log(stats);
process.exit();
})}
// Specify favorite manual fan speed (1 to 16) eg usage: fanspeed 16
if ( secondarg === „fanspeed” ) {
setTimeout(exit, 7000);
console.log(’Setting manual fan speed to:’, thirdarg);
miio.device({
address: deviceip
}).then(device => {
return device.setFavoriteLevel(parseInt(thirdarg));
})}
// Set fan mode option, specify: idle, auto, silent or favorite which needs to be set for manual speed control
if ( secondarg === „fanmode” ) {
setTimeout(exit, 7000);
console.log(’Telling device to use’, thirdarg, 'fan speed mode’);
miio.device({
address: deviceip
}).then(device => {
return device.call(’set_mode’, [ thirdarg ])
})}
// Control the device led (specify as bright, dim or off)
if ( secondarg === „led” ) {
setTimeout(exit, 7000);
console.log(’Setting device led to:’, thirdarg);
miio.device({
address: deviceip
}).then(device => {
return device.setLedBrightness(thirdarg);
})}
// Switch the device buzzer on or off (specify as true or false)
if ( secondarg === „buzzer” ) {
setTimeout(exit, 7000);
console.log(’Setting device buzzer to:’, thirdarg);
miio.device({
address: deviceip
}).then(device => {
return device.setBuzzer(JSON.parse(thirdarg));
})}
Jeżeli wszystko zrobiliście poprawnie, komenda jak poniżej pokaże jego status:
node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 status
Próbować możecie z różnymi komendami:
node airpurifier.js 192.168.1.115 power true – Włączenie
node airpurifier.js 192.168.1.115 power false – Wyłączenie
node airpurifier.js 192.168.1.115 status – Wyświetlenie statusu
node airpurifier.js 192.168.1.115 led off – Wyłączenie diody led
node airpurifier.js 192.168.1.115 buzzer true – Włączenie sygnałów głosowych
node airpurifier.js 192.168.1.115 fanmode auto – Tryb Auto
node airpurifier.js 192.168.1.115 fanmode favorite – Tryb Ulubiony
node airpurifier.js 192.168.1.115 fanspeed 16 – Maksymalna prędkość wiatraka
No to teraz pora na Domoticz.
Mała aktualizacja!
Dla pewności i wyjaśnienia. Zaczynamy od zdefiniowania nowego Hardware!
Dopiero później na jego podstawie zakładamy dwa Virtual sensor’y.
Dla jakości powietrza – Custom Sensor
Dla temperatury i wilgotności – Temp + Hum
Zapisujemy ich (Devices) IDX i wstawiamy do skryptu poniżej
sudo nano /home/pi/domoticz/scripts/xair2domoticz.sh
#!/bin/bash
# Get the data
data=$(node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 status)
# Sort it
temperature=$(echo „$data” | grep „temperature” | sed -e s/[^0-9.]//g)
humidity=$(echo „$data” | grep „humidity” | sed -e s/[^0-9.%]//g)
aqi=$(echo „$data” | grep „aqi” | sed -e s/[^0-9.]//g)
# Load it into Domoticz
curl -s „http://192.168.1.200/json.htm?type=command¶m=udevice&idx=247&nvalue=0&svalue=${temperature};${humidity};0″
curl -s „http://192.168.1.200/json.htm?type=command¶m=udevice&idx=248&svalue=${aqi}”
Założyłem Selector Switch (na podstawie Hardware), zmieniłem wartości z domyślnych na:
– Off
– Auto
– Low
– Max
– Silent
Pozostało wpisać skrypt LUA. Nie będę cwaniakował – zmieniłem skrypt autora z forum Domoticz (http://www.domoticz.com/forum/viewtopic.php?t=15537)
Skrypt, na podstawie nazwy urządzenia i jego statusów w Domoticz, wysyła komendy do Xiaomi Air Purifier 2.
sudo nano /home/pi/domoticz/scripts/lua/script_device_xair.lua
commandArray = {}
if devicechanged[’Oczyszczacz powietrza’] == 'Auto’ then
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 power true’)
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode auto’)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Off’ then
os.execute (’sudo screen -S airpurifieroff -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 power false’)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Low’ then
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode favorite’)
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanspeed 3′)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Max’ then
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode favorite’)
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanspeed 16′)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Silent’ then
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 power true’)
os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode silent’)
end
return commandArray
Do tego wypadałoby jeszcze zrobić pobieranie statusu Włączony/Wyłączony i aktualizowanie w Domoticz – automatycznie się to nie dzieje.
Swoją drogą – warto było go nabyć.
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/
cd bluez-5.47/
I wykonujemy
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.
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ę.
Życzę powodzenia w ich odkrywaniu.
Instalacja HABridge (system emulujący oświetlenie Philips Hue) jest banalnie prosta.
Najpierw musimy się upewnić, że odpowiednia wersja Java jest zainstalowana. Powinna być, ale w razie czego:
sudo apt-get update && sudo apt-get install oracle-java8-jdk
Jaka jest najnowsza wersja HABridge możemy dowiedzieć się tutaj:
https://github.com/bwssytems/ha-bridge/releases
Później kilka komend:
cd /home/pi/
mkdir habridge
cd habridge
wget https://github.com/bwssytems/ha-bridge/releases/download/<your version1>/ha-bridge-<your version2>.jar
Czyli w przypadku dla aktualnej wersji na 01.11.2017 wygląda to tak:
wget https://github.com/bwssytems/ha-bridge/releases/download/v4.5.6/ha-bridge-4.5.6.jar
Edit: lepiej będzie na przyszłość (w przypadku aktualizacji) zrobić jak poniżej.
mv ha-bridge-{VERSION}.jar ha-bridge.jar
Przed startem musimy stworzyć plik konfiguracyjny:
sudo nano starthabridge.sh
cd /home/pi/habridge
rm /home/pi/habridge/habridge-log.txt
nohup sudo java -jar /home/pi/habridge/ha-bridge.jar > /home/pi/habridge/habridge-log.txt 2>&1 &
chmod 777 /home/pi/habridge/habridge-log.txt
WAŻNE. Z tego co wyczytałem, HABridge powinien się uruchomić na porcie 8080, ale z jakiegoś powodu zrobił to na 80, a tam mam Domoticz. Musiałem podać port ręcznie, używając parametru:
-Dserver.port=8080
Czyli u mnie zawartość pliku wygląda tak:
cd /home/pi/habridge
rm /home/pi/habridge/habridge-log.txt
nohup sudo java -jar -Dserver.port=8080 /home/pi/habridge/ha-bridge.jar > /home/pi/habridge/habridge-log.txt 2>&1 &
chmod 777 /home/pi/habridge/habridge-log.txt
sudo chmod u+x starthabridge.sh
sudo ./starthabridge.sh
tail -f habridge-log.txt
Po wystartowaniu musimy przejść do przeglądarki i teraz zaczyna się prawdziwa zabawa!
Wita nas pusta strona HABridge, którą będziemy teraz wypełniać.
Przechodzimy na Bridge Control
Przechodzimy na dół do sekcji Domoticz Names and IP Addresses:
Tam dodajemy swoje dane serwera Domoticz:
I, BARDZO WAŻNE, wracamy na górę i zapisujemy.
Jeżeli wszystko dobrze zrobiliście (wierzę w Was, także na pewno tak 😉 ), na zakładce Domoticz Devices znajdą się Wasze urządzenia. To już ogromny sukces!
Teraz, po wejściu za pomocą przycisku Build na konkretny element (lub, jeżeli macie urządzenia nazwane po angielsku – można je zaznaczyć i wybrać Bulk Add), na początek wybieramy jego nazwę w polu Name, którą będziemy używać z Alexą.
Czyli, coś przyjaznego do wymówienia 😀
Najpierw zabrałem się do opisywania tego dość bogato, kończąc jednak na prostych, szybkich frazach. Inaczej mówi się 'Alexa, turn living room lights on’, a inaczej 'Alexa, living on’. Ale akurat tutaj Alexa jest nam bardzo pomocna i w większości wypadków rozpozna różne frazy. W sumie 'Alexa, living room on, 'Alexa, turn living room on’, 'Alexa turn living room lights on’ – da ten sam efekt.
W tym przykładzie integruję Yeelight, którą mam dodaną w Domoticz z HABridge.
Chwilowo tyle. Przechodzimy do serwisu Alexa albo wydajemy jej polecenie 'Alexa, discover devices’. Dla jasności przestawiam również proces rozpoznawania na stronie, który ogranicza się do wybrania Discover.
TADAM! Już można wołać 'Alexa, left light on’, 'Alexa, left light off,’ 'Alexa, dim left light to 20′. W tym ostatnim przykładzie odnosimy się do procentów, czyli efekt ten sam jak przy ’20 percent’.
Warto również od razu zrobić backup bazy danych HABridge. Jest dostępny na dole strony, przy pracy z ekranem Home.
Ja dodałem sobie również komendę do skryptu, który co noc robi ma na pendrive backup bazy, skryptów i folderu www Domoticz.
Identycznie jak żarówki zintegrowałem sobie zdalne gniazdka sieciowe. Nieważne czy 433MHz, Xiaomi, czy inne – po prostu działa po wypowiedzeniu komendy.
Nie ma się tutaj za bardzo o czym rozpisywać – wszystko podłącza się i paruje błyskawicznie. Jedyne o czym warto pamiętać to to, że potrzeba czegoś ostrego aby wprowadzić czujnik w tryb parowania – wystarczy agrafka lub igła.
Ponownie powtórzę, że sprzęty od Xiaomi są niezwykle ładne, estetyczne i małe – sama przyjemność. Żeby jeszcze aplikacja chciała tak działać…
Gniazdko również jest świetne, jak widać – wspiera wersje z różnych krajów.
Co ciekawe, po pewnym czasie włączyłem wykrywanie nowych urządzeń i Domoticz dodał mi Xiaomi Smart Plug Usage. Czyli raportowanie natężenia prądu w gniazdku.
Edit: Koledzy z grupy Domoticz zeznają, że czasem nie wystarczyło poczekać – musieli na nowo dodać Gateway w aplikacji Mijia.
Z pewnego, nieznanego mi, powodu raporty dzienne, tygodniowe i miesięczne zaczęły mi działać dopiero po przełączeniu odczytu energii z 'From device’ na 'Computed.
Co przekłada się na takie wykresy:
I miesięczny raport:
Jak to osiągnąć opisałem w innym poście: https://cezarowy.blogspot.com/2017/10/domoticz-i-koszty-zuzytego-pradu.html
Do kompletu czujników brakowało mi tego ostrzegającego o zalaniu. Zawsze jest jakaś szansa, że w razie pęknięcia węża od pralki zostanę o tym powiadomiony. Okazało się, że i takie można aktualnie dostać niewielkim kosztem kilkunastu złotych. Na 'popularnym chińskim portalu aukcyjnym’ można znaleźć je pod hasłem 'Wireless water leakage system’. Ja akurat kupowałem w Polsce, zależało mi na czasie. Są to czujniki działające na częstotliwości 433MHz, czyli świetnie integrujące się z RFLink.
Po zezwoleniu Domoticz na wykrycie nowych czujników i zalaniu czujki wodą, pojawiła się na liście urządzeń. Wystarczyło później dodać ją na listę.
Dodałem ją jako czujnik dymu, ponieważ ma możliwość resetowania po wzbudzeniu, co akurat w tym przypadku jest logiczne. Nie bardzo jednak wiem jak zmienić ikonę, taka więc zapewne pozostanie…
Czujniki po wyjęciu z pudełek zaskakują rozmiarem. Nie są podobne do tych monstrów, które stoją często w naszych domach. Czujnik temperatury jest niewiele większych od kciuka. Przynajmniej mojego 🙂
Niestety, trzeba wspomnieć o minusach. Bez przejściówki z gniazdek typu chińskiego na polski nie uruchomimy zestawu…
WAŻNE – przejściówki często NIE SĄ załączone w zestawach. Ja kupiłem różne, całkiem ciekawe można znaleźć w Leroy Merlin.
Po podłączeniu centralka przemówi do nas w pięknym, chińskim języku. Niestety, ni w ząb nie rozumiałem co chce mi przekazać 😉
Po włączeniu aplikacji MiHome wybrałem lokalizację Mainland i mogłem wybrać jakie urządzenie chcę sparować – na początek Gateway.
Sama centralka jako taka w docelowym miejscu interesuje mnie dużo mniej niż termometr, dlatego od razu zabrałem się do połączenia Temperature and humidity sensor. Tutaj również wystarczyło przycisnąć stylowy przycisk na 5 sekund i automatycznie został dodany.
W efekcie mam na bieżąco temperaturę dostępną z każdego miejsca w którym jestem a możliwością przeglądania historii. Cel osiągnięty!
Dodatkowo można dodawać automatykę do centralki:
– gdy pojawimy się w domu
– gdy wychodzimy
– gdy wstajemy
– gdy śpimy
– wyzwalanie alarmu czujnikami – na przykład w przypadku otwarcia drzwi gdy śpimy
Wszystkie urządzenia od Xiaomi integrują się ze sobą, możemy więc na przykład włączyć światło w centralce gdy opaska Mi Band wykryje, że wstaliśmy.
Dotarł do mnie ostatnio czujnik otwarcia/zamknięcia drzwi Kerui. Bardzo estetyczne, dobrze działające urządzenie, miałem z nim jednak pewien zgryz w Domoticz. Wysyła osobny sygnał otwarcia drzwi i osobny zamknięcia – co jest akurat dobrym rozwiązaniem, ale nie wiedziałem na początku jak sobie z tym poradzić.
Czujnik Kerui |