Aktualizacja wersji Mi Home

Dobry wieczór!

Zostałem dzisiaj mile zaskoczony przez Xiaomi. 
Przemodelowali swoją (całkiem już moim zdaniem dobrą) aplikację Xiaomi Mi Home. Wersja 4.8.1 dostarcza kilka ciekawych zmian i nowości.
Pomiędzy nimi znajdują się:
– nowy pasek statusu
– podział urządzeń na typy (włączniki, światła, czujniki, itp.)
– usunięto Ulubione
– możliwość wyświetlania urządzeń w formie 'siatki' albo listy
– zmiany w wyglądzie, prezentowanie skrótów
Aktualnie prezentuje się to wszystko jak na zrzutach ekranu poniżej. 
Skoro nie mamy Ulubionych, to aktualnie pierwsza zakładka pokazuje nasze wszystkie urządzenia. Jak dla mnie jest czytelniej – ikonki są schludne (poniżej prezentowane jako Grid – 'Siatka'), prezentują wyraźnie status. Wcześniej aby dowiedzieć się jakie na przykład jest ciśnienie trzeba było wejść na konkretny termometr/barometr.

Z jakichś powodów w sekcji 'Security' znalazł się repeater sygnału WiFi i Wireless Switch 😉

Czujniki to na przykład temperatura, czujniki ruchu, otwarcia/zamknięcia drzwi, zalania.

W razie potrzeby możemy przejść szybko do żądanej sekcji.

A poniżej nowe Info Center, czyli informacje dostępne po rozwinięciu górnego paska z informacjami. Na razie nie widzę możliwości konfiguracji tego, co ma się tu pojawiać. Czyżby autorzy domyślnie wrzucili tam wyłącznie temperaturę? Zwróćcie uwagę na ładne ikony, ale i brak spacji po typie pomiaru. Czyli na przykład Humidity59%. Zapewne wkrótce zostanie wypuszczona mała poprawka.

Reasumując – coś się dzieje 🙂 Moim zdaniem zmiany na plus. Ale ja jestem mało obiektywny i raczej z tych nie marudzących.

Coś jednak z tymi gadżetami wypadałoby zrobić… Na początek zdarzenia i powiadomienia na czujnikach…

Samo czytanie danych z czujników już jest fajne.

Dobrze by jednak było jakoś tym wszystkim sterować i wykonywać pewne zadania na podstawie danych zewnętrznych, innych czujników albo przełączników.

I tym zajmę się w tym i kolejnych wpisach.

Generalnie Domoticz ma kilka możliwości notyfikacji oraz wykonywania zadań:
– bezpośrednio na samych czujnikach
– schematy blokowe w Blockly
– skrypty Lua lub Python
– dzVents

Na początek pierwszy punkt. Każdy z czujników w Domoticz ma cztery przyciski:
– Log
– Edit
– Timers
– Notifications

Nas interesują w tym momencie dwa ostatnie.

Jak widać, jeżeli 'pod nimi' jest cokolwiek stworzone, zapisane – kolor się zmienia. Znaczy to ni mniej ni więcej niż to, że gdzieś tam jest skrypt lub akcja, która ma zostać wywołana.

Tak w sumie to była jedna z pierwszych rzeczy jakie zrobiłem. Nawet nie w Domoticz, jeszcze wcześniej w małym systemie Pilight. Miałem wtedy podłączone na breadboard tani nadajnik i odbiornik, gniazdka 433MHz zakupione w Biedronce i byłem zafascynowany tym, że mogę je zdalnie włączyć z poziomu Raspberry Pi. Jak tak patrzę, to wiele się przez te dwa lata zmieniło.

Ok, dość sentymentalnych wspomnień. Cel – włączyć światła przed domem godzinę po zachodzie słońca i wyłączyć zawsze o 22. I jeszcze do tego dostać powiadomienie na e-mail.

W polu Type możemy wybrać sposób 'wyzwalania' zdarzenia. Przed/po wschodzie/zachodzie słońca, o konkretnej godzinie, w dniach parzystych/nieparzystych, miesięcznie (na przykład zawsze 3 dnia, albo w drugi wtorek miesiąca, itp.) oraz rocznie (na podobnych zasadach).

Ja wybrałem:
– włącz 1 godzinę po zachodzie słońca w każdy dzień tygodnia (można ustawić na przykład dni pracujące, weekend, albo wybrane konkretne dni)
– wyłącz zawsze o 22

No, to mamy za sobą. W lecie był czas, kiedy światła włączały się o 21:57 i gasły o 22 😉

Teraz powiadomienia e-mail. Przede wszystkim trzeba skonfigurować adres.

Setup -> Email jest odpowiednim miejscem na zrobienie tego.

Podajemy adres wyjściowy (z parametrami serwera pocztowego) oraz docelowy.

Gdy już to mamy za sobą – dalej proste ustawienie 'wyzwalacza' zdarzenia. Jeżeli przełącznik przejdzie w stan On, mam otrzymać e-mail z konkretną wiadomością.

Jak poniżej:

Dobra, skoro to już mamy, kolejny temat.

Mamy sobie odkurzacz Roomba. Świetny, rewelacyjny patent, który od razu zaczął być używany u nas w domu codziennie. Jednak drażni mnie w nim jedna rzecz – zasilasz 'strzela' co pewien czas. Nie lubię tego, denerwuje mnie to. Oczywiście rozumiem, że Roomba musi być jakoś ładowana, ale (mimo, że teoretycznie powinien) nie chcę aby zasilacz był włączony cały czas.

Tutaj pomocne było automatyczne wyłączenie przełącznika po zadanym czasie (Off Delay). Czyli – jeżeli kiedykolwiek zostanie włączony, uruchamia się timer, który wyłączy go po skończeniu odliczania. Wyłączenie i ponowne włączenie resetuje licznik.

Ok, kolejny temat z głowy.

Co by tu wymyślić…

O, na przykład temperatura. Jeżeli wzrośnie w którymś z pokojów – może warto o tym dostać informację i (jeżeli macie, ja akurat niestety nie) – włączyć klimatyzator. Albo dostać po prostu powiadomienie na e-mail.

Nic prostszego: przycisk Notifications na czujniku temperatury, później kilka kliknięć, gotowe.

Dobra. Ale skąd teraz pewność, że nie będę dostawał tych powiadomień co minutę? Przecież temperatura może taka być przez kilka godzin.

Aaaaa, na to też mamy radę: Setup -> Settings -> zakładka Notifications.

Na końcu strony mamy Notification Intervals. I dla czujników ja osobiście mam ustawione 12 godzin. Switches – natychmiastowo.

Czyli – co 12 godzin, jeżeli nie nastąpiła zmiana statusu, dostaję powiadomienia.

To samo zastosowałem w przypadku Xiaomi MiFlora.

Jeżeli wilgotność w doniczce jest mniejsza niż 50% – e-mail.

Można sobie w ten sposób zapewnić powiadamianie w przypadku otwarcia drzwi, przekroczenia zużycia energii, pogorszenia jakości powietrza (i docelowo włączenia oczyszczacza), przekroczenia ilości czasu spędzonego przy konsoli przez dziecko, włączenia jakichś urządzeń, itp., itd.

W kolejnym wpisie – proste Blockly i przejdziemy do dzVents.

Do zobaczenia. Albo 'do poczytania'.

Wracam do remontu… Co też spłodzi kilka wpisów!

Sterowane przełączniki od Xiaomi – w końcu znalazłem swojego świętego Graala…

Jest! W końcu jest gniazdko, które jest zasilane z sieci, nie potrzebuje trzy-żyłowej instalacji elektrycznej, jest estetyczne i działa z Domoticz! Czyli taki trochę święty Graal, bo zawsze innym urządzeniom czegoś brakowało 😉
Opakowania Xiaomi jak zawsze proste i schludne. Wielkość włącznika, powiedziałbym, jest standardowa jak na polskie standardy.
Co ważne – nie są to typowe włączniki jak u nas zawsze spotykane – góra/dół. Bardziej na zasadzie 'klik'.
Jak widać – dwużyłowy. Trzy wejścia dlatego, że mamy dwa przełączniki.
Konfiguracja w aplikacji standardowa – wybieramy typ sprzętu i parujemy. Te są na ZigBee, jak termometry, gniazdka prądowe, itp.
Po podłączeniu od razu działa!
Przypisujemy do wybranego pokoju.
Wybieramy typ.
Można wybrać inny typ dla lewego, inny dla prawego przycisku.
W aplikacji możemy sterować każdym z przycisków osobno.
Działa! Ha! Fantastycznie!

Podłączenie w Domoticz jest już formalnością – wystarczy włączyć wykrywanie nowych urządzeń i gniazdka są widoczne.

Każdy przycisk osobno, można zacząć automatyzację 🙂

Co ważne! Gniazdka mają niestandardowy – kwadratowy – kształt z tyłu i nie pasują do ogólnie używanych, okrągłych puszek w Polsce. Ergo – trzeba kuć… Raport z kucia za dwa, trzy tygodnie, gdy zacznie się remont 😀

Monitorowanie aktywności urządzeń w sieci

Lubię wiedzieć co się dzieje. Czy to w domu czy na świecie. Jako że nad światem nie zapanuję, można się chociaż starać sprawdzić co się dzieje w domu 😉

Większość urządzeń ma teraz połączenie bezprzewodowe i je możemy bez problemu monitorować. Laptop, konsole, tablety, drukarki – gdy są włączone na komendę arp-scan odpowiada ich adres MAC. To dzisiaj zrobimy.

Jest co prawda natywny System Alive Checker (Ping), ale u mnie więcej oszukiwał, niż podawał prawdziwe dane. Ostatnio chyba został poprawiony, ale skoro już swoje skrypty mam…

Ruszamy.

Na początek – definiowanie nowej zmiennej w Domoticz.

Niech się nazywa PRESENCE_LIST (jak w przykładzie z forum Domoticz). Format jest następujący: Adres_MAC;ID_Z_Domoticz_TEGO_CZEGO_STAN_SPRAWDZAMY| (pionowa kreska!). Na końcu łańcucha już jej nie dajemy. Czyli na przykład: aa:bb:cc:dd:ee:ff;73|bb:cc:dd:ee:ff:gg;122. Adres MAC urządzeń możemy poznać na przykład za pomocą aplikacji ipscan24.
Cyfra po średniku to IDX naszego urządzenia (które chcemy testować na obecność w sieci!) w Domoticz. Wcześniej należy pamiętać, aby stworzyć odpowiedni sprzęt w sekcji Hardware!
Czyli na przykład Playstation timer jako Dummy w Sekcji Hardware i tam tworzymy dwa Virtual sensors: jeden Switch i drugi Counter Incremental


Później konieczne będzie doinstalowanie arp-scan:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install arp-scan

I przechodzimy do sedna, czyli naszych funkcji badających obecność urządzeń w sieci.

cd domoticz

sudo nano scripts/Check_MAC.sh

I tam wstawiamy:

#!/bin/bash
MAC=$1
IDX=$2

sudo arp-scan –localnet | grep -e $MAC

if [ $? -eq 1 ]
then
echo „Device $MAC Not in LOCAL LAN”
curl „http://IP_Domoticz:Port/json.htm?type=command&param=switchlight&idx=$IDX&switchcmd=Off”
else
echo „Device $MAC in LOCAL LAN”
curl „http://IP_Domoticz:Port/json.htm?type=command&param=switchlight&idx=$IDX&switchcmd=On”
fi

Zamieniając IP_Domoticz:Port na własne IP i port

I WAŻNE, prawa do uruchamiania

sudo chmod +x /home/pi/domoticz/scripts/Check_MAC.sh

sudo nano scripts/lua/script_time_Presence.lua

A tutaj to:

function splitString(str, delim, maxNb)
    — Eliminate bad cases…
    if string.find(str, delim) == nil then
        return { str }
    end
    if maxNb == nil or maxNb < 1 then
        maxNb = 0    — No limit
    end
    local result = {}
    local pat = „(.-)” .. delim .. „()”
    local nb = 0
    local lastPos
    for part, pos in string.gmatch(str, pat) do
        nb = nb + 1
        result[nb] = part
        lastPos = pos
        if nb == maxNb then break end
    end
    — Handle the last field
    if nb ~= maxNb then
        result[nb + 1] = string.sub(str, lastPos)
    end
    return result
end

commandArray = {}
maclist= uservariables[’PRESENCE_LIST']
Lines=splitString(maclist,”|”)

for i,line in pairs(Lines) do
   –print (i..” „..line)
   macs=splitString(line,”;”)
   print („MAC Address to Poll: „..macs[1]..” On IDX:”..macs[2])
        execcommand=”sudo /home/pi/domoticz/scripts/Check_MAC.sh „..macs[1]..” „..macs[2]..” &”
    os.execute(execcommand)

end

I na koniec dla KAŻDEGO urządzenia:

sudo nano scripts/lua/script_time_playstation_update.lua

local timer_device_ID = 8 <—- Tu wstawiamy IDX naszego Device z Counter incremental

commandArray = {}
commandArray[’UpdateDevice'] = timer_device_ID .. '|0|0′

local TotalMinutesOn = otherdevices_svalues['Playstation timer']
if otherdevices['Playstation 4'] == 'On' then
  TotalMinutesOn = TotalMinutesOn + 1
end
commandArray[’UpdateDevice'] = timer_device_ID .. '|0|' .. tostring(TotalMinutesOn)

return commandArray

Co robi powyższa funkcja? Sprawdza, czy urządzenie Playstation 4 (czyli to musicie zmienić na nazwę u siebie) jest dostępna w sieci. Jeżeli tak, zwiększy licznik Playstation timer o 1, czyli i jedną minutę.

I tyle. Koniec. Tutaj jednak należy się Wam wytłumaczenie. Nazwy plików MUSZĄ rozpoczynać się od script_time_*, ponieważ jest to wewnętrzny mechanizm Domoticz, który uruchamia skrypty.

Co teraz zrobiliśmy? Napisaliśmy skrypt, który co minutę się uruchomi i sprawdzi, czy urządzenia zapisane na naszej zmiennej użytkownika są widoczne w sieci. Jeżeli tak, zwiększamy licznik.

Efekt?

Jak poniżej.

Pozdrawiam! Miłej zabawy!

EDIT.

Jak widać w komentarzach, są z tym czasem problemy, jednak ciężko mi określić, czemu może u niektórych z Was nie działać ta funkcja. Dla próby dodałem przed chwilą dzisiaj podłączony czujnik smogu na ESP. Świeża rzecz, nie ma więc prawa być w systemie, działać z tytułu zaszłości, itp. Po kolei:

1. Skoro działa, bo buczy i go słyszę, zbadajmy jaki ma adres MAC:

2. Dodaję wirtualny Switch, na Hardware typu Dummy. Zrobiłem to na istniejącym o nazwie Telefony:

3. Sprawdzam jaki ma IDX:

4. Dodaję adres MAC i IDX do zmiennej (fakt, adres MAC MAŁYMI literami):

5. Po chwili Switch odpowiada:

Idę spać, wyłączam testowy czujnik, po chwili: