Sterowanie centrum multimedialnym z poziomu Domoticza

Dzisiaj coś bardzo łatwego, lecz nie mniej efektownego. Z poziomu Domoticza możemy sterować centrum multimedialnym zbudowanym w oparciu o KODI. Jest to potężny, wieloplatformowy kombajn do zarządzania multimediami ( oczywiście zainstalowany na Raspberry Pi ) . Tym którzy znają ten program nie trzeba go zachwalać, dla tych co nie mieli jeszcze z nim styczności poświecę któryś z kolejnych wpisów.

zrzut ekranu36.pngAby zintegrować KODI z Domoticzem musimy dodać odpowiedni sprzęt. Wchodzimy w  /Konfiguracja/Sprzęt zrzut ekranu37.pngNadajemy nazwę naszego centrum i wybieramy typ sprzętu : Kodi Media Server i klikamy dodaj.

zrzut ekranu38

Następnie naciskamy /Konfiguracja przy naszym dodanym urządzeniu.

zrzut ekranu39.pngNadajemy nazwę ( może być taka sama jak w sekcji /Sprzęt ) i wpisujemy adres IP naszego centrum multimedialnego. Port pozostawiamy domyślny i naciskamy dodaj. I to tyle. W sekcji Przełączniki Domoticza pojawia nam się kafelek:

zrzut ekranu40.png

Pierwsza ikona pokazuje status urządzenia ( wyszarzona oznacza że urządzenie jest wyłączone ). Dalej mamy pilot którym możemy sterować urządzeniem.

zrzut ekranu41.pngPoniżej możemy zobaczyć historię działania systemy czy ustawić powiadomienia. Naciskając gwiazdkę dodajemy kafelek na Pulpit.

O ile z poziomu komputera jest to raczej ciekawostka, to już z poziomu smatrfona, z dedykowanej  do Domoticza aplikacji staje się bardzo użyteczne.

Obsługa kamer USB w Domoticzu.

Korzystanie z dedykowanej kamery w Raspberry Pi do monitorowania otoczenia jest dość kłopotliwe. O ile instalacja i uruchomienie nie nastręcza wielkich problemów o tyle już zintegrowanie jej z Domoticzem jej kłopotliwe. Pomijając trudności z obsługą w panelu duże kłopoty wynikają z krótkiego kabla łączącego kamerę z Raspberry. Na szczęście, tak Raspberry jak i Domoticz bardzo dobrze współpracuje z kamerami USB. Z uwagi na to, iż w swoim systemie nie potrzebuję tej funkcjonalności postanowiłem jedynie z ciekawości sprawdzić czy uda mi się uruchomić usługę.

Obsługa kamery USB w Raspberry Pi

Tradycyjnie najpierw uruchamiam obsługę bezpośrednio w Raspberry.
Instaluję pakiet fswebcam
sudo apt-get install fswebcam

i wydaję komendę

fswebcam nazwa_obrazu.jpg
zrzut ekranu31
Oczywiście możemy zmieniać także parametry komendy, takie jak np. rozdzielczość
fswebcam -r 1280x720 nazwa_obrazu.jpg
czy usunąć ramkę.
fswebcam -r 1280x720 --no-banner nazwa_obrazu.jpg
zrzut ekranu32
Oczywiście nic nie stoi na przeszkodzie aby napisać prosty skrypt, który zautomatyzuje tę czynność.
Zakładamy katalog webcam w katalogu domowym /home/pi/
mkdir webcam

i piszemy skrypt

sudo nano ./webcam.sh
wstawiamy
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
fswebcam -r 1280x720 --no-banner /home/pi/webcam/$DATE.jpg
Po nadaniu uprawnień
sudo chmod +x webcam.sh

i uruchomieniu skryptu

./webcam.sh
zostanie utworzone plik aktualna data.jpg w katalogu /home/pi/webcam.
zrzut ekranu33
Teraz dodajemy wpis do crona aby zdjęcia wykonywały się cyklicznie.
Otwieramy crona
crontab -e
i wstawiamy na końcu
* * * * * /home/pi/webcam.sh
Od tej pory skrypt wykona zdjęcie z aktualna datą co minutę i zapisze do katalogu webcam.
zrzut ekranu34

Integracja kamery USB z Domoticzem

Jeżeli prawidłowo skonfigurowalismy obsługę kamery pod Raspberry to nic nie stio na przeszkodzie aby dodać ją do Domoticza. Wykorzystamy tu program uvccapture. Instalujemy do więc i tyle.
sudo apt-get install uvccapture
Uruchamiamy Domoticza i przechodzimy do sekcji – / Ustawienia / Więcej opcji / Kamery,
zrzut ekranu26
klikamy Dodaj kamerę i uzupełniamy wymagane pola:
zrzut ekranu27.png
zrzut ekranu29

Możemy teraz zrobić zdjęcie z naszej kamery lub uruchomić streaming.

W przyszłości może może kupie jakąś kamerę przemysłową i wystawie ją za okno, ale na razie sprawdziłem, że działa i to mi na razie wystarczy.
zrzut ekranu30

Kopia zapasowa Domoticza

kopia

W związku z tym, iż udało mi się od nowa podłączyć kilka czujników i kamerę ( ale o tym w kolejnych wpisach ) postanowiłem dalej pobawić się kopia zapasową.  Z uwagi na to, iż moje raspberry ma za mało prądu aby zasilić dysk usb, na razie będę robił kopię na drugim pendrivie.

Kopia po linuxem.

Po pierwsze musimy zamontować pendrive kopi w systemie. Sprawdzamy jka wykrywane są urządzenia:

pi@raspberrypi:~$ sudo fdisk -l

zrzut ekranu14

Opis: /dev/mmcblk0p1 to kartaSD,  /dev/sda1 – pendrive kopi,  /dev/sdb – Domoticz. Musimy zamontować pendrive kopi w systemie i zrobić obraz działającego systemu.

Tworzymy punkt montowania. Tworzymy katalog usb w katalogu /media

pi@raspberrypi:~$ sudo mkdir /media/usb

Nadajemy uprawnienia dla katalogu ( użytkownik domyślny „pi”

pi@raspberrypi:~$ sudo chown -R pi:pi /media/usb

Montujemy katalog /usb

pi@raspberrypi:~$ sudo mount -t ext4 /dev/sda1 /mnt/usb

Ważne: /dev/sda1 to dysk kopi a „ext4” to system plików w jakim sformatowaliśmy dysk usb. I na koniec:

pi@raspberrypi:~$ sudo dd if=/dev/sdb | pv | sudo dd of=/media/usb/domoticz20160612.img

U mnie to kopia obrazu partycji /dev/sdb do pliku /domoticz20160612.img

Kopia działającego Domoticza.

U  mnie to wygląda tak.

zrzut ekranu24

Po utworzeniu katalogu /usb w /media i nadaniu mu uprawnień ( tylko za pierwszym razem ) wpisuje kolejno 2 poniższe polecenia ( montowanie dysku i wykonanie kopi partycji ). I gotowe.

pi@raspberrypi:~$ sudo mount -t ext4 /dev/sdb1 /media/usb

pi@raspberrypi:~$ sudo dd if=/dev/sda | pv | sudo dd of=/media/usb/domoticz20160619.img

 

Kopię zapasową w kompresji gz tworzymy poleceniem:

sudo dd if=/dev/sda bs=4M | gzip > /media/usb/domoticz20160619.img; sudo sync

Przywracanie sporządzonej kopii zapasowej:

sudo gzip -dc //media/usb/domoticz20160619.img > /dev/sda; sudo sync

Czujniki temperatury DS18B20+ w Raspberry Pi oraz Domoticzu.

Nadeszła pora aby do naszego systemu podłączyć jakieś czujniki. W końcu w jakimś celu uruchomiliśmy tego Domoticza. Zaczynamy od czujników temperatury. Wszystkie czujniki będę instalował najpierw w Raspbianie ( aby sprawdzić czy są prawidłowo wykrywane ), następnie będę dodawał je do Domoticza.

Zaczynamy od czujnika temperatury DS18B20+.

indeks

Podłączenie czujnika.

Schemat podłączenia. Prawą nóżkę ( patrząc od przodu czujnika, pod literką „S” ) podłączamy do zasilania 3,3 V, nóżkę lewą ( pod literką „D” ) podłączamy do GND , natomiast środkową do PIN 4. Ważne aby połączyć zasilanie z nóżką komunikacji ( PIN 4 ) przy pomocy rezystora  4,7KΩ.

Ważne: Podłączenie odwrotne ( zamiana zasilania z GND ) skutkuje spaleniem czujnika. Dosłownie rozgrzewa się do czerwoności.

Instalacja i odczyt.

Teraz sprawdzamy czy Raspberry widzi termometr.

Dodajemy moduły obsługi magistrali 1-wire.

sudo modprobe w1-gpio
sudo modprobe w1-therm

Dla pewności  należy jeszcze dodać poniższy wpis na końcu  pliku /boot/config.txt i zrestartować raspberry.

dtoverlay=w1-gpio,gpiopin=4

Dodajemy moduły do pliku /etc/modules

sudo nano /etc/modules

i na końcu wpisujemy

w1-gpio
w1-therm

Wychodzimy z edytora Ctrl+X, zapisujemy Y i Enter.

Stan czujników odczytujemy poleceniem:

cd /sys/bus/w1/devices

i poleceniem ls sprawdzamy czy widoczne są jakieś czujniki

zrzut-ekranu102

28-021562ad4eff to adres naszego termometru.

Temperaturę sprawdzamy poleceniem:

cat /sys/bus/w1/devices/28-021562ad4eff/w1_slave

zrzut-ekranu103

Otrzymaliśmy odczyt temp. 19 st. Parametr crc=33 YES świadczy o odczycie bez błędów.

Dodanie czujnika do Domoticza.

Wchodzimy w Konfiguracja/Sprzęt i dodajemy czujnik. Nadajemy dowolna nazwę i wybieramy typ 1-Wire ( System )

zrzut ekranu19

Mój termometr jest widoczny w sekcji Konfiguracja/Urządzenia

zrzut ekranu21

Wchodzimy w zakładkę Temperatura ( na górze strony ) i widzimy

zrzut ekranu22.png

Naciskamy gwiazdkę i dodajemy czujnik na pulpit. Możemy ustawić sobie powiadomienia czy obejrzeć wykres.

zrzut ekranu23.png

Aktualizacja 22.11.2016

Po jednej z ostatnich aktualizacji zmienił się sposób komunikacji 1-wire w systemie. Od tej pory dodając termometr zmieniamy domyślne ustawienia na takie  jak na poniższym zrzucie:

zrzut-ekranu104

Komenda dd – informacja o statusie kopiowania

28993794624_82a2dc64f0

W związku z tym, iż nie mogę się zmusić do regularnych kopi systemu  postanowiłem wypracować sobie jakiś sprytny sposób. Mój wybór padł na „dd” – potężne linuxowe narzędzie do kopiowania danych. Jest to program do niskopoziomowego kopiowania i konwersji surowych danych. Cechuje się bardzo dużą dokładnością i stabilnością działania co odbija sie na prędkości kopiowania. O podstawowej składni komendy pisałem już w poście dotyczącym instalacji DOMOTICZa. Podstawowa dla mnie niedogodność tej komendy to brak paska postępu kopiowanego pliku lub partycji. Z uwagi na to często nie wiem czy program poprawnie się uruchomił i ile czasu pozostało do zakończenia operacji. Jest na to oczywiście sposób.

Na początku instalujemy pakiet „pv”

sudo apt-get install pv

Po zakończonej instalacji składnia komendy powinna wyglądać jak poniżej.

sudo dd if=/dev/dane wejściowe | pv | sudo dd of=/dev/dane wyjściowe

Tak to działa:

zrzut ekranu13

W systemach opartych na Ubuntu 16.04 i nowszych możemy użyć komendy:

sudo dd if=/dev/dane wejściowe of=/dev/dane wyjściowe status=progress

Poniżej efekt pracy programu i jego efekt ( klonowanie partycji 16GB ).

zrzut ekranu11

zrzut ekranu12

Uwaga. program dd jest bardzo niebezpieczny przy braku należytej ostrożności. Nie analizuje on danych tylko „bezmyślnie” nadpisuje całe partycje. Można przez nieuwagę nadpisać sobie partycje systemową kopią pendriva. Zawsze dokładnie sprawdzaj nazwy napędów w systemie np. komendą sudo fdisk -l. Pozwala to jednak dzięki temu kopiować zamontowane partycje, czyli na backup uruchomionego systemu

I bardzo ważne. Po zrobieniu kopi systemu na innym pendrivie koniecznie zmieniamy GUID ( post o instalacji Domoticza na USB ) aby system startujący z karty SD prawidłowo rozpoznał pendriva.

W kolejnych postach napiszę jak zautomatyzować tworzenie kopi zapasowych ( uruchamianie systematycznie o określonych porach dnia ). Niezbędny bedzie prosty skrypy i wpis w cronie. Ale o tym za jakiś czas.

Raspberry na WIFI

Idąc za ciosem, po instalacji DOMOTICZa, postanowiłem uwolnić moje Raspberry od kabla sieciowego. Znalazłem w szufladzie stary adapter WIFI i zmusiłem go do pracy. Dodam, że pracuje tylko poprzez ssh więc oprócz zasilania nie mam kablowej łaczności z maliną.

zrzut ekranu9.png

Dla przypomnienia. Z Raspberry łączymy się poleceniem : ssh pi@192.168.1.105, gdzie pi to użytkownik a po małpce jest nasze lokalne IP maliny. Następnie podajemy hasło :raspberry.

Ale do rzeczy. Na początku musimy i tak podpiąć malinę po LAN aby móc na niej pracować.

Najpierw sprawdzamy jakie interfejsy sieciowe mamy uruchomione:

sudo nano /etc/network/interfaces

Powinniśmy ujrzeć coś takiego :

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

To trochę mało. Brakuje sieci bezprzewowej. W związku z tym na końcu dopisujemy ( używając nano )

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Prawidłowy plik powinien wyglądać tak.

zrzut ekranu10.png

OK. Teraz dodajemy naszą sieć i hasło.

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Na końcu pliku dopisujemy:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="*****"
psk="*******"

# Protocol type can be: RSN (for WP2) and WPA (for WPA1)
proto=WPA

# Key management type can be: WPA-PSK or WPA-EAP (Pre-Shared or Enterprise)
key_mgmt=WPA-PSK

# Pairwise can be CCMP or TKIP (for WPA2 or WPA1)
pairwise=TKIP

#Authorization option should be OPEN for both WPA1/WPA2 (in less commonly used are SHARED an$
auth_alg=OPEN
}

gdzie ssid to nazwa naszej sieci a psk to hasło.

I tyle. Restartujemy raspberry, wyjmujemy kabel i logujemy sie przez ssh. Pomiatajmy aby podać prawidłowe IP maliny ponieważ router przypisze jej inny adres sieciowy.

Jak widać u mnie działa:

IMG_20160605_134159

 

Instalacaja DOMOTICZ – na USB

Czas zacząć poważną prace.

Do instalacji sytemu na USB podchodziłem kilkukrotnie. Internet jest pełen wszelkiej maści poradników ale mi do tej pory się to nie udawało. Przy np. OSMC ( dawniej Raspbmc ) nie ma z tym problemu. Instalator systemu, przy włożonym pendrivie sam zainstaluje na nim system. Niestety w DOMOTICZu musimy zrobić to sami.

  • Zaczynamy od przygotowania karty SD i pendriva.

Rzecz oczywista – formatujemy oba nośniki. Z uwagi że pracuje na LINUXie wszystko będę opisywał na tym systemie. Myślę, że użytkownicy Windowsa nie będą mieli problemu ze znalezieniem alternatywnych rozwiązań. Poza tym jako zwolennik upraszczania sobie życia część działań będę wykonywał w konsoli inne w trybie graficznym. Zdaje sobie sprawę, że odbije się to na spójności poradnika ale ułatwi wszystkim życie. Jednakże zalecam pracę w konsoli. W Kubuntu wygląda to następująco.

zrzut ekranu8.png

Używam programu do Zarządzanie Partycjami np. w Ubuntu polecam gparted.

Tak wygląda tablica partycji karty SD – urządzenie –  /dev/mccblk0. Usuwamy wszystkie partycje i tworzymy nową. Proponuje zastosować system plików ext4. Podobnie robimy z pendrivem – urządzenie – dev/sdb. Po formacie urządzeń i założeniu na nich nowej partycji przechodzimy do kolejnego etapu.

  • Instalacja systemu

Pobieramy obraz DOMOTICZa ze strony domowej : https://sourceforge.net/projects/domoticz/files/ i pobieramy najnowsza wersja sytemu. W tym momencie jest to : domoticz-raspberrypi-sdcard-4834.7z. Zapisujemy plik na dysku i rozpakowujemy. Teraz przechodzimy do instalacji. Na początek musimy zainstalować system na karcie SD oraz na pendrivie. Teraz kila słów wyjaśnienia. Idea jest taka, że system wystartuje z karty SD ale pliki będzie zapisywał na USB. Poprawia to stabilność i szybkość działania systemu oraz co oczywiste daje nam dużo więcej miejsca na dane. Proponuje skorzystać z linuxowej komendy dd. Podstawowa składnia komendy wygląda następująco :

dd if=nazwa_pliku_wejściowego of=nazwa_pliku_wyjściowego

Otwieramy terminal i wpisujemy ( u mnie ):

maciej@maciej-Latitude-E5430-vPro:~$ sudo dd if=/home/maciej/Pobrane/Domoticz/domoticz-raspberrypi-sdcard-2563.img of=/dev/mmcblk0

Komenda nie wyświetla paska postępu kopiowania pliku, więc zalecana jest cierpliwość. Jeśli nie pluje błędami znaczy, że działa.

Teraz instalujemy system na USB. Analogicznie, tylko zmieniamy urządzenie wyjściowe na nasz pendrive.

maciej@maciej-Latitude-E5430-vPro:~$ sudo dd if=/home/maciej/Pobrane/Domoticz/domoticz-raspberrypi-sdcard-2563.img of=/dev/sdb1

Wynik komendy jak ponizej świadczy, że wszystko poszło OK.

4059136+0 przeczytanych recordów
4059136+0 zapisanych recordów
2078277632 bytes (2,1 GB, 1,9 GiB) copied, 423,853 s, 4,9 MB/s

Mamy teraz zainstalowany identyczny system na karcie SD i USB.

  • Usuniecie zbędnych partycji

Usuwamy wszystkie partycje oprócz „boot” z karty SD a z USB usuwamy właśnie partycje „boot”. Chodzi o to aby system, który i tak bootuje z karty SD musiał przejść na USB. Nie jest to niezbędne ponieważ i tak będziemy zmieniać ścieżki ale da nam pewność że system działa z USB, ponieważ na karcie nie ma danych. Znowu uruchamiamy program do partycjonowania i wykonujemy powyższe czynności.

  • Zmiana ścieżek dostępu do plików

Musimy teraz musimy skazać dla Rasberry aby po zbotowaniu przeszedł na USB. W tym celu modyfikujemy plik cmdline.txt na karcie SD i zmieniamy ścieżkę do katalogu ROOT. Aby to zrobić musimy poznać numer GIUD naszego pendriva i wskazać do w pliku cmdline.txt.

Musimy przekonwertować tablicę partycji z DOS na GTP. Wykonujemy następujące polecenia:

sudo apt-get update
sudo apt-get install gdisk
gdisk /dev/sdb

Po uruchomieniu gdisk naciskamy ? i wybieramy“, recovery and transformation options (experts only)”, znowu ? i wybieramy “load MBR and build fresh GPT from it”, na koniec ? i “write table to disk and exit”. Wyjmujemy USB, wkładamy ponownie i uruchamiamy znowu gdisk.

sudo gdisk /dev/sdb

teraz naciskamy „i”, następnie „2” i mamy widoczne potrzebne informacje.

Partition number (1-2): 2
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: CA9D1961-4627-46BB-BACA-7C7106977E5C
First sector: 122880 (at 60.0 MiB)
Last sector: 60545023 (at 28.9 GiB)
Partition size: 60422144 sectors (28.8 GiB)
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'

Zapamiętujemy

Partition unique GUID: CA9D1961-4627-46BB-BACA-7C7106977E5C

Teraz możemy podmienić ścieżkę w pliku cmdline.txt na karcie SD. Jako root zamieniamy  root=/dev/mmcblk0p2 na root=PARTUUID=XXXXXX

gdzie zamiast XXXXXXX wstawiamy zapamiętany GUID ( razem z myślnikami ). Możemy wykorzystać edytor nano :

sudo nano cmdline.txt

po zmianie ścieżki wychodzimy CTRL+X.

I to tyle. Wkładamy kartę SD i pendrive do Raspberry uruchamiamy DOMOTICZa. Oczywiście jeżeli dla kogoś wystarczy instalacja i praca na SD ( sam tak bardzo długo robiłem ) to nie musi bawić się w gdisk-iem i poprzestraszać na instalacji obrazu na SD i juz ma gotowy system do pracy. Należy pamiętać aby wtedy użyć szybkiej karty min. Class 10 oraz zwrócić uwagę na jej jakość ponieważ będzie ona cały czas pracowała i szybko padnie.

PS. Korzystając z poradnika musisz podstawiać swoje dane ( nazwy urządzeń, GUID itp. ).

Nowy nabytek.

Dzisiaj stałem się szczęśliwym posiadaczem ( na razie tylko udało mi się zamówić ) tej zabaweczki. Jak tylko dojdzie przesyłka to opisze wrażenia.

Szczegóły zamówienia:

zrzut ekranu6Do czego to doszło, żeby komputer kosztował tyle co koszt wysyłki listu ? Dziwny jest ten świat.

Trudne początki.

Witam Was w moim pierwszym wpisie. Na początku chciałbym w kilku słowach wytłumaczyć się dlaczego piszę ten tekst. Od około roku intensywnie zmagam się z Raspberry Pi a zwłaszcza z DOMOTICZEM. Po wielu sukcesach ale głównie porażkach, wielu restartach i reinstalacjach ( nadal o kopi zapasowej przypominam sobie po fakcie ) postanowiłem zrobić w końcu coś porządnie. Po wczorajszym „położeniu” systemu, nad którym pracowałem kilka miesięcy ( kopia zapasowa oczywiście nie istnieje ) zapadła decyzja, że zaczynam budowę „inteligentnego domu” od podstaw. Aby tym razem zabezpieczyć się przed tym, ze zapomnę skąd brałem pomysły i gdzie szukałem skryptów zadecydowałem spisać cały proces. Będzie to dla mnie niezwykle pomocne przy czekających mnie niechybnie reinstalacjach systemu.

Po tym wszystkim pomyślałem, że może wart byłoby podzielić się tymi doświadczeniami ze światem. W domyśle ma to być mój notatnik z instalacji poszczególnych czujników. Postanowiłem jednak zacząć wszystko od początku, od instalacji systemu, jego konfigurację aż do ostatecznego wdrożenia.

Oczywiście wszystko już jest w sieci. Nic nowego nie wymyślę, ale może zaoszczędzę sobie i innym mozolnego przekopywania internetu aby po przeczytaniu wielu poradników , po tygodniach walki zamigać diodą podłączoną do GPIO.

To jest mój punkt wyjścia 🙂

DSC_0033Profesjonalnie to to nigdy nie wyglądało. Miałem już dosyć tłumaczenia, że nie zagraża to bezpieczeństwu p.poż.

Plan jest taki aby to wszystko porozpinać, opisać, zainstalować w skrzynce elektrycznej ( może na szynie DIN ) i przenieść gdzieś w ustronne miejsce ( np. piwnica ). Łatwiej będzie poprowadzić kable ( ponieważ większość czujników będzie podłączona przewodem od domofonu ).

W kolejnym poście opisze proces instalacji systemu i tworzenie kopi zapasowych ( lepiej późno niż wcale ).

Zapraszam do lektury.