IOTstack – základní instalace
Obsahuje služby jako HomeBridge, Node-RED, Grafana, InfluxDB, deCONZ, Python a spoustu dalších, které jsou obvykle v rámci vlastního řešení smarthome využívané. A nyní již pojďme na konkrétní postup.
Základ návodu je převzat od Philla (Paraphrasera) a doplněný o několik detailů a zejména specifika dané potřebou fungování zejména deCONZ a Node-RED současně.
Pro úspěšnou instalaci se předpokládá, že již máte nainstalovaný Raspbian buď na SD kartě nebo ideálně na SSD disku. V případě používání deCONZ nutnost instalovat full verzi Raspbianu (kvůli GUI, respektive VNC)!
Také je potřeba mít aktivované SSH (stačí vytvořit prázdný soubor s názvem ssh
v rootu karty, hned po vytváření image Raspbianu přes RPi Imager).
11.1.2022 – návod byl aktualizován, nicméně i přesto důrazně doporučuji využití řešení přes tzv. PiBuilder, které je nepoměrně rychlejší i komfortnější. Nicméně je třeba i následně pokračovat zde od kroku č. 6. Odkaz na PiBuilder:
Krok číslo 0 – nepovinné, ale doporučené
Aktualizace bootloaderu RPi dle následujícího návodu:
https://www.iotcz.cz/2021/03/06/navody/rpi-aktualizace-eeprom-bootloaderu-a-firmware/
Krok číslo 1
sudo apt update sudo apt full-upgrade -y sudo reboot
Krok číslo 2
Vyřešení problému se zamrzajícím RPi kvůli WiFi rozhraní. Popsáno zde: https://github.com/SensorsIot/IOTstack/issues/219
sudo bash -c "echo -e '\nallowinterfaces eth0,wlan0' >> /etc/dhcpcd.conf" sudo systemctl daemon-reload sudo systemctl restart dhcpcd sudo reboot
Krok číslo 3 – instalace doporučených aplikací
sudo apt install -y acl curl dnsutils git iotop iperf jq mc mosquitto-clients nano nmap ruby sqlite3 subversion sysstat tcpdump uuid-runtime wget
Krok číslo 4 – instalace IOTstack
git clone -b master https://github.com/SensorsIot/IOTstack.git ~/IOTstack curl -fsSL https://get.docker.com | sh sudo usermod -G docker -a $USER sudo usermod -G bluetooth -a $USER sudo apt install -y python3-pip python3-dev sudo pip3 install -U docker-compose sudo pip3 install -U ruamel.yaml==0.16.12 blessed sudo reboot
Krok číslo 5
Pokud se jedná o obnovu již provozovaného IOTstack, tak nyní je přesně čas pro nakopírování zálohy a její rozbalení do složky /IOTstack/volumes/
a následované příkazy níže.
Pokud zálohu nemáte, pokračujte rovnou ve spuštění menu a vybrání volby Build Stack. V podmenu si vyberte, které služby chcete instalovat (mezerníkem) a pokračujte.
cd ~/IOTstack ./menu.sh
Osobně používám tyto služby (pro inspiraci):
- Node-RED
- HomeBridge (věci, které nejsou podporované v NR, můžete zkusit i zde)
- Portainer-CE (správa služeb/kontejnerů na jednom místě)
- Dozzle (logy ze všech služeb na jednom místě)
- Grafana (vykreslování grafů z logovaných hodnot)
- InfluxDB (nejvhodnější databáze pro logování IoT věcí)
- deCONZ (pro ConBee II/RaspBee II)
- TasmoAdmin (admistrace „tasmotizovaných“ věcí)
- Eclipse-Mosquitto (MQTT broker)
Pokud jste si vybrali i Node-RED, tak vás ještě menu vyzve k vybrání předinstalovaných pluginů, ale zde doporučuji vše zrušit a pluginy si nainstalovat až v NodeREDu s použitím klasického Manage palette. Výhodou je, že pluginy potom budou přímo součástí zálohy.
Krok číslo 6 – oprava docker-compose.yml
Pokud jste si nainstalovali Node-RED a deCONZ (případně i plugin pro NR v HomeBridge), asi byste byli rádi provozovali tyto služby souběžně a tak, že spolu navzájem komunikují. Z tohoto důvodu je potřeba udělat menší úpravu (tzv. fix) vygenerované šablony.
Jedná se o soubor docker-compose.yml,
který obsahuje kompletně vše, podle čeho se následně vytváří konfigurace pro spuštění stažených kontejnerů. Pro jeho editaci můžete využít například nainstalovaný mc
(Midnight Commander, ale pozor, spouštěný jako sudo mc
) a následné stisknutí klávesy F4
na daném souboru. Ti zdatnější využijí například přímo editor nano
:
sudo nano ~/IOTstack/docker-compose.yml
V sekci nodered
je třeba provést úpravu následovně – zakomentovat porty symbolem #
a připsat network_mode: host
a případně si doplnit časovou zónu, vše vyznačeno tučně v následujícím příkladu:
nodered:
container_name: nodered
build: ./services/nodered/.
restart: unless-stopped
user: "0"
environment:
- TZ=Europe/Prague
network_mode: host
# ports:
# - "1880:1880"
volumes:
- ./volumes/nodered/data:/data
- ./volumes/nodered/ssh:/root/.ssh
- /var/run/docker.sock:/var/run/docker.sock
- /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
devices:
- "/dev/ttyAMA0:/dev/ttyAMA0"
- "/dev/vcio:/dev/vcio"
- "/dev/gpiomem:/dev/gpiomem"
Podobným způsobem je třeba upravit sekci deconz
, kde je třeba
přidat TZ
(timezone – časovou zónu) na Europe/Prague
:
deconz:
image: deconzcommunity/deconz
container_name: deconz
restart: unless-stopped
ports:
- "8090:80"
- "443:443"
- "5901:5900"
volumes:
- ./volumes/deconz/:/opt/deCONZ
devices:
#ConBee II:
- /dev/ttyACM0
environment:
- DECONZ_VNC_MODE=1
- DECONZ_VNC_PASSWORD=changeme
- DEBUG_INFO=1
- DEBUG_APS=0
- DEBUG_ZCL=0
- DEBUG_ZDP=0
- DEBUG_OTAU=0
- TZ=Europe/Prague
Stejně tak je potřeba upravit sekci influxdb
. Bohužel úplně nejnovější verze 2.x InfluxDB nepodporuje architekturu 32 bitové verze systému Raspbian na Raspberry Pi a proto je nutné používat stále verzi 1.8
.x. Upravte tedy soubor tak, jak vidíte níže (změny vyznačeny opětovně tučně):
influxdb:
container_name: influxdb
image: "influxdb:1.8"
restart: unless-stopped
ports:
- "8086:8086"
environment:
- TZ=Europe/Prague
- INFLUXDB_HTTP_FLUX_ENABLED=false
- INFLUXDB_REPORTING_DISABLED=false
- INFLUXDB_HTTP_AUTH_ENABLED=false
- INFLUX_USERNAME=nodered
- INFLUX_PASSWORD=nodered
- INFLUXDB_UDP_ENABLED=false
- INFLUXDB_UDP_BIND_ADDRESS=0.0.0.0:8086
- INFLUXDB_UDP_DATABASE=udp
volumes:
- ./volumes/influxdb/data:/var/lib/influxdb
- ./backups/influxdb/db:/var/lib/influxdb/backup
Pozn. v případě, že chcete používat Dozzle a pokud používáte i jiné služby (typicky Oscam, tak musíte port 8889
změnit zde na třeba 9087
):
dozzle:
container_name: dozzle
image: amir20/dozzle:latest
restart: unless-stopped
ports:
- "9087:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Obecně platí, že je potřeba si hlídat přiřazené porty různým službám, protože následně může dojít k jejich vzájemné kolizi. Jedná se o jeden ze základních problémů.
Krok číslo 7 – finální spuštění
docker-compose up -d
Po provedení tohoto příkazu dojde k samotnému sestavování všech služeb. Po dokončení budou již služby automaticky spuštěné a můžete přistupovat na jednotlivé porty (pro nodered například http://IP_vaseho_RPi:1880
).
Krok číslo 8 – volitelné nastavení aliasů
Pro zjednodušené ovládání celého prostřední z CLI samotného SSH doporučuji nastavit aliasy:
Krok číslo 9 – nastavení zálohování
Velkou výhodou IOTstack je možnost zálohování všeho například na Dropbox. K tomuto tématu můžete pokračovat na další článek s návodem:
Zde chci pod čarou poděkovat Paraphraserovi, který je pro mne opravdu nekonečnou studnicí informací, podpory, návodů a postřehů, na základě kterých píši i tyto články a návody.
$ s myšlenky na „$ s“
vyřešeno zde: https://github.com/gliderlabs/docker-alpine/issues/334#issuecomment-879368146
Tohle ale neni problem pri instalaci, kdy uz je pritomna nova verze (sem tam je vhodne v adresari IOTstack spustit git pull a aktualizovat si cely projekt). Nicmene pokud se uz jedna o delsi dobu bezici Mosquitto, tak je vhodne jej od zakladu predelat, protoze muzou nastat problemy, ktere jsou popsany zde:
https://github.com/SensorsIot/IOTstack/issues/331
Je tedy vhodne zmigrovat na nove reseni, ktere jiz neni pres image, ale tzv. buildovane (rozdily popsane v jinem clanku zde na webu).
V docker-compose.yml to tedy znamena toto:
Samozrejme si to chce overit vsechny cesty ve /volumes, ze odpovidaji novym a taky mit aktualni verzi skriptu z Githubu (pres prikaz git pull, aby byl pritomen i soubor Dockerfile v /.templates/mosquitto/ pro build).
Aktualizován návod kvůli změně výchozího image u Deconz.