Protingas namas: Raspberry Pi 4 diegimas
Iki šiol "protingo namo" žinios apsiribojo keliais temperatūros ir drėgmės jutikliais bei keliomis Sonoff relėmis su Tasmota firmware. Pradedu rinkti info kaip panaudojant atvirą kodą valdyti namo apšvietimą, elektros lizdus, šildymo bei vėdinimo sistemas ir kt..
Šiame poste sudėsiu informaciją apie pirmą testinį stendą, trumpai apie turimus komponentus ir Raspberry Pi 4 konfigūravimą. Informaciją papildysiu kai kas nors užduos klausimų arba kai bus tam laiko :)
Čia pajungiau tik 4 relių modulį pirktą aliexpress. Kitas reles testuosiu kitame etape.
Geležis
Ant stalo turiu:
- Raspberry Pi 4
- USB SSD raktą https://www.aliexpress.com/item/32889693858.html
- DIN bėgelį - https://en.wikipedia.org/wiki/DIN_rail
- DIN bėgelio stovą - https://www.thingiverse.com/thing:3609072
- 220 V lizdą - https://www.lemona.lt/?page=item&i_id=24294
- 4 relių modulį - https://www.aliexpress.com/item/32997387727.html
- 2 siauros mechaninės relės - "lizdas 93.01.7.024" + "relė 34.51.7.005.001 Relė 5VDC, 6A, 1CO"
- 2 plačios mechaninės relės - "lizdas 95.05.SPA" + "relė 40.52.9.005.000 5VDC, 8A, 2CO"
- 4 gnybtai sujungti laidams - https://www.lemona.lt/?page=item&i_id=302219
Raspberry Pi 4 konfigūravimas
USB SSD raktas vietoj MicroSD kortelės
Raspberry Pi 4 nebūtina naudoti MicroSD kortelės kaip buvo iki šiol. OS gali startuoti iš tinklo, USB rakto arba iš USB išorinio kietojo disko. Tam reikia atnaujinti bootloader'į naudojant į MicroSD įrašyta naujausią Raspberry Pi OS:
sudo apt update
sudo apt full-upgrade
sudo rpi-eeprom-update -a
sudo reboot
Pabandymui aliexpress nupirkau USB SSD 64GB raktą, įkėliau naujausią Raspberry Pi OS, įstačiau, įjungiau - veikia. Benchmarkų kol kas nedariau, bet OS startavimo laikas akivaizdžiai trumpesnis nei naudojant MicroSD.
Statiniai IP adresai
sudo vim /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.88.21/24
static routers=192.168.88.1
static domain_name_servers=8.8.8.8
interface wlan0
static ip_address=192.168.88.22/24
static routers=192.168.88.1
static domain_name_servers=8.8.8.8
SSH
Pirmiausia SSH aktyvuojamas grafinėje aplinkoje arba
sudo raspi-config
Išjungiamas pasisveikinimas
Išjungiu perteklinį tekstą, kuris atsiranda kiekvieną kartą prisijungus
# trinamas failo turinys
sudo vim /etc/motd
Generuojami SSH raktai (for github)
mkdir ~/.ssh
cd ~/.ssh
ssh-keygen -t rsa
# spaudžiu Enter prie kiekvieno klausimo
cat id_rsa.pub
# rezultatas kopijuojamas į github
# sutvarkomi SSH failų leidimai, kitaip gali neveikti
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
Password-less login
ssh-copy-id -i ~/.ssh/id_rsa.pub pi@192.168.88.22
Mounting remote rpi partition
sshfs pi@192.168.88.22:/ /media/pi
RPI programinės įrangos diegimas
(neo)VIM tekstinis redaktorius
sudo apt-get install -y git
sudo apt-get install -y libtool libtool-bin autoconf automake cmake g++ pkg-config unzip gettext
mkdir -p ~/bin && cd ~/bin
git clone https://github.com/neovim/neovim.git
cd neovim
#git branch -a
git checkout v0.4.4
make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install
sudo ln -s /usr/local/bin/nvim /usr/bin/nvim
Node-RED makaronai
Grafinis automatikos logikos redaktorius (aka logikos makaronai)
https://nodered.org/docs/getting-started/raspberrypi
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
sudo systemctl enable nodered.service
sudo systemctl disable nodered.service
Redaktorius pasiekiamas: http://192.168.88.22:1880
Pirma sudėliota logika gaudo MQTT pranešimus kurie prasideda "cmd/#" ir atitinkamai aktyvuoja RPI išėjimus out1..out5. Pvz žinutė "cmd/rpi/lamp2" aktyvuoja out2.
function dalis:
var on = {};
var off = {};
on.payload = 0;
off.payload = 1;
msg.debug = true;
var parts = msg.topic.split("/");
var type = parts[0];
var location = parts[1];
var device = parts[2];
var value = msg.payload;
if (msg.debug) node.warn("[MQTT] GOT type:" + type + " location:" + location + " device:" + device + " value:" + value);
if (type == "cmd") {
// store global value
global.set(device, parseInt(value));
if (msg.debug) node.warn("[MQTT] " + device + ":" + value);
var val = off;
if (value === "0"){
val = on;
}
if (device == "lamp1") {
return [val, null, null, null, null];
}
if (device == "lamp2") {
return [null, val, null, null, null];
}
if (device == "lamp3") {
return [null, null, val, null, null];
}
if (device == "lamp4") {
return [null, null, null, val, null];
}
if (device == "lamp5") {
return [null, null, null, null, val];
}
}
Mosquitto brokeris
Tinkle įrenginiai bendrauja MQTT protokolu. Visos MQTT žinutės siunčiamos brokeriui/serveriui.
sudo apt-get install -y mosquitto mosquitto-clients
Android programėlės nuotoliniam valdymui
MQTT dash
Greitam MQTT valdymo komandų siuntimui iš telefono naudoju MQTT Dash
https://play.google.com/store/apps/details?id=net.routix.mqttdash&hl=en&gl=US