Pokazywanie postów oznaczonych etykietą Air purifier. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Air purifier. Pokaż wszystkie posty

czwartek, 11 stycznia 2018

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

Commodore Plus/4 - ciekawy pomysł, ciekawy komputer

Dzień dobry! Jakiś czas temu trafił do mnie kolejny komputer ze ‘stajni’ Commodore - Plus/4. Miałem ochotę go mieć w kolekcji już od dawna, ...