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$}'
....
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$}'
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$'
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/