Supla<->MQTT - Stany

Beku
Posty: 358
Rejestracja: wt lis 06, 2018 1:49 pm

śr gru 04, 2019 4:03 pm

Broker MQTT umożliwia publikowanie i subskrybowanie tematów (ang. topic) z zawartością (ang. payload).
Klient MQTT może subskrybować określone tematy i wtedy będzie powiadamiany o nich kiedy inny klient wyśle wiadomość pod dany temat.

Jeśli jeszcze nie masz zainstalowanego klienta MQTT dla Supli -> przejdź tutaj: viewtopic.php?f=63&t=5691.
W tej części instrukcji zajmiemy się zagadnieniem publikowania stanów kanałów Supli w brokerze MQTT czyli de facto będziemy zajmowali się edycją pliku state.yaml znajdującym się w katalogu supla-core/supla-mqtt-client/config.

Plik ten zawiera domyślną konfigurację publikowanych tematów i szablony zawartości.

Kod: Zaznacz cały

default_state_topic: 'supla/channels/status/$type$/$id$'

channels:   
  - channel_type: 10 #CONTROLLINGTHEGATEWAYLOCK
    state_topic: 'supla/channels/status/gatewaylock/$id$'
    payload_template: '{"id": $id$, "hi" : $value$, "sensor_1": $sensor_1$, "online": $online$}'

  - channel_type: 20 #CONTROLLINGTHEGATE  
    state_topic: 'supla/channels/status/gate/$id$'
    payload_template: '{"id": $id$, "hi": $value$, "sensor_1": $sensor_1$, "online": $online$}'
    
....
Na samej górze pliku znajduje się parametr default_state_topic. Określa on pod jakim domyślnym tematem (chyba że poszczególne kanały mają swoją definicję tematu) będzie publikowana wartość kanału.

Pod tym parametrem znajdują się właściwe definicje publikowanych stanów kanałów np. definicja dla kanału typu - ZAMEK:

Kod: Zaznacz cały

  - channel_type: 10 #CONTROLLINGTHEGATEWAYLOCK
    state_topic: 'supla/channels/status/gatewaylock/$id$'
    payload_template: '{"id": $id$, "hi" : $value$, "sensor_1": $sensor_1$, "online": $online$}'
W pliku config.yaml zdefiniowana jest domyślna konfiguracja dla każdego typu kanałów jakie w tej chwili obsługuje Supla.
Możemy jednak zmieniać szablon tematu pod którym będzie publikowany stan jak i szablon zawartości.

Przykład:

Jeśli chcemy aby kanał typu 10 #CONTROLLINGTHEGATEWAYLOCK (zamek) publikował się pod tematem moja_supla/zamek_nr_1
wpisujemy w state_topic wartość 'moja_supla/zamek_nr_1'

Możliwe jest duplikowanie tematów dla tego samego rodzaju kanału -> będzie on publikował się pod każdym z zdefiniowanych tematów.
Np:

Kod: Zaznacz cały

  - channel_type: 10 #CONTROLLINGTHEGATEWAYLOCK
    state_topic: 'supla/channels/status/gatewaylock/$id$'
    payload_template: '{"id": $id$, "hi" : $value$, "sensor_1": $sensor_1$, "online": $online$}'
    
  - channel_type: 10 #CONTROLLINGTHEGATEWAYLOCK
    state_topic: 'moja_supla/zamek_nr_1'
    payload_template: '$sensor_1$'
spowoduje publikacje dwóch tematów supla/channel/status/gatewaylock/2 i moja_supla/zamek_nr_1
z innym rodzajem payload - w drugim przypadku w zawartości pojawi się jedynie wartość czujnika otwarcia drzwi.

Jak można zauważyć w konfiguracji występują zmienne zaczynające się i kończące znakiem $. Nazwijmy je makrami. Pod te wartości podstawione zostaną rzeczywiste wartości danego typu. Klient MQTT obsługuje następujące makra:

Kod: Zaznacz cały

$id$ - pod to makro zostanie podstawiona wartość ID kanału
$caption$ - pod to makro zostanie podstawiona nazwa (komentarz) kanału
$temperature$ - temperatur
$humidity$ - wilgotność
$value$ - w większości kanałów udostępniających wartość z przedziału 0, 1  
$online$ - czy kanał online gdzie 1 oznacza online
$sensor_1$ - wartość pierwszego sensora podłączonego pod dany kanał
$sensor_2$ - wartość drugiego sensora podłączonego pod dany kanał
$shut$ - wartość procentowa otwarcia
$type$ - typ kanału liczbowo

Dostępność powyższych makr jest oczywiście zależna od rodzaju kanału, który jest obsługiwany (wartość $temperature$ dla kanału CONTROLLINGTHEGATEWAYLOCK nie zostanie uzupełniona).

Generalnie możemy dowolnie kształtować zawartość tego pliku dopasowując je do naszych potrzeb. Należy jednak pamiętać o kilku sprawach:

W szablonie tematu można użyć tylko makr $id$ oraz $type$.
Po każdej zmianie należy ponownie uruchomić klienta MQTT.
Plik jest w formacie YAML - trzeba uważać na jego strukturę. To czy po naszych zmianach jest nadal prawidłowa można sprawdzić wklejając zawartość pliku np. tutaj: http://www.yamllint.com/
ODPOWIEDZ

Wróć do „MQTT”