Prepares the dedicated Arch host (edge-1.srv.renner.uno) that replaces the k8s-edge Talos VM. Covers everything still pinned there plus the new CAN service:
zwave-js-ui + sml2mqtt via docker compose — configs ported 1:1 from the k8s manifests (same images, same by-id device paths, sml2mqtt config identical incl. Wh/entity-id continuity; --device instead of privileged hostPath)
open3e natively: can0 via systemd-networkd ([CAN] BitRate=250000, auto-restart on bus-off), venv + hardened-ish systemd unit bound to the CAN device, read-only 21-datapoint set, dedicated open3e broker user (PR #94)
inventory group edge_host, secrets via group_vars/edge_host/vault.yml (kubectl one-liners in the README), base-install + per-service cutover checklist in roles/edge-host/README.md
vm_153 tf comment updated to document the deprecation path
Not in scope (follow-up after cutover): removing the flux kustomizations, PVC, vm_153 and the Talos node patch.
Context: stock Talos ships CONFIG_CAN unset (siderolabs/talos#7686) — SocketCAN can't work in any pod without a custom kernel per release, hence bare metal.
Prepares the dedicated Arch host (`edge-1.srv.renner.uno`) that replaces the k8s-edge Talos VM. Covers everything still pinned there plus the new CAN service:
- **zwave-js-ui** + **sml2mqtt** via docker compose — configs ported 1:1 from the k8s manifests (same images, same by-id device paths, sml2mqtt config identical incl. Wh/entity-id continuity; `--device` instead of privileged hostPath)
- **open3e** natively: `can0` via systemd-networkd (`[CAN] BitRate=250000`, auto-restart on bus-off), venv + hardened-ish systemd unit bound to the CAN device, read-only 21-datapoint set, dedicated `open3e` broker user (PR #94)
- inventory group `edge_host`, secrets via `group_vars/edge_host/vault.yml` (kubectl one-liners in the README), base-install + per-service cutover checklist in `roles/edge-host/README.md`
- vm_153 tf comment updated to document the deprecation path
Not in scope (follow-up after cutover): removing the flux kustomizations, PVC, vm_153 and the Talos node patch.
Context: stock Talos ships `CONFIG_CAN` unset (siderolabs/talos#7686) — SocketCAN can't work in any pod without a custom kernel per release, hence bare metal.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Replaces the k8s-edge Talos VM (vm_153) with a dedicated Arch host
running the hardware-bound services: zwave-js-ui and sml2mqtt via
docker compose (configs ported 1:1 from the k8s manifests), plus the
new open3e CAN bridge (SocketCAN via systemd-networkd, venv + systemd
unit, read-only datapoint set).
Driver for leaving k8s here: stock Talos ships CONFIG_CAN unset
(siderolabs/talos#7686), so the Vitocal/VX3 CAN adapter cannot work in
any pod without a custom kernel per release.
Base-install procedure, secret bootstrap (vault.yml from cluster
secrets) and per-service cutover checklist in roles/edge-host/README.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Releng-based archiso overlay: `edge-install` in the live env wipes the
N100 NVMe and installs the ansible-ready base system (systemd-boot,
networkd DHCP, sshd key-only, docker). Service config stays in the
edge-host ansible role; the ISO only produces the base.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mkarchiso against the host repos fails on Manjaro (no archinstall/
reflector, linux is a virtual package) — releng needs real Arch repos.
Split the profile assembly into build-inner.sh and run it in
archlinux:latest (--privileged for pacstrap's bind mounts); verified
build on the Manjaro workstation. gitignore the ISO output dir.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Without -j open3e flattens complex DIDs into per-key subtopics; the HA
package parses value_json on the base topic and receives nothing.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Target changed from N100 to a Wyse 3040 (2G RAM / 8G eMMC): default
disk is now autodetected (nvme, else mmcblk0, else first non-USB disk)
and the live environment carries the homelab SSH keys, so the install
runs over SSH without a monitor (firmware boot-order/Secure-Boot still
needs one console visit if not already set).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds PV energy counters (1802, Energy dashboard solar slot), battery
power/energy/temperature and dynamic charge limits, heating/DHW energy
split (electric in, thermal out — live COP), compressor modulation and
starts/hours, refrigerant inlet/outlet temps, buffer temp, DHW + valve
states. Selected from the full DID scans (539+189 DPs).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The live env detects the eMMC card (sdhci_acpi) but does not autoload
mmc_block, so /dev/mmcblk0 never appears and edge-install finds no
target. Autoload via modules-load.d, belt-and-braces modprobe in
edge-install, check mmcblk0-2, and fix the lsblk fallback (empty TRAN
column shifted the awk fields).
Diagnosed live over SSH on the actual 3040 (10.2.50.109).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds suction/discharge pressure, superheat, EEV positions, fan speeds,
compressor rps, four-way valve + circuit status, evaporator/economizer/
oil temps and defrost energy target, discovered via depictSystem ECU
census + full VCMU DID scan.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mkinitcpio's autodetect missed the eMMC stack in the chroot; the
installed system hung unbootable with root on mmcblk0p2. Pin
sdhci_acpi/sdhci_pci/mmc_block in MODULES and regenerate during install.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The cutover order moves devices one at a time; a compose service whose
stick is still on the old VM must not block open3e installation.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
networkd applies [CAN] bitrate but does not raise the link by itself;
also make the handler reconfigure after reload (reload alone leaves
existing links untouched).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Prepares the dedicated Arch host (
edge-1.srv.renner.uno) that replaces the k8s-edge Talos VM. Covers everything still pinned there plus the new CAN service:--deviceinstead of privileged hostPath)can0via systemd-networkd ([CAN] BitRate=250000, auto-restart on bus-off), venv + hardened-ish systemd unit bound to the CAN device, read-only 21-datapoint set, dedicatedopen3ebroker user (PR #94)edge_host, secrets viagroup_vars/edge_host/vault.yml(kubectl one-liners in the README), base-install + per-service cutover checklist inroles/edge-host/README.mdNot in scope (follow-up after cutover): removing the flux kustomizations, PVC, vm_153 and the Talos node patch.
Context: stock Talos ships
CONFIG_CANunset (siderolabs/talos#7686) — SocketCAN can't work in any pod without a custom kernel per release, hence bare metal.🤖 Generated with Claude Code