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.

Czujnik zalania działający z RFLink

Dzisiaj, na dobranoc, szybki wpis.

Do kompletu czujników brakowało mi tego ostrzegającego o zalaniu. Zawsze jest jakaś szansa, że w razie pęknięcia węża od pralki zostanę o tym powiadomiony. Okazało się, że i takie można aktualnie dostać niewielkim kosztem kilkunastu złotych. Na 'popularnym chińskim portalu aukcyjnym’ można znaleźć je pod hasłem 'Wireless water leakage system’. Ja akurat kupowałem w Polsce, zależało mi na czasie. Są to czujniki działające na częstotliwości 433MHz, czyli świetnie integrujące się z RFLink.

Po zezwoleniu Domoticz na wykrycie nowych czujników i zalaniu czujki wodą, pojawiła się na liście urządzeń. Wystarczyło później dodać ją na listę.

Dodałem ją jako czujnik dymu, ponieważ ma możliwość resetowania po wzbudzeniu, co akurat w tym przypadku jest logiczne. Nie bardzo jednak wiem jak zmienić ikonę, taka więc zapewne pozostanie…

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.

Influx, Grafana

Tym razem mała aktualizacja konfiguracji InfluxDB i Grafana w stosunku do pisanych na blogach http://malinowepi.pl/ oraz https://blog.jokielowie.com/

Słowem wstępu: na początku standardowe raportowanie w Domoticz wydaje się wystarczać, ale z czasem przekonujemy się, że ich sposób przechowywania nie jest zbyt szczęśliwy do dokładniejszych analiz: dane po dniu są uśredniane i pozostają na przykład z temperatury trzy informacje: średnia, minimum w danym dniu i maksimum. Aby mieć dostęp do ciekawszych analiz trzeba albo tworzyć osobne skrypty które będą kopiowały dane do osobnych tabel, albo posiłkować się właśnie InfluxDB i wbudowanymi w Domoticz mechanizmami.

Próbując odzwierciedlić opis na wspomnianych blogach 1:1 napotkałem u siebie problemy oraz różnice, dlatego pozwoliłem sobie stworzyć wpis aktualny na sierpień 2017 🙂

Zaczynamy od instalacji InfluxDB. Ostatnia wersja do sprawdzenia zawsze na https://portal.influxdata.com/downloads

wget https://dl.influxdata.com/influxdb/releases/influxdb_1.3.2_armhf.deb
sudo dpkg -i influxdb_1.3.2_armhf.deb

sudo service influxdb start

I już działa.

Teraz wystarczy wpisać

influx

i później mamy albo opcję bardziej czasochłonną (instalacja Chronograf do obsługi baz), albo łatwiejszą, w zupełności wystarczającą. Poprzedni portal dostępny na porcie 8083 nie jest już wspierany.

CREATE DATABASE domoticz
CREATE USER domoticz WITH PASSWORD 'domoticz’

Następnie warto skonfigurować dla sprawdzenia chociaż jeden parametr do przesłania w Domoticz. Szczęśliwie, od oficjalnej wersji 3.8153, InfluxDB jest już wspierany wprost z menu, nie przez wysyłanie po http.

Aby upewnić się, że baza odbiera dane:

use domoticz
SHOW MEASUREMENTS

I tutaj już powinny się pokazać nasze miary: temperatura, status czy wilgotność.

Wychodzimy przez quit

Następnie Grafana. Niestety, na Raspberry Pi nie jest oficjalnie wspierana, dlatego trzeba się posiłkować https://github.com/fg2it/grafana-on-raspberry

Edit: Miałem problemy z pobraniem poprawnej wersji, dlatego dopisuję komentarz.

Pobrać możemy dwie wersje: dla Pi1 i Pi2,3.

Dla Pi1 znajdują się pod linkiem:
https://dl.bintray.com/fg2it/deb-rpi-1b/main/g/

Dla Pi2,3 tutaj:
https://dl.bintray.com/fg2it/deb/main/g/

Musicie pobrać link, który tam jest dostępny wraz z ostatnią wersją i odpowiednio wkleić poniżej:

wget https://dl.bintray.com/fg2it/deb-rpi-1b/main/g/grafana_4.6.2_armhf.deb

sudo apt-get install -y adduser libfontconfig

sudo dpkg -i grafana_4.6.2_armhf.deb

Zgodnie z sugestią instalatora dopisujemy:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable grafana-server

sudo /bin/systemctl start grafana-server

Na koniec podajemy parametry w Grafana, użytkownik admin, admin i możemy korzystać z Dashboardów. Grafana domyślnie instaluje się na porcie 3000!

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.

Czas drogi do pracy/domu w Domoticz

Tym razem mała, przydatna ciekawostka dla osób, które dojeżdżają do pracy trochę dalej niż kilka kilometrów – podawanie czasu dojazdu jako element w Domoticz. Za przykładem użytkownika Mastair z forum Domoticz.

Idea bardzo mi się spodobała, szczególnie dla żony, która do pracy na kilkadziesiąt kilometrów. Oczywiście można odpalić Google Maps i sprawdzić w nich, ale planując tablet na ścianę z Domoticz i kalendarzem naszej rodziny – taki gadżet może być dla niej przydatny.

Na 'dzień dobry’ będziemy potrzebować zarejestrowania się jako Google developer i pozyskania klucza do API (tak ogólnie – interfejs programistyczny). Polling interval (czas co jaki jest odpytywany Google) nie powinien być zbyt mały, ponieważ bezpłatne jest 2500 zapytań dziennie.

https://developers.google.com/maps/documentation/directions/get-api-key

Lub posługujemy się kodem jak poniżej.

„””
<plugin key=”TravelTimes” name=”Travel Times” author=”mastair” version=”1.0.0″>
    <params>
        <param field=”Mode1″ label=”From address” width=”200px” required=”true”/>
        <param field=”Mode2″ label=”To address” width=”200px” required=”true”/>
        <param field=”Mode5″ label=”Google API Key” width=”200px” required=”true”/>
        <param field=”Mode6″ label=”Polling interval (s)” width=”40px” required=”true”/>
    </params>
</plugin>
„””
import Domoticz
import json
import urllib.request
import urllib.parse

#variables
mode            = „driving”
directionsURL   = „https://maps.googleapis.com/maps/api/directions/json?origin=%s&destination=%s=&transit_mode=driving&departure_ti$
defaultPollingInterval = 120

def onStart():
    Domoticz.Debug(„onStart called”)

    if (len(Devices) == 0):
        Domoticz.Device(Name=”Travel time”, Unit=1, TypeName=”Custom”, Options={„Custom”: „1;minutes”}).Create()
        Domoticz.Device(Name=”Travel delay”, Unit=2, TypeName=”Custom”, Options={„Custom”: „1;%”}).Create()

    Domoticz.Heartbeat(pollingInterval())
    return True

def onHeartbeat():
    updateSensors()
    return True

def updateSensors():
    try:
        Domoticz.Debug(„getDelay called”)

        # Call Directions API
        url = directionsURL % (urllib.parse.quote(fromAddress()), urllib.parse.quote(toAddress()), apiKey())
        request = urllib.request.urlopen(url)
        data = json.loads(request.read().decode(’utf-8′))

        if „error_message” in data:
            Domoticz.Error(„Error retrieving travel times from Google Maps API: %s” % data[„error_message”])
            return

        # Get durations
        normal_duration = int(data[„routes”][0][„legs”][0][„duration”][„value”]/60.0)
        current_duration = int(data[„routes”][0][„legs”][0][„duration_in_traffic”][„value”]/60.0)
        delay = round((float)(current_duration – normal_duration)/normal_duration*100)

        # Update devices
        if 1 in Devices:
            Devices[1].Update(nValue = current_duration, sValue = str(current_duration))

        if 2 in Devices:
            Devices[2].Update(nValue = delay, sValue = str(delay))
    except:
        Domoticz.Error(„Error retrieving travel times from Google Maps API”)

####### GETTERS FOR PARAMETERS ########
def pollingInterval():
    try:
        return int(Parameters[„Mode6”])
    except:
        Domoticz.Error(„Error converting polling interval to integer, using %s seconds as polling interval” %defaultPollingInterval)
        return defaultPollingInterval

def fromAddress():
    return Parameters[„Mode1”]

def toAddress():
    return Parameters[„Mode2”]

def apiKey():
    return Parameters[„Mode5”]

############## NOT USED ##############
def onStop():
    return True

def onConnect(Status, Description):
    return True

def onMessage(Data, Status, Extra):
    return True

def onCommand(Unit, Command, Level, Hue):
    return True

def onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile):
    return True

def onDisconnect():
    return True

Zapisujemy na przykład w /home/pi/domoticz/plugins/TravelTimes pod nazwą plugin.py.

Później jeszcze nadanie odpowiednich praw:

sudo chmod 755 /home/pi/domoticz/plugins/TravelTimes/plugin.py

Konieczny jest restart Domoticz, aby pojawił się nowy dodatek. Gdy już będziemy go mieli, po prostu wpisujemy:
– Skąd (zasady identyczne jak przy wpisywaniu adresów w Google maps)
– Dokąd
– Klucz API Google
– Czas, co jaki Domoticz ma odpytywać Google