Turris Gadgets (MQTT-centered) playground
K čemu je to dobré
- Turris Dongle je prakticky sériová linka a k té se může bez problému připojit pouze jedna aplikace a pokud chceme, aby více aplikací přistupovalo ke Gadgetům, je třeba něco jako brána (což je právě
turris-gadgets_mqtt_gateway.py
) - odstiňuje aplikace od nízkoúrovnějšího rozhraní poskytovaného Donglem a poskytuje zaběhlé (snadno se zapojí do stávající IoT infrastruktury) vyšší-úrovňové rozhraní (je velmi, velmi jednoduché na použití ať už aplikacemi, či ručně)
- pomocí ACL na MQTT brokeru můžeme jednotlivým aplikacím nastavovat oprávnění k určitým zařízením, ať už co mohou ovládat, nebo jaké zprávy od jakých zařízeních mohou příjmat
Více o MQTT
Skvělý seriál o MQTT v angličtině je na blogu HiveMQ.
Adam Hořčica měl na LinuxDays 2014 přednášku o protokolech pro IoT (YouTube), jsou k ní i slajdy.
Instalace mosquitto (MQTT broker) pod OpenWRT / Turris OS
opkg install mosquitto mosquitto-client
/etc/init.d/mosquitto enable
/etc/init.d/mosquitto start
VAROVÁNÍ: Je velmi vhodné mosquitto zabezpečit, obzvlášť, pokud máte router dostupný z internetu!
Poznámka: Je vhodné (ale ne nutné) si zkompilovat novější verzi mosquitta s podporou WebSockets.
Instalace pod OpenWRT / Turris OS
-
Instalace systémových závislostí
opkg update # Aktualizace seznamu balíků opkg install python3-pip git
-
Stažení MQTT brány
cd /opt/ git clone git://github.com/renekliment/turris-gadgets-mqtt.git cd turris-gadgets-mqtt
-
Instalace python závislostí
pip3 install -r requirements.txt
-
(volitelné) Instalace MPD python modulu - potřeba pouze pro demo s MPD
pip3 install python-mpd2
Příklad instalace pro standardní distribuci
Zde uvedeno pro Ubuntu 18.04.
apt update
# zde nainstalujte a nastavte bezpečně mosquitto, nebo jiný MQTT broker
apt install python3 python3-pip
pip3 install pipenv
cd /opt
git clone https://github.com/renekliment/turris-gadgets-mqtt.git
cd turris-gadgets-mqtt
cp src/config.template.yaml src/config.yaml
# pro jednoznačné namapování donglu na /dev/ zařízení můžete využít ukázkové udev pravidlo
# vyplňte src/config.yaml dle vašich potřeb
cp src/systemd/turris-gadgets-mqtt.example.service /etc/systemd/system/turris-gadgets-mqtt.service
useradd -r turris-gadgets-mqtt
gpasswd -a turris-gadgets-mqtt dialout
chown -R turris-gadgets-mqtt:nogroup .
systemctl daemon-reload
# spuštění
systemctl start turris-gadgets-mqtt
Nastavení MQTT brány
Zkopírujeme si šablonu konfigurace do finálního souboru cp src/config.template.yaml src/config.yaml
.
V souboru src/config.yaml
nastavíme:
- údaje pro připojení k MQTT brokeru (můžeme ponechat výchozí, pokud jsme nic neměnili)
- sériová čísla Gadgetů - jsou to klíče v poli devices
- podle potřeb si upravíme příslušné mqttPath
Upozornění: V souborech YAML se nesmí používat tabulátory. Odsazení úrovní se dělá pomocí mezer.
Spuštění Gadgets <---> MQTT brány
VAROVÁNÍ: Skript vždy po spuštění vypne alarm/pípání a oba výstupy (zásuvky / relé), aby se dostal do definovaného stavu.
python3 /opt/turris-gadgets-mqtt/src/turris-gadgets_mqtt_gateway.py
Pokud vše funguje a chceme nechat skript puštěný i po odhlášení z Turrisu:
opkg install screen
screen -dmS turrisGadgets_over_mqtt python3 /opt/turris-gadgets-mqtt/src/turris-gadgets_mqtt_gateway.py
Testování komunikace s Gadgety
Poslouchání zpráv od Gadgetů: mosquitto_sub -h 192.168.1.1 -t "turrisGadgets/#" -v
, kde případně upravíme IP adresu Turrisu, na kterém běží mosquitto a prefix, pod kterým se Gadgety nacházejí. Můžeme pustit jak na Turrisu, tak z kteréhokoliv zařízení, které tento nástroj obsahuje a může se na Turris po síti dostat.
Spínání zásuvek:
mosquitto_pub -h 192.168.1.1 -t turrisGadgets/room/socket/lamp/control -m 1
mosquitto_pub -h 192.168.1.1 -t turrisGadgets/room/socket/lamp/control -m 0
Mezi přepínáním stavu reléových zařízení je třeba pár sekund vyčkat.
Nastavení demo aplikací
Provádí se v příslušných konfiguračních souborech (vždy zkopírujeme šablonové soubory na stejné jméno, jen bez .template). Jedná se o nastavení:
- údajů pro připojení k MQTT brokeru (můžeme ponechat výchozí, pokud jsme nic neměnili)
- prefixu, který používáme pro Gadgety (pokud jsme ho změnili v souboru nastavení brány)
- jiných údajů (pro připojení k MPD, Twitteru, ...; pokud jsou relevantní)
- pokud jsme provedli změnu cesty komponent, musíme změnu reflektovat i v kódu - např. z room/socket/lamp jsme udělali room/socket/heater