Tasmota i MQTT w Domoticz

Dzień dobry. A może dobry wieczór?

W jednym z poprzednich wpisów opisałem sposób załadowania alternatywnego (albo głównego – zależy od podejścia) oprogramowania do sprzętów Sonoff. Piszę sprzętów, ponieważ ich oferta jest dość bogata i stale się powiększa. Sonoff Basic, Sonoff TH (z termometrem), Sonoff Pow (z pomiarem energii), Sonoff G1 (z miejscem na kartę SIM, dla kontaktu w miejscach bez WiFi), gniazda Sonoff S20, Sonoff Touch (naścienne włączniki zdalne), sterowane uchwyty do żarówek – 'żyć, nie umierać’, jak to mówią.

Do roboty!

Po pierwsze, jak zawsze, aktualizujmy nasz system. Ja ciągle opieram się na raspbian Jessie, w tym przypadku różnic jednak nie powinno być.

sudo apt-get update
sudo apt-get upgrade

I teraz chwila wstępu. Czym jest MQTT i czemu jest używany? Cytując Wikipedię : 'oparty o wzorzec publikacja/subskrypcja, ekstremalnie prosty, lekki protokół transmisji danych. Przeznaczony jest do transmisji dla urządzeń niewymagających dużej przepustowości. Poprzez ograniczenie prędkości transmisji, protokół zapewnia większą niezawodność. Protokół ten idealnie sprawdza się przy połączeniach maszyna-maszyna, w internecie rzeczy (IoT), w urządzeniach mobilnych, oraz tam, gdzie wymagana jest oszczędność przepustowości, oraz energii.’

Tasmota korzysta akurat z MQTT.

Czyli jest serwis, który nasłuchuje, oczekuje i wysyła pewne komunikaty. W Domoticz obsługa tego protokołu jest zaimplementowana w szczątkowy sposób, ale jest. Jeżeli chcielibyśmy z niego korzystać w większym stopniu, musimy się przygotować do przejścia na Home Assistant.

Przystępujemy do instalacji Mosquitto, najpopularniejszego brokera na Raspberry Pi.

sudo apt-get install mosquitto mosquitto-clients

W sumie tyle – już działa 🙂
Wystarczy skonfigurować użytkownika, nadać mu hasło za pomocą komendy:
sudo mosquitto_passwd -c /etc/mosquitto/passwd [username]
I możemy 'podsłuchiwać’ co się dzieje na naszym kanale.
Komenda która podsłucha wszystkie kanały to:
mosquitto_sub -h localhost -t „#” -u „username” -P „password” -v
’#’ Oznacza wszystkie w tym przypadku.
Przy okazji – ponownie podziękowania dla Macieja za pomoc przy ogarnięciu tematu.
Jak widać – komunikaty już sobie 'latają’. Obrazek trochę wyprzedza późniejszą konfigurację – bez skonfigurowania MQTT na Sonoff żaden komunikat oczywiście nie zostanie wysłany…
Skonfigurujmy Domoticz, aby obsługiwał MQTT.
Zaczynamy od Hardware, dodajemy 'MQTT Client Gateway with LAN interface’, podając tam dane brokera MQTT. Podajemy IP, port (domyślnie 1883), wcześniej założonego użytkownika i hasło. Publish Topic zostawiamy na Out.
Następnie tworzymy Virtual Switch i zapamiętujemy jego IDX.
Jak widać, Domoticz już wysyła komunikaty:
Teraz skupimy się na naszym włączniku Sonoff i wgranym sofcie Tasmota.
Wchodzimy, przez stronę, w konfigurację i wybieramy Configure MQTT.

Podajemy nasze parametry MQTT.

Następnie Configure Domoticz i w Idx 1 podajemy IDX naszego Switcha. Jeżeli macie inne wersje Sonoff (z termometrem, licznikiem zużycia energii, itp.) musicie podać Wasze IDX odpowiednich czujników w Domoticz.

Po zapisaniu od razu można użyć przełącznika w Domoticz, będzie współpracował z MQTT.
Mission accomplished!
Ku pamięci (bardziej mojej). Można stworzyć pliki konfiguracyjne, jeżeli ich potrzebujecie.
sudo nano /etc/mosquitto/conf.d/mosquitto.conf

I kopiujemy:

# Config file for mosquitto
#
# See mosquitto.conf(5) for more information.

user mosquitto
max_queued_messages 200
message_size_limit 0
allow_zero_length_clientid true
allow_duplicate_messages false

listener 1883
autosave_interval 900
autosave_on_changes false
persistence true
persistence_file mosquitto.db
allow_anonymous true
password_file /etc/mosquitto/passwd

Broadlink i Domoticz – walki ciąg dalszy

Taki wniosek na szybko – czasem nie warto oszczędzać 😉 W sumie nie żałuję zakupu pilota Broadlink RM Mini 3, ale sposób w jaki muszę podłączać go do Domoticz jest, delikatnie mówiąc, skomplikowany.

Zacznijmy od tego, że nauka kodów wszystkich pilotów nie jest tym, co tygrysy lubią najbardziej. Ja wiem, że można zamapować kilka głównych przycisków (chociaż i to działa spontanicznie), ale w sieci są kody do wielu różnych urządzeń, które można wykorzystać. Tak jest również w przypadku Broadlink, ale w aplikacji e-Control jest to zorganizowane bardzo nieporządnie. Jako że dodają je użytkownicy, to wielokrotnie mimo szczerych chęci opisy się powtarzają, nie ma żadnego standardu – trzeba celować na przykład w kilkanaście tych samych opisów w stylu 'Samsung TV’.

Powiedzmy jednak, że znaleźliśmy wzór pilota jaki chcieliśmy. W moim przypadku podstawowe funkcje działały na prawie każdym – włączenie/wyłączenie, głośniej/ciszej/wycisz.

Mamy w nich zamapowane kilkanaście przycisków. Szkoda robić to wszystko od nowa – tym bardziej, że z nieznanych mi powodów plugin Broadlink w Domoticz przestał mi odczytywać kody IR z pilotów – zawsze są tam zera. W aplikacji działa…

Jak w takim razie wyłuskać zapisane już dane? Jest możliwość. 
Po pierwsze – potrzebujemy telefonu z Androidem. iPhone sobie z plikami nie radzi, także na nim wiele w tym przypadku nie zdziałamy. Na nim instalujemy aplikację e-Control i łączymy się z naszym pilotem Broadlink. Konfigurujemy co chcemy, wyszukujemy albo robimy to sami klawisz po klawiszu.
Wchodzimy w Opcje (po lewej, na górze)
I Share
Następnie 'Share to other phones in WLAN’

I teraz zaczyna się ciekawe. Musimy znaleźć w strukturze plików (na szczęście Android przeglądarkę takowych udostępnia) folder

/broadlink/newremote/SharedData/

I stamtąd musimy pobrać trzy pliki:

jsonSubIr
jsonButton
jsonIrCode

Najważniejszy jest jsonIrCode, ale do zaimportowania w Domoticz potrzebujemy wszystkich trzech.

Poniżej opis funkcji, za pomocą których można zaimportować dane kodów IR do Domoticz.

Przycisk Webstart uruchamia serwis za pomocą którego będziemy mogli przesłać pliki z telefonu do Raspberry Pi. Możemy wtedy wpisać adres naszego Raspberry Pi w przeglądarkę na telefonie z portem 9000 (np. http://192.168.1.200:9000/import). Co ważne – serwis zakończy pracę ze względów bezpieczeństwa po 10 minutach.

Jeżeli wiemy jak to zrobić sami (np. FTP czy też Samba share), to ładujemy je do folderu /import wewnątrz folderu Broadlink. WAŻNE! NIE plików folderu pluginu, ale folderu, który podaliśmy w konfiguracji!

Generate odczyta i zapisze te pliki. Odczyta wszystko w formacie json i stworzy z nich pliki *.ini z kodami IR do poszczególnych pilotów.

I teraz zaczyna się zabawa… Ja osobiście nie chciałem mieć stu nowych przycisków w Domoticz, dlatego przeniosłem je do folderu roboczego…

…i jeden po drugim (czasem domyślając się po opisie, czasem testując samemu) ładowałem je do folderu /import i przyciskałem…

Import – przeniesie pliki z folderu Import do Broadlink i założy odpowiednie 'przyciski’ w Domoticz.

Tralalala, działa. Żeby sprawdzić jak to wszystko będzie pracowało na 'żywym organizmie’.

Stworzyłem Scenę

i dodałem:

Po kolei:
1. Zapal delikatne światła (po co ma mnie od razu oślepić…) w salonie – to akurat Xiaomi
2. Podnieś ekran – tutaj RFLink
3. Daj sygnał IR z Broadlink do projektora aby się wyłączył
4. Potwierdź – taki wymóg projektora
5. Wyłącz wzmacniacz

Scenę przez HABridge połączyłem z Alexą i można już po filmie powiedzieć 'Alexa, after movie’ i sprawdzić jak nasze sprzęty reagują. Magia!

Pilot uniwersalny Broadlink RM Mini 3. Używanie, Domoticz i ogólne wnioski

Kolejny gadżet na tapecie. Tym razem 'uniwersalny’ pilot IR. 
Jako że nie byłem pewien Logitech Harmony Remote (czy aby na pewno się przyda, czy będzie leżał jak inne pomysły…) – postanowiłem spróbować z czymś tańszym na początek. Wybór padł na Broadlink RM Mini 3. Cena do zaakceptowania bez problemu (około 40 PLN), nawet jeżeli 
eksperyment się nie sprawdzi.
Jak na razie jednak jest dobrze 🙂 Może nie perfekcyjnie (zapewne kwestia dalszych testów), ale dobrze.

Nie jest to może najprzyjemniejsze w użytkowaniu urządzenie, ale się sprawdza. Zacznijmy od pewnego faktu, który wprowadził mnie w konsternację. Aplikacja, która podpowiada się na podstawie RF code z opakowania nie jest jedyną oficjalną. Co gorsza – nie jest akurat tą 'lepszą’. Nazywa się 'ihc’ i w sumie umożliwia mapowanie klawiszy z pilotów które mamy w domu, tworzenie scen, itp. Nie jest źle, ale szału również nie ma. Schludna, ładna, szybka. W sumie powinna wystarczyć na początek.

Broadlink e-control jest lepsza. No, przynajmniej teraz mi się tak wydaje. Kto wie, czy zdanie się nie zmieni.

Po zdefiniowaniu swojego pilota (jak w innych podobnych systemach, przez dostanie się do sieci WiFi pilota, podanie danych swojej sieci Wifi), mamy możliwość wybrania jakie urządzenia chcemy dodać. Klimatyzacja, telewizor, sprzęt audio, rolety – jeżeli są sterowane przez IR (czyli standardowa podczerwień jak we wszystkich pilotach).

Najciekawszą jednak funkcją są zdefiniowane dane pilotów użytkowników. Nie ma tutaj niestety standardu, każdy wpisuje co chce i jak chce, ale jest. To się liczy. Znalazłem mniej więcej swój telewizor, amplituner.

Jeżeli jednak nie znajdziemy swojego odpowiednika pilota – możemy go sami zamapować.

W tym celu wybieramy przycisk na wirtualnym pilocie…

Uruchamia się funkcja mapująca, my przyciskamy przycisk na naszym pilocie, on jest zapamiętywany. I tak dla przycisków, które chcemy mieć sterowane z aplikacji.

Możemy dodać wiele urządzeń, które mamy w domu.

Można definiować sceny, które opisują powiązania pomiędzy urządzeniami, jakie wirtualne przyciski są włączane, kiedy, itp. Całkiem fajne, ale napracować się trzeba.

W aplikacji działa, można więc zabrać się do tego od strony Domoticz.

Nie jest o bardzo proste, ale finalnie zadziałało.

Po pierwsze, trzeba ze strony https://www.dropbox.com/sh/htyghey9e402u4y/AACeb1cXqaPd9gBVl5TL3H36a?dl=0 pobrać pliki z pluginem i wrzucić je do folderu /plugins/ w Domoticz. Jest ich więcej niż nam trzeba, ale nie zaprzątałem sobie głowy ich sortowaniem – wrzuciłem wszystkie.

Dla pewności – wrzucamy je do folderu plugins w domoticz.

Po restarcie Domoticz będziemy mieli możliwość konfiguracji pilota Broadlink. Lub innych urządzeń, jeżeli je macie.

Konfiguracja jak powyżej. Aby pozyskać adres IP i MAC naszego pilota Broadlink możecie użyć programu IPScan. Jest również możliwość wybrania w pluginie typu Discovery, uruchomienia pilota w Domoticz, później w logu Domoticz będziemy mieli informację o IP i adresie MAC Broadlink.
Do wyboru mamy kilka różnych typów urządzeń, które obsługuje plugin. Ja wybrałem to co mam 😀 Czyli Remote Control RM2/RM mini3. ZWRACAM UWAGĘ na parametr 'Folder to store ini files (RM2/RM mini3):’. To tam znajdą się pliki z konfiguracjami oraz kody przycisków pilota.
I tutaj należy się kilka słów wyjaśnienia. Parametry ogólne pluginu są zapisywane w pliku. KAŻDY przycisk pilota również znajdzie się w pliku, opisany różnymi parametrami – między innymi kodem sygnału IR.

W zależności od tego co wybraliście, pojawią się kolejne elementy na zakładce Switches oraz w zakładce Devices będziecie widzieli je wszystkie.

Teraz główny temat – jak nauczyć Domoticz kodów przycisków? Trzeba przejść na Switches i znaleźć <Nazwa Waszego pilota> – Command. U mnie Broadlink remote – Command. Tam są cztery przyciski. Jeden z nich to Learn. Przyciskamy, kierujemy naszego pilota w Broadlink, świeci się biała lampka mówiąca o tym, że pilot jest w fazie uczenia. Po 4-5 sekundach lampka powinna zgasnąć. Można od razu wybrać tą, która jest obok – Test aby sprawdzić jak działa zapamiętany kod z naszym sprzętem. Jeżeli się zgadza – dajemy Save. Jeżeli nie – Reset i ponownie próbujemy.

Tak będzie wyglądała zakładka Devices z zapamiętanym kodem – na przykład włączenia Tv.

Pojawi się kolejny przycisk na naszej zakładce Switches.

A do tego kolejny plik w folderze, który zdefiniowaliście. I tak po kolei.

Jest z tego co wyczytałem możliwość importu zdefiniowanych kodów z aplikacji Broadlink e-Control, jestem na etapie testowania tego rozwiązania – opiszę gdy tylko będę miał jakieś wnioski.

No i tak to sobie działa. Wpis na gorąco, dopiszę do niego jeszcze na pewno sposoby automatyzacji kilku urządzeń, aby mieć na przykład scenę – oglądamy film, która zrobi dla nas kilka rzeczy.

Sterowane przełączniki od Xiaomi – w końcu znalazłem swojego świętego Graala…

Jest! W końcu jest gniazdko, które jest zasilane z sieci, nie potrzebuje trzy-żyłowej instalacji elektrycznej, jest estetyczne i działa z Domoticz! Czyli taki trochę święty Graal, bo zawsze innym urządzeniom czegoś brakowało 😉
Opakowania Xiaomi jak zawsze proste i schludne. Wielkość włącznika, powiedziałbym, jest standardowa jak na polskie standardy.
Co ważne – nie są to typowe włączniki jak u nas zawsze spotykane – góra/dół. Bardziej na zasadzie 'klik’.
Jak widać – dwużyłowy. Trzy wejścia dlatego, że mamy dwa przełączniki.
Konfiguracja w aplikacji standardowa – wybieramy typ sprzętu i parujemy. Te są na ZigBee, jak termometry, gniazdka prądowe, itp.
Po podłączeniu od razu działa!
Przypisujemy do wybranego pokoju.
Wybieramy typ.
Można wybrać inny typ dla lewego, inny dla prawego przycisku.
W aplikacji możemy sterować każdym z przycisków osobno.
Działa! Ha! Fantastycznie!

Podłączenie w Domoticz jest już formalnością – wystarczy włączyć wykrywanie nowych urządzeń i gniazdka są widoczne.

Każdy przycisk osobno, można zacząć automatyzację 🙂

Co ważne! Gniazdka mają niestandardowy – kwadratowy – kształt z tyłu i nie pasują do ogólnie używanych, okrągłych puszek w Polsce. Ergo – trzeba kuć… Raport z kucia za dwa, trzy tygodnie, gdy zacznie się remont 😀

Monit – abyśmy byli pewni, że Domoticz działa…

Ostatnio miałem dużo problemów z Raspberry Pi i kiepskim zapisem na kartę SD. Czego bym nie robił, po dwóch, trzech tygodniach system 'się rozjeżdżał’, finalnie kończąc na 'Memory fault’ i 'Kernel panic’. Kiepska sprawa. Co prawda na Raspberry Pi nie stoją żadne krytyczne usługi, ale ciągłe odzyskiwanie z backupu nie jest najciekawszą pracą, jaką można robić…

Na pewno pomogło przeniesienie systemu Raspberry Pi na dysk HDD, ale dodatkowo można dołączyć sprawdzanie statusu Domoticz – u mnie są problemy z pluginami i czasem lubi nie wystartować.

Pomaga w tym 'monit’ – oprogramowanie, które dba o to, aby nasze procesy były uruchomione, a w razie ich nieprzewidzianego zatrzymania – pojawiły się ponownie. Opisywał to już Łukasz Jokiel na swoim blogu, ale od wiedzy jeszcze nikt nie umarł, dlatego pozwolę sobie opisać to i u siebie.

Na początku zaktualizujmy system:

sudo apt-get update

sudo apt-get upgrade

I zainstalujmy 'monit’

sudo apt-get install monit

Od razu po tym możemy przystąpić do zmian w domyślnym pliku konfiguracyjnym. Jest dość pokaźny, w większości opatrzony komentarzami przy przykładach.

sudo nano /etc/monit/monitrc

Dopiszmy sekcję (zamiast HASŁO podajecie hasło jakim chcecie się logować do monit’a w przeglądarce):

set httpd port 8890 and
use address localhost  # only accept connection from localhost
allow localhost        # allow localhost to connect to the server 
allow admin:HASŁO # and require user 'admin’ with password 'monit’
use address 0.0.0.0    # only accept connection from localhost
allow 0.0.0.0/0.0.0.0
allow @monit    # allow users of group 'monit’ to connect (rw)
allow @users readonly # allow users of group 'users’ to connect readonly

Wszyscy sugerują na końcu, więc dodajmy na końcu również:

check process domoticz with pidfile /var/run/domoticz.pid
start program = „/etc/init.d/domoticz.sh start”
stop  program = „/etc/init.d/domoticz.sh stop”
if failed
   url http://127.0.0.1:80/json.htm?type=command&param=getversion
       and content = '”status” : „OK”’
   for 2 cycles
   then restart
if 5 restarts within 5 cycles then exec „/sbin/reboot”

UWAGA – ostatnia linijka mówi o tym, że jeżeli 10 (2*5) razy nie powiedzie się uruchomienie Domoticz, to nastąpi restart Raspberry Pi – bądźcie świadomi! Do tego – zmieńcie port Domoticz na odpowiedni o Was (127.0.0.1 jest adresem hosta lokalnego) – u mnie jest to 80, domyślnym w Domoticz jest 8080 (dziękuję za sugestię).

Teraz

sudo systemctl enable monit.service
sudo systemctl restart monit.service

Sprawdzamy. Pierwsza komenda sprawdzi poprawność pliku konfiguracyjnego, druga poda pełen status.

sudo monit -t

sudo monit status

Wygląda na to, że działa. Teraz wystarczy

sudo service domoticz stop

i zobaczymy czy monit przywróci go do życia spoza grobu.

Taram! Bangla!

Strona przedstawia się następująco:

Ważne – wpisujecie adres swojego Raspberry, po nim port 8890 (lub taki, jaki ustawiliście w skrypcie konfiguracyjnym monitrc). Jeżeli macie konfiguracje rozproszone (Domoticz na innej maszynie, albo chcecie monitorować procesy na innych Raspberry) – musicie wpisać odpowienie adresy IP i porty.

Mała sugestia – jeżeli będziecie chcieli kiedyś wyłączyć świadomie Domoticz (chcecie coś sprawdzić, dodać nowy plugin powoli, itp.) – monit od razu włączy serwis Domoticz. No, taka jego funkcja. Dlatego to, musicie po kolei wydać polecenia:

sudo /etc/init.d/monit stop 

sudo /etc/init.d/domoticz.sh stop
Zmieniamy, mieszamy, testujemy, sprawdzamy…

I później:

sudo /etc/init.d/domoticz.sh start

sudo /etc/init.d/monit start

Dla pewności, poniżej zawartość całego pliku:

  set daemon 120
  set logfile /var/log/monit.log
  set idfile /var/lib/monit/id
  set statefile /var/lib/monit/state
  set eventqueue
      basedir /var/lib/monit/events
      slots 100
   include /etc/monit/conf.d/*
set httpd port 8890 and
use address localhost
allow localhost
allow admin:xxxxxxxxxxxx
use address 0.0.0.0
allow 0.0.0.0/0.0.0.0
allow @monit
allow @users readonly

check process domoticz with pidfile /var/run/domoticz.pid
start program = „/etc/init.d/domoticz.sh start”
stop  program = „/etc/init.d/domoticz.sh stop”
if failed
   url http://127.0.0.1:80/json.htm?type=command&param=getversion
       and content = '”status” : „OK”’
   for 2 cycles
   then restart
if 5 restarts within 5 cycles then exec „/sbin/reboot”

Domoticz i Floorplan – graficzna prezentacja naszego domu i czujników

Dzień dobry!

Ostatnio spotkałem się na grupie Domoticz ze zdziwieniem na informację o fakcie, że w Domoticz można robić 'piętrowe’, graficzne plany domu.

A owszem, można i to dość prosto.

Kilka osób polecało https://floorplanner.com/ z którego skorzystałem. Nie mam talentu graficznego (mimo tego, że z tym zamysłem kupowałem PC 25 lat temu ;)), dlatego wygląda to tak jak wygląda… Ale działa 😀

Program jest do pewnego momentu (ograniczona ilość projektów, elementów graficznych, itp.) darmowy. W zupełności jednak wystarczy, ale wyrysować w nim plan pięter domu, dodać meble, ikony osób, okna, drzwi, itp. Po skończonej pracy wystarczy wyeksportować go do jpg – zostanie przesłany na e-mail.

Swoją drogą – widzę, że czeka mnie odświeżenie tego co mam już zrobione, ponieważ teraz można wszystko wyeksportować w ładnym rzucie izometrycznym.

Dobra, Floorplanner można zamknąć.

Teraz, w dowolny sposób jaki macie zdefiniowany (Samba, FTP, itp.) wgrywacie pliki z rysunkami pięter do /domoticz/www/images/floroplans/

Wracamy do naszego ukochanego Domoticz 😉

Sugeruję najpierw Roomplan.

Tutaj wybierając Add Plan możecie wpisać nazwę pomieszczenia, które będziecie edytować. Z jakiegoś powodu (dopiszę gdy sobie przypomnę…) zakładałem je ze znakiem dolara przed nazwą… Zapewne po to, aby nie były widoczne w innych miejscach.

Po zdefiniowaniu tego co potrzebujecie, możecie wybrać nazwę pomieszczenia i z listy rozwijalnej na samym dole dodać urządzenia, które w danym miejscu się znajdują. Tak możecie zbudować listę tego, co macie w sypialni, łazience, salonie, itp. Na liście znajdują się wszystkie dostępne w Domoticz urządzenia, czujniki, sceny.

Teraz Setup -> More Options -> Plans -> Floorplan i wpisujemy piętra które nas interesują, wskazując przy okazji ich lokalizację w folderze Domoticz.

Po wybraniu piętra, z listy Plan możecie przypisać pomieszczenia do pięter. Po przypisaniu możecie obrysować kształt pomieszczenia, później przed 'dwuklik’ będziecie mogli je zbliżyć na ekranie.
Gdy wybierzecie nazwę pomieszczenia, w lewym górnym rogu pojawią się przypisane wcześniej czujniki i inne – wystarczy je przeciągnąć w odpowiednie miejsca i po skończonej pracy wybrać update.

Dla jasności – upewnijcie się, że to menu macie w ogóle włączone w Setup -> Settings…

 Później za pomocą guzika na dole możecie wybierać ten, który chcecie oglądać.

Oczywiście, tak dla pewności – wszystkie te ikony są interaktywne, można je przyciskać, temperatura jest aktualizowana na bieżąco, itp., itd.
Powodzenia!

Dashticz – wyświetlanie faz księżyca

Na prośbę jednego z czytelników opiszę sposób skonfigurowania w Dashticz bardzo ładnego, przydatnego dodatku – faz księżyca z ich prezentacją na zdjęciach. Nie dość, że estetyczne, to jeszcze naprawdę przydatne.

Nie jestem autorem tego pomysłu i skryptu, od razu piszę. Dlatego po źródłowy kod odsyłam do:

a postaram się tutaj wyjaśnić sposób jego instalacji.

Zacząć trzeba od stworzenia pliku w folderze /scripts/lua, co ważne z początkiem nazwy script_time_. Dla uproszczenia – można tak jak w przykładzie – script_time_moon.lua.

Tam wklejamy kod wskazany w linku.

Tak jak w podanej w Wiki Domoticz instrukcji – krytyczne jest założenie 2 zmiennych użytkownika i 5 wirtualnych czujników w zakładce Devices.

Najpierw jednak Hardware:

I później Dummy sensors z typami jak poniżej:

Czyli User Variable:

MoonPicture STRING
MoonphaseCheck STRING

I Dummy:

Dummy Switch Moon up Text
Dummy Switch Moon under Text
Dummy Switch Moonpercentage Percentage
Dummy Switch Moon age Custom Sensor Days
Dummy Switch Moonphase Text

Teraz pora zmienić dane w script_time_moon.lua. Co do zmiennych, które musimy dostosować:

local moonpicture = „MoonPicture”

Nazwa zmiennej użytkownika – tam skrypt zapisuje numer obrazka png do wyświetlenia.

local checkvar = „MoonphaseCheck”

Również używana w skrypcie. Wpisywana tam jest nazwa fazy. Można zmienić na angielski i później wyświetlać w Domoticz.

local checktime = 3600

Interwał odświeżania danych z WeatherUnderground. Nie może być zbyt mały, bo zależy od planu jaki tam mamy. A zapewne będzie darmowy…

local city = „Warszawa”

Miasto dla WeatherUnderground

local countryCode = „PL”

Kod kraju dla WeatherUnderground

local idxmoonrise=’161′
local idxmoonset=’162′
local idxmoonpercentage =’163′
local idxmoonage =’164′
local idxmoonphase =’165′

Powyżej 5 czujników, w których musimy wpisać IDX takie jak założyliśmy wcześniej.

local wuAPIkey = „xxxxxxxxxxx”

Klucz WeatherUnderground. Dla przypomnienia – instrukcja założenia tutaj: https://cezarowy.blogspot.com/2017/09/dashticz-spenienie-marzen-maniaka.html

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.

local DOMO_IP = „192.168.1.200”
local DOMO_PORT = „80”

Dane dostępowego naszego Domoticz.

local tempfilename = '/var/tmp/phase.tmp’

To miejsce gdzie będzie się zapisywał plik z danymi zrzucanymi z WeatherUnderground. Część danych wygląda na przykład tak:
  „astronomy”: 1
  }
        }
                ,       „moon_phase”: {
                „percentIlluminated”:”81″,
                „ageOfMoon”:”11″,
                „phaseofMoon”:”Waxing Gibbous”,
                „hemisphere”:”North”,
                „current_time”: {
                „hour”:”22″,
                „minute”:”20″
                },
                „sunrise”: {
                „hour”:”7″,
                „minute”:”23″
                },
                „sunset”: {
                „hour”:”16″,
                „minute”:”26″
                },
                „moonrise”: {
                „hour”:”12″,
                „minute”:”26″
                },
                „moonset”: {
                „hour”:”2″,
                „minute”:”54″
                }
        },
Celem skryptu na Wiki Domoticz jest odpowiednie odczytanie tego pliku i zamapowanie zmiennych.
Jeżeli zmienne są poprawne i skrypt zacznie działanie (sam, ponieważ script_time_ uruchamiają się automatycznie), będzie to wyglądać tak:
W sumie mamy już wszystko. Pozostaje konfiguracja Dashticz.
W sekcji config dodajemy:
config[’idx_moonpicture’] = 7;
Ten IDX jest numerem naszej User Variable.
W sekcji buttons:
var buttons = {} 
buttons.moon = {width:6, isimage:true, refreshimage:60000, image: 'moon’}
W columns:
columns[1] = {} 
columns[1][’blocks’] = [buttons.moon];
columns[1][’width’] = 3;
I screens:
screens[1] = {}
screens[1][’columns’] = [1];
Oczywiście Wy powinniście dołożyć ten przycisk w kolumnach, które u Was są poprawne i na odpowiednim ekranie.
Chciałbym teraz napisać: 'Cieszymy się, że działa’ i mam nadzieję, że tak będzie…

Xiaomi Air Purifier 2 – integracja z Domoticz

W końcu dotarł do nas Xiaomi Air Purifier 2. Udało się znaleźć go w dobrej cenie, wystarczyło poczekać 2 miesiące i już jest 😉 Smog na wsi nie jest tym, co tygrysy lubią najbardziej. Głównie chodzi o zdrowie dzieci.

Sprzęt, jak na Xiaomi przystało – dotarł w zwykłym pudle, bez setki kolorów, ale dobrze zapakowany. Miła niespodzianka – dostarczył go kurier.

Osobiście jestem bardzo zadowolony ze sprzętów tej marki. Działają niezawodnie, cechują się świetnym designem i łatwo się z nimi integrować.

Z tym oczyszczaczem jest podobnie – otwierasz, mówisz 'Ładne to’, włączasz, działa.

Po dodaniu do aplikacji (w standardowy dla nich sposób – podłączamy się do WiFi sprzętu i podajemy swoje dane WiFi) możemy od razu nim zarządzać.

Szybka aktualizacja 😉

I jesteśmy online!

Możemy oczywiście dodać widget do telefonu

Ale dobra, to było proste. Bardzo proste.

Teraz wypadałoby go zintegrować z Domoticz, to jest przecież moim głównym celem 😉

Według poradnika z forum Domoticz powinna zadziałać komenda jak poniżej.

sudo apt-get install npm sudo screen

Może i zadziałała, ale nie mogłem później zainstalować miio…

Jak się okazało – chodziło o wersję nodejs. Ruszamy więc z instalacją 'poprawnej’ wersji.

sudo curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash –

sudo apt-get install -y nodejs

I już można:

sudo npm install –save miio

sudo npm install -g miio

Teraz już zadziała 'discover’ – czyli wyszukiwanie kompatybilnych sprzętów.

sudo miio –discover –sync

Po jej wydaniu musicie zobaczyć IP oczyszczacza i jego status, jak poniżej:

Skoro jest, to jedziemy dalej! Do odważnych świat należy.

Poradniki różnie radzą, niektóre są bardziej skomplikowane, inne mniej. U mnie zadziałało to co poniżej.

Dodajemy skrypt, który będzie wysyłał komendy do oczyszczacza. Ja się uparłem i wszystkie wrzuciłem do folderu /scripts, ponieważ jest archiwizowany co noc.

sudo nano /home/pi/domoticz/scripts/airpurifier.js

#!/usr/bin/node
/* eslint-disable */

// Set path to node modules miio
const miio = require(’miio’);

// No need to change any lines in this section
var deviceip = process.argv[2];
var secondarg = process.argv[3];
var thirdarg = process.argv[4];
function exit() {
process.exit(-1);
}

// Power On (on / off specified as true or false)
if ( secondarg === „power” ) {
        setTimeout(exit, 7000);
        console.log(’Sending Power’, thirdarg, 'command’);
        miio.device({
        address: deviceip
}).then(device => {
                return device.setPower(JSON.parse(thirdarg));
})}

// Status
if ( secondarg === „status” ) {
        miio.device({
        address: deviceip
}).then(device => {
                stats = device.getProperties([ 'power’, 'mode’, 'aqi’, 'temperature’, 'humidity’ ])
                console.log(stats);
                process.exit();
})}

// Specify favorite manual fan speed (1 to 16) eg usage: fanspeed 16
if ( secondarg === „fanspeed” ) {
        setTimeout(exit, 7000);
        console.log(’Setting manual fan speed to:’, thirdarg);
        miio.device({
        address: deviceip
}).then(device => {
                return device.setFavoriteLevel(parseInt(thirdarg));
})}

// Set fan mode option, specify: idle, auto, silent or favorite which needs to be set for manual speed control
if ( secondarg === „fanmode” ) {
        setTimeout(exit, 7000);
        console.log(’Telling device to use’, thirdarg, 'fan speed mode’);
        miio.device({
        address: deviceip
}).then(device => {
                return device.call(’set_mode’, [ thirdarg ])
})}

// Control the device led (specify as bright, dim or off)
if ( secondarg === „led” ) {
        setTimeout(exit, 7000);
        console.log(’Setting device led to:’, thirdarg);
        miio.device({
        address: deviceip
}).then(device => {
                return device.setLedBrightness(thirdarg);
})}

// Switch the device buzzer on or off (specify as true or false)
if ( secondarg === „buzzer” ) {
        setTimeout(exit, 7000);
        console.log(’Setting device buzzer to:’, thirdarg);
        miio.device({
        address: deviceip
}).then(device => {
                return device.setBuzzer(JSON.parse(thirdarg));
})}


Jeżeli wszystko zrobiliście poprawnie, komenda jak poniżej pokaże jego status:

node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 status

Próbować możecie z różnymi komendami:

node airpurifier.js 192.168.1.115 power true – Włączenie
node airpurifier.js 192.168.1.115 power false – Wyłączenie
node airpurifier.js 192.168.1.115 status – Wyświetlenie statusu
node airpurifier.js 192.168.1.115 led off – Wyłączenie diody led
node airpurifier.js 192.168.1.115 buzzer true – Włączenie sygnałów głosowych
node airpurifier.js 192.168.1.115 fanmode auto – Tryb Auto
node airpurifier.js 192.168.1.115 fanmode favorite – Tryb Ulubiony

node airpurifier.js 192.168.1.115 fanspeed 16 – Maksymalna prędkość wiatraka


No to teraz pora na Domoticz.

Mała aktualizacja!

Dla pewności i wyjaśnienia. Zaczynamy od zdefiniowania nowego Hardware!

Dopiero później na jego podstawie zakładamy dwa Virtual sensor’y.


Dla jakości powietrza – Custom Sensor

Dla temperatury i wilgotności – Temp + Hum


Zapisujemy ich (Devices) IDX
i wstawiamy do skryptu poniżej

sudo nano /home/pi/domoticz/scripts/xair2domoticz.sh

#!/bin/bash

# Get the data
data=$(node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 status)
# Sort it
temperature=$(echo „$data” | grep „temperature” | sed -e s/[^0-9.]//g)
humidity=$(echo „$data” | grep „humidity” | sed -e s/[^0-9.%]//g)
aqi=$(echo „$data” | grep „aqi” | sed -e s/[^0-9.]//g)

# Load it into Domoticz
curl -s „http://192.168.1.200/json.htm?type=command&param=udevice&idx=247&nvalue=0&svalue=${temperature};${humidity};0″
curl -s „http://192.168.1.200/json.htm?type=command&param=udevice&idx=248&svalue=${aqi}”

Nadajemy uprawnienia do uruchamiania:
sudo chmod +x /home/pi/domoticz/scripts/xair2domoticz.sh

I wrzucamy do crontab

crontab -e 
*/15 * * * * sudo ~/domoticz/scripts/xair2domoticz.sh
Działa. Łaski nie robi 🙂 U mnie nazywa się to Aqi (tak prawdę mówiąc to identycznie jak w  poradniku…). Temperatura i wilgotność w odpowiedniej zakładce.
Ok, dane już odbieramy. Teraz wypadałoby nauczyć się nim sterować.

Założyłem Selector Switch (na podstawie Hardware), zmieniłem wartości z domyślnych na:
– Off
– Auto
– Low
– Max
– Silent

Pozostało wpisać skrypt LUA. Nie będę cwaniakował – zmieniłem skrypt autora z forum Domoticz (http://www.domoticz.com/forum/viewtopic.php?t=15537)

Skrypt, na podstawie nazwy urządzenia i jego statusów w Domoticz, wysyła komendy do Xiaomi Air Purifier 2.

sudo nano /home/pi/domoticz/scripts/lua/script_device_xair.lua

commandArray = {}
if devicechanged[’Oczyszczacz powietrza’] == 'Auto’ then
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 power true’)
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode auto’)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Off’ then
    os.execute (’sudo screen -S airpurifieroff -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 power false’)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Low’ then
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode favorite’)
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanspeed 3′)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Max’ then
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode favorite’)
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanspeed 16′)
end
if devicechanged[’Oczyszczacz powietrza’] == 'Silent’ then
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 power true’)
    os.execute (’sudo screen -S airpurifieron -d -m node /home/pi/domoticz/scripts/airpurifier.js 192.168.1.115 fanmode silent’)
end
return commandArray

I to by było na tyle. Działa, raportuje, oczyszcza. Mam mały problem z czasami nie działającymi ustawieniami Max i Low (komendy wysyłane z linii poleceń działają bez problemu, w powyższym skrypcie może muszę wstawić mały delay). Ale On, Off, Silent, Auto działa bez problemu.

Do tego wypadałoby jeszcze zrobić pobieranie statusu Włączony/Wyłączony i aktualizowanie w Domoticz – automatycznie się to nie dzieje.

Swoją drogą – warto było go nabyć.

Aplikacja Pilot – jeżeli sterowanie z poziomu strony nas nie zadowala…

Witam ponownie! 
W temacie zarządzania urządzeniami w Domoticz – ja osobiście lubię 'webowy’ interface Domoticz. Używam go na telefonie i świetnie zdaje egzamin. Na tablecie wolę Dasthicz, ale ja nie o tym tutaj 🙂
Wiele osób szuka aplikacji, która połączy się z Domoticz, będzie dobrze wyglądała, itp., itd. 
Jedną z nich (tak prawdę mówiąc na iPhone wybór nie jest porażający – zaledwie trzy…) jest Pilot.
Fajna, mała, szybka, sprytna aplikacja. Kilka słów o niej, ponieważ może się Wam okazać przydatna. Pilot zapewnia również Geofencing (lokalizację i wyzwalanie zdarzeń na podstawie tego czy na przykład jesteśmy w domu, czy dom opuściliśmy), ale z opinii użytkowników wynika, że w ostatniej wersji oprogramowania na iPhone funkcja ta nie działa najlepiej.
Zaczynając z nią pracę musicie podać oczywiście namiary na swój serwer Domoticz
W menu Ustawienia
Tak samo jak w przypadku najprostszej konfiguracji Dashticz – pojawią się od razu Wasze Ulubione po wybraniu środkowej opcji.
Jeżeli chcecie poukładać swoje urządzenia w jakiś logiczny sposób – musicie w Domoticz w sekcji Plans -> Roomplan dodać przykładowe 'Pokoje’ i do nich dodać urządzenia. Ja podzieliłem sobie je na Gniazdka, Temperaturę, itp. Minusem jest aktualnie to, że jeżeli macie zdefiniowany Floorplan w Domoticz, pojawi się dużo 'Pokoi’, które są w nim zdefiniowane. To te ze znakiem dolara przed nazwą.
Ogólny interface porządkuje urządzenia w przejrzysty sposób – Przełączniki, Sceny, Temperatura, Pogoda, Narzędzia.
Tutaj już same Przełączniki (Switches)
Mamy i dostęp do Scen:
Jeżeli trzeba, to i pogoda się znajdzie 🙂
W Narzędziach (Utilities) – liczniki, parametry sprzętowe zdefiniowane w Domoticz, itp.
A tu już mój przykład, jak można zdefiniować sobie to samemu, na przykładzie 'Pokoi’:
Aktualna cena w iTunes to 47.99 PLN. Nie jest to mało, ale niestety podobnie kształtuje się cena wielu aplikacji w sklepie Apple :/
Z ciekawostek – napisałem do autora aplikacji jakiś czas temu i przetłumaczyłem ją za jego zgodą na język polski – jeżeli zauważycie jakieś 'kwiatki’ – dajcie znać. Mnie osobiście nie podobają się Przełączniki i Narzędzia i muszę zmienić to przy następnej okazji…

Czujnk smogu SDS011, Wemos, przełącznik – wszystko w działaniu

Dobry wieczór!

Aktualizacja! Zapraszam do lektury świetnego wpisu o udostępnianiu danych z czujnika na blogu https://raspberrywpraktyce.wordpress.com/2018/03/14/czujnik-sds011-i-wizualizacja-danych-na-opensensemap/

Rozszerzając opis podłączenia czujnika SDS011 – tym razem dodałem element, który opisywał Łukasz Jokiel na swoim blogu – przełącznik, który włącza SDS011 co pewien określony czas.

Nie opisywałbym tego oczywiście mając tą samą konfigurację, ale akurat nie dość, że miałem LoLin (jakaś tam iteracja Wemos z Chin) a nie Wemos Mini, to jeszcze kupiłem inny przełącznik.

No i zaczęło się – musiałem się trochę nauczyć. Same plusy 🙂 Bardzo pomocna była strona: https://blog.siliconstraits.vn/relay-what-is-it-and-how-to-use-it/, gdzie autor świetnie opisał wszelkie możliwe informacje.

Podłączenie wtyczek dostarczonych wraz z SDS011 do samego czujnika było proste. 

Później do samego Wemos

Poniżej już całość, czyli:
1. Wemos (czy LoLin jak kto woli) (kilka PLN z Chin)
2. Przełącznik Songle SRD-05VDC-SL-C (10 PLN w Polsce)
3. Czujnik SDS011 (63 PLN z Chin)

Połączenia:
Z Wemos 5V -> do przełącznika DC+
Z Wemos GND -> do przełącznika DC-
Z Wemos GPIO 5 (D1) Output Low -> do przełącznika IN

Z Wemos 5V -> do przełącznika NO

Z przełącznika COM -> SDS 5V

W SDS:
GPIO 12 (D6) -> TX
GND -> GND
5V -> COM

I po kolei każda zakładka w Wemos i ESPEasy.
Main to tylko info

Na zakładce Config jest SSID sieci WiFi i hasło. Ale to już skonfigurowane zostało wcześniej. Tutaj z tą różnicą, że wgrywamy wersję developerską beta (na moment pisania 147 RC8).

Zwróćcie uwagę na Pin Mode 5 (D1) – Output Low – tym pinem będziemy sterować przełącznikiem

Na Devices dodajemy czujnik smogu – tak jak opisane na blogu Łukasza, ale tutaj akurat nie ma wielkiej filozofii… 

Ta zakładka pojawi się, gdy włączymy Rules w Advanced configuration na następnej 😉 Tutaj esencja – dwa liczniki, które odliczają czas i w odpowiednim czasie włączają/wyłączają SDS. Łukasz dokładnie to opisał, ale:
1. Włączamy SDS na 120 sekund, aby się rozpędził, pobrał dane, wysłał do Domoticz, po tym wyłączył. Hint: w nawiasach kwadratowych składnia: [NazwaSDS#NazwaZmiennej].
2. Ja czekam 30 minut aby ponownie go włączyć
Wszystko po to, aby oszczędzić czujnik oraz laser, ma skończoną żywotność. 

Kod:
On System#Boot do
timerSet,1,30
endon

On Rules#Timer=1 do
GPIO,5,1
timerSet,2,120
endon

On Rules#Timer=2 do
SendToHTTP 192.168.1.200,80,/json.htm?type=command&param=udevice&idx=243&nvalue=0&svalue=[CzujnikSmogu#PM25]
SendToHTTP 192.168.1.200,80,/json.htm?type=command&param=udevice&idx=242&nvalue=0&svalue=[CzujnikSmogu#PM10]
GPIO,5,0
timerSet,1,1800
endon

W Domoticz dodajemy dummy Hardware i do niego dwa Custom sensors, których IDX wpisujemy w skrypcie w Rules.
Tadam! Odczyty mam chyba trochę zawyżone przez to, że aktualnie zapakowałem czujnik w pudło, gdzie brak wentylacji. Albo faktycznie jest tak źle…