Käytä aina Zabbixin omaa repositorya. Ubuntun omissa paketeissa agentti on usein vanhentunut eikä vastaa Zabbix-serverin versiota. 1) Tarkista Ubuntun versio Tarvitset tästä Release-tiedon (esim. 22.04 tai 24.04). 2) Lataa Zabbixin repository-paketti Avaa lataussivu: https://www.zabbix.com/downloadValitse: Sivu …
ESPHome on avoimen lähdekoodin projekti, jonka avulla on helppoa ohjelmoida ESP8266- ja ESP32-mikrokontrollereita käytettäväksi älykodin laitteina Home Assistantin kanssa: https://esphome.io Keskeiset ominaisuudet Tyypilliset käyttökohteet ESPHome tekee laitteista käytännössä Home Assistant -yhteensopivia plug-and-play-komponentteja ilman tarvetta kirjoittaa …
Ohjaan Home Assistant -kodinohjausjärjestelmää keittiössä sijaitsevalla kosketusnäytöllisellä tietokoneella. Koneessa on Ubuntu 24.04 LTS, GNOME/Wayland ja Chromium-selain kioskitilassa. Haluan näytön olevan sammuksissa silloin, kun kukaan ei käytä sitä. Näyttö pimenee GNOMEn normaalin idle-toiminnon avulla, ja webbikamera …
ESPHome on avoimen lähdekoodin projekti, jonka avulla on helppoa ohjelmoida ESP8266- ja ESP32-mikrokontrollereita käytettäväksi älykodin laitteinaHome Assistantin kanssa: https://esphome.io
Keskeiset ominaisuudet
Käyttää YAML-muotoista määritystiedostoa laitteen toiminnan määrittelyyn
Tukee satoja antureita, releitä, näyttöjä, LED-nauhoja ym.
Mahdollistaa Wi-Fi-yhteyden ja MQTT- tai API-integraation
Tukee automaattista OTA (Over-The-Air) -päivitystä
Tyypilliset käyttökohteet
Lämpötila- ja kosteusmittarit (esim. DHT22)
Liikeilmaisimet, painikkeet, ovianturit
LED-ohjaus (WS2812, PWM, jne.)
Releohjaus, kuten valaistus tai sähkölaitteet
ESPHome tekee laitteista käytännössä Home Assistant -yhteensopivia plug-and-play-komponentteja ilman tarvetta kirjoittaa C/C++-koodia.
ESP mikrokontrollerin alustus
Kun ESPHome lisäosa on asennettu Home assistant:iin on uuden mikrokontrollerin alustus mahdollista tehdä suoraan Home Assistantista ”+ NEW DEVICE” nappulasta käyttäen Chromeen perustuvaa selainta.
Em. menetelmä toimii ainoastaan jos selain käynnistetään koneella, jolle Home Assistant on asennettu tai jos selainyhteys Home Assitant palveluun käyttää https-protokollaa.
Koska HA (Home Assistant) oletuksena asentuu käyttämään porttia 8123 ja http-protokollaa, alustan mikrokontrollerin käyttäen https://web.esphome.io/?dashboard_wizard palvelua.
Kytke ESP mikrokontrolleri USB kaapelilla tietokoneeseesi ja paina ”CONNECT” linkkiä. Tämän jälkeen sinulta kysytään mihin sarjaporttiin mikrokontrolleri on kytketty. Listan loppupuolelta pitäisi löytyä ”USB Serial (ttyUSBo)” valinta tai saman kaltaista.
Valitse ja paina ”Connect”. Tämän jälkeen valitse avautuvasta ikkunasta ”Prepare for first use”.
Valitse ”INSTALL”
Jos saat tämän jälkeen virheilmoituksen ”An error occurred. Improv Wi-Fi Serial not detected”, kokeile valita kolmen pisteen valikosta ”Configure WI-FI”.
Valitse ”CONNECT TO WI-FI”, jonka jälkeen voit tehdä tarvittavat asetukset.
Valitse ”CONNECT”.
Provisioinnin jälkeen paina ”CLOSE” ja irroita mikrokontrolleri hetkeksi USB kaapelista. Käynnistyttyään kontrolleri hakee itselleen IP-osoitteen WIFI-verkosta.
pfSense palomuurikone on tässä tapauksessa antanut mikrokontrollerille dynaamisen IP-osoitteen 192.168.2.125. Muutan osoitteen staattiseksi, jotta se ei vahingossa muutu myöhemmin joksikin toiseksi.
Ohjaan Home Assistant -kodinohjausjärjestelmää keittiössä sijaitsevalla kosketusnäytöllisellä tietokoneella. Koneessa on Ubuntu 24.04 LTS, GNOME/Wayland ja Chromium-selain kioskitilassa.
Haluan näytön olevan sammuksissa silloin, kun kukaan ei käytä sitä. Näyttö pimenee GNOMEn normaalin idle-toiminnon avulla, ja webbikamera toimii liiketunnistimena: kun kamera havaitsee liikettä, järjestelmään lähetetään virtuaalinen näppäinpainallus, joka herättää näytön.
Näytön pimennys
Esimerkiksi 30 minuutin joutokäyntiajan voi asettaa komennolla:
gsettings set org.gnome.desktop.session idle-delay 1800
Kioskikoneessa näytön automaattinen lukitus kannattaa yleensä poistaa käytöstä:
gsettings set org.gnome.desktop.screensaver lock-enabled false
Näin näyttö sammuu 30 minuutin kuluttua, mutta herätessään palaa suoraan kioskinäkymään.
Kuvia tai videoita ei tarvitse tallentaa, koska kameraa käytetään tässä vain liikkeen havaitsemiseen.
event_gap ei määrää näytön sammumisaikaa. Näytön pimennyksen hoitaa GNOME. Motionin tehtävänä on ainoastaan generoida näppäinpainallus, kun liikettä havaitaan.
ydotool
Waylandissa perinteinen xdotool ei ole sopiva tähän tarkoitukseen, joten käytän ydotool:ia. Se generoi näppäin- ja hiiritapahtumia Linuxin uinput-rajapinnan kautta eikä tarvitse X11:tä.
Asennus:
sudo apt install ydotool
ydotool key käyttää Linuxin input-keycodeja. Välilyöntinäppäimen eli KEY_SPACE:n keycode on 57:
Näin ollen kokonainen välilyöntinäppäimen painallus ja vapautus on:
ydotool key 57:1 57:0
missä:
57:1 = välilyönti painetaan alas
57:0 = välilyönti vapautetaan
Tämä on tärkeä ero esimerkiksi X11:n keycodeihin nähden. Aiemmin käyttämäni numero 65 oli X11:n välilyönnin keycode eikä oikea arvo nykyiselle ydotool:lle.
Motion-konfiguraatiossa käytän siis:
on_event_start /usr/bin/ydotool key 57:1 57:0
ydotoold-palvelu ja käyttöoikeudet
ydotool-komento lähettää tapahtumat ydotoold-daemonille Unix-socketin kautta. Daemon tarvitsee oikeuden käyttää /dev/uinput-laitetta.
Motion-palvelu puolestaan ajetaan normaalisti omalla motion-käyttäjällään:
Autologin on kioskikoneessa kätevä, mutta sillä on yksi sivuvaikutus: käyttäjä ei anna kirjautumisen yhteydessä salasanaa, joten GNOME Keyringiä ei välttämättä pystytä avaamaan automaattisesti kirjautumissalasanalla.
Chromium kioskitilassa
Firefox osoittautui GNOME/Wayland-kioskikäytössä hankalaksi, joten selain on vaihdettu Chromiumiin.
Chromium käynnistyy käyttäjän GNOME-istunnossa kioskitilaan esimerkiksi:
Käynnistys voidaan tehdä esimerkiksi käyttäjän autostart-.desktop-tiedostosta.
Chromium Snap ja GNOME Keyring
Ubuntu-päivityksen jälkeen Chromium alkoi käynnistyessään näyttää ilmoituksen:
Authentication required
Enter password to unlock your login keyring
The password you use to log in to your computer no longer matches
that of your login keyring.
Kioskinäyttö toimi normaalisti, kun kysely peruttiin, mutta sama kysely tuli jokaisen rebootin jälkeen.
Huomio: ilman GNOME Keyringiä Chromium ei tarjoa samaa suojattua paikallista salasanasäilytystä. Kioskikoneessa selaimeen ei siksi kannata tallentaa käyttäjätunnuksia tai salasanoja.
Kokonaisuus
Toimintaketju on siis:
GDM kirjautuu automaattisesti kioski-käyttäjänä.
Chromium käynnistyy Home Assistant -sivulle kioskitilassa.
GNOME sammuttaa näytön 30 minuutin käyttämättömyyden jälkeen.
Motion tarkkailee webbikameran kuvaa.
Kun kamera havaitsee liikettä, Motion suorittaa:
/usr/bin/ydotool key 57:1 57:0
ydotool lähettää näppäintapahtuman rootina toimivalle ydotoold-daemonille.
/tmp/.ydotool_socket kuuluu ryhmälle ydotool, johon myös motion kuuluu.
Virtuaalinen välilyöntinäppäimen painallus herättää GNOMEn sammuttaman näytön.
Chromiumin Snap-paketin password-manager-service on irrotettu, jotta autologin ei aiheuta GNOME Keyring -salasanakyselyä.
Paketista tuleva käyttäjäkohtainen ydotool.service on poistettu globaalista autostartista, jotta koneella ei käynnisty kahta keskenään kilpailevaa ydotoold-daemonia.
proc /proc proc defaults 0 0
PARTUUID=6c76e89e-01 /boot vfat defaults 0 2
PARTUUID=6c76e89e-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
192.168.1.89:/mnt/Data/raspberry/rpi-pxe /nfs/root nfs defaults 0 0
192.168.1.89:/mnt/Data/raspberry/rpi-tftpboot /nfs/boot nfs defaults 0 0
Aiemmin ohjasin kaikki Zigbee-laitteitani yhdellä koordinaattorilla, mistä aiheutui ongelmia kun Zigbee laitteita oli paljon (~200). Aika ajoin laitteet putosivat Zigbee verkosta tai viestin kulussa oli useiden sekuntien viiveitä. En saanut selvitettyä juurisyytä ongelmiin, mutta hypoteeseina oli:
Koordinaattorin tilataulukolle varattu muisti loppui kesken
Joku zigbee silmukkaverkon (mesh network) reitittimistä (router) oli pullonkaula liikenteelle
Suuri laitteiden määrä samalla taajuudella aiheutti kilpatilanteita
Lopulta päädyin jakamaan yhden suuren verkon neljään pienempään joissa kussakin on 40-60 laitetta ja kullakin verkolla on käytössä oma kanava (kts. artikkeli ”Home Assistant – Zigbee verkon optimointi”)
Koska Home Assistant tukee ilman kikkailua, vain yhtä sisäistä Zigbee2MQTT siltaa, päädyin käyttämään Home Assistantin ulkopuolisia Zigbee2MQTT siltoja. Koska Home Assistant instanssini on virtuaalikone Proxmoxissa, oli helppoa luoda kullekin Zigbee2MQTT:lle oma Proxmox LXC kontti käyttäen valmista Proxmox VE Helper-Scriptiä (https://github.com/community-scripts/ProxmoxVE).
Disabloi IPv6 (minulla ei ole IPv6:tta käytössä kotiverkoissa)
MTU size (jätä tyhjäksi)
DNS Search Domain (jätä tyhjäksi)
DNS Server IP (jätä tyhjäksi)
MAC (jätä tyhjäksi eli käytä proxmoxin arpomaa MAC:iä)
VLAN (jätä tyhjäksi, virtuaalilaneja ei ole kotiverkossani käytössä)
Custom tags (jätä oletukset)
Salli rootin ssh (Ei)
Verbose mode (Ei)
Kun konsolissa lukee ”Completed Succesfully”, voidaan siirtyä kontin konfigurointiin. Jos et ole asettanut kontille, kiinteää ip-osoitetta, vaan käytät DHCP-palvelua, kannattaa DHCP:hen määrittää staattinen ip-osoite. Tässä tapauksessa uusi kontti sai palomuurin DHCP palvelusta dynaamisen ip-osoitteen 192.168.100. Muuta osoite kiinteäksi DHCP-palvelussa ja reboottaa kontti (Huom! Älä reboottaa vhostia!), jolloin staattinen ip-osoite haetaan DHCP-palvelusta.
Kontin konfigurointi
Jos Zigbee-dongle oli liitettynä, kun asensit Zigbee2MQTT:n, ja LXC-kontti luotiin privilegoituna (privileged), skripti määrittää automaattisesti USB-läpiviennin kontille. Varmistaaksesi tämän ja selvittääksesi donglen sarjanumeron, avaa Proxmoxin shell ja anna seuraava komento:
Tuloksesta nähdään, että Proxmox palvelimeen on kytkettynä kaksi USB koordinaattoria. Näiden lisäksi minulla on käytössä vielä kaksi SMLIGHT SLZB-06 koordinaattoria lähiverkossa. Näiden konfiguroinnista myöhemmin lisää.
Avaa äsken luodun kontin konsoli
ja avaa editoriin /opt/zigbee2mqtt/data/configuration.yaml tiedosto. Lisää/muuta tiedostoon punaisella korostetut kohdat.
Ennen päivitystä ota varmuuskopio Zigbee koordinaattorin muistista.
Tämän jälkeen ”Backup” ja ”Download backup”.
Tämän jälkeen sammuta kontti Proxmoxissa ja ota siitä snapshot.
Tämän jälkeen käynnistä kontti uudelleen.
Päivittäminen tapahtuu avaamalla Proxmoxista konsoli ko. konttiin ja ajamalla /opt/zigbee2mqtt hakemistossa update.sh skripti.
Ennen skriptin ajoa siirrä konfiguraatiotiedosto talteen /tmp hakemistoon, sillä päivitys kaatuu koska konfiguraatiotiedosto on erilainen kuin mitä GITistä löytyy: [root]# mv /opt/zigbee2mqtt/data/configuration.yaml /tmp
Aja päivitys: [root]# cd /opt/zigbee2mqtt [root]# ./update.sh
Koska update tulee kaatumaan virheeseen puuttuvasta npm:stä ja pnpm:stä, aja seuraavat komennot: [root]# npm install [root]# npm install -g pnpm
Tämän jälkeen aja päivitys: [root]# ./update.sh
Tämän jälkeen kopioi configuration.yaml /tmp hakemistosta takaisin data hakemistoon ja poista data/configuration.example.yaml.
Etsi koguraatiotiedostosta kohta serial: ja lisää adapter: zstack: serial: adapter: zstack port: /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_bcf4367f48b6ed11afa1de0ea8669f5d-if00-port0
adapter: zstack: Käytettävä Zigbee-adapteri on Texas Instrumentsin Z-Stack (yleistä esimerkiksi Sonoff Zigbee -tikuille).
Oletusarvoisesti NodeRed pitää muuttujien arvot muistissa, joten jos NodeRed tai Home Assistant käynnistetään uudestaan, menetetään muuttujien arvot. Konfiguraatiomuutoksella voidaan muuttujien arvoja säilöä myös levylle, jolloin niiden arvot säilyvät restartin ylitse.
Home Assistantin NodeRed lisäosan konfiguraatiotiedosto löytyy polusta /root/addon_configs/a0d7b954_nodered/config.js. Ko. tiedoston editointi on helpointa käyttäen Home Assistantin lisäosaa (Add On) ”Advanced SSH & Web Terminal” ja käyttöjärjestelmän nano editoria.
Kun tiedosto on auki nano editorissa, siirry tiedoston loppuun kohtaan ennen lokimäärityksiä ja lisää seuraava määritys:
Muutosten tallenuksen jälkeen reboottaa Home Assistant ja tämän jälkeen voit valita NodeRedissä esim. ”Change Node:ssa” mitä säilytyspaikkaa muuttujien arvoille käytetään.
Muuttujien arvot tallennetaan tiedostoon /root/addon_configs/a0d7b954_nodered/context/32cad8539d872c2e/flow.json esim. näin:
Jos Supervisor ei käynnisty bootissa, vaan saat esim. seuraavanlaisen virheilmoituksen:”Supervisor: System is not ready with state: setup”, aja supervisorin korjausajo ja restartti.
Viimeisimmät kommentit