From 2fdde71c7aee9225dacfc0fc2dfb79abfb3848c6 Mon Sep 17 00:00:00 2001 From: tubleronchik Date: Wed, 23 Oct 2024 16:31:48 +0200 Subject: [PATCH 1/4] add new article: Home Server on RISC-V --- src/_data/sidebar_docs.json | 8 + .../docs/home-assistant/riscV-dip-switch.png | Bin 0 -> 22657 bytes src/docs/home-server-on-risc.md | 444 ++++++++++++++++++ translations/pages/en.json | 1 + 4 files changed, 453 insertions(+) create mode 100644 src/assets/images/docs/home-assistant/riscV-dip-switch.png create mode 100644 src/docs/home-server-on-risc.md diff --git a/src/_data/sidebar_docs.json b/src/_data/sidebar_docs.json index f7b75941f40..610083fbb0b 100644 --- a/src/_data/sidebar_docs.json +++ b/src/_data/sidebar_docs.json @@ -117,6 +117,14 @@ "topic": "Upgrade Home Assistant Core" } ] + }, + { + "children": [ + { + "title": "Home Server on RISC-V", + "url": "/docs/home-server-on-risc" + } + ] } ] }, diff --git a/src/assets/images/docs/home-assistant/riscV-dip-switch.png b/src/assets/images/docs/home-assistant/riscV-dip-switch.png new file mode 100644 index 0000000000000000000000000000000000000000..7d10cb6fd2c0c1d18ad87fd5bea25754c9745ace GIT binary patch literal 22657 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 literal 0 HcmV?d00001 diff --git a/src/docs/home-server-on-risc.md b/src/docs/home-server-on-risc.md new file mode 100644 index 00000000000..732b3fd719a --- /dev/null +++ b/src/docs/home-server-on-risc.md @@ -0,0 +1,444 @@ +--- +title: Home Server on RISC-V + +contributors: [tubleronchik, PaTara43] +tools: + - Ubuntu 24.04 LTS + https://ubuntu.com/download/risc-v + - Home Assistant 2024.9.3 + https://github.com/home-assistant/core + - Yggdrasil 0.5.8 + https://github.com/yggdrasil-network/yggdrasil-go + - IPFS 0.32.0-dev + https://github.com/ipfs/kubo + - Mosquitto 2.0.18 + https://mosquitto.org/ + - Zigbee2MQTT 1.40.2 + https://github.com/Koenkk/zigbee2mqtt + - Libp2p Proxy 1.0.2 + https://github.com/PinoutLTD/libp2p-ws-proxy + - Robonomics Home Assistant Integration 1.9.2 + https://github.com/airalab/homeassistant-robonomics-integration + + + +--- + +**This article will provide the instruction how to set up a fully open-source smart home on RISC-V.** + +## Hardware Requirements + +* StarFive VisionFive 2 SBC +* USB-TTL Cable +* SD Card + +## Ubuntu Installation + +### Image + +At the moment of writing this manual the last LTS release is [Ubuntu 24.04 LTS](https://ubuntu.com/download/risc-v) + +Write the image on the SD card using [balenaEtcher](https://etcher.balena.io) for example + +### Boot from SD card on VisionFive 2 + +In order to boot from SD card we need to put DIP switches in right positions + +[https://wiki.ubuntu.com/RISC-V/StarFive VisionFive 2](https://wiki.ubuntu.com/RISC-V/StarFive%20VisionFive%202) + +{% roboWikiPicture {src:"docs/home-assistant/riscV-dip-switch.png", alt:"riscv_switch"} %}{% endroboWikiPicture %} + +For the SD card boot we need to set the DIP switch to `0 1` + +There were no internet so we had to use USB-TTL cable to connect to the computer's console. Here's the [instruction](https://doc-en.rvspace.org/VisionFive2/Quick_Start_Guide/VisionFive2_QSG/for_maclinux2%20-%20vf2.html) on how to connect the cable + +### After The First Boot + +By default the login and password are `ubuntu`. After the first boot the system will ask you to change the password. + +The image assumes that you are using version v1.3B of the board (see silkprint on the board). If you are using board version v1.2A, please proceed as follows: + +```bash +echo 'StarFive VisionFive 2 v1.2A' | sudo tee /etc/flash-kernel/machine +sudo flash-kernel $(uname -r) +sudo update-grub +sudo reboot +``` + +## Yggdrasil Installation + +```bash +sudo apt install golang-go + +cd ~ +git clone https://github.com/yggdrasil-network/yggdrasil-go +cd yggdrasil-go +./build + +./yggdrasil -genconf > yggdrasil.conf +sudo cp yggdrasil.conf /etc/yggdrasil.conf + +sudo cp {yggdrasil,yggdrasilctl} /usr/bin/ +sudo groupadd --system yggdrasil +sudo cp contrib/systemd/yggdrasil.service /etc/systemd/system +sudo systemctl daemon-reload + +sudo systemctl enable yggdrasil +sudo systemctl start yggdrasil + +# Check +systemctl status yggdrasil +``` + +## Home Assistant Core Installation + +We will follow [this](https://www.home-assistant.io/installation/linux#install-home-assistant-core) article from the official Home Assiatant documentation + +### Dependencies + +```bash +# Update the system +sudo apt-get update +sudo apt-get upgrade -y + +# HA Core dependencies +sudo apt-get install -y python3 python3-dev python3-venv python3-pip bluez \ +libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential \ +libopenjp2-7 libtiff6 libturbojpeg0-dev tzdata ffmpeg liblapack3 liblapack-dev \ +libatlas-base-dev + +# The following packages are not installed automatically so we install it manually +sudo apt-get install -y libavcodec-dev libavformat-dev libavutil-dev \ +libavdevice-dev libavfilter-dev libswscale-dev pkg-config \ +cmake libopenblas-dev + +# From HA Core installation +sudo useradd -rm homeassistant +sudo mkdir /srv/homeassistant +sudo chown homeassistant:homeassistant /srv/homeassistant +sudo -u homeassistant -H -s + +cd /srv/homeassistant +python3 -m venv . +source bin/activate +python3 -m pip install wheel + +# And some more dependencies +python3 -m pip install numpy==1.26.0 PyTurboJPEG==1.7.5 +``` + +### Rust Installation + +Continue working under `homeassistant` user + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +Logout and login again to make the `rust` packages available + +### HA Installation + +Be patient, this step will take time because a lot of dependencies are built from source + +```bash +pip3 install homeassistant==2024.9.3 +``` + +### HA Launch + +Under `homeassistant` user and inside venv run + +```bash +hass +``` + +After Home Assistant starts, go to the dashboard with `http://[RISC-V IP ADDRESS]:8123/` + +Let's make a systemd service to make it run automatically. Stop `hass` and create a service file: + +```bash +sudo nano /etc/systemd/system/homeassistant.service +``` + +```ini +[Unit] +Description=Home Assistant +After=network-online.target + +[Service] +Type=simple +User=homeassistant +WorkingDirectory=/home/homeassistant/.homeassistant +ExecStart=/srv/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant" +RestartForceExitStatus=100 + +[Install] +WantedBy=multi-user.target +``` + +```bash +sudo systemctl start homeassistant.service +sudo systemctl enable homeassistant.service + +# Check the service is up and running +systemctl status homeassistant.service +``` + +## Mosquitto Installation + +```bash +sudo apt install mosquitto mosquitto-clients +sudo mosquitto_passwd -c /etc/mosquitto/passwd mosquitto +sudo systemctl restart mosquitto + +# Check the service +systemctl status mosquitto +``` + +## Zigbee2MQTT Installation + +Reference article from the official zigbee2mqtt [manual](https://www.zigbee2mqtt.io/guide/installation/01_linux.html) + +These commands are run under `ubuntu` user: + +```bash +# Zigbee adapter location +ls -l /dev/serial/by-id +# lrwxrwxrwx 1 root root 13 Aug 8 14:51 usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20230803183548-if00 -> ../../ttyACM0 + +# Install dependencies +sudo curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - +sudo apt-get install -y nodejs git make g++ gcc libsystemd-dev + +# Add user to dialout group +sudo adduser ubuntu dialout +``` + +Logout and login + +```bash +# It's easier to install npm from the repo +sudo apt-get install -y npm + +# Download and build zigbee2mqtt +sudo mkdir /opt/zigbee2mqtt +sudo chown -R ${USER}: /opt/zigbee2mqtt +git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt +cd /opt/zigbee2mqtt +npm ci +npm run build + +# Edit configuration file +cp /opt/zigbee2mqtt/data/configuration.example.yaml /opt/zigbee2mqtt/data/configuration.yaml +nano /opt/zigbee2mqtt/data/configuration.yaml +``` + +Put your mqtt login and password (if set) and zigbee adapter location: + +```yaml +# Home Assistant integration (MQTT discovery) +homeassistant: true + +# Enable the frontend, runs on port 8080 by default +frontend: + port: 8099 +# MQTT settings +mqtt: + # MQTT base topic for zigbee2mqtt MQTT messages + base_topic: zigbee2mqtt + # MQTT server URL + server: 'mqtt://localhost' + # MQTT server authentication, uncomment if required: + user: mosquitto + password: risc-v + +# Serial settings +serial: + # Location of CC2531 USB sniffer + port: /dev/ttyACM0 + +# Advanced settings +advanced: + # Let Zigbee2MQTT generate a network key on first start + network_key: GENERATE + # Let Zigbee2MQTT generate a pan_id on first start + pan_id: GENERATE + # Let Zigbee2MQTT generate a ext_pan_id on first start + ext_pan_id: GENERATE +``` + +Launch zigbee2MQTT + +```bash +npm start +``` + +If everything is ok, let's create a systemd service: + +```bash +sudo nano /etc/systemd/system/zigbee2mqtt.service +``` + +```ini +[Unit] +Description=zigbee2mqtt +After=network.target + +[Service] +Environment=NODE_ENV=production +Type=notify +ExecStart=/usr/bin/node index.js +WorkingDirectory=/opt/zigbee2mqtt +StandardOutput=inherit +# Or use StandardOutput=null if you don't want Zigbee2MQTT messages filling syslog, for more options see systemd.exec(5) +StandardError=inherit +WatchdogSec=10s +Restart=always +RestartSec=10s +User=ubuntu + +[Install] +WantedBy=multi-user.target +``` + +```bash +sudo systemctl start zigbee2mqtt.service +sudo systemctl enable zigbee2mqtt.service + +# Check the service +systemctl status zigbee2mqtt.service +``` + +You can find the zigbee2mqtt dashboard at `http://[RISC-V IP ADDRESS]:8099/` + +## IPFS Installation + +The following command are run under `ubuntu` user: + +```bash +cd +nano .profile +``` + +```bash +export PATH=$PATH:/usr/local/go/bin +export PATH=$PATH:$GOPATH/bin +``` + +Relogin from user and build the package: + +```bash +git clone https://github.com/ipfs/kubo.git +cd kubo +make build +sudo mv cmd/ipfs/ipfs /usr/local/bin/ +``` + +Before the first run: + +```bash +ipfs init +ipfs config profile apply local-discovery +sudo nano /etc/systemd/system/ipfs-daemon.service +``` + +Create a systemd service: + +```ini +[Unit] +Description=IPFS Daemon Service + +[Service] +Type=simple +ExecStart=/usr/local/bin/ipfs daemon --enable-gc --migrate=true +User=ubuntu + +[Install] +WantedBy=multi-user.target +``` + +```bash +sudo systemctl start ipfs-daemon.service +sudo systemctl enable ipfs-daemon.service + +# Check the service +systemctl status ipfs-daemon.service +``` + +## Libp2p Proxy Installation + +We will need our libp2p proxy package for peering communication with home server: + +```bash +git clone https://github.com/PinoutLTD/libp2p-ws-proxy.git +cd libp2p-ws-proxy +npm install +node src/index.js +``` + +If everything is alright, let's create a service: + +```bash +sudo nano /etc/systemd/system/lp2p-proxy.service +``` + +```ini +[Unit] +Description= Libp2p Proxy Service + +[Service] +Type=simple +WorkingDirectory=/home/ubuntu/libp2p-ws-proxy/ +ExecStart=/usr/bin/node src/index.js +User=ubuntu +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +``` + +```bash +sudo systemctl start lp2p-proxy.service +sudo systemctl enable lp2p-proxy.service + +# Check the service +systemctl status lp2p-proxy.service + +``` + + +## Robonomics Integration Installation + +> We prebuilt the wheels for convenience + +```bash +sudo -u homeassistant -H -s +cd +source /srv/homeassistant/bin/activate +git clone https://github.com/PaTara43/py-bindings-wheels-risc-v +cd py-bindings-wheels-risc-v +pip3 install * +``` + +### Install HACS + +We will use [HACS](https://hacs.xyz/) to install the integration. If HACS is not installed on your Home Assistant yet, you need to [install](https://www.hacs.xyz/docs/use/download/download/#to-download-hacs-core) it first. + +### Download Robonomics Integration + +Next, in your Home Assistant, navigate to HACS and search for `Robonomics`: + +{% roboWikiPicture {src:"docs/home-assistant/hacks-search.png", alt:"hacks-search"} %}{% endroboWikiPicture %} + +Open it and click `Download` in the bottom right corner. Downloading the repository may take some time. + +{% roboWikiPicture {src:"docs/home-assistant/hacs-download-integration.png", alt:"hacs-download-integration"} %}{% endroboWikiPicture %} + +That's all. Now, you can continue to setup Robonomics Integration. + + +{% roboWikiGridWrapper {columns: '1', textAlign: center, flexible: true} %} + {% roboWikiGrid %} {% roboWikiButton {label: "Subscription Activate", link: "/docs/sub-activate/?topic=smart-home", block: true} %}{% endroboWikiButton %} {% endroboWikiGrid %} +{% endroboWikiGridWrapper %} \ No newline at end of file diff --git a/translations/pages/en.json b/translations/pages/en.json index d292f436e4a..fef7696c392 100644 --- a/translations/pages/en.json +++ b/translations/pages/en.json @@ -15,6 +15,7 @@ "Robonomics Installation": "Robonomics Installation", "Upgrade Home Assistant Docker for Unix-like OS": "Upgrade Home Assistant Docker for Unix-like OS", "Upgrade Home Assistant Core": "Upgrade Home Assistant Core", + "Home Server on RISC-V": "Home Server on RISC-V", "Use": "Use", "Get Smart Home Telemetry": "Get Smart Home Telemetry", "Backup Services": "Backup Services", From 2947912651f226d17c1a252dadb40c986166351e Mon Sep 17 00:00:00 2001 From: tubleronchik Date: Wed, 23 Oct 2024 19:39:15 +0200 Subject: [PATCH 2/4] fix navigation for risc V article --- src/_data/sidebar_docs.json | 16 ++++++++++++---- src/docs/home-server-on-risc.md | 7 +------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/_data/sidebar_docs.json b/src/_data/sidebar_docs.json index 610083fbb0b..d509c5b3cee 100644 --- a/src/_data/sidebar_docs.json +++ b/src/_data/sidebar_docs.json @@ -114,15 +114,23 @@ { "title": "Robonomics Integration Setup", "url": "/docs/robonomics-hass-integration", - "topic": "Upgrade Home Assistant Core" + "topic": "Upgrade Home Assistant Core", + "next": [ + { + "title": "Add User", + "url": "/docs/add-user" + } + ] } ] }, { - "children": [ + "title": "Home Server on RISC-V", + "url": "/docs/home-server-on-risc", + "next": [ { - "title": "Home Server on RISC-V", - "url": "/docs/home-server-on-risc" + "title": "Add User", + "url": "/docs/add-user" } ] } diff --git a/src/docs/home-server-on-risc.md b/src/docs/home-server-on-risc.md index 732b3fd719a..f50538dd4f2 100644 --- a/src/docs/home-server-on-risc.md +++ b/src/docs/home-server-on-risc.md @@ -436,9 +436,4 @@ Open it and click `Download` in the bottom right corner. Downloading the reposi {% roboWikiPicture {src:"docs/home-assistant/hacs-download-integration.png", alt:"hacs-download-integration"} %}{% endroboWikiPicture %} -That's all. Now, you can continue to setup Robonomics Integration. - - -{% roboWikiGridWrapper {columns: '1', textAlign: center, flexible: true} %} - {% roboWikiGrid %} {% roboWikiButton {label: "Subscription Activate", link: "/docs/sub-activate/?topic=smart-home", block: true} %}{% endroboWikiButton %} {% endroboWikiGrid %} -{% endroboWikiGridWrapper %} \ No newline at end of file +That's all. Now, you can continue to setup Robonomics Integration. \ No newline at end of file From c29c1be1262b92c7ea2a2508e95d33da3e83c69d Mon Sep 17 00:00:00 2001 From: tubleronchik Date: Wed, 23 Oct 2024 19:41:42 +0200 Subject: [PATCH 3/4] fix hacs instalaltion link --- src/docs/hass-docker-core-upgrade.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/hass-docker-core-upgrade.md b/src/docs/hass-docker-core-upgrade.md index a5cb3201f4f..e970b307d91 100644 --- a/src/docs/hass-docker-core-upgrade.md +++ b/src/docs/hass-docker-core-upgrade.md @@ -81,7 +81,7 @@ In this case, you need to adjust your IPFS configuration file and confirm it. ## Download Robonomics Integration -We will use [HACS](https://hacs.xyz/) to install the integration. If HACS is not installed on your Home Assistant yet, you need to [install](https://hacs.xyz/docs/setup/download/) it first. +We will use [HACS](https://hacs.xyz/) to install the integration. If HACS is not installed on your Home Assistant yet, you need to [install](https://www.hacs.xyz/docs/use/download/download) it first. Next, in your Home Assistant, navigate to HACS and search for `Robonomics`: From 9f1ed633c3df00be49e3003a1bb1d7ab431d1d9c Mon Sep 17 00:00:00 2001 From: tubleronchik Date: Thu, 24 Oct 2024 10:12:09 +0200 Subject: [PATCH 4/4] add helpders for code --- src/docs/home-server-on-risc.md | 57 +++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/docs/home-server-on-risc.md b/src/docs/home-server-on-risc.md index f50538dd4f2..ec83efd315e 100644 --- a/src/docs/home-server-on-risc.md +++ b/src/docs/home-server-on-risc.md @@ -131,36 +131,54 @@ python3 -m pip install numpy==1.26.0 PyTurboJPEG==1.7.5 Continue working under `homeassistant` user +{% codeHelper {copy: true}%} + ```bash curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` +{% endcodeHelper %} + Logout and login again to make the `rust` packages available ### HA Installation Be patient, this step will take time because a lot of dependencies are built from source +{% codeHelper {copy: true}%} + ```bash pip3 install homeassistant==2024.9.3 ``` +{% endcodeHelper %} + ### HA Launch Under `homeassistant` user and inside venv run +{% codeHelper {copy: true}%} + ```bash hass ``` +{% endcodeHelper %} + After Home Assistant starts, go to the dashboard with `http://[RISC-V IP ADDRESS]:8123/` Let's make a systemd service to make it run automatically. Stop `hass` and create a service file: +{% codeHelper {copy: true}%} + ```bash sudo nano /etc/systemd/system/homeassistant.service ``` +{% endcodeHelper %} + +{% codeHelper {copy: true}%} + ```ini [Unit] Description=Home Assistant @@ -177,6 +195,8 @@ RestartForceExitStatus=100 WantedBy=multi-user.target ``` +{% endcodeHelper %} + ```bash sudo systemctl start homeassistant.service sudo systemctl enable homeassistant.service @@ -236,6 +256,8 @@ nano /opt/zigbee2mqtt/data/configuration.yaml Put your mqtt login and password (if set) and zigbee adapter location: +{% codeHelper {copy: true}%} + ```yaml # Home Assistant integration (MQTT discovery) homeassistant: true @@ -268,18 +290,31 @@ advanced: ext_pan_id: GENERATE ``` +{% endcodeHelper %} + Launch zigbee2MQTT +{% codeHelper {copy: true}%} + ```bash npm start ``` + +{% endcodeHelper %} + If everything is ok, let's create a systemd service: +{% codeHelper {copy: true}%} + ```bash sudo nano /etc/systemd/system/zigbee2mqtt.service ``` +{% endcodeHelper %} + +{% codeHelper {copy: true}%} + ```ini [Unit] Description=zigbee2mqtt @@ -302,6 +337,8 @@ User=ubuntu WantedBy=multi-user.target ``` +{% endcodeHelper %} + ```bash sudo systemctl start zigbee2mqtt.service sudo systemctl enable zigbee2mqtt.service @@ -316,16 +353,24 @@ You can find the zigbee2mqtt dashboard at `http://[RISC-V IP ADDRESS]:8099/` The following command are run under `ubuntu` user: +{% codeHelper {copy: true}%} + ```bash cd nano .profile ``` +{% endcodeHelper %} + +{% codeHelper {copy: true}%} + ```bash export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:$GOPATH/bin ``` +{% endcodeHelper %} + Relogin from user and build the package: ```bash @@ -345,6 +390,8 @@ sudo nano /etc/systemd/system/ipfs-daemon.service Create a systemd service: +{% codeHelper {copy: true}%} + ```ini [Unit] Description=IPFS Daemon Service @@ -358,6 +405,8 @@ User=ubuntu WantedBy=multi-user.target ``` +{% endcodeHelper %} + ```bash sudo systemctl start ipfs-daemon.service sudo systemctl enable ipfs-daemon.service @@ -379,10 +428,16 @@ node src/index.js If everything is alright, let's create a service: +{% codeHelper {copy: true}%} + ```bash sudo nano /etc/systemd/system/lp2p-proxy.service ``` +{% endcodeHelper %} + +{% codeHelper {copy: true}%} + ```ini [Unit] Description= Libp2p Proxy Service @@ -399,6 +454,8 @@ RestartSec=5 WantedBy=multi-user.target ``` +{% endcodeHelper %} + ```bash sudo systemctl start lp2p-proxy.service sudo systemctl enable lp2p-proxy.service