Inteligentny Dom – Programowanie i integracja z Serwerem WWW Apache

Inteligentny Dom eHouse – Integracja i tworzenie oprogramowania dla WebSerwera Apache.
Apache jest najbardziej powszechnym i darmowym rozwiązaniem serwera WWW między innymi na platformy Windows, Linux oraz różny sprzęt komputerowy i mikroprocesorowy.

Posiada bardzo bogatą funkcjonalność:

  • Duża skalowalność dla różnych systemów operacyjnych i typu sprzętu (komputera) (procesory Intel, ARM, ATOM, AMD, Samsung itd.)
  • Wysoki poziom zabezpieczeń, autoryzacja, logowanie, certyfikaty, szyfrowanie
  • Duża stabilność i niezawodność pracy
  • Możliwość tworzenia własnych modułów integrujących Apache ze “światem zewnętrznym”

Z tego powodu zdecydowaliśmy się na utworzenie modułu integrującego Inteligentny Dom eHouse z Apache’m, co umożliwia bezpieczną pracę z przeglądarki Internetowej lub dodatkową integrację z innymi systemami poprzez metody “Get” i “Post”.
Moduł stanowi bramkę “gateway” pomiędzy systemem eHouse (aplikacja “eHouse4cServer”) a przeglądarką WWW.

  1. Sterowniki Inteligentnego domu eHouse (Ethernet lub/i RS485)
    Sterowniki Inteligentnego domu eHouse posiadają własne protokoły transmisji i formaty ramek omówione szerzej we wcześniejszych postach. Możliwe są aktualnie 3 kombinacje pracy systemu:

    • Bezpośrednia praca w sieci LAN – Sterowniki Ehouse 4 Ethernet
    • Bezpośrednia praca na magistrali eHouse1 (RS-485) – sterowniki eHouse1 pod nadzorem komputera, systemów mikroprocesorowych itd. Podłączenie następuje przez przejściówkę RS-485/RS-232/USB
    • Praca Hybrydowa – Sterowniki eHouse 1 (RS-485) pod nadzorem CommManager’a. Dane ze sterowników przechodzą przez CommManager do komputera, a statusy sterowników eHouse1 są dołączane do statusów CommManager’a i rozsyłane na zasadzie broadcastu UDP po sieci LAN
  2. Oprogramowanie “eHouse4cServer” będące serwerem eHouse (Ethernet lub/i RS485) dla systemu. operacyjnego Linux
    Oprogramowanie ma zaimplementowane wszystkie sposoby transmisji bezpośrednio ze sterownikami eHouse w przedstawionych powyżej trybach pracy. Pozwala na pełne sterowanie i zarządzanie oraz odbiór statusów w czasie rzeczywistym ze wszystkich sterowników eHouse. Nie posiada tylko funkcji konfiguracji sterowników.
    Dwukierunkowa komunikacja przebiega następująco:

    1. Statusy odbierane są ze sterowników Ethernet eHouse przez broadcasty w postaci binarnej (poniżej 200B) po protokole UDP z dołączoną cheksum’ą dla weryfikacji danych. Przesyłanie zdarzeń odbywa się poprzez protokół TCP/IP – Sokety, z autoryzacją w standardzie eHouse dla zapewnienia bezpieczeństwa oraz potwierdzeniem otrzymania i dodania zdarzeń do kolejki przez sterownik.
    2. Oprogramowanie wysyła synchronizację czasu dla sterowników i inicjuje sekwencyjne wysyłanie statusów ze sterowników po magistrali RS-485/RS-232/USB. Zdarzenia są przesyłane do sterowników po magistrali RS-485 w trybie ExtendedEvent (DirectEvent)
    3. Oprogramowanie odbiera statusy sterowników eHouse jako broadcasty UDP z CommManagera z dołączonym statusem własnym CM. Dodatkowo odbiera broadcasty UDP ze wszystkich sterowników Ethernetowych.
      Zdarzenia do sterowników eHouse1 są przesyłane poprzez CommManager po protokole TCP/IP jak to zostało omówione wcześniej. CommManager tłumaczy je na zdarzenia Ehouse1 w trybie ExtendedEvent (RS-485).
      Zdarzenia do sterowników Ethernet są przesyłane bezpośrednio do adresata po protokole TCP/IP omówionym powyżej.

    Zarówno sterowniki jak i oprogramowanie eHouse4cServer pamięta przez ok 1-1.5 sekundy otrzymane zdarzenia, blokując ich ponowne wykonanie w przypadku błędów sieci, automatycznej retransmisji, wielokrotnego uruchomienia z paneli, włączników itd. Ma to na celu zabezpieczenie urządzeń elektrycznych przed wielokrotnym włączaniem/wyłączaniem w bardzo krótkim czasie, które mogło by uszkodzić urządzenia w wyniku wielokrotnych przepięć.
    eHouse4cServer posiada także Serwer TCP/IP do odpowiadania na żądania serwera WWW z zainstalowanym modułem do obsługi systemu eHouse. Serwer “eHouse4cServer” został omówiony dokładniej w poświęconym mu poście.

  3. Apache Web Serwer z zainstalowanym modułem “ehouse4apache.so”.
    Moduł do integracji systemu eHouse z Apachem pracuje na zasadzie bramki (gateway lub proxy server) zapewniając dwustronną komunikację 1:1 pomiędzy WebServerem a Serwerem “eHouse4cServer”. Moduł ma charakter minimalistyczny aby nie zmniejszać stabilności i wydajności serwera Apache. Poza transmisją danych realizuje tylko możliwość resetu, zablokowania, odblokowania oprogramowania “eHouse4cServer”. Zapewnia to jego stabilną i nieprzerwaną pracę oraz możliwość zdalnego resetu w przypadkach zawieszenia lub niepoprawnej pracy.
    Minimalizacja modułu dla Apache poza powyższymi czynnikami jest też uwarunkowana następującymi czynnikami:

    • jak najmniejszym obciążeniem Apache i ryzyka jego niestabilności, który jest krytycznym węzłem komunikacyjnym (elementem łańcucha)
    • Znacznie trudniejszym, bardziej czasochłonnym procesem tworzenia modułów Apacha niż standardowej aplikacji zewnętrznej
    • Problemami z debugowaniem modułów Apacha w stosunku do standardowej aplikacji zewnętrznej
    • koniecznością tworzenia kilku-kilkudziesięciu niezależnych wątków/procesów komunikacyjnych: Serwera RS-485, UDP Listenera, Clientów TCP/IP, Serwerów TCP
  4. Dowolne przeglądarki internetowe – dla wizualizacji i sterowania graficznego wymagają obsługi JavaScript i SVG. Dane do Serwera Apache są przekazywane w postaci standardowego query w postaci dodatku do linka adresu np: “http:/localhost/eh.x?QUERY”, gdzie QUERY zawiera komendę i jej parametry dla modułu Apache “ehouse4apache.so” lub serwera “eHouse4cServer”. W odpowiedzi otrzymuje potwierdzenie lub żądane dane otwartym tekstem do przetwarzania przez skrypty JavaScript.

Instalacja i konfiguracja Apacha do współpracy z systemem eHouse Automatyka Domu

Podstawowe założenia dotyczą szeroko pojętego miniaturowego sprzętu komputerowego (32bitowego) pracującego na systemie operacyjnym Linux. Mogą to być tanie płyty komputerowe lub mikroprocesorowe (bez dysku twardego) np Raspberry Pi w cenie poniżej 50Euro. Mimo tego oprogramowanie jest bardzo wydajne i funkcjonalne i może obsługiwać nieograniczoną ilość paneli sterujących (np. z przeglądarki WWW).

  • Na dostępny sprzęt komputerowy należy zainstalować dostępną dystrybucję Linuxa bez środowiska graficznego np Serwer (testowano na Ubuntu 13.04).
  • Następnie należy zainstalować Web Server Apache (testowano wersję 2.4.4). najlepiej do katalogu “/usr/local/apache2/”, korzystając z uprawnień administratora “sudo su”…
  • W pliku konfiguracyjnym “/usr/local/apache2/conf/httpd.conf” włączyć wymaganą autoryzację i zabezpieczenia, certyfikaty które zamierzamy używać oraz dołożyć 2 linie włączające i konfigurujące moduł “ehouse4apache.so”.
    LoadModule eh /usr/local/ehouse/ehouse4apache.so
    AddHandler eh .x
  • W nowych wersjach Apache skopiować pliki eh.load oraz eh.conf z katalogu C:\e-house\linux\%DISTRIBUTION%\etc\apache2\mods-available\ do katalogu /etc/apache2/mods-available/.
    Utworzyć symboliczne linki do powyższych plików w katalogu /etc/apache2/mods-enabled/:
    ln -s /etc/apache2/mods-available/eh.load /etc/apache2/mods-enabled/eh.load
    ln -s /etc/apache2/mods-available/eh.conf /etc/apache2/mods-enabled/eh.conf
  • utworzyć katalog “/usr/local/ehouse/” oraz nadać mu wszystkie niezbędne prawa, maksymalne = “chmod +777 /usr/local/ehouse/”. Po uruchomieniu oprogramowania można je ograniczyć.
  • skopiować do katalogu “/usr/local/ehouse/” moduł “ehouse4apache.so” oraz oprogramowanie serwera “eHouse4cServer” oraz pliki konfiguracyjne
  • Zedytować plik konfiguracyjny “eHouseServerC.cfg” zgodnie z opisami w pliku
  • uruchomić serwer w oknie terminala “/usr/local/ehouse/ehouse4cserver” i sprawdzić czy nie wyrzuca jakiś błędów
  • zrestartować lub wystartować serwer Apache komendą “/usr/local/apache2/bin/httpd -k restart” lub “/usr/local/apache2/bin/httpd -k start”
  • sprawdzić telnetem czy łączy się z serwerem “eHouse4cServer” -> “telnet localhost 1111”
  • wpisać lub skopiować szybko komendę “eHGlobalStatus” i zobaczyć czy serwer zwraca rezultaty (timeout 20sec)
  • następnie z przeglądarki spróbować uruchomić tą samą komendę w następujący sposób wpisując adres strony “http://localhost/eh.x?eHGlobalStatus”
  • w przypadku poprawnej pracy należy skopiować wyeksportowane skrypty i strony wizualizacji do katalogu “/usr/local/apache2/htdocs”  i spróbować działania skryptów wpisując adres “http://localhost/NAZWA_WIDOKU.svg” lub “http://localhost/NAZWA_WIDOKU.xml”
  • W kolejnym kroku należy ograniczyć prawa do plików, utworzyć użytkowników do połączenia WWW oraz zabezpieczenia, certyfikaty i inne ustawienia Apache.
  • W przypadku potrzeby pracy z zewnątrz (z internetu) konieczne jest także poprawne skonfigurowanie Routera Internetowego udostępniając usługę na wybranym porcie. Dodatkowo konieczne jest także skonfigurowanie Usługi DDNS o ile nie dysponujemy stałem adresem IP.