Home Assistant – automatyzacje

Powitać!
W Smart Home (będę się upierał aby był to odpowiednik Sterowany dom a nie Inteligentny 😉 ) jedną z najważniejszych cech jest wyzwalanie pewnych zachowań na podstawie innych. Na przykład: 'Powiadom jeżeli pobór prądu jest większy niż założony, jeżeli nie ma mnie w domu', 'Obniż temperaturę na głowicy jeżeli okno jest otwarte dłużej niż 3 minuty', 'Zapal światła przed domem, jeżeli robi się ciemno'.
Do tego w Home Assistant, w podstawowym zakresie, służą Automations (za nim jest Node-RED, ale to na przyszłość). Mają kilka parametrów, jak na przykład warunki wyzwolenia, warunki ograniczające i finalnie to, co chcemy uruchomić.

Przyciskamy 'Duży, pomarańczowy plus' i wybieramy:
W sekcji Triggers – czyli 'wyzwalaczy' zdarzenia
– nazwę
– ewentualny opis
– trigger type: Sun, Sunset, Offset

Conditions, czyli w tym przypadku włącz światło tylko jeżeli jest wyłączone:

No i w końcu Actions – co ma się dziać:
– u mnie włącz Sonoff
– wyślij powiadomienie

Ostatecznie lądują zapisane w pliku automations.yaml, gdzie możne je dalej ręcznie edytować.

Jak na przykład:

– id: '1588278306126′
  alias: Światła – Wyłącz przed domem o 22
  description: ”
  trigger:
  – at: ’22:00′
    platform: time
  condition:
  – condition: state
    entity_id: switch.sonoff_power
    state: 'on'
  action:
  – data: {}
    entity_id: switch.sonoff_power
    service: switch.turn_off
  – data:
      message: HA – wyłączyłem światła przed domem
    service: notify.cezar
  – data:
      data:
        method: all
        type: announce
      message: <amazon:effect name=’whispered'>Lights outside are off</amazon:effect>
      title: Lights outisde
    service: notify.alexa_media_adam_s_echo_dot


– id: '1588675313820′
  alias: Motyw – Ustawienie motywu na starcie HA
  description: ”
  trigger:
  – event: start
    platform: homeassistant
  condition:
  – after: sunrise
    after_offset: +00:30:00
    condition: sun
  action:
  – data:
      name: default
    service: frontend.set_theme

Home Assistant – powiadomienia

Powiadomienia w systemie automatyki domowej są jakby niezbędne. 
Fakt. 
Jakie – każdy sobie wybiera. Ja lubię akurat e-maile, bo nie wymagają ode mnie dodatkowych elementów. Poniżej swoje dane musicie uzupełnić odpowiednimi Waszymi, które odczytacie w konfiguracji serwerów na przykład na stronie dostawcy.
Na początek konieczne są dodatkowe sekcje w configuration.yaml. Nadpisujemy/dodajemy wpisy dotyczące notify.
notify:
  – name: Cezar
    platform: smtp
    server: !secret email_server
    port: 587
    timeout: 15
    sender: !secret email_sender
    encryption: starttls
    username: !secret email_username
    password: !secret email_password
    recipient:
      – !secret email_cezar
    sender_name: My Home Assistant
Hasła trzymamy oczywiście w pliku secrets.yaml.
Później restart i mały test. Przechodzimy na Developer Tools, Services i jak w przykładzie w dokumentacji podane, wprowadzamy:
{
  „message”: „The sun is {% if is_state(’sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!”
}

Później Configuration -> Automations

Ja stworzyłem sobie powiadomienie o włączeniu świateł przed domem godzinę po zachodzie słońca.

Przyciskamy 'Duży, pomarańczowy plus' i wybieramy:
W sekcji Triggers – czyli 'wyzwalaczy' zdarzenia
– nazwę
– ewentualny opis
– trigger type: Sun, Sunset, Offset
Conditions, czyli w tym przypadku włącz światło tylko jeżeli jest wyłączone:

No i w końcu Actions – co ma się dziać:
– u mnie włącz Sonoff
– wyślij powiadomienie

Zrobione. Tyle na dzisiaj. Muszę wrócić do częstszego, a krótszego pisania o HA.

Smart home, Domoticz, Raspberry – z czym się to je

Czytając swojego bloga (serio – czytam czasem co naskrobałem dwa lata temu, aby poprawiać 'warsztat') doszedłem do wniosku, że nie zrobiłem nawet małego wstępu dla amatorów tematów Smart house i Raspberry Pi. Odgórnie przyjąłem, że wszyscy już wiedzą o co chodzi i od razu, 'z grubej rury' przystąpiłem do opisywania tematów. Czasem dość trudnych.

Przy okazji rozpoczęcia strony na Facebook, dotarło do mnie, że nie mam co wrzucić jako początek, jak zainteresować ludzi, wytłumaczyć podstawy. Temu właśnie posłuży ten wpis.

Zaczynamy!

Designed by Freepik

Smart home, smart home, IoT, IoT. Bardzo głośne ostatnio tematy. Czyli tak zwane 'Inteligentne domy'. Osobiście wolę termin 'Sterowane', 'Odpowiednio sterowane' lub 'Automatyczne'. Inteligencję rezerwuję dla tworów żywych.

Dom taki na podstawie czujników czy też informacji z zewnątrz (na przykład pogodowych) potrafi odpowiednio się 'dostosować' do naszych potrzeb.

Dość często wymienia się tutaj przykłady:
– uruchomienia podlewania gdy prognozowany jest brak opadów przez kilka dni,
– automatyczne otwieranie rolet/markiz o poranku
– czy też domykanie ich, gdy słońce świeci akurat w konkretne okno,
– sterowanie ogrzewaniem w domu gdy nas nie ma
– lub ustawianie zadanej temperatury, bo akurat wcześniej wracamy z pracy/wyjazdu,
– inteligentne monitorowanie posesji – jeżeli kurier dzwoni wideofonem przy bramie – wyślij zdjęcie i jeżeli potrzeba – otwórz mu furtkę aby nie bawił się w ogrodową koszykówkę przesyłką,
– ustawianie natężenia świateł w zależności od potrzeb – czytanie/oglądanie filmu/pełna jasność
– łączenie powyższych elementów w sceny – jeżeli wybieram tryb Kino – rozwiń ekran, włącz amplituner, wyłącz światła
– sterowanie głosowe
– powiadamianie głosowe/sms/e-mail

Wszystkie te elementy można zrealizować 'na bogato' zlecając je wyspecjalizowanej firmie, lub hobbystycznie. Temu drugiemu podejściu dedykowany jest blog. Niestety, podczas budowy domu popełniłem kilka błędów, jednym z nich było pociągnięcie zbyt małej ilości kabli do przesyłania danych, 'bo przecież teraz wszystko po WiFi'. Wymusiło to (na ponowne kucie ścian i remonty nie mam ochoty) ustawienie zainteresowania na transmisję bezprzewodową.

Nie jestem profesjonalistą w tym temacie. Cały czas mnóstwo się uczę i wiele tematów jeszcze przede mną. Jeżeli coś jednak zaczynam i mnie wciągnie – 'nie ma zmiłuj' – nie będę spał, ale temat muszę rozgryźć a problemy usunąć. Kropka.

Dlatego zainteresowały mnie platformy Raspberry Pi, Wemos, Arduino. Stąd już krok do komunikacji 433MHz, WiFi, ZigBee, Z-Wave. Czujniki temperatury, wilgotności, zalania, dymu, monitorowanie zużycia energii. Internetowe prognozy pogody, dane w formacie JSON. Temat jest niesamowicie rozległy i ciężko powiedzieć: 'To jest jedyne dobre rozwiązanie'.

Są systemy płatne, kompleksowo zamykające temat przez autoryzowanych instalatorów – Fibaro, Grenton to tylko przykłady polskich rozwiązań, na rynku jest ich mnóstwo. Oferują sterowanie światłem, ogrzewaniem, bezpieczeństwem, czujnikami. Są jednak relatywnie drogie (oczywiście punkt widzenia każdej osoby będzie się różnił) oraz zamknięte, jeżeli chodzi o sposób zaimplementowanych rozwiązań.

Osobiście szukałem systemu darmowego aby sprawdzić, czy Smart home się w ogóle u mnie przyjmie, czy jest sensowny. Patrząc z perspektywy czasu – jak najbardziej tak! Do tego przydałoby się oprogramowanie, które to wszystko zepnie, odczyta dane z czujników, prześle do przekaźników, zapisze do bazy danych, umożliwi analizy, reakcję.

Mój wybór padł na Domoticz. Trzy lata temu 'próg wejścia' w jego przypadku był niższy niż w Home assistant. Aktualnie coraz częściej rozważam opuszczenie Domoticz, albo chociaż na pewien czas równoległe sprawdzenie Home assistant. Wydaje się platformą stabilniejszą, bardziej rozwojową ze względu na sposób jego budowy. Aktualnie jednak – Domoticz!

Dla osób początkujących ważna jest również kolejna informacja – oba systemy są darmowe, możliwe do zainstalowania na Raspberry Pi, komputerach/serwerach obsługujących Linux, Windows, MacOS. Nie nie ryzykujecie zaczynając przygodę ze Smart home.

Dlaczego akurat on?
– po zainstalowaniu na Raspberry Pi (i nie tylko) można go od razu używać, bez dodatkowych skryptów
– dla początkujących praktycznie wszystko da się wyklikać
– bogaty zbiór urządzeń, które są obsługiwane
– na tamten czas dość ładny interface użytkownika

Porównując koszty, są od 5 do 10 razy mniejsze niż przy rozwiązaniach dedykowanych, nadmieniam jednak, że spędziłem mnóstwo czasu ucząc się, dostrajając elementy do swoich potrzeb, instalując, testując. Nie każdy ma ochotę na takie hobby. Mnie akurat wciągnęło.

Kilka przykładów:

Dashboard (czyli główny pulpit). Z tego miejsca mogę sprawdzić status tego co się dzieje w domu – kamery, gniazdka, włączone urządzenia.

Przełączniki – światła, sterowanie IR (TV, wzmacniacz), gniazdka zdalnie włączane, LEDy, system audio multi room

Sceny – połączenie kilku elementów w łańcuch zdarzeń. Jeżeli oglądamy film, to wyłącz światła, włącz amplituner, subwoofer…

Temperatura – dane z każdego z czujników. Łącznie z wilgotnością.

Elementy użytkowe – status użycia Raspberry Pi, szybkość łącza internetowego, nawodnienie kwiatów, pobór prądu w domu

Domoticz umożliwia również robienie raportów w formie graficznej. Tutaj – wykres temperatury na zewnątrz

Ustawianie warunków włączenia/wyłączenia. Tutaj – Włącz światła przed domem godzinę po zachodzie słońca i wyłącz zawsze o 22:00.

Warunki powiadamiania. Tutaj – Jeżeli włączy się światło przed domem – wyślij e-mail na żądany adres

Jeżeli prezentacja danych w Domoticz nam nie odpowiada, zawsze można doinstalować dodatkowe systemy zbierające i prezentujące dane. Na przykład InfluxDB i Grafana.

Zachęcam do przeczytania poprzednich wpisów, postarałem się ułożyć opisane już tematy w pewne pakiety tematyczne:

– Przede wszystkim – Domoticz
– Systemy audio multi-room – Logitech media server, Max2Play
– Zdalny dostęp do Raspberry i Domoticz – Dataplicity
– Czujniki otwarcia/zamknięcia drzwi – Kerui
– Centralki obsługujące różne transmisje: RFLink, Xiaomi Mijia Smart Home
– Prezentacja danych/sterowania elementami domu: Dashticz, aplikacja Pilot, aplikacja MiHome
– Monitorowania zużycia energii: Owl Micro +
– Sterowanie głosem – Amazon Alexa – Echo Dot, Skille, Kalendarze
– Chipy ESP8266 – Wemos D1 Mini
– Instalacja, konfiguracja: Raspberry, Domoticz
– BLE – Bluetooth Low Energy – Mi flora
– Przełączniki Sonoff – Basic, POW, S20
– Sterowanie oświetleniem – włączniki Xiaomi, Milight
– Piloty uniwersalne IR – Broadlink
czujnik smogu
– Zdarzenia, powiadamianie – bezpośrednio w interface Domoticz, skrypty
pourlopowe wnioski

Nie twierdzę, że moja ścieżka jest jedyną dobrą. Ile osób, tyle możliwych rozwiązań, pomysłów, różnorakich podejść. Eksperymentujcie, sprawdzajcie!

Pozdrawiam, życząc miłej i przyjemnej lektury
Cezar

P.S. Życzę również dużo myślenia, potu, zastanawiania się czemu nie działa, szukania rozwiązań problemów.

Obsługa zdarzeń w Domoticz używając dzVents

Osobiście nie lubię terminu 'inteligentny dom'. Inteligentny może być człowiek, dom może być umiejętnie sterowany na podstawie pewnych zdarzeń. Chociaż oglądając ostatnie poczynania Google Duplex zaczynam powoli zastanawiać się nad zmianą mojej opinii 😉

W poprzednim wpisie opisałem proste zdarzenia na czujnikach, switch’ach, itp. W Domoticz jest (jak napisałem) możliwość wykorzystania kilku schematów zdarzeń:

– bezpośrednio na samych czujnikach
– schematy blokowe w Blockly
– skrypty Lua lub Python
– dzVents

Dzisiaj skupię się na dzVents – wewnętrznym języku skryptów Domoticz. W sumie bazuje na Lua, czyli załatwiamy po części punkt trzeci 😉 Takie małe skróty.

Warto zainwestować czas w naukę, ponieważ schematy Blockly, mimo że ładne, swoje ograniczenia mają. Nadmieniam – nie jestem w tym temacie (jeszcze) ekspertem – to moje początkowe próby.

Opieram się na wersji 2.2.0, dostępnej w ostatniej stabilnej wersji Domoticz!

Dokumentacja tej wersji dostępna jest pod linkiem:
https://github.com/domoticz/domoticz/blob/9f75e45f994f87c8d8ce9cb39eaab85886df0be4/scripts/dzVents/documentation/README.md

No bo proszę, jakże naturalne jest wpisanie:

Co 10 minut w dni powszednie uruchom akcje:
– Jeżeli to nie wieczór i nie noc, przepisz wartość zmiennej do innej zmiennej, upewnij się, że światła w salonie wyłączone, a do tego, jeżeli czujka ruchu nie odpowiada – wyłącz światło w łazience

return {
active = true,
on = {
timer = {’Every 10 minutes on mon,tue,wed,thu,fri'}
},
execute = function(domoticz)
if (domoticz.time.isDayTime and domoticz.variables(’Zmienna1′).value == 10) then
domoticz.variables(’Zmienna2′).set(15)

domoticz.setScene(’Światła Salon', 'Off')

if (domoticz.devices(’CzujkaRuchu').lastUpdate.minutesAgo > 5) then
                domoticz.devices(’Bathroom lights').switchOff()
            end
end
end
}

To tylko jednak przykład. Sam używam kilku innych skryptów, które okazały się bardzo przydatne.

Zacznijmy od tego jak je pisać i gdzie możemy je znaleźć.

Setup -> More Options -> Events. Tam znajdziemy edytor z kilkoma możliwymi typami:
– Blockly
– Lua
– dzVents
– Python

Nas interesuje aktualnie dzVents i taki typ musimy wybrać przy tworzeniu nowego pliku. Nie zapomnijcie również wpisać nazwy oraz zmienić Event active na włączony. Dla wyjaśnienia – skrypty można tworzyć i z poziomu Raspberry Pi, z basha zapisując je w odpowiednim folderze, ale tutaj mamy pewność, że Domoticz sam je sobie w dobrym miejscu osadzi. I będzie mniej problemu przy przenoszeniu systemu.

Mała sugestia – sprawdzajcie log Domoticz, szczególnie na początku tworzenia – często są tam przydatne informacje – czy skrypt się załadował, czy wystartował, jak działa, w jakiej zmiennej się pomyliliśmy, jaka funkcja ma złą nazwę (patrzcie dokładnie ma małe/duże litery – ma to ogromne znaczenie!).

1. Na początek – nie podobało mi się jak barometr Xiaomi jest prezentowany w Domoticz. Pokazuje złe wartości. Oczywistym jest, że ciśnienie 969 Bar nie jest poprawne… Głupota, szczegół? Owszem, ale uważam, że ten szczegół trzeba poprawić.

No to raz, dwa, trzy:

return {
    active = true,
    on = {
        [’timer'] = {’every 30 minutes'}
    },
    execute = function(domoticz)

    local Baro = domoticz.devices(’Xiaomi Baro Kuchnia').pressure
    
    domoticz.devices(’Baro Kuchnia').updateBarometer(Baro, domoticz.BARO_NOINFO)
        
    end
}

Zwróćcie uwagę na konstrukcję:
– początek funkcji
– warunek wyzwolenia – tutaj czasowy
– zawartość funkcji

Co zrobiliśmy? Co 30 minut uruchom przepisanie wartości z czujnika do zmiennej, a później zmienną przepisz do osobno założonego czujnika ciśnienia.

I już, działa.

Zauważcie, że czujnik ciśnienia można zaktualizować o parametry, tutaj BARO_NOINFO (czyli nie zmieniamy), ale może on przyjmować również wartości:
BARO_CLOUDYBARO_CLOUDY_RAINBARO_STABLEBARO_SUNNYBARO_THUNDERSTORMBARO_NOINFOBARO_UNSTABLE

Nie jestem fizycznie w stanie opisać tutaj wszystkich parametrów wszystkich czujników – zapraszam do czytania dokumentacji i własnych prób.

2. Kolejny temat – biegam. Dużo biegam. Wstaję rano, banan, woda i w drogę. Ale lubię wiedzieć jak mam się ubrać. Albo inny przykład – w zimie warto wiedzieć czy jest przymrozek.

Oczywiście – można sprawdzić prognozę pogody albo wyjrzeć za okno, ale często gdy wstanę sprawdzam pocztę i akurat takie podstawowe informacje mi pomagają.

return {
    on = {
        [’timer'] = {’at sunrise'}
    },
    execute = function(domoticz)
    local Tmp = domoticz.devices(’Temp na zewnątrz').temperature
   
    function round(num, numDecimalPlaces)
          local mult = 10^(numDecimalPlaces or 0)
          return math.floor(num * mult + 0.5) / mult
        end
   
        domoticz.notify(’Temperatura', 'O wschodzie słońca było ' ..round(Tmp,1), domoticz.PRIORITY_NORMAL)
    end
}

Tytułem wytłumaczenia – funkcja round() pojawiła się w nowszej wersji dzVents, ja musiałem poszukać innego rozwiązania (Łukasz Rybak – dziękuję).

W sumie przyszło mi do głowy w trakcie pisania, że dobrze byłoby rozwiązanie uczynić bogatszym o dane większej ilości czujników z domu – temperatura w kilku pokojach, status świateł, itp. Zapisuję na liście 'Do zrobienia' 🙂

3. Jest sobie u mnie w domu ekran do projektora. Wisi (Tak przy okazji to zestaw ekran + projektor to jeden z lepszych zakupów w życiu). Stworzyłem sceny, np. 'Oglądamy film', które wyłączają światła w salonie, włączają subwoofer, projektor i obniżają ekran. Problem z nim jednak był taki, że nie rozwijam go do końca, tylko musi się zatrzymać w konkretnej pozycji. Jak, po wydaniu komendy 'W dół', zatrzymać go? dzVents ma funkcję stop().afterSec().

return {
    active = true,
    on = {
        devices = {
            'Ekran'
        }
    },
    execute = function(domoticz,switch)
        
        if (switch.state == 'On') then
            switch.stop().afterSec(51)
        end
    end
}

Czyli start ręcznie w Domoticz, czekamy 51 sekund, stop. Bajka.

4. Kolejny temat – powiadomienia przy pewnych warunkach. Tutaj – zbyt wysoka temperatura sugeruje, że coś złego może się dziać w domu. Oczywiście można na każdym z osobna to 'wyklikać', ale nie jest to zbyt optymalne.

return {
    active = true,
    on = {
        devices = {
            'Temperatura Salon',            
            'Temperatura Kuchnia',            
            'Temperatura Sypialnia',        
            }
    },
    execute = function(domoticz,device)
        
        if (device.name == 'Temperatura Salon' and device.temperature >= 45) then
            domoticz.email(’Możliwy pożar!', 'Zbyt wysoka temperatura!', 'adres@gmail.com')
        end 
        if (device.name == 'Temperatura Kuchnia' and device.temperature >= 45) then
            domoticz.email(’Możliwy pożar!', 'Zbyt wysoka temperatura!', 'adres@gmail.com')
        end
        if (device.name == 'Temperatura Sypialnia' and device.temperature >= 45) then
            domoticz.email(’Możliwy pożar!', 'Zbyt wysoka temperatura!', 'adres@gmail.com')
        end        
    end
}

Dodajcie swoje warunki (np. tylko w nocy, bo wtedy na pewno nie świeci słońce na termometr) i do dzieła!

5. Jak do tej pory najciekawsza funkcja, którą zrobiłem to 'Tryb wakacyjny'. 

Nie ma się co śmiać, dopiero zaczynam 😉

Mam oto przełącznik w Domoticz, który zowie się 'Wakacje'. I pod niego powoli podpinam różne akcje. Na przykład: gdy wyjedziemy, Domoticz ma włączyć światła o losowej minucie po 22:00 (ale w zakresie 30 minut) i wyłączyć również losowo po 23:30. Taki symulator tego, że ktoś jest w domu.

local RANDOM_DELAY_MINS = 30
return {
active = true,
on = {
[’timer'] = {
’at 22:00′,
’at 23:30′
}
},
execute = function(domoticz,_,triggerInfo)

        if (domoticz.devices(’Wakacje').state == 'On') then

if (domoticz.devices(’Kinkiety').state == 'Off') and (triggerInfo.trigger == 'at 22:00′)
then 
domoticz.devices(’Kinkiety').switchOn().withinMin(RANDOM_DELAY_MINS)
domoticz.email(’Światła włączone!', 'Światła włączone!', 'adres@gmail.com')
else 
    domoticz.devices(’Kinkiety').switchOff().withinMin(RANDOM_DELAY_MINS)
domoticz.email(’Światła wyłączone!', 'Światła wyłączone!', 'adres@gmail.com')
end

end

end
}

Mam tam jeszcze kilka innych 'ifów', ale ważny jest początek i sens funkcjonalności. Rozbudować go można dowolnie – włącz raz na górze, raz na dole, w zależności od dnia tygodnia włącz różne, itp., itd. Ogranicza Was wyobraźnia. No i czas 😀

6. Funkcja z dnia wczorajszego 😉 Powiadomienie, jeżeli drzwi są otwarte zbyt długo, a jeżeli są, to przez jaki czas. Dla drzwi na taras dałem limit 30 minut, bo są częściej i dłużej otwierane. Dla drzwi na inny taras – krótszy okres, bo praktycznie ich nie używamy. Zwróćcie uwagę na drugi warunek – jeżeli czas jest mniejszy niż 3 * limit – czyli w tym przypadku na przykład dla 'Drzwi – czujnik' jest to 90 minut – przestań wysyłać powiadomienia, bo widocznie tak ma być. Oczywiście po zamknięciu zmienne zostaną wyzerowane.

local devicesToCheck = {
{ [’name'] = 'Drzwi – czujnik', [’threshold'] = 30 },
{ [’name'] = 'Drzwi mały taras', [’threshold'] = 10 },
}

return {
active = true,
    on = {
        timer = {’every 10 minutes'},
    },
    logging = {
        level = domoticz.LOG_DEBUG,
        marker = „Door”
    },    

execute = function(domoticz)
    local times = 3
for i, deviceToCheck in pairs(devicesToCheck) do
local name = deviceToCheck[’name']
local threshold = deviceToCheck[’threshold']
local state = domoticz.devices(name).state
local minutes = domoticz.devices(name).lastUpdate.minutesAgo

if ( state == 'Open') then 
    if (minutes > threshold) and (minutes < 3 * threshold) then
        domoticz.notify(’Device ' .. name .. ' otwarte ' .. minutes .. ' minut.', domoticz.PRIORITY_HIGH)
                end
end
end
end
}

Jak na razie to koniec – mam jeszcze kilka zdarzeń podpiętych, ale nie są aż tak warte opisania. Do tego kilkanaście kolejnych w głowie, które muszę sobie stworzyć.

Dzięki temu system nabiera sensowności. Bo cóż z tego, że sprawdzam temperaturę, jeżeli nic za tym nie idzie? Dopiero obudowanie Domoticz reagowaniem na czynniki zewnętrzne tworzy nam rozwiązanie godne miana 'Smart home'.

Przyjemnego kodowania życzę!

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!