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

piątek, 3 lipca 2020

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

wtorek, 16 kwietnia 2019

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ę :D

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://cezarowy.blogspot.com/2018/08/sonoff-pow-zmieniamy-oprogramowanie-na.html, jedyne co mi przyszło do głowy przy tej operacji to fakt, że nawet nie wiem jak wygląda oryginalne oprogramowanie w Sonoff :D

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

piątek, 15 lutego 2019

InfluxDB i dane przesyłane do niego z Domoticz

Nie wiedzieć czemu, czujniki temperatury/wilgotności Xiaomi są błędnie interpretowane przez automat ładujący dane z Domoticz do InfluxDB, o czym pisałem tutaj. Wyświetlały mi zawsze wartość około cyfry 1, co w lecie jest co najmniej dziwne ;)

Rozwiązanie tego problemu podpowiedział jeden z użytkowników grupy Domoticz na Facebook.

W sumie wiedziałem, że czujniki Xiaomi mają swoją reprezentację w Domoticz zarówno osobno jako Temperatura i Wilgotność i razem Temperatura+Wilgotność, ale osobiście wolę ich prezentację na osobnych kafelkach, nie razem. Cóż z tego, że wolę, jeżeli Domoticz do Influx wysyła w ich przypadku błędne dane.

Wystarczyło dodać rzeczone czujniki do listy używanych w Domoticz,


później dodajemy do ekstraktów Domoticz -> InfluxDB.


Po chwili dane pojawią się w InfluxDB i Grafana może zostać zaktualizowana.


I już! Działa!


Wilgotność również zostaje powoli zapisywana i prezentowana.


Kolejny krok do przodu. Dziękuję Ci, grupo na Facebook'u!

wtorek, 12 lutego 2019

Ś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

środa, 19 grudnia 2018

Dasthicz i CSS, czyli upiększamy nasz Dashboard

Ziuuuuu, jedziemy dalej z Dashticz.

Specem od stron internetowych nie jestem, ale wiem, że CSS (Cascading Style Sheets - https://pl.wikipedia.org/wiki/Kaskadowe_arkusze_styl%C3%B3w) służy do opisu sposobu ich wyglądu. W Dashticz również możemy posłużyć się plikiem custom.css znajdującym się w folderze naszego Dashboard do 'tuningu wizualnego'.

Ciężko mi wszystko opisać od podstaw (tym bardziej, że sam nie jestem w tym zbyt dobry), dlatego podam konkretne przykłady, zachęcając do własnych eksperymentów - zmiany kolorów, fontów, wielkości, itp., itd. Wtedy sami zobaczycie jak duży macie wpływ i jak zmienia się wasz pulpit. Do tego - każdy tablet/laptop/telewizor (tak, widziałem, że ktoś ma Dashticz uruchomiony na TV) ma inną rozdzielczość i każdy z Was ma własne preferencje. Nadmieniam od razu, że opcje te są w pewnym stopniu opisane w Wiki Dashticz, część znalazłem przeglądając rozwiązania różnych osób.

Możecie edytować jak za króla Ćwieczka (jak i ja robię), edytując pliki na komputerze i przesyłając je FTP na Raspberry albo trochę bardziej nowocześnie, zgodnie z http://cezarowy.blogspot.com/2018/10/winscp-wygodna-edycja-skryptow-na.html.

Zacznijmy może od zdefiniowania wyglądu tekstów nagłówków:
/* Nagłówki */
body {
font-size:13px !important;
background-color:black !important;
}

/* Nagłówki- duża wielkość i pogrubienie */
h1, h2, h3, h4, h5, h6 {
    font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
    margin: 0px;
    margin-left: 15px;
    font-weight: 900;
    font-size: 150%;
}

Jak widać, wskazujemy między innymi wielkość, font, jego tło.
/* Tytuły bloków */
.title{      
font-size:10px !important;      
}

/* Mniejsze nagłówki bloków */
div.mh.titlegroups {
    height: 55px !important;            /* domyślnie=75px */
    padding-top: 3px;                   /* centrowanie */
}

Mam zainstalowany i skonfigurowany Logitech Media Server, nie podobały mi się domyślne wielkości ikon i fonty, więc:
/* Media Player - wielkość ikon i fontów */

.h4.h4 {
   font-size:12px;
}
.fa.fa-arrow-circle-left.fa-small {
    font-size: 50px !important;
    }
.fa.fa-stop-circle.fa-small {
   font-size: 50px !important;
}
.fa.fa-play-circle.fa-small {
   font-size: 50px !important;
}
.fa.fa-arrow-circle-right.fa-small {
   font-size: 50px !important;
}
.fa.fa-pause-circle.fa-small {
   font-size: 50px !important;
}

Zdefiniowałem wykresy na jednej ze stron, ich wielkość możemy zmienić następująco:
/*Wysokość wykresów*/
#graphoutput136{height:170px;}
#graphoutput93{height:170px;}
#graphoutput121{height:170px;}
#graphoutput118{height:170px;}

Aby zmieniać kolory ikon przy różnych akcjach:
/* Ikony */
.fa.fa-lightbulb-o.on {color: yellow}
.fa.fa-lightbulb-o.on:before {color: yellow;font-size: 25px;}
.fa.fa-lightbulb-o.off:before {color: white;font-size: 25px;}
.fa.fa-power-off.on:before {color: green;font-size: 25px;}
.fa.fa-power-off.off:before {color: red;font-size: 25px;}
.fa.fa-thermometer-half:before {color: green;font-size: 25px;}
.fa.fa-plug:before {color: yellow;font-size: 25px;}
.fa.fa-flash:before {color: yellow;font-size: 25px;}

Do przechodzenia między ekranami służą kropki na dole ekranu. Chciałem je mieć tak duże, aby łatwo było w nie trafić, ale nie przysłaniały zbyt wiele:
/* Kropki do przechodzenia między ekranami */
.swiper-pagination-bullet       {background: #c7c7c7; width: 30px !important; height: 30px !important; float:center; position:relative; left:35px;}

Zaokrąglone rogi w sekcjach możecie osiągnąć przez dodanie:
.transbg.col-xs-1,
.transbg.col-xs-2,
.transbg.col-xs-3,
.transbg.col-xs-4,
.transbg.col-xs-5,
.transbg.col-xs-6,
.transbg.col-xs-7,
.transbg.col-xs-8,
.transbg.col-xs-9,
.transbg.col-xs-10,
.transbg.col-xs-11,
.transbg.col-xs-12 {
align-items: center;
justify-content: center;
border: 3px solid rgba(255,255,255,0); 
background: rgba(0,0,0,0.5); 
background-clip: padding-box;
border-radius: 20px; 
}

Teraz chyba najciekawsze, ale najbardziej pracochłonne, chociaż głównie metodą Kopiuj + Wklej.
Na przykład - mam Owl, który mierzy zużycie prądu. Standardowo jakoś dziwnie jego ikony są przedstawiane, nie podobały mi się. Musiałem je zmienić. Poniżej propozycja jak można to zrobić. Zwróćcie uwagę, że tak samo jak w CONFIG.js, tak i w css możecie się odwoływać do różnych zmiennych danego czujnika. Tutaj _2 sugeruje zużycie dzienne, nie chwilowe.

.block_318_2 {
   font-size:12px !important;
   color:white !important;
   height:110px !important;
}

Tak samo działają na przykład niektóre czujniki temperatury/wilgotności. Zależało mi, aby temperatura oraz wilgotność wraz z tekstem mieściła się w jednej linii. Czasem można tak:

.block_93 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

Czasem tak:

.block_314_1 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_314_2 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;


To mniej więcej tyle. Jak się raz zdefiniuje, to sobie już działa. Gorzej, jeżeli zmieniacie ID urządzeń (wyczerpały się baterie i w Domoticz czujnik dostaje nowe IDX), bo wtedy zmiany musicie wprowadzić w CONFIG.js oraz custom.css. Zalecam dobre opisywanie czujników, będzie łatwiej. Jak widać poniżej - nie zrobiłem tego i czasem mam problem. Staram się go jednak poprawiać z każdą możliwą okazją.

Cała zawartość mojego custom.css to :

/*
CUSTOM CSS FILE
*/

/* Nagłówki */
body {
font-size:13px !important;
background-color:black !important;
}

/* Nagłówki- duża wielkość i pogrubienie */
h1, h2, h3, h4, h5, h6 {
    font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
    margin: 0px;
    margin-left: 15px;
    font-weight: 900;
    font-size: 150%;
}

/* Mniejsze nagłówki bloków */
div.mh.titlegroups {
    height: 55px !important;            /* domyślnie=75px */
    padding-top: 3px;                   /* centrowanie */
}

/* Media Player - wielkość ikon i fontów */

.h4.h4 {
   font-size:12px;
}
.fa.fa-arrow-circle-left.fa-small {
    font-size: 50px !important;
    }
.fa.fa-stop-circle.fa-small {
   font-size: 50px !important;
}
.fa.fa-play-circle.fa-small {
   font-size: 50px !important;
}
.fa.fa-arrow-circle-right.fa-small {
   font-size: 50px !important;
}
.fa.fa-pause-circle.fa-small {
   font-size: 50px !important;
}

/*Wysokość wykresów*/
#graphoutput136{height:170px;}
#graphoutput93{height:170px;}
#graphoutput121{height:170px;}
#graphoutput118{height:170px;}

/* Pogoda */
.wi                             {color:#fff000;}

/* Ikony */
.fa.fa-lightbulb-o.on {color: yellow}
.fa.fa-lightbulb-o.on:before {color: yellow;font-size: 25px;}
.fa.fa-lightbulb-o.off:before {color: white;font-size: 25px;}
.fa.fa-power-off.on:before {color: green;font-size: 25px;}
.fa.fa-power-off.off:before {color: red;font-size: 25px;}
.fa.fa-thermometer-half:before {color: green;font-size: 25px;}
.fa.fa-plug:before {color: yellow;font-size: 25px;}
.fa.fa-flash:before {color: yellow;font-size: 25px;}

/* Kropki do przechodzenia między ekranami */
.swiper-pagination-bullet       {background: #c7c7c7; width: 30px !important; height: 30px !important; float:center; position:relative; left:35px;}

canvas#stationclock{
    width:50px !important;
    height:50px !important;
}

.transbg.col-xs-1,
.transbg.col-xs-2,
.transbg.col-xs-3,
.transbg.col-xs-4,
.transbg.col-xs-5,
.transbg.col-xs-6,
.transbg.col-xs-7,
.transbg.col-xs-8,
.transbg.col-xs-9,
.transbg.col-xs-10,
.transbg.col-xs-11,
.transbg.col-xs-12 {
align-items: center;
justify-content: center;
border: 3px solid rgba(255,255,255,0); /* border: 7px -> 3px - Smaller space between blocks */
background: rgba(0,0,0,0.5); 
background-clip: padding-box;
border-radius: 20px; /* Rounded corners */
}

.block_318_1 {
   font-size:12px !important;
   color:white !important;
   height:110px !important;
}

.block_211 {
   font-size:12px !important;
   color:white !important;
   height:110px !important;
}

.block_318_2 {
   font-size:12px !important;
   color:white !important;
   height:110px !important;
}

.block_93 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_133 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_337_1 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_121_1 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_129_1 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_231 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
} /*Kuchnia*/

.block_251 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
} /*Sypialnia*/

.block_245 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_337_2{
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_121_2 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_233_2 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_314_1 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}

.block_314_2 {
   font-size:12px !important;
   color:white !important;
   height:60px !important;
}   

piątek, 31 sierpnia 2018

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.

poniedziałek, 27 sierpnia 2018

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.

wtorek, 19 czerwca 2018

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!

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