Baza wiedzy Sinum

Interfejs urządzenia - pole tekstowe

  1. Przejdź do edycji urządzenia wirtualnego.

  2. Dodaj nowy wiersz, a następnie dodaj do niego kolumny.

  3. 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

  4. Kolumnę po lewej wyrównaj do lewej i do środka w pionie.

  5. Kolumnę po prawej wyrównaj do prawej i do środka w pionie.

  6. Całość wygląda teraz następująco.

  7. 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.

  8. 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.

  9. 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
    
  10. Powyższy kod należy dodać do kodu urządzenia.

  11. 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.

  12. 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ń.