Wyzwalacze akcji (Action trigger) na sd4linux

User avatar
klew
Posts: 10692
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Hej

Dodałem do supla-device dla Linuxa wsparcie dla wyzwalaczy akcji (od wersji 23.02). Motywacją było uruchamianie scen i innych akcji na podstawie stanu telewizora Android TV, ale Wyzwalaczy Akcji do wielu innych rzeczy.

Konfiguracja pozwala na wysłanie dowolnego Wyzwalacza na podstawie stanu kanału (BinaryPrased, CmdRelay), tranzycji między stanami (np z on na off), wartości z pliku (np. liczby 4, 5, 6) lub tranzycji między tymi liczbami (np. przy przejściu z 4 na 7).

Konkretny przykład użycia dodam niedługo w opisie integracji z Android TV.

Całość jest opisana w readme (po angielsku). Poniżej wklejam rezultat tłumaczenia tego tekstu przez chatGPT :P, niezły jest, prawda? :)
W większości miejsc poradził sobie świetnie z zachowaniem języka angielskiego.

ActionTriggerParsed
Tworzy instancję kanału "akcja wyzwalająca". Istnieje tylko jeden obowiązkowy parametr "name", który jest używany w innych kanałach do odwołania się do tego kanału.

Akcja wyzwalająca może być użyta tylko w kanałach "BinaryParsed" i "CmdRelay".
Poniżej znajduje się przykładowa konfiguracja akcji wyzwalającej dla kanału "BinaryParsed":

Code: Select all

action_trigger:
  - use: myAt2001
  - on_state: [-1, 0]
  - on_state_change: [0, 1, 1]
  - on_value: [5, 2]
  - on_value_change: [6, 7, 3]
Powyzsza konfiguracja używa kanału "ActionTriggerParsed" z nazwą "myAt2001".
Opublikuje akcję "0", gdy kanał wejdzie w stan "-1" (offline).
Akcja "1" zostanie opublikowana, gdy stan kanału zmieni się z "0" (wyłączony) na "1" (włączony).
Akcja "2" zostanie opublikowana, gdy wartość z parsera wynosi "5".
Akcja "3" zostanie opublikowana, gdy wartość z parsera zmieni się z "6" na "7".

Oba kanały "BinaryParsed" i "CmdRelay" mają stan, który może być równy "0" (wyłączony) lub "1" (włączony).
Dodatkowo "CmdRelay" może mieć stan "-1", który jest ustawiany, gdy kanał jest offline.
Więc "stan" odnosi się do stanu kanału raportowanego do Supla. Z kolei wartość reprezentuje wartość odczytaną z parsera.
Możemy np. pobierać dane wejściowe z pliku, który może mieć wartości od -1 do 10. Wartość "-1" dla "CmdRelay" będzie interpretowana jako "offline" (gdy "offline_on_invalid_state" jest ustawione).
Domyślnie wartość "1" jest interpretowana jako stan "on", a wszystkie inne wartości są interpretowane jako stan "off" (można to zmienić, ustawiając tablicę "state_on_values").

Akcja wyzwalająca może być skonfigurowana, gdy kanał wejdzie w wybrany stan lub wartość i dla określonego przejścia między stanami lub wartościami.

Parametry "on_state" i "on_value" skonfigurują akcję wyzwalającą do działania, gdy kanał wejdzie w wybrany stan lub wartość.
Pierwsza liczba w tablicy definiuje stan/wartość, a druga liczba definiuje numer akcji do wysłania. Format jest następujący:

Code: Select all

on_state: [STAN, AKCJA]
on_value: [WARTOŚĆ, AKCJA]
Parametry "on_state_change" i "on_value_change" pozwalają na skonfigurowanie akcji, które będą uruchamiane gdy stan lub wartość zmienia się między dwoma wybranymi wartościami. Format jest następujący:

Code: Select all

on_state_change: [OD_STANU, DO_STANU, AKCJA]
on_value_change: [OD_WARTOŚCI, DO_WARTOŚCI, AKCJA]
Można skonfigurować wiele warunków "on_" w celu wygenerowania tej samej akcji.

W przypadku akcji proszę używać tylko następujących numerów: 0, 1, 2, 3, 4, 5, 6 i 10, 11, 12, 13, 14, 15.

Kiedy akcja jest używana i urządzenie jest zarejestrowane w chmurze, zostanie utworzony kanał "action trigger" z akcjami odpowiadającymi przyciskom, zdefiniowanymi w https://github.com/SUPLA/supla-device/b ... to.h#L2111

Na przykład akcja 3 odpowiada:

Code: Select all

#define SUPLA_ACTION_CAP_TOGGLE_x2 (1 << 3)
(ostatnia liczba w nawiasie oznacza numer akcji, proszę sprawdzić powyższy link do proto.h
dla szczegółów). Obecnie w Supla zdefiniowane są tylko akcje dla przycisków, więc tutaj je wykorzystujemy.
User avatar
uchnast.michal
Posts: 1223
Joined: Tue Jun 04, 2019 11:37 am

Post

I cyk, kolejny temat dodany do obserwowanych. Świetna robota :!:

Return to “Supla-device dla Linuxa (sd4linux)”