Wydatki związane z ogrzewaniem stanowią sporą część całościowych kosztów utrzymania budynku/mieszkania. Poprzez ten samouczek chcemy Państwu zaproponować rozwiązanie, które umożliwia obniżenie wydatków na ogrzewanie oraz uczyni sterowanie nim znacznie wygodniejszym i dostosowanym do potrzeb domowników.
Celem głównym tego samouczka oprócz zaproponowania wygodniejszego i bardziej oszczędnego sterowania ogrzewniem było pokazanie, jak przy niewielkim nakładzie pracy programistycznej zrealizować dość złożoną funkcjonalność z wykorzystaniem modułu DOMIQ/Base.
Dalsza część samouczka opisuje koncepcję działania programu sterującego temperaturą oraz przedstawia implementację programu w interfejsach użytkownika DOMIQ. Opisany został również proces automatyzacji sterowania ogrzewaniem z wykorzystaniem reguł czasowych i zdarzeń.
1. Koncepcja #
Program sterowania temperaturą umożliwia przełączanie pomiędzy zdefiniowanymi trybami pracy ogrzewania np. dzień/noc lub ciepło/normalnie/oszczędnie itd. Każdy zdefiniowany tryb może być swobodnie zmieniany w trakcie codziennego korzystania z instalacji automatyki budynkowej. Zmiany wprowadzone w ustawieniach danego trybu zostaną automatycznie zapamiętane przez system DOMIQ wraz ze zmianą trybu pracy ogrzewania.
Program umożliwia również swobodną modyfikację listy urządzeń, które biorą udział w procesie regulacji temperatury. Głównym założeniem opisywanego programu sterowania temperaturą było utworzenie algorytmu, który będzie się dostosowywał do zmieniających się potrzeb użytkowników oraz umożliwi im zmiany ustawień systemu automatyki domowej z poziomu interfejsów użytkownika.
2. Zasada działania i kod źródłowy #
Zasada działania programu przedstawiona została na poniższych schematach. Obrazują one zmianę trybów ogrzewania z dziennego na nocny i odwrotnie. Pierwszy schemat przedstawia zmianę trybu dziennego na nocny:
W momencie wywołania trybu Dzień następuje zapisanie aktualnych nastaw regulatorów, jako ustawienia domyślne dla trybu Noc (1). Następnie domyślne wartości regulatorów przyporządkowane do trybu Dzień wysyłane są do regulatorów (2).
W przypadku zmiany trybu z dziennego na nocny, zmiany są wykonywane analogicznie. Kod źródłowy programu sterującego temperaturą jest dostępny jako załącznik do samouczka pod nazwą switcher.lua.
Plik można pobrać ze strony z opisem samouczka na www.domiq.pl.
Plik należy wgrać do modułu DOMIQ/Base > Zasoby > Skrypty. A następnie wywołać go w zakładce Logika poleceniem import ’switcher’
.
W zakładce Logika należy również dodać fragment kodu, konfigurujacy program do pracy z konkretnymi regulatorami LCN. Przykład kodu konfiguracyjnego przedstawiamy poniżej:
-- kod definiowany przez użytkownika
temperatura=switcher("temp")
-- dodaj regulator nr 1 w module LCN o adresie 26.
temperatura:add('LCN.regulator.0.26.1')
-- analogicznie dodawane są pozostałe regulatory
temperatura:add('LCN.regulator.0.26.2')
temperatura:add('LCN.regulator.0.36.1')
temperatura:add('LCN.regulator.0.36.2')
Kilka słów objaśnienia do kodu definiowanego przez użytkownika:
Zmienna temperatura
zawiera odwołanie do obiektu utworzonego poprzez wywołanie funkcji switcher(name)
. Nazwa zmiennej może być dowolna (bez polskich znaków i spacji). Argument funkcji switcher
(w tym przypadku ”temp”
) musi być unikalnym ciągiem znaków.
W przypadku, gdy chcielibyśmy wykorzystać skrypt do sterowania wieloma zestawami urządzeń jednocześnie lub kilkoma pomieszczeniami niezależnie ważne jest, aby nadać unikalne nazwy zmiennym, odwołującym się obiektów utworzonych poprzez wywołanie funkcji switcher
, a także wywoływać funkcję switcher
z unikalnym argumentem. Przykłady przedstawione w dalszej części tego samouczka pokazują, jak sterować pojedynczym zestawem urządzeń.
Linie kodu nazwa_zmiennej:add('<identyfikator urządzenia>')
, w naszym przypadku np. temperatura:add('LCN.regulator.0.26.1')
służą do deklaracji regulatorów LCN, które biorą udział w sterowaniu temperaturą.
Ogólny zarys działania skryptu przedstawiony został na poniższym schemacie:
Dla dociekliwych
Jeżeli dotychczasowe informacje o działaniu skryptu switcher.lua
są dla Ciebie wystarczające możesz pominąć czytanie tego akapitu. W przeciwnym przypadku zapraszamy do lektury dalszej części tego rozdziału.
Pierwsza funkcja skryptu – funkcja par:add(dev)
służy do dodawania nowych regulatorów. Odczytuje ona nazwy identyfikatorów np. LCN.regulator.0.26.1
i zapisuje je w tablicy d
.
Główna funkcjonalność skryptu wykonywana jest wewnątrz funkcji par:switch(what)
, a właściwie w zawartej w niej pętli for
. W momencie zmiany trybu ogrzewania w pętli wykonywane są dwie główne czynności:
- Zapis do zmiennych nieulotnych MEM bieżących nastaw regulatorów. Nastawy te są jednocześnie zapamiętywane jako wartości domyślne zmienianego trybu ogrzewania. Odpowiada za to linia:
set("MEM.sw."..name.."."..current.."."..d.channel(),d.value)
. - Odczyt ze zmiennych MEM nastaw regulatorów przypisanych do wywoływanego trybu ogrzewania:
local val=get("MEM.sw."..name.."."..what.."."..d.channel())
, a następnie ustawienie tych wartości, jako bieżące nastawy regulatorów:d:set(val)
.
Linia set("MEM.sw."..name,what)
zapisuje w zmiennej MEM aktualny tryb pracy ogrzewania.
3. Implementacja w interfejsach użytkownika #
W tym rodziale zaprezentujemy implementację przedstawionego programu sterowania temperaturą w interfejsach użytkownika systemu DOMIQ. Przykłady zaprezentowane w dalszej części rozdziału dotyczą sterowania czterema regulatorami LCN w trzech trybach pracy: Eco, Dzień, Noc. Liczba trybów oraz ich nazwy, a także liczba sterowanych urządzeń mogą być swodobnie modyfikowane przez osobę konfigurującą DOMIQ/Base.
3.1. DOMIQ/Remote #
Wykorzystanie skryptu switcher.lua
w połączeniu w aplikacją DOMIQ/Remote umożliwia utworzenie bardzo wygodnego interfejsu do sterowania ogrzewaniem w budynku. Aby utworzyć taki interfejs wykonaj poniższe czynności:
- Wybierz zakładkę Remote.
- Dodaj nową stronę i sekcję lub tylko sekcję, jeżeli korzystasz z istniejącej strony. Nadaj stronie/sekcji etykietę np. Temperatura.
- Dodaj Grupę przycisków i wybierz liczbę kolumn, w zależności od tego, w jaki sposób chcesz zgrupować przyciski.
- Dodaj Przycisk i kliknij na nim dwukrotnie, aby zmienić jego właściwości:
- Wpisz krótki opis przycisku w polu Etykieta. W naszym przypadku: Eco.
- Kliknij na przycisk Dodaj kanał…, w okienku, które się pojawi w polu Nazwa wpisz:
C.LOGIC
, natomiast po polu wartość:temperatura:switch("Eco")
.
- Punkt 3. powtórz dla pozostałych dwóch przycisków, zmieniając etykiety oraz zawartości pola Wartość kolejno na:
temperatura:switch("Dzien")
,temperatura:switch("Noc")
. Dodane przyciski po naciśnięciu będą wywoływały odpowiedni tryb pracy ogrzewania. - Dodaj elementy Temperatura w liczbie zgodnej z deklaracją w kodzie źródłowym oraz zdefiniuj ich parametry.
- Na zakończenie dodaj element Tekst, który będzie wyświetlał bieżący tryb pracy ogrzewania. Kliknij na nim dwukrotnie i uzupełnij jego właściwości:
- W polu Etykieta wpisz opis np. Aktualny tryb.
- W komórce Kanał wpisz nazwę zmiennej typu MEM, w której przechwowywana jest informacja o aktualnym trybie pracy. Ogólna składnia jest następująca:
MEM.sw<nazwa_argumentu_funkcji_switcher>
. W naszym przypadku:MEM.sw.temp
.
Na koniec struktura w zakładce Remote powinna wyglądać następująco:
Efekt w aplikacji DOMIQ/Remote:
Konfiguracja trybów pracy ogrzewania w aplikacji DOMIQ/Remote
Mając zbudowany interfejs użytkownika można przystąpić do konfiguracji trybów ogrzewania:
- Wybierz tryb, który chcesz skonfigurować, np. Eco.
- Ustaw wartości temperatur zadanych na regulatorach przy użyciu kontrolek Temperatura.
- Kliknij na kolejnym przycisku, aby rozpocząć konfigurację nastaw kolejnego trybu. Po jego naciśnięciu nastawy poprzedniego trybu zostaną automatycznie zapamiętane w pamięci modułu Base.
- Wykonaj analogiczne czynności dla pozostałych dwóch trybów.
Twoja konfiguracja jest już w pełni gotowa! Teraz możesz swobodnie przełaczać tryby pracy ogrzewania z poziomu aplikacji DOMIQ/Remote.
Pamiętaj! Jeżeli w czasie pracy ogrzewania w danym trybie np. Eco zmienisz nastawy regulatorów, a następnie wybierzesz inny tryb, wówczas zmienione nastawy zostaną zapamiętane w pamięci modułu DOMIQ/Base jako ustawienia domyślne trybu Eco.
3.2. DOMIQ/Display #
W tym podrozdziale zaprezentujemy jak utworzyć ekran do sterowania temperaturą z poziomu panelu DOMIQ/Display. Tutaj również wykorzystamy skrypt switcher.lua
omówiony w rozdziale 2 oraz nową funkcję elementu Temperatura, która umożliwia wprowadzanie wartości liczbowych przy użyciu wirtualnej klawiatury numerycznej.
Nowa funkcja dostępna jest w oprogramowaniu modułu DOMIQ/Base od wersji 1.7.4 i w chwili obecnej jest dostępna jedynie na panelach DOMIQ/Display z oprogramowaniem w wersji 1.7.0.
Aby zdefiniować ekran wizualizacji do sterowania temperatuą postępuj zgodnie z poniższą instrukcją:
- Wybierz zakładkę Display.
- Kliknij na przycisk Dodaj ekran.
- Skonfiguruj ustawienia ekranu: wpisz unikalny identyfikator, opcjonalnie możesz dodać tło wizualizacji.
- Dodaj Przycisk, a następnie kliknij na nim i uzupełnij jego właściwości:
- Wprowadź opis w polu Etykieta, w naszym przypadku Eco.
- W polu Polecenie wpisz:
LOGIC=temperatura:switch(”Eco”)
.
- Punkt 4. powtórz dla pozostałych dwóch przycisków zmieniając etykiety oraz zawartości pola Polecenie na:
LOGIC=temperatura:switch(”Dzien”)
,LOGIC=temperatura:switch(”Noc”)
. Dodane przyciski po naciśnięciu będą wywoływały odpowiedni tryb pracy ogrzewania. - Dodaj dwa elementy typu Tekst. W pierwszym w polu Tekst wpisz opis np: Aktualny tryb:. W drugim, w polu Kanał wpisz:
MEM.sw.<nazwa_argumentu_funkcji_switcher>
, w naszym przypadkuMEM.sw.temp
. - Dodaj element Temperatura i uzupełnij jego właściwości:
- W polu Kanał wpisz adres regulatora LCN, w naszym przypadku
LCN.regulator.0.26.1
. - W komórce Format wpisz: 0.0.
- Opcjonalnie możesz zmienić kolor i rozmiar czcionki. W naszym przypadku kolor: #666666, rozmiar 21.
- W polach min i max wprowadź dolną i górną granicę zakresu regulacji temperatury, np. 10 i 30.
- W polu Kanał wpisz adres regulatora LCN, w naszym przypadku
- Powtórz krok 7. dla pozostałych regulatorów.
- Jeżeli obok wartości temperatury zadanej chcesz wyświetlić temperaturę aktualną dodaj kolejny element Temperatura i uzupełnij jego właściwości analogicznie do punktu 7. Pamiętaj o zmianie zawartości komórki Kanał na adres odpowiedniego czujnika temperatury LCN. W naszym przypadku
LCN.value.0.26.r1
.
Przykładowy ekran sterowania temperaturą:
Opisy pól oraz kompozycja graficzna może być swobodnie zmieniana. Wszystkie wykorzystane elementy graficzne oraz plik konfiguracyjny ekranu wizualizacji jest dołączony jako załącznik do samouczka. Zawartość załączonego pliku display.xml
należy skopiować do pliku display.xml
znajdującego się w Twoim module DOMIQ/Base.
Konfiguracja trybów pracy ogrzewania na panelu DOMIQ/Display
Konfiguracja przebiega niemal identycznie, jak w przypadku aplikacji DOMIQ/Remote.
- Wybierz tryb, który chcesz skonfigurować, np. Eco.
- Ustaw wartości temperatur zadanych na regulatorach – klikaj kolejno na elementach Temperatura i wprowadzaj wartości przy użyciu klawiatury numerycznej.
- Kliknij na kolejnym przycisku, aby rozpocząć konfigurację nastaw kolejnego trybu. Po jego naciśnięciu nastawy poprzedniego trybu zostaną automatycznie zapamiętane w pamięci modułu Base.
- Wykonaj analogiczne czynności dla pozostałych dwóch trybów.
Twoja konfiguracja jest już w pełni gotowa! Teraz możesz swobodnie przełaczać tryby pracy ogrzewania przy użyciu panela DOMIQ/Display.
Pamiętaj! Jeżeli w czasie pracy ogrzewania w danym trybie np. Eco zmienisz nastawy regulatorów, a następnie wybierzesz inny tryb, wówczas zmienione nastawy zostaną zapamiętane w pamięci modułu DOMIQ/Base jako ustawienia domyślne trybu Eco.
4. Automatyzacja #
Sterowanie temperaturą stanie się jeszcze wygodniejsze i bardziej precyzyjne, jeżeli zintegrujemy je ze zdarzeniami i regułami czasowymi. Dzięki temu temperatura w pomieszczeniach będzie się dopasowywała do upodobań i zwyczajów mieszkańców. Dalsza część tego rozdziału przedstawia przykład połączenia programu sterowania temperaturą z systemem alarmowym Satel, urządzeniami LCN przy wykorzystaniu zdarzeń i timerów.
4.1. Integracja z centralą alarmową #
Wykorzystanie zdarzeń E.IDS.armed.<numer_strefy>
pozwala na wygodne połączenie sterowania temperaturą z systemem alarmowym SATEL. Zasada działania jest bardzo prosta: system DOMIQ po wykryciu tego zdarzenia ustawi określony tryb pracy ogrzewania, w naszym przypadku tryb Eco.
Definicja takiej reakcji systemu automatyki przebiega wg poniższego schematu:
- Wybierz zakładkę Zdarzenia i dodaj nowe zdarzenie.
- W sekcji Szczegóły:
- W komórce Kanał wpisz:
E.IDS.armed.(%d+)
– sprawdzane będzie uzbrojenie którejkolwiek strefy alarmowej. - W polu Dane wprowadź: 1.
- W komórce Kanał wpisz:
- W sekcji Akcje kliknij na Dodaj kanał… .
- W okienku które się wyświetli w polu Nazwa wpisz:
C.LOGIC
, natomiast w polu Wartość:<nazwa_zmiennej>:switch(”<nazwa_trybu”)
, w naszym przypadku:temperatura:switch("Eco")
.
Jeżeli chcesz, aby reakcja następowała na uzbrojenie konkretnej strefy alarmowej np. strefy nr 1, wówczas w komórce Kanał wpisz: E.IDS.armed.1
.
Ostatecznie ekran definicji zdarzenia powinien wyglądać następująco:
4.2. Integracja z systemem LCN #
Jeżeli w Twojej instalacji nie ma systemu alarmowego SATEL, podobny efekt możesz uzyskać przy użyciu klawiszy LCN i zdarzenia E.LCN.key, które informuje o nacisnięciu przycisku w systemie LCN. Analogicznie do pierwszego przykładu system DOMIQ po wykryciu tego zdarzenia ustawi przypisany do danego przycisku tryb pracy ogrzewania.
Na potrzeby tego przykładu załóżmy, że pierwsze trzy przyciski w tabeli B z poleceniem Długo służą do zmiany trybów ogrzewania. W tym celu należy w oprogramowaniu LCNPro wybrać dla poszczególnych klawiszy polecenie Wyślij klawisze, a jako adresata wskazać moduł DOMIQ/Base (domyślne ID: 254). Z tak skonfigurowanymi opcjami modułu LCN możemy przystąpić do definiowania zdarzeń:
- Dodaj nowe zdarzenie.
- W polu Kanał wpisz:
E.LCN.key
- W polu Wartość
B1 make
. - Następnie kliknij na Dodaj kanał… .
- W okienku, które się wyświetli w polu Nazwa wpisz
C.LOGIC
, natomiast w polu Wartość:<nazwa_zmiennej>:switch(”<nazwa_trybu”)
, w naszym przypadku:temperatura:switch("Eco")
. - Dla pozostałych trybów pracy ogrzewania powtórz kroki od 1 do 5, pamiętając o zmianie numeru klawisza oraz akcji wykonywanej po jego naciśnięciu, w naszym przypadku:
temperatura:switch("Dzien")
oraztemperatura:switch("Noc")
.
4.3. Zastosowanie reguł czasowych #
Wykorzystanie reguł czasowych pozwala automatyczne zmieniać tryby pracy ogrzewania w zależności od pory dnia, dnia tygodnia itd. W dalszej części tego podrozdziału opisaliśmy, jak utworzyć elementy aplikacji DOMIQ/Remote umożliwiające zmianę godzin uruchamiania poszczególnych trybów ogrzewania, a także procedurę tradycyjnego (z poziomu konfiguratora) definiowania reguł czasowych.
4.3.1. Sterowanie timerem z poziomu aplikacji DOMIQ/Remote #
Aby zrealizować tę funkcjonalność należy skorzystać z zakładki Timery i Remote:
- Dodaj grupę timerów i nadaj jej nazwę np. Temperatura.
- Dodaj nowy timer i uzupełnij jego właściwości:
- W komórce Etykieta wpisz jego opis w zależności od przeznaczenia timera.
- Uzupełnij atrybuty w sekcji Szczegóły:
- W polu Godzina wpisz nazwę zmiennej typu MEM, która zawiera w sobie nazwę zmiennej odwołującej się do funkcji
switcher
oraz nazwę trybu. W naszym przypadkuMEM.godzina.temperatura.dzien.
- W polu Minuta wpisz:
MEM.minuta.temperatura.dzien
.
- W polu Godzina wpisz nazwę zmiennej typu MEM, która zawiera w sobie nazwę zmiennej odwołującej się do funkcji
- W polu Dni tygodnia wpisz:
MEM.temperatura.dni
.
W ten sposób zostały zadeklarowane zmienne nieulotne typu MEM, w których przechowywane będą nastawy z aplikacji DOMIQ/Remote. W nazwach zmiennych nie wolno używać polskich znaków oraz spacji.
- W sekcji Polecenia zdefiniuj polecenie, które będzie wykonane po wywołaniu timera:
- Kliknij na Dodaj Kanał…
- W okienku, które się wyświetli w polu Nazwa wpisz
C.LOGIC
, natomiast w polu Wartość:<nazwa_zmiennej>:switch(”<nazwa_trybu>”)
, w naszym przypadku:temperatura:switch("Dzien")
.
- Kliknij na Zapisz, aby zatwierdzić zmiany.
- Przejdź do zakładki Remote.
- Dodaj element typu Czas.
- Kliknij na nim dwukrotnie i uzupełnij jego właściwości:
- W polu Etykieta wpisz opis kontrolki.
- W komórce Kanał z godziną wpisz:
MEM.godzina.temperatura.dzien
. - W polu Kanał z minutą wpisz:
MEM.minuta.temperatura.dzien
.
- Punkty od 2 do 7 powtórz dla nocnego trybu ogrzewania.
Efekt w aplikacji DOMIQ/Remote:
4.3.2. Definiowanie timerów z poziomu konfiguratora #
Definiowanie reguł czasowych wprost z poziomu konfiguratora ma jedną wadę – użytkownik nie może zmieniać nastaw na bieżąco. Jednak pomino tej wady, rozwiązanie to ma również jedną dużą zaletę – większą elastyczność definiowanych reguł. Mianowicie możesz bardzo szybko zdefiniować oddzielne reguły dla poszczególnych dni tygodnia, np. inne godziny przełączania trybów ogrzewania dla dni powszednich i inne dla weekendu itp.. Takie rozwiązanie jest do osiągnięcia również w aplikacji DOMIQ/Remote jednakże wiązałoby się z definiowaniem wielu oddzielnych elementów interfejsu użytkownika (elementy typu Czas oraz Wybór), co mocno pogorszyłoby użyteczność i przejrzystość całego interfejsu sterowania temperaturą.
Jako przykład przedstawimy definiowanie niezależnych reguł czasowych sterujących ogrzewaniem dla dni powszednich i weekendu.
Rozpoczniemy od definicji reguł czasowych dla dni powszednich.
- Dodaj grupę timerów i nadaj im nazwę np. Ogrzewanie.
- Dodaj nowy timer. W polu Etykieta wpisz jego opis np. Tryb dzienny.
- W polu Godzina wpisz godzinę, o której timer będzie wzbudzony np. 7. Analogicznie wypełnij pole Minuta.
- W komórce Dzień tygodnia wpisz 2,3,4,5,6 – dni powszednie.
- W sekcji Akcje kliknij na Dodaj kanał… . W okienku, które się wyświetli w polu Nazwa wpisz
C.LOGIC
, natomiast w polu Wartość:<nazwa_zmiennej>:switch(”<nazwa_trybu>”)
, w naszym przypadku:temperatura:switch("Dzien")
. - Dodaj kolejny timer i wykonaj analogiczne czynności dla trybu nocnego.
W ten sposób zdefiniowaliśmy reguły czasowe dla dni powszednich. Definicja dla weekendu przebiega analogicznie. Jedyne co ulega zmianie, to godzina wyzwalania timera, zawartość pola Dzień tygodnia – należy tam wpisać 6,7.
W sposób przedstawiony powyżej możesz analogicznie zdefiniować również oddzielne reguły dla poszczególnych dni tygodnia.