Migracja z Domoticz do Home Assistant – jak to zrobić, żeby się wyrobić…

Dzień dobry.
Niespokojnym duchem będąc i uwielbiając zmieniać, próbować, usprawniać – musiałem przejść na Home Assistant. Było kilka powodów, niektóre mniej, niektóre bardziej ważne.
1. Aby zaktualizować wersję Domoticz którą mam aktualnie (3.8153 – relikt, ale działa) musiałbym przejść z Raspbian Jessie na Raspbian Buster. Jeżeli miałbym to zrobić – czekałaby mnie reinstalacja części komponentów, zapewne problemy z Broadlink (z tego co raportowali czytelnicy jakimś cudem mi się udało, ale wiele osób miało z tym problemy w Domoticz) oraz innymi komponentami. Niestety, w Domoticz nie jest to łatwe.
2. Niestety sprawdziłem jak prosta była i jest konfiguracja Home Assistant – po tym już Domoticz nie był taki sam. Osobiście lubię się bawić w konfiguracje w plikach tekstowych i możliwość dostosowania dzięki temu systemu do moich potrzeb. Teraz w większości przypadków nie trzeba znać YAML – pozostał dla takich świrów jak ja. HA niesamowicie szybko się rozwija.
3. KAŻDY, absolutnie KAŻDY dodatek, integracja, tapeta jest dokładnie opisana. Każda aktualizacja jest dokładnie udokumentowana w sposób jednakowy dla całego systemu. To samo tyczy się aktualizacji samego systemu HA. Bo trzeba wiedzieć, że są one rozłączne, to my decydujemy co ładujemy, na czym się opieramy, w jaki sposób dodajemy.
Niniejszym zaczynam ciąg artykułów o przejściu z Domoticz na Home Assistant! 
Część już opisałem wcześniej, postaram się aktualizować ten artykuł i kolejne sukcesy. A udało mi się w sumie przenieść już prawie wszystko.
Do przeniesienia miałem:
    – gniazdka Xiaomi
    – włączniki ścienne Xiaomi
    – Miilight LED 
    – Yeelight
    – światło przed domem – Sonoff na Tasmota (przy okazji zmiana oprogramowania na najnowsze przez OTA)
    – czujnik smogu – ESPEasy
    – Owl (RFLink)
    – UPS
    – oczyszczacz powietrza
    – MiFlora
    – kamery
    – Xiaomi Gateway
    – Logitech Media Server
    – Broadlink
    – NC+
    – aktywności sprzętów IP, zliczenie czasu używania
    – Sonoff POW
    – Sceny
    – pogoda/Airly
    – internet – raportowanie
    – System
    – skrypty
        – drzwi otwarte
        – emulator obecności
        – powiadamianie o temperaturze
        – poranne news o domu
        – zużycie energii

Sonoff TH16, wodoodporny DS18B20 oraz Domoticz. No i Gexon…

Dzień dobry!

Dzisiaj kolejna rzecz z tych 'nie jest mi to do niczego potrzebne, ale zrobię'. Tym razem NAPRAWDĘ nie jest mi to do niczego przydatne, ale skoro się da – to zrobię 😀

Nabyłem swego czasu kolejny włącznik Sonoff. Tym razem TH16, wraz z wodoodpornym termometrem DS18B20. Miałem ambicję wykorzystać jeden z takich, które posiadam, ale słusznie obawiałem się, że nie poradzę sobie z lutowaniem 'poczwórnego jacka'. Kupiłem więc gotowy.

Tym razem sprawdzenie odbyło się w towarzystwie naszego Bojownika (ochrzczonego przez córkę imieniem Gexon). Akurat ta rybka jest bezproblemowa, nie potrzebuje zbyt wiele opieki i jakoś bardzo stabilnego środowiska, ale jak najbardziej wyobrażam sobie użycie tego rozwiązania w przypadku większych akwariów, terrariów czy jakiegokolwiek innego miejsca wymagającego stabilizacji temperatury.

Wgranie oprogramowania alternatywnego opisałem już w innych postach: http://blog.asobczak.pl/2018/08/12/sonoff-pow-zmieniamy-oprogramowanie-na-alternatywne-i-przy-okazji-przekonujemy-sie-ze-warto-byc-upartym/, jedyne co mi przyszło do głowy przy tej operacji to fakt, że nawet nie wiem jak wygląda oryginalne oprogramowanie w Sonoff 😀

Konfiguracja również standardowa, jak poniżej.

Teraz pozostaje albo napisać skrypt w dzVents, albo na szybko coś w Blockly. Rozumieć przez to należy, że poprzez monitorowanie temperatury możemy od razu załączać ten sam włącznik, do którego jest podłączony termometr.

DS18B20 nie jest jedynym który można podłączyć, poza tym on mierzy wyłącznie temperaturę. Inne, jak AM2301 oraz Si7021 mierzą również wilgotność.

Świetna dokumentacja instalacji, konfiguracji Domoticz w PDF jest dostępna!

Dzień dobry. Patrząc na datę ostatniego wpisu zastanowiłem się gdzie mi tak szybko uciekł miesiąc. Ale, biorąc pod uwagę sezon narciarski i ferie – nie jest tak źle…

Przeglądając rano forum Domoticz napotkałem na świetną ciekawostkę.

Użytkownik Robert Linn opracował świetną dokumentację instalacji, konfiguracji, dostrajania systemu. Do tego opis MQTT, skrypty dzVents, Volumio i mnóstwo innych. Dopiero się do niego dorwałem, nie zdążyłem przeczytać, ale czym prędzej pragnę się tym z Wami podzielić.

Zapraszam do pobierania i czytania pod adresem:
https://github.com/rwbl/domoticz-homeautomation-workbook

UPSa dostałem… Jakbym miał za dużo czasu i się nudził ;)

Pojawił się w domu nowy kolega… Trochę już wiekowy, może niezbyt piękny, ale po wymianie baterii działający bardzo dobrze. UPS APC CS 350. Problematyczne było znalezienie kabla transmisyjnego (specjalna, 10 żyłowa 'RJotka' -> USB), ale i z tym sobie poradziłem, za co bardzo dziękuję kolegom.

Dążymy do tego:

A sam UPS wygląda tak 🙂

Skoro zadziałał grzechem byłoby:
– pozostawienie go samemu sobie,
– odpuszczenie monitorowania
– i oczywiście dodaniu do naszego Smart home 😉

Co prawda w przypadku Raspberry Pi zmieniłem miejsce systemu na HDD, ale poprawienie bezpieczeństwa i stabilności zawsze jest dobrym pomysłem. A do tego – jeżeli braknie prądu to dzieci zawsze będą mogły lekcje odrobić przy lampce, z czego na pewno będą się bardzo cieszyć. Lampka z żarówką 7W wytrzymuje na nim ponad dwie godziny, także czasu będą miały sporo…

Bez zbędnych dyskusji zabieramy się do pracy.

Najpierw odświeżenie repozytorium i instalacja NUT (Network UPS Tools). NUT jest serwisem monitorującym pracę UPS, dbającym o przesyłanie komunikatów do systemu w przypadku przejścia na zasilanie bateryjne, pozwalającym zamknąć system w przypadku spadku poziomu naładowania baterii, itp.

sudo apt-get update && sudo apt-get install nut nut-client nut-server

Po zainstalowaniu wykonujemy komendę

lsusb

i sprawdzamy czy nasz UPS jest widoczny.

Działa, jest widoczny. Świetnie!

Warto na stronie http://www.networkupstools.org/stable-hcl.html sprawdzić czy nasz UPS jest obsługiwany i jaki jest do niego najlepszy sterownik. Szczerym będąc, z APC problemu nie miałem, ale już UPS firmy Eaton nie udało mi się zmusić do podłączenia i zaraportowania statusu. Chociaż sam UPS działał bez problemu.

Ok, jedziemy dalej. Dobrze by było powiedzieć systemowi jaki to jest ten nasz UPS i jakim sterownikiem się do niego dostaniemy.

W przypadku NUT, pliki które zaraz będziemy edytować są bardzo dobrze udokumentowane. Przy każdej opcji mamy kilka przykładów, wyjaśnienia, itp. W Waszym przypadku UPS zapewne będzie inny, może inny model, musicie wybrać odpowiednie sterowniki i podejście. Z tego co widzę w sieci – APC sprawia najmniej problemów.

W tym celu, edytujemy

sudo nano /etc/nut/ups.conf

Na samym końcu pliku dodajemy/edytujemy:

[apc350]
        driver = usbhid-ups
        port = auto
        desc = „APC”

WAŻNE jest zapamiętanie tego, co wpisaliśmy w nawias kwadratowy, ponieważ tej nazwy będziemy używać w kolejnych krokach.

Jak widać – eksperymentowałem z kilkoma różnymi.

Kolejny krok – deklarujemy w konfiguracji nut jaki będzie nasz sposób pracy UPSa. W moim przypadku serwer i klient NUT jest na tym samym Raspberry Pi, dlatego wybrałem opcję Standalone.

sudo nano /etc/nut/nut.conf

MODE=standalone

Następnie

sudo upsdrvctl start

Dobrze jest – mamy komunikację.

Być może potrzebne będzie wykonanie:

sudo service nut-server restart

sudo service nut-client restart

Przed

sudo service nut-server status

Serwer wystartował, jest w porządku.

Komenda jak poniżej (UWAGA, używamy nazwy, którą zdefiniowaliśmy w konfiguracji!) poda nam parametry i status UPSa.

upsc apc350

So far so good, jak to mówią. Teraz musimy skonfigurować monitor, który w razie braku prądu zamknie komputer, gdy serwer NUT mu rozkaże.

Użytkownicy (tam gdzie XXXXX podajecie swoje hasło. W sumie to i XXXXX możecie zostawić 😉 ):

sudo nano /etc/nut/upsd.users

[admin]
        password = XXXXX
        actions = SET
        instcmds = ALL
[upsmon]
        password  = XXXXX
        upsmon master

I później przechodzimy do wieeeelkiego pliku

sudo nano /etc/nut/upsmon.conf

Ale na szczęście interesują nas w nim wyłącznie dwie sekcje:

MONITOR apc350@localhost 1 upsmon XXXXX master

Zamiast XXXXX oczywiście Wasze hasło

I dla testów możemy włączyć powiadamianie na ekranie. Będziemy widzieć co się dzieje:

NOTIFYFLAG ONLINE      SYSLOG+WALL
NOTIFYFLAG ONBATT      SYSLOG+WALL

A tutaj komenda, która wykona się, gdy będzie już trzeba zamknąć system, ponieważ bateria już ledwo zipie:

Później uprawnienia do plików:

sudo chown nut:nut /etc/nut/*
sudo chmod 640 /etc/nut/upsd.users /etc/nut/upsmon.conf

W sumie jesteśmy już gotowi, z ciekawostek, po wpisaniu komendy jak poniżej dostaniecie listę komend Waszego UPS. Jak widać – wyłączenie głośnika, wyciszenie, restart UPSa, testowanie baterii, itp.

sudo upscmd -l apc350

Na przykład wyłączenie pikania po przejściu na baterię (już rodzinę raz obudził gdy zabrakło prądu) to:

upscmd apc350 beeper.mute

Po tym wszystkim restart serwera i klienta. UWAGA – możliwe, że i wcześniej będziecie musieli wykonać sudo reboot, aby UPS był widoczny i serwisy wstały.

sudo service nut-server restart
sudo service nut-client restart

Po brutalnym wyjęciu kabla zasilającego testy wypadły pozytywnie 🙂

Jeszcze tylko

sudo nano /etc/nut/upsd.conf

Aby serwis wiedział gdzie ma nasłuchiwać:

 LISTEN 127.0.0.1 3493
 LISTEN 192.168.1.200 3493

192.168.1.200 to adres mojego Raspberry Pi.
Cudownie! Wszystko skonfigurowane, działa!

No to teraz Domoticz, żeby jeszcze było wizualnie pięknie (chociaż zdania są podzielone, ale co tam 😉 )

Z poziomu konsoli i folderu Domoticz wykonujemy co następuje:

cd plugins
mkdir NUT_UPS
sudo apt-get update
sudo apt-get install git
git clone https://github.com/999LV/NUT_UPS.git NUT_UPS
cd NUT_UPS
sudo chmod +x plugin.py
sudo /etc/init.d/domoticz.sh restart

W sekcji Hardware pojawił mi się plugin UPS Monitor. Konfigurujemy go podając nasze parametry (IP, port, oraz nazwę w serwerze NUT, którą skonfigurowaliśmy – u mnie apc350)

I mamy:

Po chwili w zakładce Devices zaczną nam się pojawiać dane z UPSa:

I już później w Domoticz:

Kolejna wykonana praca! Teraz mogę spać jeszcze spokojniej, mniej obawiając się o to, że Raspberry Pi nie wstanie przy kolejnym braku/zaniku/chwilowej przerwie prądu.

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.

Coś dla fanów piłki nożnej – skrypt dzVents

Dzisiaj coś dla fanów piłki nożnej. Ja osobiście nim nie jestem, ale nie w tym rzecz. Poniższy skrypt (w dwóch wersjach, dla wersji dzVents z ostatniej wersji stabilnej Domoticz – czyli 2.2 – oraz dla najnowszej w wersji Beta) jest wspaniałym przykładem tego, co można zrobić z danymi pobieranymi ze stron www. Pobrać, przemielić, wyświetlić.

Nie jestem autorem kodu, autorem jest elmortero, kod można znaleźć na forum Domoticz.

Dla przypomnienia, kod wstawiamy tutaj:



local scorefile = '/tmp/score.json'
local fetchIntervalMins = 3     — interval to check the info (don’t set to lower than 3)
return {
active = true,
on = {
timer = { 'every minute' },
},
execute = function(domoticz, device)
local callUrl = false
if (os.date(’*t').min % fetchIntervalMins) == 0 then
callUrl = true
elseif ((os.date(’*t').min -1) % fetchIntervalMins) ~= 0 then
return
end
local board = domoticz.devices(’Scoreboard')
local prevboard = tostring(board.text)
local linker = tostring(’http://worldcup.sfg.io/matches/today')
if callUrl then
os.execute(’curl -s „'..linker..'” > '..scorefile..’&')
print(’json written to file')
return — Nothing more to do for now, we’ll be back in a minute to read the data!
end
local function readLuaFromJsonFile(fileName)
local file = io.open(fileName, 'r')
if file then
package.path = './scripts/lua/?.lua;'..package.path
local jsonParser = require(’JSON')
local _json = file:read(’*a')
local json = jsonParser:decode(_json)
io.close(file)
return json
end
return nil
end
local scoreData = readLuaFromJsonFile(scorefile)

if not scoreData then
print(’** Scoreboard// Could not read scoreData from file: '.. scorefile)
return
end

tl = #scoreData
if tl > 0  then
tc = 1
repeat
local status = tostring(scoreData[tc].status)
local date = tostring(scoreData[tc].datetime)
local home = tostring(scoreData[tc].home_team.country)
local away = tostring(scoreData[tc].away_team.country)
local hgoal = tostring(scoreData[tc].home_team.goals)
local agoal = tostring(scoreData[tc].away_team.goals)

local pattern = „(%d+)%-(%d+)%-(%d+)T(%d+):(%d+):(%d+)”
local year, month, day, hour, minute, seconds = date:match(pattern)
hour = hour + 2

show = (home..' '..hgoal..' – '..agoal..' '..away)

if status == 'in progress' then tc = tl + 1 end
if status == 'completed' then
local score = (hgoal..' – '..agoal)
local winner = tostring(scoreData[tc].winner)
if winner == 'Draw' then 
   show = (’Draw '..home..' '..hgoal..' – '..agoal..' '..away)
   else 
   show = (’Match won by '..winner..' with '..score)
end
tc = tc + 1
end
if status == 'future' then 
    show = (show..' KO '..hour..':'..minute)
    tc = tl + 1 
end
until tc > tl
if show ~= prevboard then
    print (’result '..show)
board.updateText(show)
end

    end
end

}

Poniżej wersja dla dzVents w wersji przynajmniej 2.4.

return {
on = {
timer = { 'every 2 minutes' },
httpResponses = { 'scoreboard2′ } — matches callback string below
},

execute = function(domoticz, triggerItem)
    local board = domoticz.devices(’Scoreboard2′)    –a virtual text sensor
    local prevboard = tostring(board.text)          –get current value of text sensor

if (triggerItem.isTimer) then
domoticz.openURL({
url = 'http://worldcup.sfg.io/matches/today',
method = 'GET',
callback = 'scoreboard2′
})

elseif (triggerItem.isHTTPResponse) then

local response = triggerItem
if (response.ok and response.isJSON) then
tl = #response.json
tc = 1
repeat
local status = tostring(response.json[tc].status)
local home = tostring(response.json[tc].home_team.country)
local away = tostring(response.json[tc].away_team.country)
local hgoal = tostring(response.json[tc].home_team.goals)
local agoal = tostring(response.json[tc].away_team.goals)
if away == 'Spain' or away == 'Belgium' or home == 'Spain' or home == 'Belgium' then
sender = true
end
show = (home..' '..hgoal..' – '..agoal..' '..away)

if status == 'in progress' then tc = tl + 1 end
if status == 'completed' then
local score = (hgoal..' – '..agoal)
local winner = tostring(response.json[tc].winner)
show = (’Match won by '..winner..' with '..score)
tc = tc + 1
end
if status == 'future' then tc = tl + 1 end
until tc > tl
if show ~= prevboard then
    print (’result '..show)
board.updateText(show)
if sender then
–put your notification method here (mine is telegram)
end
end
else
print(’**scoreboard2 failed to fetch info')
end
end
end

}

Dodajemy Virtual switch typu text:

I w sumie gotowe 🙂

Trzymamy kciuki aby wygrali!

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ę!

Mi Light – podłączamy, parujemy, dodajemy w Domoticz

To się chyba nigdy nie skończy 😀 Coraz więcej rozwiązań, coraz więcej możliwości!

Skoro już robiliśmy remont i sufit podwieszany – nie obejdzie się bez LEDów. A jeżeli LEDy – to nie pozwoliłbym sobie na zakup tylko takich sterowanych pilotem. Postawiłem na Mi Light. Jest to już pewnym standardem, jest kilka innych rozwiązań, jednak cena i wsparcie mnie tutaj przekonały.

Jak to u mnie – bez problemów ani rusz. Kupiłem, ze względu na ograniczenia czasowe, na 'znanym polskim serwisie'. Od razu piszę, że nie było żadnych problemów, błyskawiczna przesyłka, fachowe podejście, ale… Nie chciało działać z Domoticz.

Co się okazało? Kupiłem sterownik JEDNOSTREFOWY. Który, owszem, świetnie działa z pilotem, aplikacją Mi Light, ale NIE z Domoticz. A przecież to było celem! Damn me! Nic to – pozostały szybkie zakupy w Chinach.

Nowinka – na stronie http://cezarowy.blogspot.se/p/co-na-stanie-ma-cezar.html dodałem spis sprzętów i oprogramowania z jakiego korzystam wraz z cenami, linkami, itp. Ceny podane są na moment mojego zakupu, mogę się więc (czasem znacznie) różnić od tego co Wam się uda upolować.

Ten poniżej jest JEDNOstrefowy. Działa z pilotem (również jednokanałowym) Mi Light, aplikacją, itp. bez problemu, ale z Domoticz go nie sparujecie. Warto wiedzieć.

A ten – i owszem. CZTEROstrefowy.

I taki oto pilot do niego pasuje.

WiFi iBox w wersji 2. On z kolei jest potrzebny, aby sterować przez WiFi. Czyli aplikacją w telefonie (bajer) i przez niego możemy się dostać do Domoticz (mniam, na to czekamy).

W aplikacji Mi Light parowanie w sumie w standardowy sposób jak w innych urządzeniach:
– reset routera iBox
– z poziomu telefonu zalogowanie się do sieci urządzenia (Milight*)
– konfiguracja za pomocą AP
– podanie użytkownika/hasła do swojej sieci
– wyłączenie zasilacza LED
– teraz wymagana zręczność – włączenie i sparowanie strefy (Zone1, Zone2, etc.) do 3 sekund po włączeniu. U mnie, z nieznanych mi na razie przyczyn, sterownik sparował się tylko do strefy 2

Jeżeli uda się sterować kolorem, natężeniem, programami za pomocą aplikacji to praktycznie jesteśmy już w domu.

Z ciekawostek: do iBox’a można się zalogować przez WWW. Wystarczy podać adres, standardowo użytkownik/hasło to admin/admin. Możemy tam skonfigurować wszystkie parametry. Co prawda nie widziałem tam jakichś magicznych sztuczek, ale warto wiedzieć, że jest możliwość.

W Domoticz dodajemy Limitless/AppLamp/Mi Light with LAN/WiFi interface, podajemy IP. WAŻNE! W sieci są podane dwa porty do sterowania. W starszych wersjach był to 8899, teraz jest to 5987.

W sekcji Devices pojawią nam się wszystkie strefy, nawet jeżeli mamy zaprogramowaną tylko jedną.

Dla wyjaśnienia. Group1 do Group4 to oczywiście nasze strefy. AppLamp All to włączenie/wyłączenie wszystkich stref.

A AppLamp Bridge to inna wersja iBox’a – ona sama w sobie również świeci, dlatego możemy nią sterować.

Po dodaniu naszej strefy mamy nowy Switch:

Włączanie/wyłączanie,  wybór jasności, koloru – standardowy dla Domoticz sposób wyboru. Podobnie jak w przypadku Yeelight.

Ale dla mnie to mało. Jak zawsze. Tak jak pisałem wcześniej – we włącznikach Xiaomi wykorzystałem tylko trzy z czterech dostępnych włączników. Ostatni, czwarty, intencjonalnie został pozostawiony na pasek LED.

Dodany już jest, fizycznie nie jest podłączony pod żaden kabel, więc mogę mu dodać funkcję taką, jaka mi się podoba.

Edytujemy…

i przypisujemy akcje pod On oraz Off:

http://192.168.1.200/json.htm?type=command&param=setcolbrightnessvalue&idx=305&hex=FFFFFF

http://192.168.1.200/json.htm?type=command&param=switchlight&idx=305&switchcmd=Off

Chciałem mieć białe światło po włączeniu, dlatego wartość HEX jest równa FFFFFF. Każdy z dwójki bitów określa jaką chcecie mieć wartość RGB (Red, Green, Blue – Czerwony, Niebieski, Zielony).
W IDX oczywiście IDX urządzenia w Domoticz.
Działa! 
’Alexa, living room off' i dobranoc!

Domoticz i zmiana domyślnych ikon (dla pewności – na przełącznikach :) )

Domoticz jaki jest każdy widzi. Działać – działa, jest dość schludny, ale na pewno nie piękny.

Można zrobić jednak kilka rzeczy, żeby wyglądał lepiej. Na przykład zmienić niektóre ikony, żeby go ożywić.

Społeczność Domoticz stworzyła pewną bazę ikon, które można zobaczyć tutaj:
https://drive.google.com/drive/folders/0B-ZLFoCiqzMRSkFaaWdHV1Qxbm8. Nie jest imponująca, znalazłem jednak kilka, które mi się spodobały.

Aktualizacja. Kolega z bloga https://raspberrywpraktyce.wordpress.com/ sugeruje również link: https://drive.google.com/drive/folders/0B4fi5h8mtKF3UVpkcXBoVFNJUkU

Jeżeli ktoś ma talent – można zrobić swoje. Powinny zawierać trzy statusy (miniatura, On, Off), mieć plik txt z nazwami i być zarchiwizowane w ZIP. Z wyżej wymienionej strony ściągamy potrzebny plik zip i postępujemy zgodnie z poniższym.

Przechodzimy do Setup -> More Options -> Custom Icons

Wskazujemy plik do załadowania, wybieramy Upload. Ikona pokaże się na liście.

Później przechodzimy do wybranego Switch’a, wciskamy Edit.

Z rozwijalnej listy wybieramy ikonę, którą chcemy użyć.

Moim zdaniem jest to pewne urozmaicenie.

Większość z niedogodności domyślnego wyglądu Domoticz została usunięta w skórce Aurora (na przykład podgląd na żywo z kamer), ale wymaga wersji Beta Domoticz, na co się osobiście na razie nie chcę zdecydować.

Kamera IP w Domoticz

Dzisiaj krótki post, prosty temat, może jednak nie dla wszystkich znany. Szczególnie końcówka.

Kamery IP w Domoticz. Prawdę mówiąc niezbyt mi się ich obsługa w Domoticz podoba. Nie można osadzić ich w żaden sposób aby stale pokazywał się obraz na żywo. Z pomocą przyszedł Dashticz, ale to inna historia.

Jednak trzeba się cieszyć z tego co jest i to wykorzystać.

Przechodzimy do Setup -> More Options -> Cameras.

I tutaj zaczyna być ciekawie. Większość kamera pozwala na dostęp przez adres IP i adres URL do obrazka/źródła obrazu. Ja korzystam z kamer D-Link, chciałem być pewien, że wszystko będzie działało bez problemu, jednak warto poszukać Waszych modeli przed zakupem na stronie http://www.ispyconnect.com/sources.aspx, gdzie są podane wszelkie możliwe modele wraz z możliwym dostępem.

Wpisujemy nazwę, adres IP, port, użytkownika, hasło (jeżeli wymagane) i koniecznie ImageURL. Mnie osobiście Test Connection nigdy nie działa, ale możecie spróbować 😉

Po dodaniu kamery obraz się jednak pokazuje, a o to nam przecież chodziło.

Czyli jest, działa. Można używając zaznaczonych ikon zrobić zdjęcie lub wybrać pokaz obrazu na żywo.

Jednak wchodzenie (szczególnie na telefonie, tablecie) cały czas na zakładkę z kamerami i sprawdzanie nie jest, delikatnie mówiąc, najbardziej komfortowe. Tutaj mi doskwiera brak jakiegoś sensownego mechanizmu to wspierania pokazywania obrazu.

Obejście, jak zwykle, jest 😉 Stworzyłem do każdej kamery Virtual Switch.

Następnie na stronie konfiguracji kamer połączyłem switch z kamerą.

Po tej operacji mam dwa przełączniki. Jeżeli kliknę w ikonę z kamerą, na ekranie pojawia się obraz z kamery. Ciągle niezbyt wygodnie, ale chociaż tyle, że mam je na moim Dashboard’zie z możliwością szybkiego dostępu.

Kolejne informacje udostępnił kolega na blogu: https://raspberrywpraktyce.wordpress.com/2018/01/26/obsluga-kamery-foscam-fi8918w-w-domoticzu/. Znajdziecie tam sposób konfiguracji powiadomień na e-mail, obsługę zdarzeń przez Blockly, etc.