środa, 7 marca 2018

Kontroler


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