Automatyka Domu przykład tworzenia własnych algorytmów sterujących dla systemu eHouse

Inteligentny Dom, Inteligentny Budynek eHouse pozwala na utworzenie własnej nakładki (aplikacji pracującej na komputerze PC będącej serwerem systemu eHouse) co umożliwia proste tworzenie własnych indywidualnych algorytmów programistycznych przy użyciu naszego szablonu oprogramowania EhouseLogAnalizer dla środowiska Delphi.
Oprogramowanie to zostało omówione w Analizator Logów Inteligentnego Domu eHouse stanowiącego rozszerzenie funkcjonalności systemu Automatyka Domu eHouse.
Dzięki stabilności dzisiejszych komputerów PC oraz systemu Windows możliwa jest bezproblemowa i ciągła praca oprogramowania zarządzającego inteligentnym domem eHouse dodatkowo monitorowana przez aplikację KillExec.exe. W przypadku zawieszeń błędów aplikacja jest zamykana i uruchamiana od nowa bez interwencji użytkowników systemu.

Przy właściwym skonfigurowaniu systemu Windows oraz systemu eHouse możliwe jest zachowanie ciągłości pracy oprogramowania Inteligentnego Domu na PC przez wiele miesięcy.

Właściwe pisanie oprogramowania sterującego systemem inteligentnego domu eHouse wymaga sekwencyjnego sprawdzania pomiarów zmieniających się (i wysyłanie stosownych zdarzeń sterujących w razie potrzeby – jednorazowo).
Pisząc własne algorytmy sterujące należy utworzyć softwarowe flagi potwierdzające wykonanie danego zdarzenia aby bezsensownie nie wysyłać wielokrotnie tego samego zdarzenia: np co 2 sekundy zamykać rolety które już są zamknięte.
Aplikacji można przyporządkować kilka Timerów:
Pierwszy – Główny np co 10sekund aktualizujący dane sterowników.
Kolejne – o wartościach zależnych od zmienności zjawiska:
np. dla sterowania roletami, markizami w odniesieniu do temperatury zewnętrznej czy poziomu oświetlenia może to być kilkanaście minut.

W przypadku sterowania napędami rolet, bram, markiz, okien itd można zastosować kontaktrony podłączone do wejść cyfrowych sterowników inteligentnego domu eHouse, potwierdzających ich zamknięcie i uzależnić operacje sterujące od stanu danych wejść RoomManagera, co jest znacznie lepsze i prawdziwsze od flag sofware’owych, których wartość może być ustawiana błędnie w wyniku błędów oprogramowania lub z powodu błędów napędu (nie zamknięcie się, uszkodzenia mechaniczne, zablokowanie, itd.).

Przykłady użycia Danych ze sterowników w aplikacji eHouseLogAnalizer ( w powtarzalnej pętli pracującej z interwałem co kilka sekund).

//Inicjalizacja danych ze sterownika kotłowni HeatManagera
TzewnetrznaPN:=HADC[HM_ZEWNPN]; //Temperatura Zewnętrzna Północ
TemperaturaGWC:=HADC[HM_GWC]; //Temperatura za GWC – Gruntowym wymiennikiem ciepła dla rekuperatora
TemperaturaKominekPlaszcz:=HADC[HM_KOM1]; //Temperatura Kominka w Płaszczu wodnym 1 czujnik
TemperaturaKominekKonvekcja:=HADC[HM_KOMKONV]; //Temperatura Kominek konwekcyjne – czujnik przy kominie potwierdzający rzeczywistą pracę kominka
TemperaturaKominekPlaszcz:=HADC[HM_KOM2]; //Temperatura kominka płaszcz wodny 2 czujnik – (backup)
TemperaturaWewnętrzna:=HADC[HM_TWEWN]; //Temperatura pokojowa wewnetrzna – dla CO
TemperaturaSolar:=HADC[HM_SOLAR]; //Temperatura Kolektor słoneczny na rurze szczytowej (gorącej)
TzewnetrznaPD:=HADC[HM_ZEWNPD]; //temperatura zewnętrzna południe
Tkociol:=HADC[HM_KOC]; // temperatura kotła na rurze szczytowej (gorącej)
TemperaturaBuforaCODol:=HADC[HM_BANDOL]; // Temperatura CO/CWU zasobnik dól
TemperaturaRecuIn:=HADC[HM_REQIN]; // Temperatura rekuperator wejście czystego powietrza
TemperaturaRecuOut:=HADC[HM_REQOUT]; // Temperatura rekuperator wyjście nawiew do domu
TemperaturaZaworTrojDrozny:=HADC[HM_NAG]; // Temperatura regulowana zaworem trójdrożnym np za nagrzewnica lub dla kaloryferów
TemperaturaRecuWyciog:=HADC[HM_REQWYC]; // Temperatura rekuperator wyciąg z domu brudne powietrze
TemperaturaBuforaCOGora:=HADC[HM_BANGORA]; // Temperatura co/cwu zasobnik góra
TemperaturaBuforaCOSrodek:=HADC[HM_BANSRO]; // Temperatura co/cwu zasobnik środek
//Pomiary z czujników dla RoomManager
TzewWschod:=RMGetTempNr(get_index_rm(’55-2′),8); // Temperatura zewnętrzna wschód z czujnika nr 8 dla RM o adresie 55-2
TzewZachod:=RMGetTempNr(get_index_rm(’55-3′),8); // Temperatura zewnętrzna Zachód z czujnika nr 8 dla RM o adresie 55-3
TzewPolnoc:=RMGetTempNr(get_index_rm(’55-4′),8); // Temperatura zewnętrzna Północ z czujnika nr 8 dla RM o adresie 55-4
TzewPoludnie:=RMGetTempNr(get_index_rm(’55-5′),8); // Temperatura zewnętrzna Południe z czujnika nr 8 dla RM o adresie 55-5
LNaslonecznienieWschod:=RMGetInvPercentNr(get_index_rm(’55-2′),1); // Poziom oświetlenia zewnętrznego wschód z czujnika nr 1 dla RM o adresie 55-2
LNaslonecznienieZachod:=RMGetInvPercentNr(get_index_rm(’55-3′),1); // Poziom oświetlenia zewnętrznego Zachód z czujnika nr 1 dla RM o adresie 55-3
LNaslonecznieniePolnoc:=RMGetInvPercentNr(get_index_rm(’55-4′),1); // Poziom oświetlenia zewnętrznego Północ z czujnika nr 1 dla RM o adresie 55-4
LNaslonecznieniePoludnie:=RMGetInvPercentNr(get_index_rm(’55-5′),1); // Poziom oświetlenia zewnętrznego Południe z czujnika nr 1 dla RM o adresie 55-5
SilaWiatru:=:=RMGetPercentNr(get_index_rm(’55-5′),7); // Poziom oświetlenia zewnętrznego Południe z czujnika nr 1 dla RM o adresie 55-5
Algorytmy sterujące mogą być dowolne i mogą uwzględniać dowolne parametry i pomiary o ile zastosowaliśmy i zainstalowaliśmy czujniki pomiarowe określonych wielkości fizycznych.

// Algorytm znajdujący się w funkcji wolnego timera powtarzalność np. co 10min

//Przykład energooszczędnego sterowania roletami i markizami (uzyskując znaczne oszczędności ze względu na ogrzewanie promieniami słonecznymi domu zimą) i akumulowanie darmowej energii słonecznej

// Darmowe i ekologiczne nagrzewanie pomieszczeń na wschodniej stronie budynku promieniami słonecznymi
if (not RoletyWschod) then //jeśli już nie są otwarte
if (LNaslonecznienieWschod>80) then // jeśli jest słońce – sprawdzić wartość empirycznie
if (Miesiac<5) and miesiac>8) then // jeśli miesiące od września do kwietnia
if (TzewWschod>0) then // temperatura czujnika nagrzanego na słońcu większa od 0C
if (Godzina>8) and (Godzina<11) then //w godzinach rannych gdy słońce świeci bezpośrednio ze wschodu
begin
RoletyWschod:=true; //flaga otwarcia rolet wschodnich
OtworzRoletyWschod; //funkcja wysyłająca zdarzenia do sterowników systemu eHouse
ZamknijMarkizyWschod; //nic nie dają gdyż słońce jest zbyt nisko
end;

// Darmowe i ekologiczne nagrzewanie pomieszczeń na południowej stronie budynku promieniami słonecznymi
if (not RoletyPoludnie) then //jeśli już nie są otwarte
if (LNaslonecznieniePolodnie>80) then // jeśli jest słońce – sprawdzić wartość empirycznie
if (Miesiac<5) and miesiac>8) then // jeśli miesiące od września do kwietnia
if (TzewPoludnie>0) then // temperatura czujnika nagrzanego na słońcu większa od 0C
if (Godzina>10) and (Godzina<14) then //w godzinach rannych gdy słońce świeci bezpośrednio z południa
begin
RoletyPoludnie:=true; //flaga otwarcia rolet polodniowych
OtworzRoletyPolodnie; //funkcja wysyłająca zdarzenia do sterowników systemu eHouse
ZamknijMarkizyPolodnie; //nic nie dają gdyż słońce jest zbyt nisko
end;

// Darmowe i ekologiczne nagrzewanie pomieszczeń na zachodniej stronie budynku promieniami słonecznymi
if (not RoletyZachod) then //jeśli już nie są otwarte
if (LNaslonecznienieZachod>80) then // jeśli jest słońce – sprawdzić wartość empirycznie
if (Miesiac<5) and miesiac>8) then // jeśli miesiące od września do kwietnia
if (TzewZachod>0) then // temperatura czujnika nagrzanego na słońcu większa od 0C
if (Godzina>14) and (Godzina<18) then //w godzinach rannych gdy słońce świeci bezpośrednio z zachodu
begin
RoletyZachod:=true; //flaga otwarcia rolet zachodnich
OtworzRoletyZachod; // funkcja wysyłająca zdarzenia do sterowników systemu eHouse
ZamknijMarkizyZachod; //nic nie dają gdyż słońce jest zbyt nisko
end;

//Ekonomiczne Ekologiczne i darmowe Ograniczanie wpływu nagrzewania pomieszczeń w wyniku promieni słonecznych latem – sterowanie markizami

//Sterowanie Markizami – otwarcie markiz aby ograniczyć działanie promieni słonecznych i ogrzewanie domu latem – wschód
if (not MarkizaWschodA) then //jeśli już nie są otwarte
if (SilaWiatru<5) then //jeśli brak wiatru
if ((Miesiac>4) and (Miesiac<9)) then // miesiące letnie
if (LNaslonecznienieWschod>50) then // jeśli słońce świeci
if (Godzina>6) and (Godzina<12) then // jeśli godziny poranne
if (TwewnWschodA>25) then // jeśli jest w pomieszczeniu za ciepło
begin
MarkizaWschodA:=true; //flaga otwartej markizy w pomieszczeniu A
OtworzMarkizeWchodA; //wysylanie zdarzenia do sterowników systemu eHouse
end;
//Analogicznie można kod powielić dla niezależnego sterowania markizami w innych pomieszczeniach na elewacji Wschodniej Zmieniając A na inną wartość

//Sterowanie Markizami – otwarcie markiz aby ograniczyć działanie promieni słonecznych i ogrzewanie domu latem południe
if (not MarkizaPoludnieA) then //jeśli już nie są otwarte
if (SilaWiatru<5) then //jeśli brak wiatru
if ((Miesiac>4) and (Miesiac<9)) then // miesiące letnie
if (LNaslonecznieniePoludnie>50) then // jeśli słońce świeci
if (Godzina>8) and (Godzina<18) then // jeśli godziny w których słońce najmocniej operuje od południa
if (TwewnPoludnieA>25) then // jeśli jest w pomieszczeniu za ciepło
begin
MarkizaPoludnieA:=true; //flaga otwartej markizy w pomieszczeniu A
OtworzMarkizePoludnieA; //wysylanie zdarzenia do sterowników systemu eHouse
end;
//Analogicznie można kod powielić dla niezależnego sterowania markizami w innych pomieszczeniach na elewacji Południowej Zmieniając A na inną wartość

//Sterowanie Markizami – otwarcie markiz aby ograniczyć działanie promieni słonecznych i ogrzewanie domu latem strona zachodnia
if (not MarkizaZachodA) then //jeśli już nie są otwarte
if (SilaWiatru<5) then //jeśli brak wiatru
if ((Miesiac>4) and (Miesiac<9)) then // miesiące letnie
if (LNaslonecznieniePoludnie>50) then // jeśli słońce świeci
if (Godzina>8) and (Godzina<18) then // jeśli godziny w których słońce najmocniej operuje od południa
if (TwewnZachodA>25) then // jeśli jest w pomieszczeniu za ciepło
begin
MarkizaZachodA:=true; //flaga otwartej markizy w pomieszczeniu A
OtworzMarkizeZachodA; //wysylanie zdarzenia do sterowników systemu eHouse
end;
//Analogicznie można kod powielić dla niezależnego sterowania markizami w innych pomieszczeniach na elewacji Zachodniej Zmieniając A na inną wartość
//Zamknięcie Markiz przy zbyt silnym wietrze
if (LNaslonecznieniePoludnie<20) then // jeśli słońce nie świeci (dobrać empirycznie uwzględniając zachmurzenie i opady deszczu)
if (MarkizaPoludnieA) then // jeśli otwarta markiza
begin
MarkizaPoludnieA:=false; //zmienia flagę
ZamknijMarkizePoludnieA; //wysłanie zdarzeń do sterowników mikroprocesorowych eHouse
end;
if (LNaslonecznienieZachod<20) then // jeśli słońce nie świeci (dobrać empirycznie)
if (MarkizaZachodA) then // jeśli otwarta markiza
begin
MarkizaZachodA:=false; //zmienia flagę
ZamknijMarkizeZachodA; //wysłanie zdarzeń do sterowników mikroprocesorowych eHouse
end;
if (LNaslonecznienieWschod<20) then // jeśli słońce nie świeci (dobrać empirycznie)
if (MarkizaWschodA) then // jeśli otwarta markiza
begin
MarkizaWschodA:=false; //zmienia flagę
ZamknijMarkizeWschodA; //wysłanie zdarzeń do sterowników mikroprocesorowych eHouse
end;
if (SilaWiatru>5) then //Wiatr to zamykamy markizy
if (MarkizaZachodA or MarkizaWschodA or MarkizaPoludnieA) then // jeśli któraś jest otwarta
begin
ZamknijWszystkieMarkizy; //wysłanie zdarzenia do sterowników systemu eHouse
MarkizaZachodA:=false;
MarkizaWschodA:=false;
MarkizaPoludnieA:=false;
end;

//Automatyczne sterowanie roletami zamykanie przy zbyt niskiej temperaturze na zewnątrz ograniczające ucieczkę ciepła przez otwory okienne na zewnątrz
//Strona południowa zamykanie rolet przy mrozie i braku słońca dla elewacji południowej
if (RoletyPoludnie) then //jeśli jest otwarta
if (TzewPoludnie<-10) then // temperatura czujnika południowego mniejsza od -10C oznaczająca duży mróz i brak słońca ogrzewającego czujnik na południowej stronie begin RoletyPoludnie:=false; //flaga otwarcia rolet polodniowych ZamknijRoletyPolodnie; //funkcja wysyłająca zdarzenia do sterowników systemu eHouse // ZamknijMarkizyPolodnie; //nic nie dają gdyż słońce jest zbyt nisko end; //Strona wschodnia zamykanie rolet przy mrozie i braku słońca dla elewacji Wschodniej if (RoletyWschod) then //jeśli jest otwarta if (TzewWschod<-10) then // temperatura czujnika Wschodniego mniejsza od -10C oznaczająca duży mróz i brak słońca ogrzewającego czujnik na wschodniej stronie begin RoletyWschod:=false; //flaga otwarcia rolet wschodnich ZamknijRoletyWschod; //funkcja wysyłająca zdarzenia do sterowników systemu eHouse // ZamknijMarkizyWschod; //nic nie dają gdyż słońce jest zbyt nisko end; //Strona zachodnia zamykanie rolet przy mrozie i braku słońca dla elewacji zachodniej if (RoletyZachod) then //jeśli jest otwarta if (TzewZachod<-10) then // temperatura czujnika zachodniego mniejsza od -10C oznaczająca duży mróz i brak słońca ogrzewającego czujnik na zachodniej stronie begin RoletyZachod:=false; //flaga otwarcia rolet zachodnich ZamknijRoletyZachod; //funkcja wysyłająca zdarzenia do sterowników systemu eHouse // ZamknijMarkizyZachod; //nic nie dają gdyż słońce jest zbyt nisko end;