W pierwszym pomyśle sterowania piecem posłużyłem się prostą konstrukcją sprawdzania położenia głowic dostępną z poziomu CCU2 w sekcji „Programy i połączenia”. Sprawdzałem tam czy któraś z głowic nie jest otwarta powyżej 5% i w oparciu o taki warunek uruchamiany był piec.
Z różnych powodów nie wystarczyło mi to. Np. co w przypadku gdy 9 głowic było otworzonych na 4% ? Wtedy „zapotrzebowanie” na ogrzewanie wynosiło 9*4% = 36%. To tak jakby jedna z głowic otworzyła się na te 36% a piec nadal nie grzał. Wystudzenie budynku gwarantowane! Doszedłem do wniosku, że lepszym wyjściem będzie sumowanie procentów otworzenia głowic i sterowanie piecem w oparciu o tę wartość.
Do wykonania miałem trzy elementy:
- zmienna systemowa zawierająca sumę położenia głowic
- program oraz skrypt sumujący położenie głowic i zapisujący do zmiennej systemowej
- zmianę skryptu odpowiedzialnego za załączanie pieca CO
1. Zmienna systemowa
Tu sprawa wydaje się być banalna. należy wejść do Ustawienia -> Wartości systemowe i wcisnąć „Nowa zmienna”. Ja swoją zmienną zdefiniowałem jako liczbę z zakresu od 0 do 1000. Taki zakres wynika z faktu, że mam 9 głowic a więc maksymalna wartość jaką tam będzie zapisana to 9*100 (%) = 900.
Dodatkowo zmienną przyporządkowałem do kanału „Piec CO” a u mnie tak nazywa się przełącznik zasilany bateryjnie, który załącza kocioł CO. Dzięki temu zabiegowi będę mógł wskazywać urządzenie (Piec CO) i zapisywać bądź pobierać z niego wartość zmiennej tak jakby był to dodatkowy kanał w urządzeniu.
W celu zaoszczędzenia komunikacji pomiędzy CCU2 a przełącznikiem postanowiłem wysyłać do przełącznika tylko zmianę jego stanu. Dlatego w kroku 3 sprawdzam dodatkowo w jakim on jest stanie. Sprawdzanie stanu to też komunikacja więc aby nie sprawdzać na „żywym organizmie” utworzyłem kolejną zmienną systemową (nazwałem ją StanCO). Tworzenie jej jest identyczne jak wyżej z drobną różnicą w typie wartości co widać na screenie poniżej.
Oczywiście do tej zmiennej także podpiąłem kanał „Piec CO”.
2. Program i skrypt sumujący.
Choć na początku sprawa wydawała się banalna to jednak musiałem nieco pobawić się tym prostym programem i skryptem aby działało to prawidłowo. Program należy „wyklikać” w „Programy i połączenia CCU2” i u mnie wygląda to tak:
W skrócie: Gdy stan położenia zaworu | jest większy albo równy zero | wywołaj gdy zaktualizowano |
lub… i tu następne głowice CO. Do tego wszystkiego w sekcji „Then” wykonuję taki skrypt:
boolean debug = false; string deviceid; real allvalvestate = 0.0; foreach(deviceid, dom.GetObject(ID_DEVICES).EnumUsedIDs()) { var device = dom.GetObject(deviceid); if( ("HM-CC-RT-DN" == device.HssType())) { string channelid; foreach(channelid,device.Channels().EnumUsedIDs()) { var channel = dom.GetObject(channelid); if(("CLIMATECONTROL_RT_TRANSCEIVER" == channel.HSSID()) ) { var interface = dom.GetObject(channel.Interface()); var datapoint = interface#"."#channel.Address(); real valvestate = dom.GetObject(datapoint#".VALVE_STATE").Value(); allvalvestate=allvalvestate+valvestate; } } } } var StanGlowic= dom.GetObject("StanGlowic"); StanGlowic.State (allvalvestate);
Skrypt wyszukuje wszystkie urządzenia „HM-CC-RT-DN” (szuka takich głowic) a w nich kanał „CLIMATECONTROL_RT_TRANSCEIVER” i z niego pobiera wartość procentową otworzenia głowicy, którą sumuje do zmiennej „allvalvestate”, którą to po zakończeniu pętli zapisuje do naszej zmiennej systemowej „StanGlowic”.
3. zmiana skryptu załączającego piec CO
Ostatni element to zmiana skryptu załączającego piec. W nowej wersji skrypt wywoływany jest
– co 15 sekund
– pod warunkiem, że PiecCO->StanGlowic jest większy od 10%
– pod warunkiem, że PiecCO->StanCO = 0 (pod warunkiem, że piec jest wyłączony bo jeśli jest włączony to nie ma sensu go ponownie włączać).
Gdy warunki są spełnione wysyłane jest polecenie do włącznika o zmianę stanu oraz dodatkowo zmieniana jest zmienna systemowa StanCO na „1” (piec włączony).
W przeciwnym wypadku (gdy wcześniejszy warunek nie jest spełniony) sprawdzane jest:
– czy PiecCO->StanGlowic jest mniejszy lub równy 10%
– czy PiecCO->StanCO = 1 (czy jest włączony)
Jeśli te warunki są spełnione wysyłane jest polecenie wyłączenia oraz zmiany stanu zmiennej systemowej StanCO na „0” (zero – piec wyłączony).
Rozwiązanie to funkcjonuje u mnie trzeci dzień i pięknie się sprawdza. Czas reakcji na funkcję „Boost” (dogrzewanie pomieszczenia) to jakieś 20 sekund od momentu wciśnięcia przycisku poprzez zmianę położenia głowicy a na włączeniu pieca zakończywszy.
Oto efekty gdzie poza opisanymi wyżej elementami są jeszcze inne ale o nich napiszę przy innej okazji.
Jak widzicie o 16:05 wszystkie głowice sumarycznie były otwarte tylko na 51% a już chwilę później na 90%. Wartość otworzenia głowic zmienia się na bieżąco.
Poniżej to samo pokazane jest na wykresie położenia głowic.
To tyle rewolucji i ewolucji.
1 Comment
Add a Comment