Dodatek do Domoticz – Storm Report. Nasz, swojski, polski!

Cudze chwalicie, swego nie znacie…

A w tym przypadku jest się czym pochwalić, ponieważ nasz rodak, Łukasz Rybak, stworzył bardzo ciekawy dodatek do Domoticz – informacje o burzach i wyładowaniach atmosferycznych.

Akurat podobny dodatek już tu kiedyś opisywałem, ale implementacja Łukasza wydaje mi się dużo lepsza. Raz, że zawiera nie tylko informacje o ilości piorunów, ale także o innych anomaliach – wiatr, mróz, gorąco, opady. Dwa – powstała u nas, w Polsce, w oparciu o serwis http://burze.dzis.net/, jest więc specjalnie profilowana pod nasz rejon, co jest dużym atutem.

Nie tylko jednak pioruny! Łukasz pobiera też informacje o:
– mrozie
– upale
– wietrze
– opadach deszczu/śniegu
– burze
– cyklony

Jest tego jak widać dużo…

Aby zainstalować (co jest przy okazji dokładnie opisane w Wiki) wystarczy przejść do folderu domoticzplugins i wykonać

git clone –recursive https://github.com/lrybak/domoticz-storm-report

a następnie zrestartować serwis Domoticz.

Ważne jest aby wersja Domoticz była dość świeża (najlepiej ostatnia stabilna – ja akurat sprawdzałem na 3.8153), ponieważ dopiero bodajże od dwóch stabilnych możliwe jest dodawanie własnych pluginów.

Kolejnym ważnym krokiem jest rejestracja na stronie https://burze.dzis.net/ i kontakt z autorem poprzez formularz kontaktowy i prośba o wysłanie klucza API. Mnie wysłał klucz po kilkunastu minutach.

Następnie w sekcji Hardware wybieram nasz plugin – domoticz-storm-report, podajemy nazwę, otrzymany klucz API, interwał sprawdzania pogody, miast i promień w jakim mamy otrzymywać informację i wyładowaniach. Autor burze.dzis.net zadbał również o wyszukiwarkę miast: https://burze.dzis.net/?page=wyszukiwarka

Po chwili zobaczymy nowe ikony w naszej sekcji Utility.

Polecam zapoznanie się z dodatkiem, jest bogaty w informacje, nie zawodzi.

Jako że autor wydaje co pewien czas poprawki, aby zaktualizować – wystarczy wejść do folderu z pluginem i wykonać

git pull

Sugestia: W razie problemów z instalacją/uruchamianiem pluginów w Domoticz warto zajrzeć na stronę Wiki Domoticz: http://www.domoticz.com/wiki/Linux#Problems_locating_Python

Dashticz – część druga

Dobry wieczór…

W jednym z poprzednich postów opublikowałem wstęp do konfiguracji Dashticz.

Edit: kolejny tutaj.

EDIT! Poprawka do Forecast.io w sekcji o tym serwisie!

Pora pójść dalej!

Najważniejszy parametr dzisiejszego wieczora to:

config[’auto_positioning’] = 1;
config[’use_favorites’] = 1;

Zamieniamy je na

config[’auto_positioning’] = 0;
config[’use_favorites’] = 0;

Wyłączamy nasze Ulubione w Domoticz i wyłączamy automatyczne pozycjonowanie. Od tej pory to my rządzimy tym co i gdzie ma się pokazać na ekranie.

Dzisiaj skupimy się na dwóch ekranach. W kolejnym wpisie inne pomysły.

Pierwszy będzie zawierał daty, prognozy pogody, kalendarz rodzinny oraz kilka naszych czujników. W tym przypadku temperatura, pobór prądu oraz czas dojazdu do pracy przy aktualnych warunkach drogowych.

Drugi ekran to status gniazdek prądowych, żarówki Yeelight, sceny z włączaniem/wyłączaniem muzyki, czujniki dymu, zalania, otwarcia drzwi, wilgotność ziemi w doniczce i szybkość łącza internetowego.

Czyli dużo różnych funkcji, czujników w jednym miejscu – mam nadzieję, że będzie to pomocne w tworzeniu Waszych pulpitów.

Ogólna zasada w Dashticz – każda sekcja zaczyna się od deklaracji co tam w sumie ma być. Czyli na przykład ’var config = {}’ – 'Poniżej będą parametry’, ’var columns = {}’ – 'Poniżej będą definicje kolumn z ich zawartością’, i tak dalej.

Na początek sekcja parametrów – opisana poprzednio, nie będziemy się więc na niej skupiać ponownie. Ogólnie – jeżeli chcecie korzystać z dodatków takich jak Weather Underground (opisane poprzednio), Google Maps czy Spotify – musicie postarać się o klucze do API tych produktów. Przeważnie jest to sekcja Developer lub, w przypadku Spotify – Applications. W razie pytań służę pomocą.

var config = {}
config[’domoticz_ip’] = 'http://IP:PORT’;
config[’app_title’] = 'Dom’;
config[’domoticz_refresh’] = '5′;
config[’dashticz_refresh’] = ’60’;
config[’news_scroll_after’] = ’15’;
config[’standby_after’] = 0;
config[’auto_swipe_back_to’] = 0;
config[’auto_swipe_back_after’] = ’30’;
config[’auto_slide_pages’] = 0;
config[’slide_effect’] = 'slide’;
config[’standard_graph’] = 'month’;
config[’language’] = 'pl_PL’;
config[’timeformat’] = 'DD-MM-YY HH:mm’;
config[’calendarformat’] = 'dd DD.MM HH:mm’;
config[’calendarlanguage’] = 'pl_PL’;
config[’boss_stationclock’] = 'RedBoss’;
config[’gm_api’] = 'Klucz_API_Google_Maps’;   <—— Tu zmień na swoją wartość!
config[’gm_zoomlevel’] = 1;
config[’gm_latitude’] = Szerokość;   <—— Tu zmień na swoje współrzędne!
config[’gm_longitude’] = Długość;   <—— Tu zmień na swoje współrzędne!
config[’wu_api’] = 'Klucz_Weather_Underground’;   <—— Tu zmień na swoją wartość!
config[’wu_city’] = 'Miasto’;   <—— Tu zmień na swoją wartość!
config[’wu_name’] = 0;
config[’wu_country’] = 'PL’;
config[’idx_moonpicture’] = 7;
config[’selector_instead_of_buttons’] = 1;
config[’auto_positioning’] = 0;
config[’use_favorites’] = 0;
config[’last_update’] = 0;
config[’hide_topbar’] = 1;
config[’hide_seconds’] = 1;
config[’hide_seconds_stationclock’] = 1;
config[’use_fahrenheit’] = 0;
config[’use_beaufort’] = 0;
config[’translate_windspeed’] = 1;
config[’static_weathericons’] = 0;
config[’hide_mediaplayer’] = 0;

Poniższa część jest ciekawa – pozwala tworzyć przyciski, które mogą wyzwolić konkretną akcję – na przykład otworzą stronę internetową, pokażą kamery czy też, jak poniżej – pokażą fazy księżyca.

var buttons = {}
buttons.moon = {width:6, isimage:true, refreshimage:60000, image: 'moon’}

Dokładnie jest to opisane w Domoticz Wiki – w razie pytań z chęcią na nie odpowiem:
https://www.domoticz.com/wiki/Dashticz_V2_-_Custom_Applications#Module_-_Moonphases

Jeżeli chcemy dodać do naszego pulpitu kalendarz Google – nic nie stoi na przeszkodzie – wystarczy podać jego adres w parametrze:

var calendars = {}
calendars.private = { key:’private’, width:12, maxitems: 6, icalurl: 'https://calendar.google.com/calendar/ical/Klucz_Kalendarza@group.calendar.google.com/public/basic.ics’ }

Na pierwszej stronie pulpitu mam zdefiniowane dwie prognozy pogody – z różnych serwisów. Ot tak, bardziej jako fanaberia niż potrzeba. Jeden z nich – z serwisu forecast.io wyświetla po prostu bardzo ładne ikony z minimalną oraz maksymalną temperaturą dnia.

var frames = {}
frames.weather = {refreshiframe:10000,height:230,frameurl:”//forecast.io/embed/#lat=Szerokość&lon=Długość&name=Miasto&color=#00aaff&font=Helvetica&fontcolor=#ffffff&units=si&text-color=#fff”,width:12}

Poprawka poniżej!

W związku ze zmianami na forecast.io jakiś czas temu, problematyczne okazało się wyświetlanie tekstu na ciemnych tłach, ponieważ opisy pogody zrobiły się szare.

Jest rozwiązanie, niezbyt logiczne (jak we wczesnych grach Sierra On-Line 😉 Wystarczy dodać pogrubiony tekst na końcu definicji pogody… Słów brak.

//forecast.io/embed/#lat=50.117067&lon=18.981059&name=Tychy&units=si&color=#00aaff&text-color=#fff&lang=nl

Teraz główne 'mięso’ – definicja jak to wszystko ma wyglądać i być ułożone.

var blocks = {}

Tutaj definiujemy zmiany w naszych blokach, jeżeli mają się pokazywać niestandardowo. Jeżeli wszystko nam pasuje – możemy ten element zostawić nietknięty. Jeżeli jednak – posługujemy się IDX z Domoticz.

Poniższe umożliwiają zmianę na przykład opisu, który jest przesyłany z Domoticz. Inaczej ma się w moim przypadku sprawa estetyczna w standardowym interface, a inaczej gdy wrzucę je na ikony w Dashticz. Dodatkowo, jak widać w przypadku IDX 142 – można zmienić ikonę oraz rozmiar pola.

blocks[24] = {}
blocks[24][’title’] = 'Przed domem’
blocks[100] = {}
blocks[100][’title’] = 'Roomba’
blocks[166] = {}
blocks[166][’title’] = 'Yeelight’

//Tytuły temperatury
blocks[93] = {}
blocks[93][’title’] = 'Ogród’
blocks[133] = {}
blocks[133][’title’] = 'Salon’

//Inne
blocks[142][’title’] = 'Droga do pracy’;
blocks[142][’width’] = 6;
blocks[142][’icon’] = 'fa-female’;

//Tytuły czujników
blocks[59] = {}
blocks[59][’title’] = 'Czujnik dymu’
blocks[132] = {}
blocks[132][’title’] = 'Kwiatki’

blocks[163] = {}
blocks[163][’title’] = 'Księżyc’

Istnieją czujniki, które podają kilka wartości na raz – na przykład temperatura i wilgotność, czy mój Owl – zużycie chwilowe aktualne i ogólne na dzień. Warto je czasem rozdzielić – robimy to przez dodanie _1, _2. WAŻNE – musimy tutaj zastosować apostrofy, w przeciwieństwie do standardowych elementów.

blocks[’136_1′] = {}
blocks[’136_1′][’title’] = 'Aktualnie’
blocks[’136_2′] = {}
blocks[’136_2′][’title’] = 'Dzisiaj’

Każdy z bloków ikon, czujników, przełączników może mieć nagłówek, który również możemy dowolnie zdefiniować:

blocks[’blocktitle_1′] = {} //Switches – general
blocks[’blocktitle_1′][’type’] = 'blocktitle’;
blocks[’blocktitle_1′][’title’] = 'Gniazdka’;

blocks[’blocktitle_2′] = {} //Control – general
blocks[’blocktitle_2′][’type’] = 'blocktitle’;
blocks[’blocktitle_2′][’title’] = 'Czujniki’;

blocks[’blocktitle_5′] = {} //Owl – general
blocks[’blocktitle_5′][’type’] = 'blocktitle’;
blocks[’blocktitle_5′][’title’] = 'Zużycie prądu’;


Kolejna sekcja – kolumny. To tutaj umieszczamy IDX naszych czujników w odpowiednich miejscach. Możemy to traktować jak pudełka z klockami, które to później pudełka dowolnie układamy na stronie. Co ważne – powyższe specyficzne ustawienia (zmiana nazwy, ikony) są aplikowane w tym miejscu.

Trzeba zapamiętać, że długość wszystkich kolumn powinna się sumować do wartości równej 12!

var columns = {}

Tutaj małe odstępstwo. U mnie zmienna config[’hide_topbar’] = 1;  jest ustawiona, czyli pasek górny się nie wyświetla, ale dobrze, abyście wiedzieli, że jest możliwość ustawienia i skonfigurowania takiego paska, który będzie wyświetlany zawsze nad waszymi pulpitami.

columns[’bar’] = {}
columns[’bar’][’blocks’] = [’logo’,’miniclock’,’sunrise’,’settings’]

No to lecimy!

Blok Gniazdka – u mnie jest to najpierw nagłówek, później kilka gniazdek w domu, żarówka Yeelight (Dashticz automatycznie rozpoznał, że musi mu dać pasek do sterowania natężeniem światła i kolorem) oraz dwie sceny (ważne, z apostrofem podajemy numer sceny poprzedzony literą 's’).

columns[1] = {} //Gniazdka
columns[1][’blocks’] = [’blocktitle_1′,24,100,103,21,22,166,’s1′,’s2′];
columns[1][’width’] = 6;

Blok pogody i kalendarza – wcześniej zdefiniowane nazwy wprowadzamy według żądanej kolejności. Proszę zwrócić uwagę, że 'weather’ jest w apostrofach jako natywny element Dashticz.

columns[2] = {} //Pogoda, kalendarz
columns[2][’blocks’] = [’weather’,frames.weather,calendars.private];
columns[2][’width’] = 6;

Różnej maści czujniki.

columns[7] = {} //Czujniki
columns[7][’blocks’] = [’blocktitle_2′,59,147,132,112,195];
columns[7][’width’] = 6;

Czujniki ciepła z rozdzielonymi wartościami temperatury i wilgotności (jak wcześniej pisałem – w apostrofach)

columns[8] = {} //Temperatura
columns[8][’blocks’] = [’blocktitle_3′,93,133,’118_1′,’121_1′,160,’118_2′,’121_2′];
columns[8][’width’] = 3;

Indykatory który sprzęt jest włączony, który wyłączony.

columns[9] = {} //Sprzęt
columns[9][’blocks’] = [’blocktitle_4′,72,73,74,75,76,120,122,123];
columns[9][’width’] = 6;

Pomiar natężenia prądu oraz 'Droga do pracy’

columns[10] = {} //Owl
columns[10][’blocks’] = [’blocktitle_5′,’136_1′,’136_2′,’blocktitle_7′,142];
columns[10][’width’] = 3;

Zegar cyfrowy, mini-pogoda, wschód/zachód słońca, obraz fazy księżyca i zegar analogowy bez sekund (można zmienić to parametrem)

columns[11] = {} //Pogoda, słońce, księżyc, zegar
columns[11][’blocks’] = [’clock’,’currentweather_big’,’sunrise’,buttons.moon,163,’stationclock’]
columns[11][’width’] = 3;

Definiowanie ekranów. Jeżeli chcecie mieć jeden – wystarczy zostawić pierwszą część. U mnie ledwo się mieszczę na siedmiu 😉

Co ciekawe – zakomentowana (dla przykładu) jest opcja zmiany ekranów w zależności od czasu na tablecie. Jeżeli usuniecie komentarze – o różnych porach dnia zobaczycie różne tła. Mnie się to podoba 🙂 Zdjęcia ładujemy do folderu <dashticz>img. W moim przypadku jest to domoticzwwwdashticz_v2img

To tutaj układamy nasze kolumny na odpowiednich stronach, po prostu wrzucając powyższe identyfikatory w odpowiednie miejsca.

var screens = {}
screens[1] = {}
screens[1][’background’] = 'bg1.jpg’;
//screens[1][’background_morning’] = '/Cezar/image004.jpg’; //morning = 06:00-10:59
//screens[1][’background_noon’] = '/Cezar/image003.jpg’; //noon = 11:00-15:59
//screens[1][’background_afternoon’] = '/Cezar/image002.jpg’; //afternoon 16:00-19:59
//screens[1][’background_night’] = '/Cezar/image005.jpg’; //night = 20:00:05:59
screens[1][’columns’] = [11,2,8,10];

screens[2] = {}
screens[2][’background’] = 'bg3.jpg’;
screens[2][’columns’] = [1,7,9];

Ufffff… Wydaje się skomplikowane, ale tak naprawdę nie jest. Po zaakceptowaniu faktu, że po prostu układamy nasze czujniki, gniazdka i dodatki jak klocki w ramce a później tą ramkę wieszamy na ścianie – jest całkiem prosto.

Co prawda w tle za tymi zmianami jest też specyficznych kilka wpisów formatujących w custom.css, ale o tym kolejny wpis. Oraz instrukcja wrzucenia wielu innych elementów. Zachęcam do testów i pytań.

Pełny skrypt do wrzucenia do CONFIG.js. Oczywiście prywatne zmienne musicie wypełnić sami – IP Domoticz, klucze API, koordynaty położenia, itp.

var config = {}
config[’domoticz_ip’] = 'http://IP:PORT’;
config[’app_title’] = 'Dom’;
config[’domoticz_refresh’] = '5′;
config[’dashticz_refresh’] = ’60’;
config[’news_scroll_after’] = ’15’;
config[’standby_after’] = 0;
config[’auto_swipe_back_to’] = 0;
config[’auto_swipe_back_after’] = ’30’;
config[’auto_slide_pages’] = 0;
config[’slide_effect’] = 'slide’;
config[’standard_graph’] = 'month’;
config[’language’] = 'pl_PL’;
config[’timeformat’] = 'DD-MM-YY HH:mm’;
config[’calendarformat’] = 'dd DD.MM HH:mm’;
config[’calendarlanguage’] = 'pl_PL’;
config[’boss_stationclock’] = 'RedBoss’;
config[’gm_api’] = 'Klucz_API_Google_Maps’;
config[’gm_zoomlevel’] = 1;
config[’gm_latitude’] = Szerokość;
config[’gm_longitude’] = Długość;
config[’wu_api’] = 'Klucz_Weather_Underground’;
config[’wu_city’] = 'Miasto’;
config[’wu_name’] = 0;
config[’wu_country’] = 'PL’;
config[’idx_moonpicture’] = 7;
config[’spot_clientid’] = 'ID_Spotify_Developer_Mode’;
config[’selector_instead_of_buttons’] = 1;
config[’auto_positioning’] = 0;
config[’use_favorites’] = 0;
config[’last_update’] = 0;
config[’hide_topbar’] = 1;
config[’hide_seconds’] = 1;
config[’hide_seconds_stationclock’] = 1;
config[’use_fahrenheit’] = 0;
config[’use_beaufort’] = 0;
config[’translate_windspeed’] = 1;
config[’static_weathericons’] = 0;
config[’hide_mediaplayer’] = 0;

var buttons = {}
buttons.moon = {width:6, isimage:true, refreshimage:60000, image: 'moon’}

var calendars = {}
calendars.private = { key:’private’, width:12, maxitems: 6, icalurl: 'https://calendar.google.com/calendar/ical/Klucz_Kalendarza@group.calendar.google.com/public/basic.ics’ }

var frames = {}
frames.weather = {refreshiframe:10000,height:230,frameurl:”//forecast.io/embed/#lat=Szerokość&lonDługość&name=Miasto&color=#00aaff&font=Helvetica&fontcolor=#ffffff&units=si&text-color=#fff”,width:12}
frames.poland = {refreshiframe:10000,height:230,frameurl:”https://api.sat24.com/animated/PL/visual/1/Central%20European%20Standard%20Time/357718″,width:4}

var blocks = {}

blocks[24] = {}
blocks[24][’title’] = 'Przed domem’
blocks[100] = {}
blocks[100][’title’] = 'Roomba’
blocks[103] = {}
blocks[103][’title’] = 'Dysk MP3′
blocks[21] = {}
blocks[21][’title’] = 'Sauna’
blocks[22] = {}
blocks[22][’title’] = 'Sypialnia’
blocks[166] = {}
blocks[166][’title’] = 'Yeelight’

//Tytuły temperatury
blocks[93] = {}
blocks[93][’title’] = 'Ogród’
blocks[133] = {}
blocks[133][’title’] = 'Salon’
blocks[118] = {}
blocks[118][’title’] = 'S’
blocks[121] = {}
blocks[121][’title’] = 'Z’
blocks[160] = {}
blocks[160][’title’] = 'Sypialnia’
blocks[142] = {}
blocks[142][’title’] = 'Droga do pracy’;
blocks[142][’width’] = 6;
blocks[142][’icon’] = 'fa-female’;

//Tytuły czujników
blocks[59] = {}
blocks[59][’title’] = 'Czujnik dymu’
blocks[132] = {}
blocks[132][’title’] = 'Kwiatki’

blocks[163] = {}
blocks[163][’title’] = 'Księżyc’

blocks[’136_1′] = {}
blocks[’136_1′][’title’] = 'Aktualnie’
blocks[’136_2′] = {}
blocks[’136_2′][’title’] = 'Dzisiaj’

blocks[’blocktitle_1′] = {} //Switches – general
blocks[’blocktitle_1′][’type’] = 'blocktitle’;
blocks[’blocktitle_1′][’title’] = 'Gniazdka’;

blocks[’blocktitle_2′] = {} //Control – general
blocks[’blocktitle_2′][’type’] = 'blocktitle’;
blocks[’blocktitle_2′][’title’] = 'Czujniki’;

blocks[’blocktitle_3′] = {} //Temperature – general
blocks[’blocktitle_3′][’type’] = 'blocktitle’;
blocks[’blocktitle_3′][’title’] = 'Temperatura’;

blocks[’blocktitle_4′] = {} //Equipment – general
blocks[’blocktitle_4′][’type’] = 'blocktitle’;
blocks[’blocktitle_4′][’title’] = 'Sprzęt’;

blocks[’blocktitle_5′] = {} //Owl – general
blocks[’blocktitle_5′][’type’] = 'blocktitle’;
blocks[’blocktitle_5′][’title’] = 'Zużycie prądu’;

blocks[’blocktitle_6′] = {} //Malinka – general
blocks[’blocktitle_6′][’type’] = 'blocktitle’;
blocks[’blocktitle_6′][’title’] = 'Malinka’;

blocks[’blocktitle_8′] = {} //Xiaomi
blocks[’blocktitle_8′][’type’] = 'blocktitle’;
blocks[’blocktitle_8′][’title’] = 'Xiaomi’;

blocks[’blocktitle_7′] = {} //Czas do pracy – general
blocks[’blocktitle_7′][’type’] = 'blocktitle’;
blocks[’blocktitle_7′][’title’] = 'Droga do pracy’;

blocks[’news_1′] = {}
blocks[’news_1′][’feed’] = 'https://cors-anywhere.herokuapp.com/http://wiadomosci.gazeta.pl/pub/rss/wiadomosci_kraj.htm’;
blocks[’news_1′][’maxheight’] = 113;

blocks[’news_2′] = {}
blocks[’news_2′][’feed’] = 'https://cors-anywhere.herokuapp.com/http://kanaly.rss.interia.pl/swiat.xml’;
blocks[’news_2′][’maxheight’] = 250;

var columns = {}
columns[’bar’] = {}
columns[’bar’][’blocks’] = [’logo’,’miniclock’,’sunrise’,’settings’]

columns[1] = {} //Gniazdka
columns[1][’blocks’] = [’blocktitle_1′,24,100,103,21,22,166,’s1′,’s2′];
columns[1][’width’] = 6;

columns[2] = {} //Pogoda, kalendarz
columns[2][’blocks’] = [’weather’,frames.weather,calendars.private];
columns[2][’width’] = 6;

columns[7] = {} //Czujniki
columns[7][’blocks’] = [’blocktitle_2′,59,147,132,112,195];
columns[7][’width’] = 6;

columns[8] = {} //Temperatura
columns[8][’blocks’] = [’blocktitle_3′,93,133,’118_1′,’121_1′,160,’118_2′,’121_2′];
columns[8][’width’] = 3;

columns[9] = {} //Sprzęt
columns[9][’blocks’] = [’blocktitle_4′,72,73,74,75,76,120,122,123];
columns[9][’width’] = 6;

columns[10] = {} //Owl
columns[10][’blocks’] = [’blocktitle_5′,’136_1′,’136_2′,’blocktitle_7′,142];
columns[10][’width’] = 3;

columns[11] = {} //Pogoda, słońce, księżyc, zegar
columns[11][’blocks’] = [’clock’,’currentweather_big’,’sunrise’,buttons.moon,163,’stationclock’]
columns[11][’width’] = 3;

var screens = {}
screens[1] = {}
screens[1][’background’] = 'bg1.jpg’;
//screens[1][’background_morning’] = '/Cezar/image004.jpg’; //morning = 06:00-10:59
//screens[1][’background_noon’] = '/Cezar/image003.jpg’; //noon = 11:00-15:59
//screens[1][’background_afternoon’] = '/Cezar/image002.jpg’; //afternoon 16:00-19:59
//screens[1][’background_night’] = '/Cezar/image005.jpg’; //night = 20:00:05:59
screens[1][’columns’] = [11,2,8,10];

screens[2] = {}
screens[2][’background’] = 'bg3.jpg’;
screens[2][’columns’] = [1,7,9];

Xiaomi Mijia Smart Home – pozostałe dwa gadżety

W końcu znalazłem wolną chwilę, aby podłączyć pozostałe dwa elementy: czujnik otwarcia drzwi oraz sterowane gniazdko – wersja ZigBee (bo są i Wifi).

Nie ma się tutaj za bardzo o czym rozpisywać – wszystko podłącza się i paruje błyskawicznie. Jedyne o czym warto pamiętać to to, że potrzeba czegoś ostrego aby wprowadzić czujnik w tryb parowania – wystarczy agrafka lub igła.

Ponownie powtórzę, że sprzęty od Xiaomi są niezwykle ładne, estetyczne i małe – sama przyjemność. Żeby jeszcze aplikacja chciała tak działać…

Gniazdko również jest świetne, jak widać – wspiera wersje z różnych krajów.

Przejściówka jest jednak konieczna, co burzy ostateczny wygląd.
Oba elementy mamy od razu dostępne na liście urządzeń:

Co ciekawe, po pewnym czasie włączyłem wykrywanie nowych urządzeń i Domoticz dodał mi Xiaomi Smart Plug Usage. Czyli raportowanie natężenia prądu w gniazdku.

Edit: Koledzy z grupy Domoticz zeznają, że czasem nie wystarczyło poczekać – musieli na nowo dodać Gateway w aplikacji Mijia.

Z pewnego, nieznanego mi, powodu raporty dzienne, tygodniowe i miesięczne zaczęły mi działać dopiero po przełączeniu odczytu energii z 'From device’ na 'Computed.

Co przekłada się na takie wykresy:

I miesięczny raport:

Jak to osiągnąć opisałem w innym poście: https://cezarowy.blogspot.com/2017/10/domoticz-i-koszty-zuzytego-pradu.html

Xiaomi Smart Home, integracja z Domoticz z poziomu iPhone

Dzisiaj o integracji Mijia (Xiaomi) Smart home z Domoticz, ale za pomocą iPhone. Bo tych poradników jakby mniej, a miałem przy tym mały problem.

Samo parowanie opisałem wcześniej.

Aby dostać się do nich z poziomu Domoticz (i przy okazji uzyskać kilka dodatkowych funkcji) musimy wejść do aplikacji, przejść na Gateway,

Wybrać 'trzy kropki’,

I następnie About.

Pojawi się menu z trzema pozycjami.

W przypadku Android wiadomo gdzie klikać – numer wersji aplikacji. Niestety, w aplikacji na iPhone (która swoją drogą jest fatalna i ostatnio, na szczęście już po wykonaniu zrzutów ekranu, 'zgubiła’ mi wszystkie tłumaczenia angielskie i zostały same zmienne, które powinny się zamienić w poprawne słowa) tego tekstu nie ma i trzeba klikać 'w ciemno’. Niemniej – tak samo jak przy wersji na Android, trzeba szybko klikać palcem aż do pojawienia się trzech chińskich pozycji menu.

Wchodzimy w drugą i włączamy tryb deweloperski – pierwszy, jedyny przełącznik. Zapisujemy kod centralki jaki nam się pokaże. W razie problemu ikoną obok możemy go zawsze odświeżyć.

Adres IP centralki możemy odczytać dowolnym programem do skanowania adresów IP, albo wchodząc w trzecie menu – tam jest podany przypisany adres. Najlepiej go dodać do stałych rezerwacji IP na routerze.

W ostatnich wersjach Domoticz po wejściu do sekcji Hardware wybieramy po prostu typ Xiaomi Gateway, wpisujemy pozyskane IP, port koniecznie 9898 i hasło odczytane w aplikacji.

Po kilku minutach w Domoticz zobaczymy nasze podpięte do centralki urządzenia.

Możemy je dodać do naszych wskaźników:

Powyżej czujnik temperatury i wilgotności.

A tutaj sama centralka – możliwość sterowania kolorami RGB, włączania/wyłączania dźwięków alarmu, dzwonków, sterowania głośnością. Na zakładce Utility powinien Wam się również pokazać czujnik natężenia światła.

RFLink

Jednym z celów, dla których zakupiłem Raspberry Pi była prosta automatyka domowa. Na początku próbowałem wszystko zrobić własnoręcznie, na breadboard, lutować kable, próbować uruchomić nadajnik i odbiornik. Działało.

Później znalazłem mały system Pilight, który obsługiwał moje nadajniki/odbiorniki. Zasięg był jednak kiepski a odczytywanie sygnałów zabierało większość mocy Raspberyy Pi.

Apetyt rośnie jednak w miarę jedzenia, dlatego przeszedłem później do Domoticz i RFLink (alternatywa dla RFXCom), obsługujący urządzenia nadające i odbierające na 433MHz (głównie, chociaż nie tylko – w ostatnich aktualizacjach dodano również obsługę Philips, Milight oraz sprzętów Ikea). Co ważne – to on zajmuje się filtrowaniem sygnałów przychodzących z nadajników 433MHz (np. w termometrach, mierniku energii), także Raspberry Pi nie dostaje zadyszki przy obsłudze protokołu.

Ja osobiście z powodu braku talentu do lutowania zakupiłem wersję zmontowaną na https://www.nodo-shop.nl/nl/rflink-gateway/127-rflink-arduino-antenne-.html. Przyszedł błyskawicznie, porządnie zlutowany. Jedyne co zrobiłem to zapakowałem zmontowany moduł do przezroczystej obudowy.

Liczba urządzeń jest ogromna i naprawdę jest w czym wybierać. Dostępna pod adresem: http://www.rflink.nl/blog2/devlist.

W Domoticz wystarczy dodać nowe urządzenie w sekcji Hardware:

Nasze gadżety pojawią się automatycznie po chwili na liście Devices:

Osobiście używam:
– czujniki temperatury różnych marek

– czujniki dymu w domu

– gniazdka 433MHz – tutaj OGROMNY minus – nie ma statusu zwrotnego, więc w sumie nie wiemy czy coś jest włączone, czy nie. Coś za coś jednak… Cena robi swoje, tej wady nie da się usunąć, bo same urządzenia takiego statusu nie wysyłają.

czujniki otwarcia drzwi/okien
miernik energii elektrycznej

Co pewien czas pojawiają się na stronie projektu aktualizacje firmware (http://www.nemcon.nl/blog2/download), które wgrywamy za pomocą załączonego w pakiecie programu: RFLinkLoader (pod Windows, można to zrobić bezpośrednio na Raspberry Pi używając avrdude).

Trzeba wskazać plik RFLink.cpp.hex i przycisnąć przycisk opisany jako Upload/Program Firmware to device.

WAŻNE! Czasem Windows nie był na tyle łaskawy aby zainstalować sterowniki od ręki, pomogła u mnie w tym przypadku instalacja pakietu do obsługi Arduino: https://www.arduino.cc/en/Main/Software

Aby zrobić to samo od razu na Raspberry Pi:
sudo apt-get install avrdude

Skopiować plik hex na przykład do katalogu pi, następnie WYŁĄCZYĆ, NIE KASOWAĆ RFLink w Domoticz i zaktualizować poleceniem:
avrdude -v -p atmega2560 -c stk500 -P /dev/ttyACM0 -b 115200 -D -U flash:w:/home/pi/RFLink.cpp.hex:i

WŁĄCZYĆ RFLink w Domoticz

Xiaomi Mijia Smart Home – nowe gadżety przyszły :D

Może żadna to nowość, ale cieszę się niezmiernie. 
Dwa zestawy Xiaomi Mijia znalazły się u mnie w domu. Z pewnych względów jeden pozostanie w aplikacji MiHome i to opiszę dzisiaj.

Czujniki po wyjęciu z pudełek zaskakują rozmiarem. Nie są podobne do tych monstrów, które stoją często w naszych domach. Czujnik temperatury jest niewiele większych od kciuka. Przynajmniej mojego 🙂

Niestety, trzeba wspomnieć o minusach. Bez przejściówki z gniazdek typu chińskiego na polski nie uruchomimy zestawu…

WAŻNE – przejściówki często NIE SĄ załączone w zestawach. Ja kupiłem różne, całkiem ciekawe można znaleźć w Leroy Merlin.

Po podłączeniu centralka przemówi do nas w pięknym, chińskim języku. Niestety, ni w ząb nie rozumiałem co chce mi przekazać 😉

Po włączeniu aplikacji MiHome wybrałem lokalizację Mainland i mogłem wybrać jakie urządzenie chcę sparować – na początek Gateway.

Parowanie jest proste – postępujemy zgodnie z instrukcjami aplikacji – trzy kroki, zgodnie z kolorami na centralce.

Po udanym procesie parowania oraz aktualizacji oprogramowania mamy od razu dostęp do różnych funkcji centralki, które nie są tak ubogie jakby się mogło wydawać:
– nocne światło RGB z możliwością dopasowania koloru oraz jasności
– głośnik i radia internetowe. Da się załadować inne niż chińskie, ale o tym albo w innym wpisie, albo zaktualizuję ten.
– zdarzenia, zegar, ustawianie czasu włączenia/wyłączenia

Sama centralka jako taka w docelowym miejscu interesuje mnie dużo mniej niż termometr, dlatego od razu zabrałem się do połączenia Temperature and humidity sensor. Tutaj również wystarczyło przycisnąć stylowy przycisk na 5 sekund i automatycznie został dodany.

W efekcie mam na bieżąco temperaturę dostępną z każdego miejsca w którym jestem a możliwością przeglądania historii. Cel osiągnięty!

Dodatkowo można dodawać automatykę do centralki:
– gdy pojawimy się w domu
– gdy wychodzimy
– gdy wstajemy
– gdy śpimy
– wyzwalanie alarmu czujnikami – na przykład w przypadku otwarcia drzwi gdy śpimy

Wszystkie urządzenia od Xiaomi integrują się ze sobą, możemy więc na przykład włączyć światło w centralce gdy opaska Mi Band wykryje, że wstaliśmy.

Powodzenia w używaniu i instalowaniu!
W kolejnych wpisach zaawansowany Dashticz oraz podpinanie pozostałych elementów Xiaomi do Domoticz.

Dashticz – spełnienie marzeń maniaka gadżetów ;)

W jednym z poprzednich postów opisałem front-end do Domoticz – framb0ise.

Jest on bajecznie prosty w instalacji i konfiguracji, co jest także jego minusem – możliwości są ograniczone. Warto zająć się innym, potężnym już w moim mniemaniu, narzędziem – Dashticz.

Instalacja i uruchomienie jest proste, osadzenie Ulubionych i automatyczne ułożenie ikonek również. Ciekawie zaczyna się robić, gdy chcemy dashboard dostosować do naszych potrzeb. I to opiszę w tym i kolejnym poście. Temat jest na tyle bogaty, że lepiej rozbić go na dwa osobne – dla amatorów i zaawansowanych 🙂

Po zalogowaniu się do terminala przechodzimy do domoticz/www

git clone https://github.com/robgeerts/dashticz_v2

cd domoticz/www/<dashticzv2 folder>/custom/
cp CONFIG_DEFAULT.js CONFIG.js

Aby zaktualizować wersję, wystarczy dać polecenie.
git pull

WAŻNE aby wcześniej zrobić kopię zapasową swojej konfiguracji.

W najprostszej konfiguracji wystarczy usunąć linie komentarzy /* */ z pliku CONFIG.js i powinniśmy już cieszyć się pulpitem z naszymi Ulubionymi (czyli urządzeniami dodanymi do Ulubionych w Domoticz) elementami.

Powyższa zaznaczona część zdania jest bardzo ważna! Często wiele osób jest zaskoczona tym, że ich zmiany nie działają. Domyślnie cały CONFIG.js jest opatrzony komentarzem (tak to się , który powoduje, że Dasthicz NIE WIDZI zmian, które wprowadzacie).

Można też użyć najprostszego pliku:
var config = {}
config[’language’] = 'pl_PL’; //lub: en_US
config[’domoticz_ip’] = 'http://IP:Port’;
config[’domoticz_refresh’] = '5′;
config[’dashticz_refresh’] = ’60’;

Ale my jesteśmy ambitni i nasz początkowy ekran będzie wyglądał następująco:

Dla wyjaśnienia – na powyższym zrzucie ekranu wyłączyłem Ulubione, żeby nie zaśmiecić ekranu. Trochę zbyt dużo u mnie już tego jest 🙂

Tak dla pewności, aby dostać się do Dashticz po jego zainstalowaniu trzeba wejść na adres http://IP_Domoticz/dashticz_v2/index.html

Aby to osiągnąć musimy wrzucić do CONFIG,js następujący tekst

var config = {}
var _BACKGROUND_IMAGE = 'bg1.jpg’
config[’domoticz_ip’] = 'http://IP:Port’;
config[’app_title’] = 'Dashticz’;
config[’domoticz_refresh’] = '5′;
config[’dashticz_refresh’] = ’60’;
config[’language’] = 'en_US’;
config[’timeformat’] = 'DD-MM-YY HH:mm’;
config[’wu_api’] = 'xxxxxxxx’;
config[’wu_city’] = 'City’;
config[’wu_name’] = 0;
config[’wu_country’] = 'PL’;
config[’auto_positioning’] = 1;
config[’use_favorites’] = 1;
config[’last_update’] = 1;
config[’hide_topbar’] = 0;
config[’hide_seconds’] = 1;
config[’use_fahrenheit’] = 0;
config[’use_beaufort’] = 0;
config[’static_weathericons’] = 0;
config[’hide_mediaplayer’] = 0;

var buttons = {} 
buttons.radio = {width:12, image: 'img/radio_on.png’, title: 'Radio’, url: 'http://rmf.fm’} 
buttons.news = {width:12, icon: 'fa-newspaper-o’, title: 'News’, url: 'http://news.gazeta.pl’} 
buttons.log = {key:’log’, width:12, icon:’fa-microchip’, title: 'Domoticz Log’, log:true, level: 2}

Pozwolę sobie objaśnić poszczególne elementy, przyda się to do późniejszego (bardziej zaawansowanego) konfigurowania pulpitu.

var _BACKGROUND_IMAGE = 'bg1.jpg’
Zmienna opisująca nazwę pliku z tłem dla Dashticz. W folderze <dashticz>/img znajduje się wiele przykładowych plików z tłami do wykorzystania. Oczywiście nic nie stoi na przeszkodzie, aby użyć swoich, ale o tym w kolejnym wpisie

config[’domoticz_ip’] = 'http://IP:Port’;
Standard – IP i port Domoticz

config[’app_title’] = 'Dashticz’;
Tytuł aplikacji, który będzie wyświetlany na pasku tytułowym

config[’domoticz_refresh’] = '5′;
config[’dashticz_refresh’] = ’60’;
Kolejno – interwał odświeżania danych z Domoticz oraz odświeżania samego Dashticz

config[’language’] = 'en_US’;
Język w jakim będzie się z nami komunikować Dashticz – na przykład en_US lub pl_PL

config[’timeformat’] = 'DD-MM-YY HH:mm’;
Format czasu używany w Dashticz

config[’wu_api’] = 'xxxxxxxx’;
config[’wu_city’] = 'City’;
config[’wu_name’] = 0;
config[’wu_country’] = 'PL’;

Klucz API Weather Underground, dzięki któremu zobaczymy ikony z prognozą pogody

Dla jasności – klucz do API Weather Underground możemy uzyskać na ich stronie: https://www.wunderground.com/weather/api/. Darmowa subskrypcja powinna być dla nas wystarczająca (przy okazji – mam nadzieję, że dodaliście go w Domoticz, chociaż osobiście korzystam ostatnio częściej z DarkSky).

AKTUALIZACJA 2018-05-21!

Z tego co widzę to Weather Underground przestało udostępniać darmowe API z danymi pogodowymi! Postaram się zbadać temat i odpowiedni zmienić opis Dashticz.


config[’auto_positioning’] = 1;
config[’use_favorites’] = 1;
Dwie BARDZO ważne opcje, które na początku mogą sprawić trudności. Ważne jest aby były włączone, jeżeli chcecie uruchomić Dashticz 'na szybko’. Pierwsza poinformuje system, żeby automatycznie ułożyć ikony, druga, żeby użyć Ulubionych zdefiniowanych w Domoticz.

config[’last_update’] = 1;
Czy pokazywać czas aktualizacji naszych czujników?

config[’hide_topbar’] = 0;
Ukrycie górnego paska

config[’hide_seconds’] = 1;
Pokazanie sekund na zegarze

config[’use_fahrenheit’] = 0;
config[’use_beaufort’] = 0;
Czy używać stopni Celsjusza i skali Beauforta?

config[’static_weathericons’] = 0;
Czy ikony pogody powinny być animowane?

config[’hide_mediaplayer’] = 0;
Czy ukrywać ikony odtwarzacza multimedialnego, jeżeli nic nie jest odtwarzane?

var buttons = {} 
buttons.radio = {width:12, image: 'img/radio_on.png’, title: 'Radio’, url: 'http://rmf.fm’} 
buttons.news = {width:12, icon: 'fa-newspaper-o’, title: 'News’, url: 'http://news.google.pl’} 
buttons.log = {key:’log’, width:12, icon:’fa-microchip’, title: 'Domoticz Log’, log:true, level: 2}

Pierwszy – pozwoli wyświetlić po naciśnięciu stronę z radiem internetowym, drugi stronę z wiadomościami, trzeci – log Domoticz. To tak w ramach ciekawostki.

To tyle na początek. Dopiero zaczynamy się jednak rozkręcać, bo możliwości są ogromne!

Edit: Część druga
Oraz Cześć trzecia

Yeelight LED Bulb – żarówka sterowana WiFi

Właśnie dotarła. Jeszcze ciepła, ledwo co wyjęta z pudełka. Yeelight – niby zbyteczny bajer, ale przecież o takich gadżetach piszę na tym blogu 🙂

Połączenia z aplikacją nie ma sensu opisywać, bo się praktycznie robi samo – instalacja aplikacji, parowanie, działa. Sprawdźmy jednak jak będzie z podłączeniem do Domoticz. Wiki jest w tym temacie dość optymistyczne, sprawdzimy jednak sami…

Po pierwsze – w aplikacji trzeba włączyć Developer mode. Na początek mały problem. Nie w aplikacji MiHome, ale w Yeelight! Czyli tu już standardowo – logujemy się na konto Xiaomi, łączymy się z WiFi żarówki i wracamy do aplikacji. Podłączona, działa.

Wybieramy naszą żarówkę i w prawym górnym rogu wybieramy Settings. Tam jest możliwość włączenia Developer Mode.

Następnie Domoticz, sekcja Hardware, jak poniżej. Wiki sugeruje używanie stałych adresów IP, co w końcu muszę ustawić u siebie…

Czekamy dwie, trzy minuty i nasza żarówka pokaże się na zakładce Devices:

Dodajemy do wykorzystywanych urządzeń i cieszymy się zabawą! Brawo!

OWL Micro +

Tym razem zajmę się urządzeniem, które jest mniej popularne, ale bardzo przydatne.

Owl Micro + jest miernikiem zużycia energii elektrycznej o bardzo prostej instalacji i ciekawej dla nas zasadzie przekazywania informacji.

Montujemy go dość prosto – w zależności od potrzeb i instalacji w domu zakładamy na żyłę prądową specjalną klemę. Ja, z powodu podzielenia instalacji na trzy fazy – zakupiłem dwie dodatkowe. W standardowym pakiecie jest tylko jedna klema plus czytnik oraz wyświetlacz.

Co ważne! Aby analizować każdą fazę osobno trzeba zakupić trzy centralki! W moim przypadku jednak chodziło o sumaryczne zużycie w domu, nie było więc to dla mnie problemem.

Reasumując – jednostka centralna do której podłączamy trzy czujniki podaje zużycie prądu jako sumę. Z nią, bezprzewodowo, kontaktuje się wyświetlacz. Fortunne okazało się to, że używa do tego pasma 433MHz. Protokół jest rozpoznawany bez problemu przez RFLink, instalacja okazała się więc formalnością i czystą przyjemnością.

Sprzęt został od razu rozpoznany przez RFLink i dodany do Domoticz na zakładce Devices.

Następnie odczyt z Domoticz pięknie wyświetlił wartość aktualną.

Oraz po pewnym czasie pokazał wykresy…

Kolejnym krokiem może być dodanie obsługi zdarzeń związanych z poborem prądu – wartości minimalne, maksymalne, powiadamianie o większym zużyciu gdy jesteśmy poza domem (co może znaczyć, że żelazko nie jest wyłączone) i inne podobne.

Licznik błyskawic w Domoticz

Dzień dobry!

Dzisiaj kolejny skrypt w stylu 'nie jest mi to do niczego potrzebne, ale skoro można, to czemu nie’…

Ponownie, korzystając z uprzejmości użytkowników forum Domoticz, skonfigurowałem i uruchomiłem program, który odczytuje ze strony ilość wyładowań atmosferycznych w zadanym dystansie.

Instalacja i konfiguracja jest prosta i szybka. W sumie jedyne co musimy zrobić, to założyć wirtualny czujnik (czyli najpierw zakładka hardware, później Create Virtual Sensors).

Ważne jest, aby skonfigurować zmienne server, port, deviceIdx, distanceRange. Jeżeli w Domoticz macie skonfigurowane koordynaty GPS, skrypt je stamtąd pobierze. Jeśli nie – trzeba je podać ręcznie. Moim zdaniem jednak i tak są potrzebne, aby mieć informację o wschodach/zachodach słońca.

Poniżej skrypt do wklejenia i zmiany:

# Following libraries in python are needed : json, yaml,math,time,requests
# This script will load an external json file that contact for europe the lightning information and will send it to Domoticz when it’s
# inside the distance range

import math
import requests
import json
import os
from datetime import datetime

# Domoticz server settings
server = „http://192.168.1.200”
port = 80
deviceIdx = 154

# Location to import the lightning info
jsonUrl = „http://www.onweerdetectie.com/domoticz_bo.json”

# GPS location and distance to calculate
#latHome = xx.xxxxxx
#lngHome = xx.xxxxxx
distanceRange = 10  # Distance in km

# Try to get GPS location from domoticz
try:
    data = json.loads(
        requests.get(
            „%s:%d/json.htm?type=settings” %
            (server, port)).content)
    latHome = float(data[’Location’][’Latitude’])
    lngHome = float(data[’Location’][’Longitude’])
except:
    pass

# Location distance calculation

def distance(lat1, lng1, lat2, lng2):
    radius = 6371

    dLat = (lat2 – lat1) * math.pi / 180
    dLng = (lng2 – lng1) * math.pi / 180

    lat1 = lat1 * math.pi / 180
    lat2 = lat2 * math.pi / 180

    val = math.sin(dLat / 2) * math.sin(dLat / 2) + math.sin(dLng / 2) *
        math.sin(dLng / 2) * math.cos(lat1) * math.cos(lat2)
    ang = 2 * math.atan2(math.sqrt(val), math.sqrt(1 – val))
    return radius * ang

last = 0
if os.path.exists(„/tmp/last_lightning.txt”):
    f = open(„/tmp/last_lightning.txt”)
    last = int(f.read())
    f.close()

z = requests.get(jsonUrl)
data = json.loads(z.content)
value = 0
ignored = 0
for pos in data:
    time_, lat, lng = pos
    distanceBetween = distance(latHome, lngHome, lat, lng)
    if (distanceBetween <= distanceRange):
        if (time_ > last):
            value += 1
        else:
            ignored += 1

f = open(„/tmp/last_lightning.txt”, „w”)
f.write(str(time_))
f.close()

print („Found %d matches — %s” %
       (value, datetime.strftime(datetime.now(), „%c”)))
print („%d old matches were ignored — %s” %
       (ignored, datetime.strftime(datetime.now(), „%c”)))

requests.get(„%s:%d/json.htm?type=command&param=udevice&idx=%s&svalue=%d” % (server, port, deviceIdx, value))

Ja zapisałem go w /home/pi/domoticz/scripts/python/lightning.py

Później wpis do cron, wygodniej było mi go uruchamiać co 15 minut.

crontab -e

*/15 * * * * sudo python /home/pi/domoticz/scripts/python/lightning.py

Działa, cieszy.