Postanowiłem zainstalować w domu alarm:-)

Cel?

Zabezpieczenie mieszkania przy poniższych założeniach:

  1. NAJWAŻNIEJSZE – Alarm ma być niezależny od domowego systemu zarządzania, DOMOTICZ nie działa – alarm działa
  2. Alarm ma pozwolić na wykorzystanie podłączonych pirów, innych czujników w systemie DOMOTICZ (analiza ruchu, zarządzanie oświetleniem)
  3. DOMOTICZ / HOME ASSISTANT  powinien umieć sterować wyjściami OUT alarmu
  4. DOMOTICZ / HOME ASSISTANT powinien umieć uzbroić/rozbroić  alarm – głównie chodzi o włączenie alarmu dla strefy nocnej (mój manipulator będzie przy drzwiach wejściowych, więc chcę móc załączać alarm nocny innym urządzeniem – np. switch XIAOMI)
  5. DOMOTICZ / HOME ASSISTANT powinien wiedzieć kiedy alarm jest uzbrojony – po uzbrojeniu powinien umieć wyłączyć urządzenia typu telewizor, żelazko, amplituner ..

Wstępne rozpoznanie urządzeń wskazało na SATEL INTEGRA 32 + ETHM1plus (400pln) + dedykowany kabel dedykowany połączeniowy (40 pln).
Wszyscy polecają, wszyscy go mają, działa z DOMOTICZ.

Poszukałem innych rozwiązań dostępnych na rynku i postanowiłem zaryzykować – bo spodobały mi się możliwości systemu ROPAM NEOGSM-IP – a tak będąc do końca szczerzy zostałem lekko ukierunkowany przez dobrego sprzedawcę, który zapewniał, że powyższe cele osiągnę właśnie z tym urządzeniem.

Jako, że nie jestem instalatorem, samo podłączenie urządzenia zajęło mi trochę czasu. Traktuję to jako zabawę połączoną z nauką,  więc czas na pewno nie uważam za zmarnowany.

Po kilku próbach, udało się skonfigurować urządzenie z jednym pirem, syreną i kartą GSM. Poniżej schemat który mi mocno pomógł, może kiedyś pomoże i Wam.

 

 

Pozostała kwestia integracji z DOMOTICZ.

Niestety na forum firmy ROPAM (link) możemy dowiedzieć się, że z tą centralką integracja nie jest możliwa.
Stwierdzenie “coś jest nie możliwe” jest mocno motywujące, tak więc wykorzystując jedną z moich ulubionych technik czyli Reverse Engineering postanowiłem mimo wszystko dokonać integracji.

Udało się.

W poniższym linku udostępniam program pozwalający na integrację systemu ROPAM NEOGSM-IP i DOMOTICZ HOME ASSISTANT i pewnie też z OPENHAB którego nie znam.

ropam-neogsm-domoticz-homeassistant-integrator

Program potrafi pracować jako usługa lub aplikacja konsolowa. Został napisany w technologii Microsoft .NET, ale, że zarówno ja, jak i większość z użytkowników systemu DOMOTICZ / HOME ASSISTANT korzysta z rozwiązania opartego o system LINUX, Raspberry … postanowiłem go uruchomić właśnie w tym środowisku.

I po raz kolejny udało się:-)

Poniżej kroki które należy uczynić by aplikacja zadziała na Raspberry:

  1. Instalujemy środowisko MONO (użyłem pełnej wersji, bo będę się jeszcze mocniej bawił)
    sudo apt-get install mono-complete
  2. Instalujemy MONO-SERVICE
    sudo apt-get install mono-4.0-service
  3. Pobieramy pliki programu do integracji z tego linka: ropam-neogsm-ip-dmoticz-intergracja
  4. Wrzucamy pobrane pliki (po rozpakowaniu) do docelowego katalogu (u mnie /home/pi/@scripts/neo/)
  5. Tworzymy plik uruchamiający usługę w katalogu naszego programu
    sudo nano xneoapi.sh

    Zawartość pliku:

    #!/bin/bash
    cd /home/pi/@scripts/neo/
    sudo mono-service -l:/var/run/lock/xneoapi.lock /home/pi/@scripts/neo/xneoapi.exe
    
  6. Nadajemy uprawnienia do uruchamiania skryptu
    sudo chmod +x xneoapi.sh
  7. Edytujemy plik /etc/rc.local wpisując:
    sudo nano /etc/rc.local
  8. Dodajemy poniższy wpis odpowiedzialny za automatyczne uruchamianie naszej usługi po restarcie Rasberrergo
    sudo /home/pi/@scripts/neo/xneoapi.sh
    
    

Pozostaje jeszcze kwestia integracji programu.

  1. Parametry pracy programu – plik xneoapi.exe.conf

     <applicationSettings>
            <X.NEO.API.Properties.Settings>
                <setting name="WebServerPrefix" serializeAs="String">
                    <value>http://localhost:7999/</value>
                </setting>
                <setting name="NeoGsmDeviceIp" serializeAs="String">
                    <value>192.168.1.100</value>
                </setting>
                <setting name="NeoGsmDevicePort" serializeAs="String">
                    <value>9999</value>
                </setting>
                <setting name="NeoGsmMainBoardId" serializeAs="String">
                    <value>1500067240999999</value>
                </setting>
                <setting name="NeoGsmUserCode" serializeAs="String">
                    <value>1234</value>
                </setting>
                <setting name="NeoGsmTcpCode" serializeAs="String">
                    <value>dac281bf43999999</value>
                </setting>
                <setting name="RunAsService" serializeAs="String">
                    <value>False</value>
                </setting>
                <setting name="Simulation" serializeAs="String">
                    <value>False</value>
                </setting>
            </X.NEO.API.Properties.Settings>
        </applicationSettings>
    

    Parametry związane z urządzaniem NeoGsm nie będę omawiał a pozostałe to:

    WebServerPrefix – prefixy dla naszego API, pod tymi adresami dostępne będzie API i strona informacyjna – jeżeli bedzie to kilka interfejsów, oddzielamy średnikami
    RunAsService – czy usługa będzie uruchomiona jako serwis czy jako aplikacja konsolowa [True|False]
    Simulation – odpala aplikacje w trybie symulacji, działa tylko WebServer bez połączenia z centralką alarmową [True|False]

  2. Parametry powiadomień systemów zewnętrznych (np. DOMOTICZ / HOME ASSISTANT)  – znajdują się w pliku notification.xml – tam raczej wszystko jest jasne, jeśli nie proszę o informację zwrotną.
    <?xml version="1.0" encoding="utf-8"?>
    <Notification xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Inputs>
    <NotificationInput>
    <Id>0</Id>
    <OnActivate>http://192.168.1.101:8080/json.htm?type=command&amp;param=udevice&amp;idx=236&amp;svalue=1</OnActivate>
    <OnDeactivate>http://192.168.1.101:8080/json.htm?type=command&amp;param=udevice&amp;idx=236&amp;svalue=0</OnDeactivate>
    </NotificationInput>
    </Inputs>
    <Zones>
    <NotificationZone>
    <Id>0</Id>
    <OnArm>http://user:password@192.168.0.1:8080/json.htm?type=command&amp;param=udevice&amp;idx=3&amp;svalue=0</OnArm>
    <OnDisarm>http://user:password@192.168.0.1:8080/json.htm?type=command&amp;param=udevice&amp;idx=3&amp;svalue=1</OnDisarm>
    </NotificationZone>
    </Zones>
    </Notification>
  3. Parametry logowania zdarzeń znajdują się w pliku NLOG.config – instrukcja jak go modyfikować znajduje się pod adresem: https://nlog-project.org/

Po uruchomieniu aplikacji, pod adresem wskazanym w parametrze WebServerPrefix dostępna będzie strona API.

Aplikacja jest w wersji mocno rozwojowej – najnowsza jej wersja działa już produkcyjnie ale czekam na Wasze pytania, propozycje modyfikacji.

Od jakiegoś czasu rozglądałem się za kamerką IP z możliwością zdalnego obracania w możliwie najszerszym zakresie.

Wybór padł na OVERMAX CAMSPOT 3.3.

Dlaczego?

Cena:)

Sama kamerka działa bardzo przywozicie.

Dostarczone oprogramowanie (windows) pozwala na podgląd, zdalne obracanie kamerką oraz komunikację dwu-stroną – kamera wyposażona jest zarówno w głośnik jak i mikrofon (mocno marna jakość)

Dodatkowo producent dostarcza wtyczkę activeX dla IE pozwalającą wykorzystać wszystkie funkcjonalności kamery z poziomu przeglądarki.

Pozostałe przeglądarki oferują podgląd wraz z możliwością obracania – co  i tak jest dobrym rezultatem.

W nocy 6 diod podczerwieni skutecznie rozświetla pomieszczenie o wymiarach ~6×3.

Kamerka została u mnie podpięta pod SYNOLOGY Surveillance Station  i DOMOTICZ

I jak to zawsze u mnie, sprzęt kupowany, nie do końca wspierany jest przez dostawców oprogramowania, więc zdradzam co należy uczynić by się cieszyć zakupem.

  1. SYNOLOGY Surveillance Station – kamerka działa prawidłowo jako urządzenie ONVIF – tu nie było większych problemów.Wybieramy odpowiednio:
    Marka – [ONVIF]
    Model kamery:  [Generic_ONVIF]i działa.
  2. Domoticz – i tu pojawiły się schody. Kamera w standardzie dostarcza  plik w formacie MJPEG pod adresem:videostream.cgi?user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0i faktycznie tak jest.

    MJPEG – (Motion JPEG, M-JPEG) – standard kompresji danych, obraz składa się z szeregu pojedynczych obrazów w formacie JPEG. Każda ramka jest oddzielnie kompresowana, nie ma też kodowania między-klatkowego (np. analizy ruchu/predykcji która występuje choćby w H.264). Jest to metoda wymagająca małej mocy obliczeniowej – nie obciąża procesora w rejestratorze, nie potrzebuje też wiele pamięci operacyjnej

    Niestety Domoticz kiepsko sobie radzi z tym formatem, niby przy parametryzowaniu kamery wyświetla prawidłowo przechwyconą klatkę, ale w podglądzie już nie.
    Dokumentacji zero, więc na chybił trafił rozpocząłem poszukiwania rozwiązania i po kompilacji kilkunastu adresów z innych modeli, okazało się, że OverMax Camspot 3.3 ma zwykłego jpega w lokalizacji:

    cgi/snapshot.cgi&user=[USERNAME]&pwd=[PASSWORD]&resolution=32&rate=0

    po wprowadzeniu do Domoticz .. działa:-)

 

 

 

 

Jeśli nie posiadasz jeszcze czujnika stężenia cząstek, zanieczyszczenia powietrza – nic straconego.

Dzięki sieci AIRLY możesz czerpać dane z czujników innych użytkowników.

Jak to zrobić?

  1. Uruchamiamy konsolę.
  2. Przechodzimy do katalogu przeznaczonego na pluginy w systemie DOMOTICZ, pobieramy najnowszą wersję pluginu AIRLY-DOMOTICZ a następnie restartujemy naszą usługę
    cd domoticz/plugins
    git clone https://github.com/lrybak/domoticz-airly
    sudo service domoticz.sh restart
    
  3. Zakładamy konto na https://developer.airly.eu/login
  4. Pobieramy API KEY ze strony https://developer.airly.eu/api
  5. W systemie DOMOTICZ dodajemy nowy sprzęt KONFIGURACJA>SPRZĘT
    • typ domoticz-airly
    • Airly API key pobrany ze strony
    • Airly Sensor id: identyfikator czujnika który chcemy monitorować – pobieramy go ze strony https://airly.eu/beta/pl/ , klikając na punkcie który chcemy monitorować i kopiując ID z adresu – patrz rysunek poniżej

  6. Po dodaniu sprzętu pojawi się on czujnikach użytkowych

 

 

 

 

 

Zainspirowany skryptem znalezionym w necie postanowiłem uruchomić proces mierzący czas pinga, prędkość downloadu i uploadu mojego dostawcy internetu.

Konfiguracja w DOMOTICZ sprowadza się do zdefiniowana wirtualnych sensorów poprzez:

  1. KONFIGURACJA>SPRZĘT>DODAJ

  2. Na dodanym sprzęcie klikamy UTWÓRZ WIRTUALNE CZUJNIKI
  3. Dodajemy odpowiednio czujniki dla PING, DOWNLOAD, UPLOAD, wybierając typ czujnika CUSTOM SENSOR  a w etykiecie AXIS wprowadzamy jednostkę w której chcemy wykonywać pomiary – u mnie odpowiednio ms dla PING, i Mbit/s dla DOWNLOAD i UPLOAD

  4. Następnie z pozycji KONFIGURACJA>URZĄDZENIA odczytujemy IDXy naszych czujników – będą potrzebne do konfiguracji skryptu.

Do pomiaru prędkości złącza wykorzystamy pakiet speedtest. Jego instalacja sprowadza się do uruchomienia poniższej komendy.

sudo apt-get install speedtest-cli

Uruchomienie standardowe poprzez komendę speedtest zwraca komplet potrzebnych informacji.
Uruchomienie go z parametrem –simple ograniczy ilość zwracanych danych, co pozwoli nam łatwiej je obrobić.
Do obróbki wykorzystałem linuxowy program sed

Kompletny skrypt zamieszczam poniżej:

#!/bin/bash

#setup
pingidx=47
downloadidx=45
uploadidx=46
</pre>
#pobieranie danych
speedtest --source 192.168.1.101 --simple > speedtest.dat
ping=$(sed -n -E '1s/Ping: | ms//gp' speedtest.dat)
download=$(sed -n -E '2s/Download: | Mbit\/s//gp' speedtest.dat)
upload=$(sed -n -E '3s/Upload: | Mbit\/s//gp' speedtest.dat)

echo $ping
echo $download
echo $upload

curl -s -i -H "Accept: application/json" "http://$user:$password@$host:$port/json.htm?type=command&param=udevice&idx=$pingidx&svalue=$ping"
curl -s -i -H "Accept: application/json" "http://$user:$password@$host:$port/json.htm?type=command&param=udevice&idx=$downloadidx&svalue=$download"
curl -s -i -H "Accept: application/json" "http://$user:$password@$host:$port/json.htm?type=command&param=udevice&idx=$uploadidx&svalue=$upload"

sed w dużym skrócie potrafi odpowiednio manipulować tekstami, w naszym przypadku wyciąga potrzebne dane z rezultatu zwracanego przez speedtest. Spreparowane dane  następnie przysyłamy do systemu DOMOTICZ w wykorzystaniem jego API. Oczywiście powyższy skrypt musicie zmodyfikować poprzez wprowadzenie własnych IDXów i adresu DOMOTICZ.

Aby uruchomić skrypt musimy mu jeszcze nadać odpowiednie uprawnienia poprzez wydanie komendy:

chmod +x speedtest.sh

(mój plik nazywa się speedtest.sh)

Na koniec aby to okresowo sprawdzać prędkość złącza musimy włączyć harmonogram odpalania skryptu.

Realizujemy to poprzez wrzucenie odpowiedniego wpisu do crontaba. Tak więc:

1. Uruchamiamy crontaba:

crontab -e

2. Dodajemy nowy wpis:

0 * * * * /home/pi/domoticz/scripts/shell/speedtest.sh

Czyli w moim przypadku skrypt będzie uruchamiany w każdej zerowej minucie godziny – czyli co godzine;-).

Więcej o harmonogramie w crontabie możecie znaleźć TU

Efekt końcowy na obrazkach poniżej:-)