Przejdź do edycji urządzenia wirtualnego.
Dodaj nowy wiersz, a następnie dodaj do niego kolumny.
Do każdej kolumny dodaj element typu Tekst i uzupełnij dane zgodnie z poniższym opisem:
Tekst w pierwszej kolumnie:
Wartość: Średnia temperatura z termostatów
Tekst w drugiej kolumnie:
Nazwa elementu: average_temperature_text
Wartość: N/A
Kolumnę po lewej wyrównaj do lewej i do środka w pionie.
Kolumnę po prawej wyrównaj do prawej i do środka w pionie.
Całość wygląda teraz następująco.
Dodaj obsługę pobierania temperatur z termostatów. W tym celu wykorzystaj funkcję onEvent(event), która reaguje na każdą zmianę w systemie Sinum.
Co minutę lub przy każdej zmianie parametru temperature (w którym przechowywana jest aktualna temperatura z czujnika), funkcja pobierze aktualne temperatury z termostatów, wyliczy ich średnią i wpisze ją w pole tekstowe.
Kod funkcji realizującej to działanie przedstawiono poniżej.
-- kod wykonywany przy każdej zmianie w Sinum
function CustomDevice:onEvent(event)
-- sprawdzenie czy zmieniła się minuta, aktualizacja temperatur co minutę
if dateTime:changed() or
-- sprawdzenie czy zmienił się parametr urządzenia o nazwie temperature
(event.type == "device_state_changed" and event.details == "temperature") then
-- zadeklarujemy zmienne, w których zapiszemy sumę temperatur i liczbę termostatów
local temperatureSum = 0
local thermostatsCount = 0
-- iterujemy wszystkie urządzenia wirtualne i sprawdzamy czy typ to termostat
for _, dev in pairs(virtual) do
if dev:getValue("type") == "thermostat" then
-- urządzenie jest termostatem
-- zwiększenie liczby termostatów w zmiennej
thermostatsCount = thermostatsCount + 1
-- pobranie temperatury z termostatu i dodanie do sumy w zmiennej
temperatureSum = temperatureSum + dev:getValue("temperature")
end
end
-- jeśli jest co najmniej jeden termostat, aktualizujemy tekst obliczoną średnią
if thermostatsCount > 0 then
-- obliczamy średnią
local average = temperatureSum / thermostatsCount
-- wartości zapisane są w stopniach celsjusza x10, żeby poprawnie wyświetlić, dzielimy przez 10
average = average / 10
-- pobieramy element tekstu i aktualizujemy wartość tekstową
self:getElement("average_temperature_text"):setValue("value", string.format("%.1f℃", average))
end
end
end
Powyższy kod należy dodać do kodu urządzenia.
Po zapisaniu urządzenia, w ciągu minuty w polu tekstowym powinna pojawić się wyliczona średnia temperatura pobrana z czujników dodanych do termostatów.
W ten sposób urządzenie niestandardowe umożliwia zarówno sterowanie wszystkimi termostatami dodanymi do systemu Sinum, jak i odczyt informacji z tych urządzeń.