228 lines
6.8 KiB
Markdown
228 lines
6.8 KiB
Markdown
# casa
|
|
|
|
Welcome to my home server repository, where Home Assistant and other services are hosted.
|
|
This repository is dedicated to documenting and maintaining the server configuration and workflows.
|
|
|
|
The primary goal is to establish a Docker-based server capable of isolating services and communications related to home automation at the network level.
|
|
The server operates within its own VLAN (`homesrv`) but requires controlled communication with other VLANs, such as `IOT Vlan`
|
|
|
|
<!-- omit in toc -->
|
|
## Table of Contents
|
|
|
|
- [Host](#host)
|
|
- [Proxmox - container](#proxmox---container)
|
|
- [OS](#os)
|
|
- [logs](#logs)
|
|
- [Development, Maintenance and Deployment](#development-maintenance-and-deployment)
|
|
- [Docker context](#docker-context)
|
|
|
|
### Setup system
|
|
|
|
**Install/Update requirements (collections and roles):**
|
|
|
|
``` bash
|
|
ansible-galaxy collection install -r ./ansible/requirements.yml --force
|
|
```
|
|
|
|
``` bash
|
|
ansible-playbook ./ansible/site.yml
|
|
```
|
|
|
|
docker, promtail and telegraf configuration [maintained by ansible playbook](./site.yml).
|
|
|
|
### docker
|
|
|
|
#### rclone plugin
|
|
|
|
[https://rclone.org/docker/](https://rclone.org/docker/)
|
|
|
|
```bash
|
|
# execute on server
|
|
sudo apt-get -y install fuse
|
|
docker plugin install rclone/docker-volume-rclone:amd64 args="-v" --alias rclone --grant-all-permissions
|
|
docker plugin list
|
|
```
|
|
|
|
if error when enabling plugin.
|
|
*"rclone.sock: connect: no such file or directory"*
|
|
remove existing cache.
|
|
|
|
```bash
|
|
rm -r /var/lib/docker-plugins/rclone/cache
|
|
mkdir -p /var/lib/docker-plugins/rclone/cache
|
|
```
|
|
|
|
[ansible role for plugin configuration](./rclone.docker-plugin.playbook.yaml)
|
|
|
|
### nginx
|
|
|
|
[Docker Compose](./services/nginx/docker-compose.yaml)
|
|
|
|
All sites configurations set during docker build.
|
|
|
|
### Home Assistant
|
|
|
|
[Git Repo](/:root/marcio.fernandes/homeAssistant)
|
|
|
|
### Lyrion Music Server (LMS)
|
|
|
|
For instructions on setting up the Lyrion Music Server Docker container, refer to the [LMS Git Repository](/:root/marcio.fernandes/lms).
|
|
|
|
For information on integrating Lyrion Music Server with Home Assistant, visit the [Home Assistant Git Repository](/:root/marcio.fernandes/homeassistant#squeezebox-lyrion-music-server).
|
|
|
|
Using [Docker Rclone plugin](https://rclone.org/docker/) for accessing the bucket where music is stored. Configuration is managed via [Ansible playbook](./rclone.docker-plugin.playbook.yml).
|
|
|
|
```sh
|
|
#configure access to s3 bucket
|
|
ansible-playbook ./rclone.docker-plugin.playbook.yml
|
|
```
|
|
|
|
### Mosquitto
|
|
|
|
[Git Repo](/:root/marcio.fernandes/mosquitto)
|
|
|
|
### Wyoming
|
|
|
|
A peer-to-peer protocol for voice assistants (basically JSONL + PCM audio)
|
|
|
|
```json
|
|
{ "type": "...", "data": { ... }, "data_length": ..., "payload_length": ... }
|
|
<data_length bytes (optional)>
|
|
<payload_length bytes (optional)>
|
|
```
|
|
|
|
Used in Rhasspy and Home Assistant for communication with voice services.
|
|
|
|
This is an open standard of the Open Home Foundation.
|
|
|
|
For more information about home assistant integration [check home assistant repo](/:root/marcio.fernandes/homeassistant#wyoming).
|
|
|
|
[Docker compose file](./services/wyoming/docker-compose.yaml).
|
|
|
|
Continuous deploy [gitea action](.gitea/workflows/deploy-wyoming.yml).
|
|
|
|
Because of performance wyoming whisper is currently hosted on chimera kubernetes cluster [deployment](./services/wyoming/whisper.kubernetes-deployment.yaml)
|
|
|
|
Links:
|
|
|
|
- [https://github.com/home-assistant/addons/blob/master/whisper/DOCS.md](https://github.com/home-assistant/addons/blob/master/whisper/DOCS.md)
|
|
- [https://github.com/rhasspy/wyoming-faster-whisper](https://github.com/rhasspy/wyoming-faster-whisper)
|
|
- [https://exitcode0.net/posts/wyoming-whisper-docker-compose/](https://exitcode0.net/posts/wyoming-whisper-docker-compose/)
|
|
- [https://exitcode0.net/posts/wyoming-piper-docker-compose/](https://exitcode0.net/posts/wyoming-piper-docker-compose/)
|
|
|
|
### Zigbee2mqtt
|
|
|
|
Zigbee to MQTT bridge, get rid of your proprietary Zigbee bridges
|
|
|
|
SONOFF Universal Zigbee 3.0 USB Dongle Plus attached on [proxmox host](#proxmox---lxc-container).
|
|
|
|
Patch security on [proxmox host](#proxmox---lxc-container).
|
|
(usb passthrough to [lxc container](#proxmox---lxc-container))
|
|
|
|
```yaml
|
|
#on proxmox hosting server
|
|
chown 100000:100020 /dev/ttyUSB0
|
|
chown 100000:100020 /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0
|
|
```
|
|
|
|
[docker compose](./services/zigbee2mqtt/docker-compose.yaml)
|
|
|
|
Links
|
|
|
|
- [https://www.zigbee2mqtt.io/](https://www.zigbee2mqtt.io/)
|
|
- [Home assistant integration](/:root/marcio.fernandes/homeassistant#Zigbee2mqtt)
|
|
- [Continuos Deploy - git action](./.gitea/workflows/services.zigbee2mqtt.yml)
|
|
|
|
## Host
|
|
|
|
### Proxmox - container
|
|
|
|
Currently hosted on a proxmox ubuntu container.
|
|
|
|
```bash
|
|
# cat /etc/pve/lxc/105.conf
|
|
arch: amd64
|
|
cmode: shell
|
|
cores: 2
|
|
features: fuse=1,keyctl=1,nesting=1
|
|
hostname: homesrv01
|
|
memory: 1500
|
|
net0: name=eth0,bridge=vmbr0,firewall=1,ip6=dhcp,...,type=veth
|
|
onboot: 1
|
|
ostype: ubuntu
|
|
protection: 1
|
|
rootfs: local-lvm:vm-105-disk-0,size=32G
|
|
swap: 1500
|
|
unprivileged: 1
|
|
lxc.cgroup2.devices.allow: c 189:* rwm
|
|
lxc.mount.entry: usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 none bind,optional,create=file
|
|
lxc.cgroup2.devices.allow: c 188:* rwm
|
|
lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file
|
|
```
|
|
|
|
lxc.cgroup2.devices.allow and lxc.mount.entry identification
|
|
|
|
```bash
|
|
# identify usb pen
|
|
lsusb
|
|
|
|
# example
|
|
# Bus 001 Device 008: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
|
|
|
|
|
|
#replace with bus and device id
|
|
ls -l /dev/bus/usb/001/008
|
|
|
|
#example result
|
|
# crw-rw-r-- 1 root root 189, 7 May 17 15:56 /dev/bus/usb/001/008
|
|
|
|
# so
|
|
|
|
#lxc.cgroup2.devices.allow: c 189:* rwm
|
|
#lxc.mount.entry: usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 none bind,optional,create=file
|
|
|
|
ls -l /dev/serial/by-id/
|
|
# example result
|
|
#lrwxrwxrwx 1 root root 13 May 17 15:56 usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_c0e8eeb4b38ded118e7c06f6b86ce6f8-if00-port0 -> ../../ttyUSB0
|
|
|
|
ls -l /dev/ttyUSB0
|
|
#example result
|
|
#crw-rw---- 1 root dialout 188, 0 May 17 15:56 /dev/ttyUSB0
|
|
|
|
#so
|
|
|
|
#lxc.cgroup2.devices.allow: c 188:* rwm
|
|
#lxc.mount.entry: /dev/ttyUSB0 dev/ttyUSB0 none bind,optional,create=file
|
|
```
|
|
|
|
### OS
|
|
|
|
```bash
|
|
# lsb_release -a
|
|
Distributor ID: Ubuntu
|
|
Description: Ubuntu 24.04 LTS
|
|
Release: 24.04
|
|
Codename: noble
|
|
|
|
# uname -r
|
|
6.8.4-3-pve
|
|
```
|
|
|
|
### logs
|
|
|
|
```bash
|
|
# check auto update scripts logs
|
|
journalctl -r -t auto-update
|
|
```
|
|
|
|
## Development, Maintenance and Deployment
|
|
|
|
Using visual studio code, docker, ansible and gitea actions.
|
|
|
|
### Docker context
|
|
|
|
```bash
|
|
# create context to homesrv01 docker on development devices
|
|
docker context create homesrv01 --docker host=ssh://admin@homesrv01.dev.lan
|
|
```
|