Aby sterować urządzeniem (np. przekaźnikiem) w skrypcie Lua, wykonaj następujące kroki:
Utwórz nową scenę typu Kod
W zakładce Ustawienia > Sceny kliknij przycisk 🞢, wybierz typ Kod, nadaj nazwę scenie i kliknij Dalej.
Otwórz menu urządzeń
W górnej części edytora skryptu kliknij przycisk Urządzenia, aby rozwinąć listę dostępnych elementów systemu.
Wybierz urządzenie
Znajdź przekaźnik, którym chcesz sterować, i kliknij jego nazwę na liście.
Do edytora automatycznie zostanie wklejony odpowiedni fragment kodu LUA umożliwiający jego obsługę.
Dzięki temu możesz szybko rozpocząć pisanie sceny, która bezpośrednio steruje wybranym urządzeniem w systemie.
local relay_5 = wtp[18]
Do zmiennej lokalnej zostanie przypisany obiekt reprezentujący wybrane urządzenie. W tym przykładzie jest to urządzenie bezprzewodowe (WTP) o identyfikatorze (ID) 18.
W analogiczny sposób możesz uzyskiwać dostęp do różnych typów urządzeń w systemie Sinum, korzystając z odpowiednich kontenerów:
wtpsbusslinktechPełna lista dostępnych urządzeń wraz z opisem metod i właściwości znajduje się w dokumentacji Lua w rozdziale Devices.
Po przypisaniu urządzenia do zmiennej (np. przekaźnika), możesz bezpośrednio sterować jego stanem za pomocą właściwości state.
local relay_5 = wtp[18]
relay_5:setValue("state", true)
Kliknij przycisk 💾, aby zapisać scenę.
Następnie uruchom scenę przyciskiem ▶, aby sprawdzić jej działanie.
📌 Uwaga:
Jeśli przekaźnik był już wcześniej włączony, jego stan nie zostanie ponownie zmieniony.
Aby skutecznie przetestować scenę, upewnij się, że przekaźnik został wyłączony przed jej uruchomieniem.
Analogicznie, aby wyłączyć przekaźnik, należy ustawić jego właściwość state na false.
local relay_5 = wtp[18]
relay_5:setValue("state", false)
Zamień poprzedni skrypt w edytorze sceny na powyższy kod, a następnie:
Kliknij 💾, aby zapisać zmodyfikowaną scenę.
Uruchom ją przyciskiem ▶, aby wyłączyć przekaźnik.
W skryptach LUA możesz nie tylko ustawiać właściwości urządzeń, ale również je odczytywać.
Do pobierania bieżącej wartości służy metoda getValue().
local relay_5 = wtp[18]
print( relay_5:getValue("state") )
Kliknij 💾, aby zapisać scenę.
Uruchom ją przyciskiem ▶.
Otwórz panel logów klikając przycisk >_ i znajdź odpowiednią scenę — wynik odczytu będzie widoczny jako wpis true lub false.
Odczytaną wartość stanu przekaźnika można wykorzystać do jego przełączania — czyli ustawienia stanu odwrotnego do aktualnego. W tym celu użyj instrukcji warunkowej if.
local relay_5 = wtp[18]
if relay_5:getValue("state") then
-- jeśli przekaźnik jest włączony, wyłącz go
relay_5:setValue("state", false)
else
-- w przeciwnym przypadku, włącz go
relay_5:setValue("state", true)
end
Ten skrypt odczytuje aktualny stan przekaźnika i zapisuje go do zmiennej.
Sprawda, czy przekaźnik jest włączony (true):
Jeśli tak – wyłącza go,
Jeśli nie – włącza go.
Kliknij 💾, aby zapisać scenę.
Uruchom ją przyciskiem ▶.
Poprzednią scenę można zapisać znacznie prościej, korzystając z operatora negacji logicznej not.
Stan przeciwny do obecnego można „obliczyć” następująco:
local relay_5 = wtp[18]
relay_5:setValue("state", not relay_5:getValue("state"))
Ten jednolinijkowy zapis:
Pobierze bieżącą wartość właściwości state z urządzenia,
Odwróci ją logicznie (z true na false lub odwrotnie),
Ustawi wynik w urządzeniu, przełączając jego stan.
Scena może kontrolować wiele przekaźników jednocześnie. Najprostszym sposobem jest utworzenie stałej listy urządzeń, które chcesz obsługiwać.
local list = {
wtp[18],
wtp[19],
sbus[4],
}
Aby wyłączyć wszystkie przekaźniki zawarte w tabeli, możesz użyć pętli for iterującej po indeksach listy.
local list = {
wtp[18],
wtp[19],
sbus[4],
}
for i = 1, #list do
list[i]:setValue("value", false)
end
W analogiczny sposób, jak w przykładzie wyłączania, możesz:
Włączać wszystkie przekaźniki, ustawiając state = true,
Przełączać ich stan, odczytując obecny i ustawiając przeciwny.
Zamiast korzystać ze stałej listy, możesz przejść przez wszystkie urządzenia w wybranym pomieszczeniu.
Dzięki temu skrypt będzie działał poprawnie nawet po dodaniu nowych przekaźników do tego pokoju.
Utwórz nową scenę typu kod.
Na górnym pasku edytora otwórz menu Pomieszczenia i kliknij nazwę wybranego pokoju.
Do edytora zostanie wstawiony fragment kodu, np.:
local room_1 = room[3]
Po przypisaniu pomieszczenia do zmiennej room_1 możesz przeszukać urządzenia w tym pomieszczeniu, wykorzystując metodę foreach.
local room_1 = room[3]
room_1:foreach(function (device)
end)
Metoda foreach uruchamia podaną jej funkcję dla każdego urządzenia w danym pomieszczeniu, przekazując je jako argument.
Dzięki temu działa podobnie do zwykłej pętli for.
W pomieszczeniu mogą znajdować się różne typy urządzeń. Aby uniknąć niepożądanych zmian, warto sprawdzić, czy przetwarzane urządzenie to przekaźnik.
Typ urządzenia można sprawdzić, odczytując jego właściwość type.
Dla każdego przekaźnika wartość ta wynosi "relay".
local room_1 = room[3]
room_1:foreach(function (device)
if device:getValue("type") == "relay" then
device:setValue("state", false)
end
end)