Zdalny dostęp do raspberry przez VNC

1228500347412_tightvnc-logo

Jeżeli zainstalowaliśmy Domoticza na Raspberry to w zupełności wystarcza nam tryb testowy. Nie ma potrzeby instalowania serwera X-ów ( trybu graficznego ). Łączymy się z systemem poprzez ssh i gotowe.  Jeżeli jednak chcemy pracować na Rasbianie w trybie graficznym to dobrze byłoby mieć do niego dostęp z zewnątrz. Jednym z lepszych sposobów jest instalacja VNC.

Instalacja VNC na Raspberry Pi

Logujemy się do raspberry i instalujemy serwer :

sudo apt-get install tightvncserver

Uruchamiamy tightvncserver i podajemy wymagane hasło:

tightvncserver

Następnie tworzymy plik z ustawieniami:

sudo nano /etc/init.d/tightvncserver

Wklejamy poniższy kod:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          tightvncserver
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop tightvncserver
### END INIT INFO
 
### Customize this entry
# Set the USER variable to the name of the user to start tightvncserver under
export USER='pi'
### End customization required
 
eval cd ~$USER
 
case "$1" in
  start)
    su $USER -c '/usr/bin/tightvncserver :1'
    echo "Starting TightVNC server for $USER "
    ;;
  stop)
    pkill Xtightvnc
    echo "Tightvncserver stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
    ;;
esac
exit 0

Nadajemy uprawnienia i uruchamianie przy starcie:

sudo chmod 755 /etc/init.d/tightvncserver

sudo update-rc.d tightvncserver defaults

Niezależnie jakiej aplikacji do zdalnej komunikacji będziemy używać  podajemy adres IP naszej maliny port  5901 oraz podajemy hasło, które ustawiliśmy przy pierwszym uruchomieniu.

U mnie w Kubuntu wygląda to tak.

zrzut ekranu54

Po naciśnięciu ENTER ukaże nam się pulpit Rasbiana w pełnej krasie.

Dostęp do Raspberry Pi z zewnatrz – Hamachi

Cała idea inteligentnego domu zasadza się na tym aby mieć do niego dostęp z dowolnego miejsca na ziemi. Podczas urlopu dobrze jest mieć podgląd podstawowych parametrów lub nadzór nad bezpieczeństwem pozostawionego mienia.

hamachi

Oczywiście sposobów „wystawienia na zewnątrz” naszej maliny jest mnóstwo. Ja opisze sposób przez serwery HAMACHI. Moje próby z NO-IP okazały się porażką więc postanowiłem poszukać przyjaźniejszego rozwiązania. Hamachi pozwala na bezpośrednie udostępnianie plików, pracę aplikacji sieciowych, gier, a nawet udostępnianie drukarek – słowem korzystanie z wszelkich możliwości jakie daje praca w sieci lokalnej. Hamachi sprawia, że prywatny adres IP działa jak publiczny. Program jest bardzo prosty w obsłudze konfiguracji. Posiada dedykowane narzędzia konfiguracyjne a co najważniejsze umożliwia dostęp do sieci z telefonu. Ale po kolei.

Założenie konta w serwisie LogMeIn.

Na początku musimy założyć konto w serwisie LogMeIn – https://www.vpn.net/. Po założeniu konta musimy pobrać odpowiedni program na raspberry. Przechodzimy do sekcji https://secure.logmein.com/labs/#HamachiforLinux i pobieramy paczkę logmein-hamachi_X.X.X.XXX-X_armel.deb. Oczywiście możemy to zrobić z konsoli, pamiętając aby w miejsce X-ów podstawić aktualną wersję pakietu.

$ sudo wget http://www.vpn.net/installers/logmein-hamachi_2.1.0.174-1_armhf.deb

Instalacja zależności

Następnie instalujemy pakiet lsb-core

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install lsb-core

i instalujemy HAMACHI na naszej malinie

$ sudo dpkg -i logmein-hamachi_X.X.X.XXX-X_armhf.deb

Konfiguracja klienta

Logujemy się z raspberry do Hamachi:

$ sudo hamachi login

Podajemy login do serwisu:

$ sudo hamachi attach <tu podajemy maila, loginu do serwisu LogMiIn>

Ustalamy swój nick:

$ sudo hamachi set-nick „np. domoticz lub malina itp.”

Dodanie raspberry do wirtualnej sieci

Teraz przechodzimy do www Hamachi i dodajemy nasz komputer do sieci. W sekcji MyNetworks widzimy naszą utworzoną sieć (tunel). Wciskamy Edit i otwieramy zakładkę Members. Pod zakładką Members widzimy ID naszej sieci : XXX-XXX-XXX. Dodajemy więc nasz sprzęt do sieci:

sudo hamachi do-join XXX-XXX-XXX

Jeżeli przy zakładaniu sieci podaliśmy hasło to je wpisujemy. Potwierdzamy żądanie dołączenia maliny do sieci Hamachi na stronie www ( pojawi się prośba o zaakceptowanie ) i już.

Dodajemy wpis  do etc/rc.local aby serwis uruchamiał sie przy starcie systemu.

sudo update-rc.d logmein-hamachi defaults

Zarządzanie siecią.

Pod linuxem możemy zainstalować Haguichi.

zrzut ekranu53

Aby zalogować się do DOMOTICZA wpisujemy w przeglądarce adres ip nadany przez serwis HAMACHI i port 8080. W telefonie jest to trochę bardziej skomplikowane. Musimy pobrać odpowiednie certyfikaty i uruchomić VPN-a. Jest to oczywiscie do przejścia o czym napisze za jakiś czas. W wersji bezpłatnej możemy dodać do sieci do 5 komputerów.

Czujnik deszczu w Domoticzu

Od dłuższego czasu jestem posiadaczem Czujnika opadów deszczu YL-83. Urządzenie posiada wyjście analogowe i cyfrowe. Z uwagi na to, że raspberry pi nie posiada wyjścia analogowego ( w przeciwieństwie do Arduino ), nie możemy odczytać dokładnej wartości opadów. Otrzymamy tylko informacje o przejściu urządzenia w stan niski lub wysoki. Jeśli chodzi o opady deszczu w zupełności nam wystarczy informacja czy i jak długo padało.

czujnik deszczu

O ile podłączenie i napisanie prostego skryptu do obsługi czujnika w raspberry nie jest trudne, o tyle podłączenie go do Domoticza stanowiło dla mnie nie lada wyzwanie. Domyślnie Domoticz nie obsługuje urządzeń komunikujących się poprzez zmianę stanu ( np. czujnik ruchu, czujnik wilgotności gleby czy powyższy czujnik opadów ). W sieci jest kilka rozwiązań, ale wydały mi się one delikatnie mówiąc skomplikowane. Można podłączyć czujniki przez MySensors ( trzeba tworzyć bezprzewodowe czujniki ) lub skrypty lua. Jednak niedawno odkryłem sposób komunikacji pomiędzy Raspberry a Domoticzem poprzez JSON (JavaScript Object Notation).

W dużym uproszczeniu JSON pobiera dane z czujników podłączanych do Raspberry i przekazuje je do Domoticza. Składnia komendy wygląda następująco:

http://<username:password@>domoticz-ip/json.htm?api-call

Teraz pozostaje jakoś to opchnąć do Domoticza i czekać na deszcz.

Podłączenie czujnika deszczu do Raspberry.

Podłączenie pinów:

  • VCC podpinamy do 5V RPi
  • DO podłączamy do  GPIO ( u mnie pin 27 )
  • GDN do  GND)
  • AO pozostaje wolny

Prosty skrypt sprawdzający stan na pinie w raspberry:

#!/usr/bin/python

import RPi.GPIO as io
water_sensor = 27
io.setmode(io.BCM)
io.setup(water_sensor, io.IN)
try:
if io.input(water_sensor):
print("Brak opadów")

else:
print("Opady deszczu")

finally:
io.cleanup()

Integracja czujnika deszczu z Domoticzem.

Dodajemy wirtualny czujnik, ustawiamy na Przekaźnik ( Obsługa gniazdek WIFI, czyli jak to zrobić bez kabli. ). W zakładce /Konfiguracja/Urządzenia sprawdzamy idx naszego wirtualnego czujnika. W edycji możemy zmienić sobie ikonę z żarówki na kropelkę.

zrzut ekranu48.png

zrzut ekranu49

Teraz musimy przygotować komendę JSON do odczytania stanu urządzenia na raspberry i przesłania jej do odpowiedniego przełącznika w Domoticzu. U nie wygląda tak:

 http://192.168.X.XXX:8080/json.htm?type=command&param=switchlight&idx=21&switchcmd=Off 

Na początku adres IP i port Domoticza. Dalej komenda ustawiająca parametr czujnika, dla którego w Domoticzu idx wynosi 21 na OFF. Czyli jeśli czujnik deszczu nie wykrywa opadów to ustaw przełącznik na wyłączony. Przy wykryciu deszczu komenda powinna wyglądać jak poniżej:

http://192.168.X.XXX:8080/json.htm?type=command&param=switchlight&idx=21&switchcmd=On

Gotowy skrypt do obsługi czujnika i wysłania danych do Domoticza wygląda tak:

#!/usr/bin/python

import urllib
 import urllib2
 import time
 import RPi.GPIO as io
 water_sensor = 23
 io.setmode(io.BCM)
 io.setup(water_sensor, io.IN)
 try:
 if io.input(water_sensor):
 active_time = time.time()
 print("No Rain Detected")
 url = 'http://192.168.1.105:8080/json.htm?type=command&amp;param=switchlight&amp;idx=2&amp;switchcmd=Off'
 request = urllib2.Request(url)
 response = urllib2.urlopen(request)
 else:
 active_time = time.time()
 print("Rain Detected")
 url2 = 'http://192.168.1.105:8080/json.htm?type=command&amp;param=switchlight&amp;idx=2&amp;switchcmd=On'
 request = urllib2.Request(url2)
 response = urllib2.urlopen(request)

except KeyboardInterrupt:
 print "\nUser Halt!"
 finally:
 io.cleanup()

W water_sensor ustawiamy swój pin,  pod który podpięliśmy czujnik i idx urzadzenia w Domoticzu, nadajemy nazwę skryptu i uprawnienia ( sudo chmod 777 rain.sh – na wszelki wypadek ) .Uruchamiamy skrypt:

./rain.sh

zrzut ekranu50

Po wykryciu wody

zrzut ekranu51

Tak wygląda to w logach.

zrzut ekranu52.png

Pozostaje dodać tylko odpowiedni wpis w cronie aby sprawdzać co 5 minut czy pada deszcz.

pi@raspberrypi:crontab -e

i na końcu pliku wpisujemy :

* 5 * * * /home/pi/domoticz/scripts/rain.sh

I to wszystko.

Jest to w pewnym sensie sposób uniwersalny. Możemy tak zintegrować takie czujniki jak ruchu czy wilgotności gleby ( w zakresie mokro sucho ).

Obsługa gniazdek WIFI, czyli jak to zrobić bez kabli.

Jakiś czas temu postanowiłem spróbować podłączyć do Domoticza jakieś gniazdko sterowane przez sieć. Z uwagi na to, iż cena markowych urządzeń jest jednak trochę zaporowa kupiłem na Aliexpress.com takie oto cudo:
UK-Plug-Orvibo-S20-Wifi-Smart-Switch-Power-Adapter-Remote-Control-Smart-Socket-Smart-Home-Automation.jpg_640x640
Przy cenie poniżej $20 warto było zaryzykować.
Instalacja jest banalnie prosta. Pobieramy przez kod QR aplikacje na telefon i parujemy urządzenia. Aplikacja jest po angielsku ( co nie jest regułą ) więc nie powinna nastręczać trudności z obsługą. Gdy już sprawdziliśmy, że gniazdko da się obsłużyć smartphonem spinamy je z Domoticzem.

Integracja Orvibo S20 z Domoticzem.

Jedyną informacje jaką musimy zdobyć to MAC adres urządzenia w sieci. Ja wykorzystuje do tego aplikacje FING.
Po odświeżeniu sieci znajdujemy na liście urządzenie Hi-flying electronics technology i  odczytujemy  MAC adres ( poniżej adresu IP ). U mnie jest to AC:CF:23:9C:A3:D6. Teraz pozostaje tylko napisać skrypt:
Plik kopiujemy do /home/pi/domoticz/scripts. Nic w nim nie zmieniamy. Nadajemy mu nazwę orvibo-s20.pl. Następnie nadajemy prawa do wykonywania skryptu:
sudo chmod 777 orvibo-s20.pl
Teraz przechodzimy do Domoticza i dodajemy sprzęt. Wybieramy typ „Dummy” czyli wirtualne czujniki. Po dodaniu sprzętu
zrzut ekranu42.png
i na górze naciskamy „Utwórz wirtualne czujniki”. Wybieramy typ czujnika „Przełącznik” i nadajemy mu nazwę.
zrzut ekranu44
Przechodzimy teraz do zakładki „Przełączniki” na górze ekranu, odnajdujemy nasze urządzenie i naciskamy edycję i wypełniamy pola, podając ścieżkę do pliku i MAC adres gniazdka, jak na zdjęciu poniżej.
zrzut ekranu45.png
I to tyle.
Po naciśnięciu żarówki włączy się nasze urządzenie. Oczywiście możemy stosować tu plany czasowe, powiadomienia czy kontrolę logów. Tym sposobem możemy sterować wszystkimi urządzeniami podłączonymi do gniazdek w domu.