UPSa dostałem… Jakbym miał za dużo czasu i się nudził ;)

Pojawił się w domu nowy kolega… Trochę już wiekowy, może niezbyt piękny, ale po wymianie baterii działający bardzo dobrze. UPS APC CS 350. Problematyczne było znalezienie kabla transmisyjnego (specjalna, 10 żyłowa 'RJotka' -> USB), ale i z tym sobie poradziłem, za co bardzo dziękuję kolegom.

Dążymy do tego:

A sam UPS wygląda tak 🙂

Skoro zadziałał grzechem byłoby:
– pozostawienie go samemu sobie,
– odpuszczenie monitorowania
– i oczywiście dodaniu do naszego Smart home 😉

Co prawda w przypadku Raspberry Pi zmieniłem miejsce systemu na HDD, ale poprawienie bezpieczeństwa i stabilności zawsze jest dobrym pomysłem. A do tego – jeżeli braknie prądu to dzieci zawsze będą mogły lekcje odrobić przy lampce, z czego na pewno będą się bardzo cieszyć. Lampka z żarówką 7W wytrzymuje na nim ponad dwie godziny, także czasu będą miały sporo…

Bez zbędnych dyskusji zabieramy się do pracy.

Najpierw odświeżenie repozytorium i instalacja NUT (Network UPS Tools). NUT jest serwisem monitorującym pracę UPS, dbającym o przesyłanie komunikatów do systemu w przypadku przejścia na zasilanie bateryjne, pozwalającym zamknąć system w przypadku spadku poziomu naładowania baterii, itp.

sudo apt-get update && sudo apt-get install nut nut-client nut-server

Po zainstalowaniu wykonujemy komendę

lsusb

i sprawdzamy czy nasz UPS jest widoczny.

Działa, jest widoczny. Świetnie!

Warto na stronie http://www.networkupstools.org/stable-hcl.html sprawdzić czy nasz UPS jest obsługiwany i jaki jest do niego najlepszy sterownik. Szczerym będąc, z APC problemu nie miałem, ale już UPS firmy Eaton nie udało mi się zmusić do podłączenia i zaraportowania statusu. Chociaż sam UPS działał bez problemu.

Ok, jedziemy dalej. Dobrze by było powiedzieć systemowi jaki to jest ten nasz UPS i jakim sterownikiem się do niego dostaniemy.

W przypadku NUT, pliki które zaraz będziemy edytować są bardzo dobrze udokumentowane. Przy każdej opcji mamy kilka przykładów, wyjaśnienia, itp. W Waszym przypadku UPS zapewne będzie inny, może inny model, musicie wybrać odpowiednie sterowniki i podejście. Z tego co widzę w sieci – APC sprawia najmniej problemów.

W tym celu, edytujemy

sudo nano /etc/nut/ups.conf

Na samym końcu pliku dodajemy/edytujemy:

[apc350]
        driver = usbhid-ups
        port = auto
        desc = „APC”

WAŻNE jest zapamiętanie tego, co wpisaliśmy w nawias kwadratowy, ponieważ tej nazwy będziemy używać w kolejnych krokach.

Jak widać – eksperymentowałem z kilkoma różnymi.

Kolejny krok – deklarujemy w konfiguracji nut jaki będzie nasz sposób pracy UPSa. W moim przypadku serwer i klient NUT jest na tym samym Raspberry Pi, dlatego wybrałem opcję Standalone.

sudo nano /etc/nut/nut.conf

MODE=standalone

Następnie

sudo upsdrvctl start

Dobrze jest – mamy komunikację.

Być może potrzebne będzie wykonanie:

sudo service nut-server restart

sudo service nut-client restart

Przed

sudo service nut-server status

Serwer wystartował, jest w porządku.

Komenda jak poniżej (UWAGA, używamy nazwy, którą zdefiniowaliśmy w konfiguracji!) poda nam parametry i status UPSa.

upsc apc350

So far so good, jak to mówią. Teraz musimy skonfigurować monitor, który w razie braku prądu zamknie komputer, gdy serwer NUT mu rozkaże.

Użytkownicy (tam gdzie XXXXX podajecie swoje hasło. W sumie to i XXXXX możecie zostawić 😉 ):

sudo nano /etc/nut/upsd.users

[admin]
        password = XXXXX
        actions = SET
        instcmds = ALL
[upsmon]
        password  = XXXXX
        upsmon master

I później przechodzimy do wieeeelkiego pliku

sudo nano /etc/nut/upsmon.conf

Ale na szczęście interesują nas w nim wyłącznie dwie sekcje:

MONITOR apc350@localhost 1 upsmon XXXXX master

Zamiast XXXXX oczywiście Wasze hasło

I dla testów możemy włączyć powiadamianie na ekranie. Będziemy widzieć co się dzieje:

NOTIFYFLAG ONLINE      SYSLOG+WALL
NOTIFYFLAG ONBATT      SYSLOG+WALL

A tutaj komenda, która wykona się, gdy będzie już trzeba zamknąć system, ponieważ bateria już ledwo zipie:

Później uprawnienia do plików:

sudo chown nut:nut /etc/nut/*
sudo chmod 640 /etc/nut/upsd.users /etc/nut/upsmon.conf

W sumie jesteśmy już gotowi, z ciekawostek, po wpisaniu komendy jak poniżej dostaniecie listę komend Waszego UPS. Jak widać – wyłączenie głośnika, wyciszenie, restart UPSa, testowanie baterii, itp.

sudo upscmd -l apc350

Na przykład wyłączenie pikania po przejściu na baterię (już rodzinę raz obudził gdy zabrakło prądu) to:

upscmd apc350 beeper.mute

Po tym wszystkim restart serwera i klienta. UWAGA – możliwe, że i wcześniej będziecie musieli wykonać sudo reboot, aby UPS był widoczny i serwisy wstały.

sudo service nut-server restart
sudo service nut-client restart

Po brutalnym wyjęciu kabla zasilającego testy wypadły pozytywnie 🙂

Jeszcze tylko

sudo nano /etc/nut/upsd.conf

Aby serwis wiedział gdzie ma nasłuchiwać:

 LISTEN 127.0.0.1 3493
 LISTEN 192.168.1.200 3493

192.168.1.200 to adres mojego Raspberry Pi.
Cudownie! Wszystko skonfigurowane, działa!

No to teraz Domoticz, żeby jeszcze było wizualnie pięknie (chociaż zdania są podzielone, ale co tam 😉 )

Z poziomu konsoli i folderu Domoticz wykonujemy co następuje:

cd plugins
mkdir NUT_UPS
sudo apt-get update
sudo apt-get install git
git clone https://github.com/999LV/NUT_UPS.git NUT_UPS
cd NUT_UPS
sudo chmod +x plugin.py
sudo /etc/init.d/domoticz.sh restart

W sekcji Hardware pojawił mi się plugin UPS Monitor. Konfigurujemy go podając nasze parametry (IP, port, oraz nazwę w serwerze NUT, którą skonfigurowaliśmy – u mnie apc350)

I mamy:

Po chwili w zakładce Devices zaczną nam się pojawiać dane z UPSa:

I już później w Domoticz:

Kolejna wykonana praca! Teraz mogę spać jeszcze spokojniej, mniej obawiając się o to, że Raspberry Pi nie wstanie przy kolejnym braku/zaniku/chwilowej przerwie prądu.

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”

Kopia bezpieczeństwa bazy, folderu Domoticz oraz innych elementów

Jak mówią, ludzie dzielą się na tych, którzy backupy robią i na takich, którzy będą robić.

Żeby za późno nie znaleźć się w tej drugiej grupie – szybki skrypt do tworzenia backupu (na przykład Domoticz i HABridge) na zewnętrzny dysk. W moim przypadku pendrive, z którego do dane czasem zgrywam na osobny dysk zewnętrzny. Jest co prawda mechanizm wbudowany w Domoticz, ale osobiście mi on nie odpowiadał – robi backup na tą samą kartę, na której jest Domoticz, więc sensu to nie ma…

Raz, dwa trzy, skrypt piszesz Ty. Nie ukrywam – jest to zmieniony pod moim kątem skrypt z Wiki Domoticz. Ale po to jest Wiki…

Zaczynamy więc od:

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

Wpisujemy (oczywiście zmieniając dane do Domoticz oraz foldery, na które chcecie kopiować). Ja, jak widać, dodatkowo robię sobie backup HABridge pod kątem Alexa.

DOMO_IP=”192.168.1.200″  # Domoticz IP 
DOMO_PORT=”80″        # Domoticz port 
TIMESTAMP=`/bin/date +%Y%m%d%H%M%S`
BACKUPFILE=”domoticzbackup_$TIMESTAMP.db” # backups will be named „domoticz_YYYYMMDDHHMMSS.db.gz”
BACKUPFILEGZ=”$BACKUPFILE”.gz

#Create backup and make tar archives
/usr/bin/curl -s http://$DOMO_IP:$DOMO_PORT/backupdatabase.php > /media/Dysk/Domoticz_backup/database/$BACKUPFILE
tar -zcvf /media/Dysk/Domoticz_backup/scripts/domoticz_scripts_$TIMESTAMP.tar.gz /home/pi/domoticz/scripts/
tar -zcvf /media/Dysk/Domoticz_backup/www/domoticz_wwwfolder_$TIMESTAMP.tar.gz /home/pi/domoticz/www/
tar -zcvf /media/Dysk/HABridge/HABridge_$TIMESTAMP.tar.gz /home/pi/habridge/data/

#Delete backups older than 31 days
/usr/bin/find /media/Dysk/Domoticz_backup/database/ -name '*.db' -mtime +31 -delete
/usr/bin/find /media/Dysk/Domoticz_backup/scripts/ -name '*.tar.gz' -mtime +31 -delete
/usr/bin/find /media/Dysk/Domoticz_backup/www/ -name '*.tar.gz' -mtime +31 -delete
/usr/bin/find /media/Dysk/HABridge/ -name '*.tar.gz' -mtime +31 -delete

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


Ja ustawiłem sobie uruchamianie go na 1:30 w nocy w cron:
30 1 * * * sudo home/pi/domoticz/scripts/domoticz_backup.sh
Oby się Wam backup nigdy nie przydał… Ale niestety, podczas pracy z Raspberry Pi widzę, że nie jest to widzimisię, a konieczność! 
Oczywiście można go zmienić, aby backupy lądowały na zewnętrznym FTP, czy też dysku NAS. Dla mnie jednak ta forma jest wystarczająca.

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…