Xiaomi Air Purifier 2 – integracja z Domoticz

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&param=udevice&idx=247&nvalue=0&svalue=${temperature};${humidity};0″
curl -s „http://192.168.1.200/json.htm?type=command&param=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ć.

96 komentarzy do “Xiaomi Air Purifier 2 – integracja z Domoticz”

  1. No ja po tym warningu wykonuję sudo npm install -g miio a następnie sudo miio –discover –sync i niestety nie widzę oczyszczacza.
    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ć.

    Odpowiedz
  2. Poprawiłem, ale dalej to samo, tzn. różnica jest taka, że teraz jest komunikat Invalid or unexpected token, reszta taka sama.

    Odpowiedz
  3. Jest już jakiś postęp:) Co prawda nie działa, ale teraz po sprawdzeniu statusu pojawia się jedna linka z takim komunikatem:
    (node:5661) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Call to device timed out

    Odpowiedz
  4. 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.

    Odpowiedz
  5. 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).

    Odpowiedz
  6. 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

    Odpowiedz
  7. 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.

    Odpowiedz
  8. Przy próbie sprawdzenia statusu wyskakuje mi błąd:

    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ć 🙁

    Odpowiedz
  9. 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.

    Odpowiedz
  10. 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…

    Odpowiedz
  11. 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 🙂

    Odpowiedz
  12. 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ć"? 🙂

    Odpowiedz
  13. Paaaanie… To tylko tak wygląda 😀 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.
    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ą.

    Odpowiedz
  14. Ok, o taką odpowiedź mi chodziło! 😀 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 !

    Odpowiedz
  15. Z rzeczy, które zauważyłem podczas instalacji:
    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)?

    Odpowiedz
  16. 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 🙁

    Odpowiedz
  17. Wpisałem tak, jak kazałeś i zmienił się czujnik PM2.5 na zadaną wartość, a temp+hum został taki sam.

    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&param=udevice&idx=2&nvalue=0&svalue=${temperature};${humidity};0"
    curl -s "http://192.168.8.110:8080/json.htm?type=command&param=udevice&idx=2&svalue=${aqi}"

    Widzisz tu na pierwszy rzut oka jakiś błąd? Coś więcej podesłać?

    Odpowiedz
  18. 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 🙂

    Odpowiedz
    • 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.
      Pozdrawiam.
      Sławek

      Odpowiedz
    • Sławek_KRK
      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.

      Odpowiedz
    • Cześć, udało mi się trochę ogarnąć temat oczyszczacza a mianowicie :
      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.

      Odpowiedz
  19. 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.

    Odpowiedz
  20. Cześć, posiadam air purifier 2s, przy próbie sprawdzenia statusu otrzymuję:
    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?

    Odpowiedz
  21. 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. 🙁

    Odpowiedz
  22. 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ć.

    Odpowiedz
  23. 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.

    Odpowiedz
  24. 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 🙂

    Odpowiedz
  25. Dziś ukończyłem modyfikacje dla Mi Air Purifier PRO.
    Trochę uprzątnę kod i mogę podesłać jak ktoś będzie zainteresowany.

    Odpowiedz
  26. 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ł?

    Odpowiedz
  27. Cześć walcze z moim Purifier 2S od przedwczoraj, mam jużtoken, działa sterowanie aleeeee mam problem ze skryptem do update czujników

    #!/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&param=udevice&idx=171&nvalue=0&svalue=${tempera$
    curl -s "http://192.168.0.100:8080/json.htm?type=command&param=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&param=udevice&idx=171&nvalue=0&svalue=;;0'
    {
    "status" : "OK",
    "title" : "Update Device"
    }
    + curl -s 'http://192.168.0.100:8080/json.htm?type=command&param=udevice&idx=170&svalue='
    {
    "status" : "ERR"
    }
    + echo ' script finished'
    script finished

    Pomysły czemu?

    Odpowiedz
  28. Trochę nie ogarniam 🙁

    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 ?

    Odpowiedz
  29. No dobrze, udało mi się. Popełniłem drobny błąd w skrypcie airpurifier.js.

    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 ?

    Odpowiedz
  30. 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.
    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 ?

    Odpowiedz
  31. 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ć.

    Odpowiedz
  32. Dla tych, którzy chcą korzystać z Air Purifiera 2s:
    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 !

    Odpowiedz
  33. 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
    …wyskakuje komunikat sugerujący, że nie znalazło takiego sprzętu. Czy w airpurifier.js wpisać gdzies token na stałe?

    Odpowiedz
  34. 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

    Odpowiedz
  35. 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.

    Odpowiedz
  36. 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.

    Odpowiedz
  37. Dodam, że jak robię wszystko wg instrukcji podczas wpisania komendy:
    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

    Odpowiedz
  38. Z 2S nie było większego problemu. Trzeba było jedynie dodać jeden wpis tutaj opisany na forum.
    2 a tym bardziej 3H nie posiadam ale może sobie pożyczę od kogoś kiedyś i protestuję.

    Odpowiedz
  39. mam AP 3H

    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 }

    Odpowiedz

Dodaj komentarz