Po rezygnacji z domoticz'a postanowiłem zrobić swój kontroler, współpracujący z mysensors. Jakie przyjąłem założenia:
- miał być napisany w .NET (najszybciej powstanie, poza tym lubię VisualStudio)
- logika pracy kontrolera może być zmieniana bez konieczności kompilacji kodu - czyli program "sterownika domowego" musi być w postaci skryptu ew. jakiego pliku konfiguracyjnego
- skrypt będzie napisany we własnym, dedykowanym języku
- archiwizacja danych w bazie SQL - wymagań dużych co do motoru nie ma, zatem wybór padł na SQLLite
- konsola "administracyjna", pozwalająca na dostęp do aplikacji i jej kontrolę na "niskim poziomie" napisana z wykorzystanie .Net Remoting
- wielowątkowa (obsługa archiwizacji danych czy komunikacji z mysensors nie powinna blokować głównego procesu - logiki sterownika)
- dostęp do sterownika poprzez WWW (już taki użytkowy, nie administracyjny) - aplikacja w Angularze + webAPI hostowane przez Owin
Najciekawszy oczywiście, bo wykonujący całą logikę sterownika, jest główny proces. Jego zadaniem jest wczytanie skryptu (programu "inteligentnego domu"), jego "kompilacja" i wykonanie. Przyjąłem, że nie skorzystam z gotowych rozwiązań (można użyć chociażby język Lua) tylko napiszę swój interpreter języka skryptowego.
Sam interpreter opiszę nieco później (zasadę działania z kodem). A jak taki skrypt wygląda...
Wycięty fragment skryptu to sterowanie pompą obiegową ciepłej wody. W głównej pętli (takie dedykowane polecenie whiletime, przyjmujące w parametrze liczbę milisekund ile ma trwać minimalnie), którego czas trwania wynosi 10ms mamy:
- przygotowanie zmiennej pomocniczej div_5, która posłuży do odmierzania czasu 50ms
- sprawdzenie czy bieżący czas jest między 5'tą rano, a minutę przed północą
- a jeżeli powyższy warunek jest spełniony oraz dodatkowo alarm nie jest uzbrojony i nie ma przerwy w zasilaniu - włączana jest pompa obiegowa
Są tutaj wymienione wcześniej dwa rodzaje zmiennych - "fizyczne" (sprzężone z urządzeniami, zarówno podłączonymi przewodowo jak i bezprzewodowo) i "zwykłe" (pamięciowe). Za sprzężenie zmiennych fizycznych odpowiada osobny proces.
Funkcjonalnie ten fragment odpowiada po prostu za odłączenie pompy obiegu ciepłej wody w czasie kiedy nie jest ona potrzebna.



Brak komentarzy:
Prześlij komentarz