Protingas namas: Raspberry Pi 4 diegimas

Pradedu rinkti info kaip panaudojant atvirą kodą valdyti namo apšvietimą, elektros lizdus, šildymo bei vėdinimo sistemas ir kt..

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 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.

_local_image_img_2020-11-01_rpimqttgpio2

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