ansible: edge-host role — bare-metal Arch N100 replaces k8s-edge VM #95

Merged
k.renner merged 14 commits from edge-host-arch into master 2026-07-02 12:27:50 +00:00
14 Commits
Author SHA1 Message Date
k.rennerandClaude Fable 5 4a49470cd2 edge-host: open3e dir owned by service user (udsoncan log file)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:23:26 +02:00
k.rennerandClaude Fable 5 9e03cfa213 edge-host: force can0 up via ActivationPolicy=always-up
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>
2026-07-02 14:16:50 +02:00
k.rennerandClaude Fable 5 46152c0bdf edge-host: pip module needs python-packaging on the target
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:12:50 +02:00
k.rennerandClaude Fable 5 89da3ef0d4 edge-host: don't abort the play on not-yet-moved USB devices
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>
2026-07-02 14:10:56 +02:00
k.rennerandClaude Fable 5 f8d6025048 edge-host: edge-1 lives on the IoT VLAN — fix inventory FQDN
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 14:07:18 +02:00
k.rennerandClaude Fable 5 244929fff2 edge-host-iso: pin mmc modules into the installed initramfs
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>
2026-07-02 13:48:19 +02:00
k.rennerandClaude Fable 5 ecadc983be edge-host: poll the VCMU (0x68c) refrigerant-circuit ECU — 53 DIDs total
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>
2026-07-02 13:37:11 +02:00
k.rennerandClaude Fable 5 ed80d83a73 edge-host-iso: fix eMMC detection on the Wyse 3040
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>
2026-07-02 13:36:08 +02:00
k.rennerandClaude Fable 5 4576c2d13d edge-host: extend open3e datapoint set to 39 DIDs
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>
2026-07-02 12:55:14 +02:00
k.rennerandClaude Fable 5 81dc3d0a85 edge-host-iso: headless install support + internal-disk autodetect
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>
2026-07-02 12:42:40 +02:00
k.rennerandClaude Fable 5 5586f4bfee edge-host: open3e must publish JSON payloads (-j)
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>
2026-07-02 12:38:01 +02:00
k.rennerandClaude Fable 5 dbe8efdc62 images: build edge-host ISO in an archlinux container
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>
2026-07-02 12:34:13 +02:00
k.rennerandClaude Fable 5 ee98c88ef4 images: add edge-host installer ISO
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>
2026-07-02 12:14:36 +02:00
k.rennerandClaude Fable 5 42a5cdc275 ansible: add edge-host role — bare-metal Arch N100 replaces k8s-edge VM
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
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>
2026-07-02 12:03:14 +02:00