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}”
Nadajemy uprawnienia do uruchamiania:
sudo chmod +x /home/pi/domoticz/scripts/xair2domoticz.sh
I wrzucamy do crontab
crontab -e
*/15 * * * * sudo ~/domoticz/scripts/xair2domoticz.sh
Działa. Łaski nie robi 🙂 U mnie nazywa się to Aqi (tak prawdę mówiąc to identycznie jak w poradniku…). Temperatura i wilgotność w odpowiedniej zakładce.
Ok, dane już odbieramy. Teraz wypadałoby nauczyć się nim sterować.
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
I to by było na tyle. Działa, raportuje, oczyszcza. Mam mały problem z czasami nie działającymi ustawieniami Max i Low (komendy wysyłane z linii poleceń działają bez problemu, w powyższym skrypcie może muszę wstawić mały delay). Ale On, Off, Silent, Auto działa bez problemu.
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ć.