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
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ć.
Przy próbie wykonania sudo npm install --save miio pojawia się taki komunikat https://imgur.com/ERTp1fZ
OdpowiedzUsuńCo robię nie tak?
To tylko Warning. U mnie to samo, ale działa wszystko jak powinno.
UsuńNo ja po tym warningu wykonuję sudo npm install -g miio a następnie sudo miio --discover --sync i niestety nie widzę oczyszczacza.
UsuńWidoczny jest gateway, wzmacniacz wifi oraz żarówka rgbw (a więc cały sprzęt xiaomi który mam podłączony do wifi) a oczyszczacza niestety nie widać.
Hmmm. Co najmniej dziwne. Nie robiłem niczego specjalnego - po prostu soft go odnalazł...
OdpowiedzUsuńPo długim czekaniu przy discovery pojawia się oczyszczacz (192.168.1.3) ale potem przy sprawdzaniu statusu jest to co na screenie https://imgur.com/a/1YNuY
OdpowiedzUsuńEh, jeden znak się nie wkopiował. Powinno być: #/usr/bin/node w pierwszej linii. Już poprawiłem, bardzo dziękuję za zwrócenie uwagi!
UsuńPoprawiłem, ale dalej to samo, tzn. różnica jest taka, że teraz jest komunikat Invalid or unexpected token, reszta taka sama.
UsuńPrzekleiłem cały skrypt 1:1 z Raspberry. Powinno być ok
UsuńJest już jakiś postęp:) Co prawda nie działa, ale teraz po sprawdzeniu statusu pojawia się jedna linka z takim komunikatem:
Usuń(node:5661) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Call to device timed out
Tak jakby miio miało problemy z dostaniem się do niego w odpowiednim czasie. Zapewne dlatego też długo Ci go wykrywał. U mnie wynik minutę temu, na efekt nawet sekundę nie czekałem: https://imgur.com/a/WqITZ
UsuńPo dniu przerwy wracam do tematu, jednak dalej nie działa.
OdpowiedzUsuńPostawiłem od nowa system, zainstalowałem Domoticza, wszystko robię krok po kroku a na koniec takie błędy https://imgur.com/a/ERrGD
Wreszcie zadziałało, problemem chyba był słaby sygnał wifi w oczyszczaczu i dlatego nie dało się sprawdzić statusu. Teraz już jest OK, konfiguracja poprawna, status sprawdzam, sterowanie działa, ale jest problem z przesyłaniem danych do domoticza. Dodaję czujniki, ich idx wpisuję w skrypcie, oczywiście podaję poprawne adresy IP ale nic w Domoticzu się nie wyświetla.
OdpowiedzUsuńA komendy json wklejone do przeglądarki aktualizują czujniki? Powinny
UsuńCzyli na przykład http://192.168.1.200/json.htm?type=command¶m=udevice&idx=248&svalue=100 powinno wpisać 100 w czujnik. 192.168.1.200 to adres mojego Domoticz.
UsuńNie, nic się nie dzieje. U mnie RPi ma adres z końcówką 100, idx czujniki AQI to 54 więc w przeglądarce na komputerze wklejam to: http://192.168.1.100/json.htm?type=command¶m=udevice&idx=54&svalue=100 i nic w czujniki w domoticzu się nie dzieje.
UsuńMasz ustawiony akcept obsługi z sieci lokalnej w konfiguracji?
UsuńMasz na myśli w opcjach w domoticzu w Sieci lokalne (bez hasła/loginu):? Mam tam wpisane 127.0.0.*;192.168.1.*
UsuńJuż wiem gdzie był błąd, zarówno przy ręcznej próbie ustawienia wartości jak i w skrypcie powinien być podany poza IP domoticza także port, a więc http://192.168.1.100:8080/json.htm?type=command¶m=udevice&idx=54&svalue=100
UsuńTeraz już wszystko działa:)
Ha, super! Brawo!
UsuńNo to jeszcze została ostatnia część, czyli sterowanie przez domoticz. Nie do końca rozumiem co ma robić sudo screen -S airpurifieron -d -m ... ale właśnie to mi nie działa. Tak jakby "screen" nie był zainstalowany (jeśli dobrze to rozumiem).
UsuńScreen odpala komendy w tle. To ważne w przypadku akurat oczyszczacza bo zauważ ze nawet z aplikacji ma opóźnienia. W ogóle niestety to całe sterowanie jest słabo zrealizowane
OdpowiedzUsuńGdzie udało się znaleźć Xiaomi Air w dobrej cenie?
OdpowiedzUsuńGearbest. Wyszło z przesyłką 370 PLN
UsuńU mnie dokładnie tak samo, na Gearbest za 370zł z przesyłką priority line. Ale takie ceny to były 11 listopada, teraz zapewne w okolicach 120$, taniej się nie uda. No albo ok. 150$ z wysyłką z Polski.
UsuńPrzy próbie sprawdzenia statusu wyskakuje mi błąd:
OdpowiedzUsuńmodule.jd:471
throw err;
Error: Cannot find module 'ścieżka_skryptu'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.runMain (module.js:383:10)
at run (bootstrap_node.js:383:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:496:3
Jakiś pomysł? Właściwie to dopiero zaczynam zabawę z RPi i nie mam nawet podejrzenia, co to może być :(
No to zaczynamy ;) Pierwsze pytanie (chociaż to nie powinno mieć znaczenia, ale lepiej zapytać) - jaki Raspbian? Jessie czy Stretch?
UsuńDziękuję za odpowiedź! :) Według cat /etc/os-release moja wersja to "stretch"
UsuńNie mam jeszcze doświadczenia w Stretchu... Instalacja nodejs przebiegła bez problemu?
UsuńCałkowicie bezproblemowo :) eh, no nic, będę kombinował dalej :(
UsuńAle moment. Ty tam masz wprost gdzieś podany tekst 'ścieżka skryptu'?
UsuńNie, mam podaną ścieżkę od Ciebie :) Po prostu wszystko robię "z palca" w Malince i jak mi wyskakują błędy, to przepisuję na komputer do Googla w poszukiwaniu ich rozwiązania.
UsuńW pliku airpurifier.js pierwszą linię masz #!/usr/bin/node ? Nie bardzo wiem skąd w tym skrypcie mogłaby się znaleźć jakakolwiek ścieżka do pliku...
UsuńWESZŁO! Wczoraj cały wieczór nad tym siedziałem, dzisiaj uruchomiłem Malinkę (żeby sprawdzić, czy rzeczywiście skrypt był ok) i zadziałało! Dziękuję za poświęcony czas :)
UsuńJeszcze zapytam, korzystając z okazji: widzę, że masz dużą wiedzę i że te rozwiązania przychodzą Ci naturalnie - czy uczyłeś się obsługi Raspberry z jakiegoś konkretnego źródła, czy to wynik godzin spędzonych w stylu "nie działa, nie wiem dlaczego, ale spróbuję to rozwiązać"? :)
UsuńPaaaanie... To tylko tak wygląda :D Ja jestem fanem rozwiązań serwerowych Microsoft i miałem ciężki czas przy przejściu na Linuxa. Pomogło to, że te 25 lat temu siedziałem w MS-DOS i wiersz poleceń nie jest dla mnie czymś strasznym.
UsuńCzy znam Raspberry? Tylko na potrzeby tego co chcę zrobić. Elektronika jest mi trochę obca, efekty lutowania są tak straszne, że wolę poprosić kolegę o pomoc. Tematy, które tutaj prezentuję to godziny wyrwane w nocy na własne hobby :) Przed/podczas/po przeglądam mnóstwo różnych stron i staram się nauczyć i zrozumieć. Książki przeglądałem tylko na początku, ale czytanie ich od deski do deski jest, cóż, nudne :) Do tego mam jakoś tak w głowie, że jeżeli na coś się uprę - prędzej czy później, w taki czy inny sposób - muszę zrealizować. To bardzo gimnastykuje umysł!
Nie będę też cwaniakował - wiele z tych rozwiązań jest podpatrzone, przetrawione przeze mnie i opisane po polsku. Robię to dla siebie, ale bardzo miło, że i inni to czytają.
Ok, o taką odpowiedź mi chodziło! :D Bardzo fajnie, że pokazujesz to innym - dla mnie, laika, taka pomoc jest nieoceniona zwłaszcza, że - jeśli mi coś działa i mam do tego rozwiązanie - na bazie tego łatwiej mi potem robić moje rzeczy. Dziękuję jeszcze raz !
UsuńZ rzeczy, które zauważyłem podczas instalacji:
OdpowiedzUsuń1. Zamiast sudo nano /home/pi/domoticz/scripts xair2domoticz.sh nie powinno być sudo nano /home/pi/domoticz/scripts/xair2domoticz.sh (brakuje /, inaczej chmod nie znajdował pliku)?
2. W tym samym pliku w sekcji "GET DATA" wpisujemy IP naszego Purifier?
3. W tym samym pliku w sekcji " LOAD IT" wpisujemy IP naszego Domoticza (czyli to, którym logujemy się do panelu)?
I jeszcze kwestia na której się zatrzymałem - u mnie to pierwszy dodany czujnik, IDX to 2, a jak wpisuje z idx=2 to nic mi dalej nie pokazuje na panelu :(
Usuń1. Dziękuję, poprawiłem. Oczywiście masz rację.
Usuń2. Tak
3. Tak, ale nie zapomnij, że zależy na jakim porcie masz Domoticz. Ja mam na 80, więc nic więcej nie trzeba, ale jeżeli masz na przykład na 8080 to musi to być 192.168.1.200:8080.
4. Sprawdź bezpośrednio w przeglądarce http://TwojeIP/json.htm?type=command¶m=udevice&idx=2&svalue=100 czy wartość czujnika zmieni Ci się na 100. Jeżeli nie - błąd nie jest po stronie skryptu.
Wpisałem tak, jak kazałeś i zmienił się czujnik PM2.5 na zadaną wartość, a temp+hum został taki sam.
UsuńTak kolejno: node status działa, pokazuje mi coś takiego:
{ power: true,
mode: 'auto',
aqi: 9,
temperature: 22.8,
humidity: 57 }
Odświeżacz na IP: 192.168.8.104
Domoticz na IP: 192.168.8.110:8080
Sprzęt założony pod nazwą "Smog" na IDX=2 jako "Dummy". Od tego dodane czujniki wg instrukcji.
Kod skryptu:
#!/bin/bash
# Get the data
data=$(node /home/pi/domoticz/scripts/airpurifier.js 192.168.8.104 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.8.110:8080/json.htm?type=command¶m=udevice&idx=2&nvalue=0&svalue=${temperature};${humidity};0"
curl -s "http://192.168.8.110:8080/json.htm?type=command¶m=udevice&idx=2&svalue=${aqi}"
Widzisz tu na pierwszy rzut oka jakiś błąd? Coś więcej podesłać?
Do jednego idx starasz się przypisać dwie różne wartości. One się nadpisują. Poza tym piszesz o idx Hardware. Ja trochę skrótem myślowym pisałem - musisz założyć dwa Virtual sensors o podanych typach. Poprawię to później. Teraz koncert :)
UsuńOk, bez pośpiechu - to i tak hobbystycznie :D Miłej zabawy!
UsuńDodałem małą aktualizację. Mam wrażenie, że starasz się przypisać dane do złego IDX - Hardware a nie Devices.
UsuńHej, myślisz, że będzie to działało z Air Purifier 2s?
OdpowiedzUsuńNa pewno warto spróbować :)
UsuńTokenu nie znajduje. Muszę pokombinować. Dam znać jak znajdę rozwiązanie.
UsuńHA! Mam.
UsuńNowa apka nie zapisuje w bazie tokena. W miio2.db nie ma nic więc trzeba zainstalować starsze Mi Home w wersji 5.0.19 np stąd https://www.apkmirror.com/apk/xiaomi-inc/mihome/mihome-5-0-19-release/mihome-5-0-19-android-apk-download/
I użyć MiToolkit. Token jest na dłoni
Bardzo dziękuję za sugestie! Może kiedyś zmienię model, przyda się.
UsuńTen komentarz został usunięty przez autora.
UsuńWitam, czy może komuś się udało dodać AP2S do Domoticza?? Niby robię wszystko według znalezionego na jakimś forum poradnika, ale niestety mi nie chce działać, jak sprawdzam status urządzenia z commandline to nie wyświetla nic. Po dodaniu do Domoticza również nie mam żadnych parametrów. Nie wiem dokładnie czy dobrze robię z tokenem wpisując go po ip urządzenia, ale tak przynajmniej nie wywala mi błędów. Nie jestem co prawda dobrze obeznany z programowaniem, Linuxem, scryptami, ale jakoś sobie radzę. Z góry dzięki za odpowiedzi i sugestie.
UsuńPozdrawiam.
Sławek
Sławek_KRK
Usuńudało ci sie poradzić z konfiguracją domoticza i purifiera 2S?
znalazłem tokeny update zrobiłem ale nie do końca mi to chce działać. na Domoticzu mam wartości 0.
Cześć, niestety nie miałem czasu na zabawę z tym, ale będę może w tym tygodniu miał chwilę w końcu i się zabiorę za uruchomienie.
UsuńCześć, udało mi się trochę ogarnąć temat oczyszczacza a mianowicie :
Usuń1.Z konsoli jestem w stanie nim sterować, stworzyłem sobie skrypty *.sh którymi wywołuję odpowiednią akcję oczyszczacza natomiast nie jestem w stanie tych skryptów odpalać z Domoticza, nie ma reakcji niestety.
2.Przez jakiś czas miałem przesył temp,hum,aqi ale coś przestało działać i na razie to olałem.
Jak macie jakieś pomysły co mogę zrobić żeby sterowanie mi ruszyło to chętnie o tym przeczytam.
Na razie nie chcę się bawić ze skryptem w lua bo mimo że mi działał to były ogromne opóźnienia.
A jeszcze co do skryptów to wyglądają tak :
Usuń#!/bin/sh
node airpurifier.js IP token power false > /dev/null &
Fajny wpis i świetna robota z opisaniem integracji z Domoticz. U mnie wszystko działa. Dzięki.
OdpowiedzUsuńDzień dobry! Miło czytać, bardzo się cieszę.
UsuńU mnie niby wszystko zainstalowane ale nie chce to działać. zapytanie sudo miio --discover --sync nie działa ale jak usunę -- czyli sudo miio discover sync to działa ale pokazuje tylko urządzenia po ip, nie pokazuje Device Id, model czy token, te pozycje są puste, są tylko IP. Zapytanie node /home/pi/domoticz/scripts/airpurifier.js ip_oczyszczacza status też nie działa ale to może dlatego że poprzednia funkcja nie działa prawidłowo ? co może być przyczyną? może w najnowszym nodejs coś się pozmieniało.
OdpowiedzUsuńniektóre urządzenia ukrywają token, jeżeli zostały wcześniej sparowane, ale można go wydobyć jest to opisane szerzej tutaj: https://github.com/jghaanstra/com.xiaomi-miio/blob/master/docs/obtain_token.md
UsuńCześć, posiadam air purifier 2s, przy próbie sprawdzenia statusu otrzymuję:
OdpowiedzUsuńpi@DOMOTICZ:~ $ node /home/pi/domoticz/scripts/airpurifier.js 192.168.8.20 status
{ power: undefined,
mode: undefined,
aqi: undefined,
temperature: undefined,
humidity: undefined }
masz jakiś pomysł co jest nie tak?
Nie mam tego modelu, ale kilka wpisów wyżej kolega Krzysztof Pudełek podawał rozwiązanie.
Usuńhttps://github.com/aholstenson/miio/pull/185/commits/c30e7aeb73a4997cd0e3067121b82b3626bc43f3
UsuńDodasz i działa.
gaber, a możesz jaśniej ? :-) bardziej krok po kroku ?;-)
UsuńWow, programowanie to dla mnie czarna magia, ale widać, że to przydatna umiejętność. ;) Oczyszczacz super, prezentuje się bardzo estetycznie. Naprawdę macie smog na wsi? Masakra. :(
OdpowiedzUsuńJest, jest, niestety. Jeszcze wiele lat upłynie, zanim ludzie przestaną śmieci palić...
UsuńNo to teraz ja stoję :-) Wersja stretch. Nie działa switch. Wszystko mi chodzi oprócz sterowania urządzeniem. Nie mam żadnych widocznych błędów, Jak wcisne off czy co kolwiek innego to jest informacja o włączeniu, żadnych błędów. Nie mam pojęcia gdzie szukać.
OdpowiedzUsuńZ rzeczy, które udało mi się ustalić to polecenia z palca po ssh działają, działa też screen, też odczytuje i wysyła polecenia. Jest tak jakby sam switch nie uruchamiał komend.
UsuńJuż wszystko działa. W pierwszej fazie screen nie działało, bo go nie było. Zainstalowałem i poszło. Ostatnim moim błędem było nie zmienione IP w skrypcie Lua, wcześniej zmieniałem ale potem urządzenie dostało nowe IP i zapomniałem Zawsze trzeba wszystko sprawdzać Dobra nauka :-)
UsuńA przepraszam, ominąłem komentarz. Dobrze jest gdy już zadziała przypisać stałe IP na routerze.
UsuńDziś ukończyłem modyfikacje dla Mi Air Purifier PRO.
OdpowiedzUsuńTrochę uprzątnę kod i mogę podesłać jak ktoś będzie zainteresowany.
jestem zainteresowany, jak można prosić na av7@wp.pl
UsuńWould be great to get this working on my PRO, what modifications did you do?
UsuńWitam. Super blog. Działałem według tego poradnika i wszystko działało ale... Musiałem zmienić region na China (i też była chyba jakaś aktualizacja urządzzenia) bo dokupiłem inne urządzenia i teraz nie jestem w stanie odczytać Tokena za żadne skarby. Ma może ktoś jakiś pomysł?
OdpowiedzUsuńJak rozwiązanie może już tylko służyć stara wersja Xiaomi Home - wersja 0.29 (backup i odczytanie tokena z miio2.db
OdpowiedzUsuńCześć walcze z moim Purifier 2S od przedwczoraj, mam jużtoken, działa sterowanie aleeeee mam problem ze skryptem do update czujników
OdpowiedzUsuń#!/bin/bash
echo "script started"
# Get the data
data=$(node /home/pi/domoticz/scripts/airpurifier.js 192.168.0.115 status)
sleep 2
# 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)
echo "${aqi}"
# Load it into Domoticz
curl -s "http://192.168.0.100:8080/json.htm?type=command¶m=udevice&idx=171&nvalue=0&svalue=${tempera$
curl -s "http://192.168.0.100:8080/json.htm?type=command¶m=udevice&idx=170&svalue=${aqi}"
echo " script finished"
Jeśli odpalam go przez bash to działa elegancko
pi@raspberrypi:~ $ bash /home/pi/domoticz/scripts/xair2domoticz.sh
script started
9
{
"status" : "OK",
"title" : "Update Device"
}
{
"status" : "OK",
"title" : "Update Device"
}
script finished
Ale Jeśli odpalam go przez sudo albo nawet jak jest skonfigurowany w cronie
* * * * * bash /home/pi/domoticz/scripts/xair2domoticz.sh
* * * * * bash /home/pi/domoticz/scripts/xair2domoticz.sh >> /home/pi/log.txt 2>&1
to mam błędy :(
pi@raspberrypi:~ $ sudo bash -x /home/pi/domoticz/scripts/xair2domoticz.sh
+ echo 'script started'
script started
++ node /home/pi/domoticz/scripts/airpurifier.js 192.168.0.115 status
/home/pi/domoticz/scripts/xair2domoticz.sh: linia 5: node: nie znaleziono polecenia
+ data=
+ sleep 2
++ echo ''
++ grep temperature
++ sed -e 's/[^0-9.]//g'
+ temperature=
++ echo ''
++ grep humidity
++ sed -e 's/[^0-9.%]//g'
+ humidity=
++ echo ''
++ grep aqi
++ sed -e 's/[^0-9.]//g'
+ aqi=
+ echo ''
+ curl -s 'http://192.168.0.100:8080/json.htm?type=command¶m=udevice&idx=171&nvalue=0&svalue=;;0'
{
"status" : "OK",
"title" : "Update Device"
}
+ curl -s 'http://192.168.0.100:8080/json.htm?type=command¶m=udevice&idx=170&svalue='
{
"status" : "ERR"
}
+ echo ' script finished'
script finished
Pomysły czemu?
Hmmm, a po co ten bash po sudo?
UsuńTrochę nie ogarniam :-(
OdpowiedzUsuńwyciągnąłem starą apką mihome tokeny moich trzech oczyszczaczy (2x 2 i 1x 2s). Zrobiłem update tych tokenów do tych urządzeń i po każdym z nich mam taki oto komunikat:
INFO Updating token for 192.168.1.38
INFO Connected to miio:81002364 - trying to change token
Token has been updated
Wygląda jakby było bardzo dobrze.
Po użyciu komendy miio discover pokazują mi się trzy urzadzenia z przypisanymi tokenami:
pi@domoticz:~/domoticz/scripts $ sudo miio discover
INFO Discovering devices. Press Ctrl+C to stop.
Device ID: 81002364
Model info: zhimi.airpurifier.mc1
Address: 192.168.1.38
Token: d66a1f9f***********43567b10 via stored token
Support: At least generic
Device ID: 61340711
Model info: zhimi.airpurifier.m1
Address: 192.168.1.22
Token: c6e2dd5************ed9c6476f9 via stored token
Support: At least basic
Device ID: 61330988
Model info: zhimi.airpurifier.m1
Address: 192.168.1.33
Token: 310ad2b****************aad7ba78223 via stored token
Support: At least basic
Wygląda bardzo obecująco.
Następnie chciałem sprawdzić status urądzeń i wyskakują mi komunikaty:
pi@domoticz:~/domoticz/scripts $ node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.38 status
/home/pi/domoticz/scripts/airpurifier.js:2
#!/usr/bin/node
^
SyntaxError: Invalid or unexpected token
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
Co może być nie tak? Czy tokeny wyciągnięte za pomocą MiHome 5.4.54 która zapisuje tokeny w pliku tekstowym.
Czy te tokeny to fejki ? Gdzieś popełniam błąd ?
No dobrze, udało mi się. Popełniłem drobny błąd w skrypcie airpurifier.js.
UsuńNiestety nie działa mi air purifier 2s. Tego nie moge kontrolować jeszcze przez raspberry. Dwa starcze modele (2) działają poprawnie i w domoticzu są wyświetlane.
Jakie powinienem zrobić modyfikacje w powyższym opisie gdybym chciał dodać kolejne air purifiery ?
Stałą się dziwna rzecz. W nocy przestał wysyłać dane Xiaomi Air Purifier 2s. Dzisiaj po pracy postawnoiłem sprawdzić co się z nim dzieje i nie chciał się uruchomić. Zresetowałem go, wstał, połączyłem z aplikacją MiHome i moją siecią Wifi. Wszystko działa jak należy.
OdpowiedzUsuńProblem tylko taki, że nie wykrywa mi go mój raspberry
Po wpisaniu komendy sudo miio discovery wykrywa mi dwa inne urządzenia a tego nie. Co ciekawe zegarka tez nie wykrywa a wcześniej go widział.
Spróbowałem więc ręcznie dodać klucz, który wyciągnąłem z aplikacji MiHome - efekt żaden.
sudo miio tokens update 192.168.1.38 --token 79ab27cb467a82811a8cf3c5f861a293
INFO Updating token for 192.168.1.38
WARNING Could not find device
Gdzie może leżeć problem? o co chodzi ?
Pytanie laika. W jaki sposób wgrać pliki js na raspberry? Wyjąć kartę i skopiować?
OdpowiedzUsuńNo tak to raczej nie, chyba że masz sprzęt z Linuksem ;) FTP lub Samba share, połączyć się później ze swojego komputera z udostępnionym folderem i wgrać.
UsuńDla tych, którzy chcą korzystać z Air Purifiera 2s:
OdpowiedzUsuńw skrypcie airpurifier.js zamiast:
const miio = require('miio');
wpisać:
const miio = require('/usr/lib/node_modules/miio')
bez powyższego nie czytał mi parametrów.
Dodatkowo w pliku /usr/lib/node_modules/miio/lib/models.js
dodać zapis 'zhimi.airpurifier.mc1': AirPurifier, w miejscu jak poniżej:
// Air Purifier 2S
'zhimi.airpurifier.ma2': AirPurifier,
'zhimi.airpurifier.mc1': AirPurifier,
'zhimi.humidifier.v1': Humidifier,
po powyższym zabiegu 2s śmiga jak ta lala :-)
Dzięki Cezar za bloga !
Cześć, udało mi się wydobyć token z oczyszczacza. Pytanie laika, gdzie go teraz wkleić by skrypt zadziałał. Opcja update nie przynosi efektu lub też pojawia sie komunikat, że nie udało się nawiązać połaczenia z oczyszczaczem (malinka go widzi ale wciaż z ukrytym tokenem). po wpisaniu node /home/pi/domoticz/scripts/airpurifier.js IP adres status
OdpowiedzUsuń...wyskakuje komunikat sugerujący, że nie znalazło takiego sprzętu. Czy w airpurifier.js wpisać gdzies token na stałe?
Wpisujesz poniższą komendę która zapisuje token:
Usuńsudo miio tokens update 192.168.1.38 --token twojtoken
Adres IP to adres oczyszczacza.
Czesc Adamie, no właśnie nic to nie daje, po komunikacie, że sie łączy..wyskakuje komunikat...nie znaleziono urządzenia...czy wpisze ip czy id urzadzenia ... po czym pp wyszukiwaniu urzadzenie jest ...dalej wyswietla sie bez tokena ... tu mam problem
OdpowiedzUsuńChciałbym w domoticzu odczytać czas wschodu i zachodu słońca. Czy jest jakas zmienna która to podaje?
OdpowiedzUsuńOczywiście! Po pierwsze trzeba uzupełnić swoje koordynaty w konfiguracji Domoticz -> Settings -> System. Później można używać czasu wschodu/zachodu zdefiniowanego na tej podstawie w automatyzacjach. U mnie na przykład światło przed domem zapala się zawsze godzinę po zachodzie słońca, a wyłącza o 22.
UsuńWitam posiadam Xiaomi Air Purifier 2H czy można dodać go do domoticza wg powyższej instrukcji ? Widzę, że był problem z wersją S i zastanawiam się czy z H nie jest podobnie, pozdrawiam.
OdpowiedzUsuńUdało ci się? Ja to właśnie wałkuję i narazie nie idzie.
UsuńZ 2S nie było większego problemu. Trzeba było jedynie dodać jeden wpis tutaj opisany na forum.
Usuń2 a tym bardziej 3H nie posiadam ale może sobie pożyczę od kogoś kiedyś i protestuję.
Dodam, że jak robię wszystko wg instrukcji podczas wpisania komendy:
OdpowiedzUsuńsudo miio --discover --sync
pokazuje się coś takiego:
miio
Commands:
miio configure Control a device by invoking the
given method
miio control Control a device by invoking the
[params..] given method
miio discover Discover devices on the local
network
miio inspect Inspect a device
miio protocol Inspect and test raw miIO-commands
miio tokens Manage tokens of devices
Options:
--help Show help [boolean]
--version Show version number [boolean]
Not enough non-option arguments: got 0, need at least 1
Wpis jest dość stary, nie aktualizowałem go. Pierwsze wyszukiwanie w Google pokazuje rozwiązanie: sudo miio discover --sync
UsuńBędzie jakaś aktualizacja?
UsuńWitam, może czegos nie rozumiem. Czy w airpurifier.js wpisuje gdzies ip oczyszczacza oraz uzyskany token? przy komendzie status wola wlasnie o token.
OdpowiedzUsuńAP2S model
UsuńTen komentarz został usunięty przez autora.
OdpowiedzUsuńmam AP 3H
OdpowiedzUsuńpolecenie w pliku airpurifier.js zamienione na:
const miio = require('/usr/lib/node_modules/miio')
wpis nowego modelu jest:
// Air Purifier 2S
'zhimi.airpurifier.ma2': AirPurifier,
'zhimi.airpurifier.ma4': AirPurifier,
'zhimi.humidifier.v1': Humidifier,
komunikacja jest:
Device ID: 293284710
Model info: zhimi.airpurifier.ma4
Address: 192.168.1.181
Token: 80d7b88fd**********9c5 via stored token
Support: At least basic
dostaję puste dane:
pi@domoticz:~ $ sudo node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.181 status
{ power: undefined,
mode: undefined,
aqi: undefined,
temperature: undefined,
humidity: undefined }
Ciekawy wpis
OdpowiedzUsuńMoże ktoś mi z tym pomóc?:)
OdpowiedzUsuńSuper wpis
OdpowiedzUsuńWiem, że wpis ma już swoje lata, ale może ktoś ostatnio coś dłubał i miał taki oto komunikat po wywołaniu komendy node airpurifier.js 192.168.1.131 status
OdpowiedzUsuń(node:20665) UnhandledPromiseRejectionWarning: Error: Could not connect to device, token needs to be specified
at /home/pi/node_modules/miio/lib/network.js:329:16
(node:20665) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:20665) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Token mam, wpisany poleceniem tokens update.
Wszystko zostało niezwykle szczegółowo opisane.
OdpowiedzUsuń