Kopia bazy danych Domoticza na FTP.

Od jakiegoś czasu jestem szczęśliwym posiadaniu nowego routera. Oprócz rozlicznych nowoczesnych ( w porównaniu  z moim wysłużonym sprzętem ) funkcji, posiada możliwość podłączenia dysku zewnętrznego i ustawienia połączenia FTP. Żal byłoby nie skorzystać z takiej użyteczności do przechowywania kopi Domoticza. Robienie kopi na kartę SD jest proszeniem się o reinstalacje sytemu, więc postanowiłem oddzielić kopie od głównego sytemu plików. Oczywiście można robić je na podłączonym pendrive, ale nie po to  umieściłem malinę w obudowie aby wkładać i wyjmować z niej pendriva.

Skrypt kopiujący dane z odczytów na FTP.

Tworzenie kopi bazy danych zaimplementowane jest w Domoticzu, jednakże nie można zautomatyzować procesu archiwizacji jeżeli chodzi o interwał czasowy i lokalizacje.

screenshot_20170221_132546

Poniższy skrypt kopiuje plik domoticz.db do określonego folderu na dysku lokalnym serwera FTP.

#!/bin/bash

## Parametry sieciowe
SERVER="192.168.x.x" # Adres IP serwera FTP
USERNAME="admin"     # Nazwa użytkownika
PASSWORD="admin"     # Hasło użytkownika
DESTDIR="/opt/backup"
DOMO_IP="192.168.x.x" # Adres IP Domoticza
DOMO_PORT="8080"      # Port Domoticza 

## Konfiguracja parametrów
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticz_$TIMESTAMP.db" # plik kopi będzie miał nazwę "domoticz_YYYYMMDDHHMMSS.db.gz"
BACKUPFILEGZ="$BACKUPFILE".gz

### Zatrzymanie Domoticza, utworzenie kopi zip i ponowne uruchomienie
service domoticz.sh stop
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /tmp/$BACKUPFILE
service domoticz.sh start
gzip -9 /tmp/$BACKUPFILE

### Przesłanie kopia na serwer FTP
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEGZ" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/xxx/xxx/" $ # Ścieżka do katalogu na serwerze FTP

### Usunięcie plików tymczasowych
/bin/rm /tmp/$BACKUPFILEDIR

### Zrobione!

Skrypt kopiujący katalog /domoticz na FTP

Jeżeli chcemy wykonać kopie całego katalogu /domoticz i wysłać na serwer możemy użyć tego skryptu.

#!/bin/bash

## Parametry sieciowe
SERVER="192.168.x.x" # Adres IP serwera FTP
USERNAME="admin"     # Nazwa użytkownika
PASSWORD="admin"     # Hasło użytkownika
DESTDIR="/opt/backup"
DOMO_IP="192.168.x.x" # Adres IP Domoticza
DOMO_PORT="8080"      # Port Domoticza 

## Konfiguracja parametrów
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILEDIR="domoticz_x_xxx_$TIMESTAMP.tar.gz" # Zamias xxx możemy wstawić numer kompilacji

### Utworzenie kopi zip
tar -zcvf /tmp/$BACKUPFILEDIR /home/pi/domoticz/domoticz/ 

### Przesłanie kopia na serwer FTP
curl -s --disable-epsv -v -T"/tmp/$BACKUPFILEDIR" -u"$USERNAME:$PASSWORD" "ftp://$SERVER/xxx/xxx/xx/" # Ścieżka do katalogu na serwerze FTP

### Usunięcie plików tymczasowych
/bin/rm /tmp/$BACKUPFILEDIR

### Zrobione!

Skrypt kopiujący katalog /domoticz na kartę SD

Dla odważnych poniżej umieszczam skrypt wykonujący kopie katalogu /domoticz oraz bazy danych na karcie SD. Można dopisać kolejny skrypt przenoszący plik kopi do innej lokalizacji albo wysyłać  mailem, w odpowiednim interwale czasowym.

#!/bin/bash
DOMO_IP="192.168.2.21" # Domoticz IP
DOMO_PORT="8080" # Domoticz port
### Konfiguracja parametrów
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE="domoticzbackup_$TIMESTAMP.db"
BACKUPFILEGZ="$BACKUPFILE".gz

#Utworzenie kopi w formacie tar
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /home/pi/domoticz/kopia/$BACKUPFILE
tar -zcvf /home/pi/domoticz/kopia/domoticz_$TIMESTAMP.tar.gz /home/pi/domoticz/

#Usunięcie kopi starszych niż 31 dni
/usr/bin/find /home/pi/domoticz/kopia/ -name '*.db' -mtime +31 -delete
/usr/bin/find /home/pi/domoticz/kopia/ -name '*.tar.gz' -mtime +31 -delet

Uruchomienie skryptów.

Nadajemy prawa do wykonywania pliku

sudo chmod +x /home/pi/xxx/xxx/backup.sh

Cykliczne wykonywanie skryptu

crontab -e
0 1 * * * sudo ~/domoticz/scripts/domoticz_backup.sh # raz dziennie

Buzzer w Domoticzu, czyli początki systemu alarmowego.

Zauważyłem, że w moim systemie brakuje systemu wykonawczego, który informowałby mnie o określonych zdarzeniach, które zaszły w moim domu. Mam obsługę powiadomień mailem, ale potrzebowałem bardziej dynamicznego rozwiązania, abym mógł reagować na bieżąco na zachodzące zmiany. Mój wybór padł na najprostszy buzzer ( głośniczek ) podłączony pod GPIO Raspberry Pi.

Zadanie projektowe wygląda następująco. Stworzyć system powiadomienia w przypadku przekroczenia przez piec c.o. zadanej temperatury, co uniemożliwi zagotowanie wody w obiegu.

Instalacja czujnika temperatury.

Rozpocząłem od podłączenia czujnika temperatury  na wyjściu wody z pieca, zgodnie z opisem Czujniki temperatury DS18B20+ w Raspberry Pi oraz Domoticzu.

screenshot_20170212_083759

Screenshot_20170212_083819.png

Podłączenie buzzera

Posiadam moduł z buzzerem aktywnym z generatorem. Umożliwia on tworzenie sygnałów dźwiękowych przy pomocy stałego sygnału napięciowego. Kosztował niecałe 8 zł, ale ich ceny zaczynają się już od 2,5 zł.

modul-z-buzzerem-aktywnym-z-generatorem-czarny

Pin „-” podłączamy do GND natomiast „S” pod pin sterujący ( u mnie GPIO 17 ). Środkowy pozostaje wolny.

Instalacja bibliotek wiringPi i obsługa buzzera.

Biblioteki te umożliwiają sterowanie sygnałami logicznymi (true/false) na każdym z pinów Raspberry Pi. Obsługa wiringPi jest zaimplementowana w Domoticzu od wersji 1726. W systemie instalujemy je poleceniem.

sudo apt-get install wiringPi

Po instalacji sprawdzamy czy system ma dostęp do obsługi bibliotek.

gpio readall

Powinniśmy ujrzeć coś takiego:

screenshot_20170212_091550

Obsługa pinów w Raspberry Pi

Wszystkie czynności konfiguracyjne wykonujemy ze swojego konta. Domoticz nie powinien pracować na uprawnieniach root.

gpio export "BCM PIN #" out

W miejscu „BCM PIN #” wstawiamy numer pinu z tabeli powyżej. U mnie będzie to GPIO 17. Analogicznie możemy uruchomić obsługę wejścia ( in ) konkretnego pinu.

gpio export"BCM PIN #" in

W moim przypadki wystarczy tylko obsługa wyjścia ( out )

Sprawdzamy czy wszystko do tej pory zrobiliśmy poprawnie

gpio exports

Wynik:

screenshot_20170212_095400

Uruchomienie buzzera w Domoticzu.

Dodajemy głośnik do systemu.

Screenshot_20170212_093213.png

W zakładce Przełączniki wchodzimy w zakładkę Ręczne świat./przeł. i ustawiamy jak poniżej.

screenshot_20170212_093314

Obsługa zdarzeń z wykorzystaniem buzzera.

Mając w systemie głośnik i czujnik temperatury pieca w module Konfiguracja/Więcej opcji/Zdarzenia ustawiamy alarm.

screenshot_20170212_094026

Teraz, gdy temperatura pieca przekroczy 70 st., uruchomi się na minutę głośnik ostrzegając przed możliwością zagotowania się wody w obiegu. Pętla będzie wykonywała się do momentu, aż temperatura nie spadnie poniżej zadanej wartości. Na razie nie wiem jak ustawić aby pomiędzy kolejnymi uruchomieniami dodać minutę przerwy. Spadek temperatury po zdławieniu pieca jest powolny i głośnik potrafi działać kilka minut co jest bardzo uciążliwe.

Uważam jednak, że problem został rozwiązany. Koszt elementów nie przekroczył kilku złotych. Możliwości rozbudowy i modyfikacji pomysłu są praktycznie nieograniczone. Zachęcam do testowania.

 

Xiaomi Smart Home Starter Kit w Raspberry Pi i Domoticzu.

W minionym tygodniu stałem się szczęśliwym posiadaczem zestawu  Xiaomi Smart Home Starter Kit. W pewnym momencie zauważyłem, że Domoticz w wersji Beta, ma zaimplementowaną obsługę tego zestawu. Postanowiłem więc zamówić na próbę ten zestaw i przetestować jego działanie, zważywszy, iż cena jest nader atrakcyjna, jak na ilość czujników, które otrzymujemy. Xiaomi Smart Home Starter Kit zamówiłem na Banggood.com. Aktualnie na Aliexpress można znaleźć w cenie 75 $.

W skład mojego zestawu wchodzi:

  1. Original Xiaomi Upgrade Smart Home WiFi Remote Control Multi-functional Gateway
    • główny element sterujący – w cenie 138,90 zł
  2. New Arrival Original Xiaomi Mini Smart Home Temperature and Humidity Sensor White
    • czujnik temperatury i wilgotności – w cenie 33,64 zł
  3. Original Xiaomi Intelligent Human Sensor Control Smart Home Suit Kit Accesory
    • czujnik ruch  – w cenie 54,69 zł
  4. Original Xiaomi Intelligent Door Window Sensor Control Smart Home Suit Kit Accessory
    • tzw. kontaktory ( czujnik otwarcia drzwi /okien )  – w cenie 45,01 zł

Instalacja aplikacji na Androida i sparowanie urządzeń.

Pobieramy aplikacje MiHome ze sklepu Google Play ( możemy użyć również kodu QR z pudełka ). Po zainstalowaniu musimy zrobić bardzo ważną rzecz, przestawić lokalizację na Chiny. Aplikacja może pozostać w języku angielskim. Bez tego nie będziemy mieli praktycznie żadnych funkcji urządzenia i nie uzyskamy klucza API ( Profile/Settings/Locale/ Mainland China ).

Wkładamy Gateway do gniazdka poprzez przejściówkę z chińskiego gniazdka na UE. Ja dostałem taką jako gratis do przesyłki. Miło z ich strony. Urządzenie powinno migać na niebiesko. Jeżeli nie, należy przytrzymać przycisk na obudowie, aby przełączyć bramę w tryb parowania. Aplikacja sama wykryje urządzenie i poprowadzi przez proces parowania. Podajemy nazwę sieci i hasło Wifi i to wszystko. Główne urządzenie już mamy.

Kolejne urządzenia podłączamy poprzez wprowadzenie ich w tryb parowania ( w czujniku temperatury  przytrzymujemy przycisk na obudowie a w pozostałych urządzeniach wciskamy reset cienkim drucikiem w malutkim otworze ). Aplikacja sama wykryje urządzenia i je sparuje. Jeżeli nie, możemy dodać je ręcznie.

Po sparowaniu wszystkich posiadanych czujników możemy przystąpić do zintegrowania ich z Domoticzem.

Dodanie czujników do Domoticza.

Przestawiamy Domoticza na kanał aktualizacji BETA ( Konfiguracja/Ustawienia/Aktualizacje oprogramowania )

Screenshot_20170205_100134.png

Po aktualizacji na dole listy sprzętu zobaczymy:

Screenshot_20170205_100745.png

Sprawą najtrudniejszą jest uzyskanie hasła. Jest to unikatowe hasło generowane przez urządzenie główne. Aby je uzyskać musimy przełączyć Xiaomi Gateway w tryb developerski. Musimy pamiętać, że z Domoticzem współpracuje tylko Xiaomi Gateway w wersji 2. Łatwo to sprawdzić. Wersja ta ma funkcjonalność radia. W oryginalnej dystrybucji są tylko nowe wersje. Uważać należy na atrakcje cenowe.

Aby uzyskać hasło do bramy należy w przejść do urządzenia Gateway w aplikacji ( np. ekran z obsługą oświetlenia ) i w prawym górnym rogu nacisnąć przycisk „trzy kropki” . Następnie przejść do „About”. Na samym dole będziemy mieli numer wersji. Należy stukać w napis do momentu pojawienia się chińskich znaków. Jeżeli czynność przebiegnie pomyślnie zobaczymy dwie kolejne pozycje menu w języku chińskim. Naciskamy pierwszą z nich i już możemy odczytać hasło ( ciąg znaków w drugim wierszu ).

Uzupełniamy dane z zakładki „Sprzęt”.

Screenshot_20170205_100745.png

  • adres w sieci naszego urządzenia
  • port – koniecznie 9898, na innym nie zadziała
  • hasło odczytane w trybie developerskim.

Trzeba pamiętać, aby odczytane hasło zapisać ( nacisnąć przycisk SAVE – obok cancel  – po wyświetleniu się stronki z hasłem w aplikacji ). Inaczej za każdym razem urządzenie wygeneruje inne hasło i nie będzie się łączyć z Domoticzem. Po dodaniu sprzętu, dla pewności, możemy wyczyścić cache przeglądarki i zrobić restart. W zakładce Urządzenia pojawią się nasze czujniki. Screenshot_20170205_103613.png

Konkluzja.

Czujniki są bardzo dobrej jakości. Po odkryciu kilku sztuczek proces parowania przebiega bardzo sprawnie. Są bardzo stabilne. Po tygodniu pracy ani razu nie odmówiły posłuszeństwa. W Domoticzu spełniają swoją rolę bardzo poprawnie. Inną sprawa jest aplikacja. Daje ona ogromne możliwości zarządzania czujnikami. Xiaomi Gateway ma możliwość ustawiania kolorów i intensywności świecenia, obsługę alarmu i radio ( niestety, albo stety tylko chińskiego ). Posiada możliwości kreowania scen i zdarzeń, podział na pomieszczenia, informacje pogodowe. W Domoticzu część tej funkcjonalności nie działa, ale tak chyba powinno być.  Chińskie radio nie jest niezbędne w moim systemie.

Poniżej lista kompatybilnych z  Domoticzem czujników:

  1. Human Body Sensor (Motion Sensor)
  2. Wireless Smart Switch
  3. Door/Window Sensor
  4. Temperature and Humidity Sensor
  5. Smart Socket/Plug – Zigbee version (The WiFi version is not supported)
  6. Xiaomi Mi Smart Cube
  7. Wireless Aqara Switch (Dual Button)
  8. Wireless Aqara Switch (Single Button)
  9. Wired Aqara Switch (Dual Button)
  10. Wired Aqara Switch (Single Button)
  11. Xiaomi Gateway LED

Polecam zapoznać się z logami i odczytami czujników z mojego sytemu na stronie Facebooka Raspberrywpraktyce. Miłego testowania.