Inteligentny Budynek eHouse Dekodowanie statusu CommManagera – kod źródłowy

Inteligentny Dom , Inteligentny Budynek eHouse – Format danych statusu CommManagera w kodzie binarnym.
CommManager jest to sterownik mikroprocesorowy systemu automatyka domu, automatyka budynku eHouse, który pełni funkcje komunikacyjne i jest bramą na świat instalacji opartej na sterownikach systemu w wersji eHouse 1 (RS485). Pozwala na zrezygnowanie z komputera PC przy zachowaniu dużej funkcjonalności (seryjnie wbudowanej w sterowniki). Dodatkowo zastępuje w wersji systemu eHouse 1 ExternalManager oraz 3 InputExtendery, stanowiąc w pełni funkcjonalny sterownik rolet, bram i markiz, zintegrowany z alarmem umożliwiającym sterowanie przez SMS lub sieć LAN. Posiada także wbudowane powiadomienie SMS o Alarmach – Sterownik Rolet, Bram, Automatyka Rolet, Bram

Sterownik ten w wersji hybrydowej (eHouse 1 pod nadzorem CommManagera) zbiera wszystkie statusy z RoomManagerów (sterownik oświetlenia i ogrzewania, Audio, Video – sterownik pomieszczeń) oraz HeatManagera (sterownika kotłowni, rekuperacji, automatyka ekologicznych źródeł energii) i przesyła je dalej do paneli sterujących TCP/IP.

Dodatkowo umożliwia przesłanie tych statusów w formie broadcastu UDP do wszystkich urządzeń w sieci LAN, pozwalając na bezpołączeniowe śledzenie statusu i stanu systemu eHouse przez dowolną ilość paneli sterujących i wizualizujących stany wyjść, wejść oraz wartości pomiarów. Taki rodzaj broadcastu nie obciąża dodatkowo procesora CommManagera, bez względu na to jaka ilość paneli odbiera powyższe dane.
Dodatkowo do danych odebranych ze sterowników eHouse 1 (pracujących na magistrali RS485), CommManager dokłada swój aktualny status, będący stanem systemu alarmowego.

Ramka statusu w kodzie binarnym została omówiona w postach
Inteligentny Dom, Inteligentny Budynek eHouse ramka statusu w kodzie binarnym

Inteligentny Dom, Inteligentny Budynek eHouse – dekodowanie ramki statusu – kod źródłowy

Do tej pory omówiliśmy format ramki, znaczenie bitów i bajtów w ramce oraz przedstawiliśmy dla ułatwienia gotowy kod źródłowy dekodujący dane ze wszystkich sterowników eHouse 1 podłączonych przez CommManager lub aplikację eHouse.exe (dla eHouse 1).

Nadszedł czas na oprogramowanie do dekodowania rozszerzonej ramki o status CommManagera.

Chociaż status może być wysyłany zarówno po TCP/IP jak i UDP w tej samej postaci, zajmiemy się tylko transmisją UDP, ze względu na brak konieczności logowania się do sterownika i zwiększenia obciążenia procesora. Łączność po TCP/IP i wolne socket’y serwerów, zostawimy sobie na potrzeby klientów mobilnych, pracujących spoza sieci LAN (SmartPhony, telefony GSM), gdyż wykorzystanie transmisji UDP po sieci internet może być trudne i obarczone dużą ilością błędów, uniemożliwiających prawidłowe dekodowanie statusu, ze względu na niską jakość łącza i brak mechanizmów potwierdzeń i powtórzeń sesji UDP.

W tym celu w Delphi w gotowym szablonie panelu sterującego który był omówiony wcześniej w postach: inteligentny dom ehouse, kod źródłowy paneli sterujących dla tabletach pracujących na systemie Windows XP, Vista, 7

Zmieniamy funcję odbioru danych statusu binarnego przez UDP dodając obsługę CommManagera

procedure TForm1.binaryDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var   C: array[0..1024] of char;
MyStream: TMemoryStream;
numberb:integer;
begin
if filesystem_status then exit;      //only when udp is active
MyStream := TMemoryStream.Create;
binary.ReadStream(MyStream);
numberb:=NumberBytes;
if numberb>1023 then numberb:=1023   //limiting number of bytes received –  obcinamy dane do wielkości bufora
MyStream.Read(C[0], numberb);
set_rm(C,1);                         //decode ehouse 1 controllers status – dekodujemy status sterowników RM, HM
set_status_commmanager(C,0,254);     //decode commanager controller status – dekodujemy status commmanagera
Test_save;                           //test save data to text files for each RM, HM – testowo zapisujemy wyniki do plików tekstowych dla wszystkich sterowników eHouse 1 (RM, HM)
Test_save_eth;                       //test save data to text file for CommManager and each Ethernet Controller – testowo zapisujemy wyniki do plików tekstowych dla CommManagera i wszystkich sterowników EtherneteHouse
update_panel;                        //update data to panel for selected controller – aktualizujemy dane sterownika na panelu
end;:

Kompletną realizację procesu dekodowania ramki statusu dla CommManagera i innych sterowników eHouse Ethernet wykonuje procedura

set_status_commmanager(C,0,254);    //w parametrze podajemy nazwę bufora danych oraz adresy sterownika (dwie ostatnie składowe adresu IP).

Procedura ta wykonuje dekodowanie ramki binarnej statusu a następnie ładuje zdekodowane dane do rekordu danego sterownika Ethernetowego będącej instancją rekordu “ethernet_rm_hm_cm_lm” nazwaną “ethrm”. Indeks jest przeszukiwany automatycznie po powiązanym adresie IP znajdującym się w statusie.

Pozwala nam to na:

  • bezpośrednią analizę danych wszystkich sterowników
  • tworzenie indywidualnych algorytmów zależnych od stanu wyjść, wejść, pomiarów
  • realizację dedykowanych systemów sterujących analizujących dowolną liczbę parametrów występujących z systemem
  • tworzenie oprogramowania analizatora logów oraz stanu systemu eHouse
  • pozwala na programowe obliczenia zużycia energii elektrycznej
  • umożliwia wykonanie indywidualnych paneli sterujących i wizualizujących dla wszystkich sterowników na podstawie gotowego szablonu
  • brak konieczności znajomości sposobów komunikacji i ramki danych
  • pisanie wysokopoziomowego oprogramowania (kilka linii kodu źródłowego) dzięki implementacji bibliotek programistycznych systemu eHouse.

 

One thought on “Inteligentny Budynek eHouse Dekodowanie statusu CommManagera – kod źródłowy”

Comments are closed.