Community-reported hub revisions
Not maintainer-verified. The manual update includes the F03 port mapping, but its recorded flash verification covers only F04 hubs. The revisions on this page come from community reports on a single unit each. Read the report, keep your backups, and verify the result on your own hardware.
frankenfirmware reads the hub label from /deviceinfo/device-label at boot and looks for a block with the same revision in /opt/eight/config/machine.json. If no block matches, it falls back to the default NXP i.MX 8M Mini ports (/dev/ttymxc0). The cover and hub controller then stay disconnected, and temperature commands fail with [thermostat] %s heat-on rejected - no peripheral connected.
Find your revision
ssh -p 8822 root@POD_IP "cat /deviceinfo/device-label"
# Example: 20500-0003-F08-...The revision is the third dash-separated field (F08 above). If it is F04, follow the manual update without changes. If it is F03, the manual update already includes your port mapping, but its flash verification covers only F04.
Add a block for your revision
In the Step 6 machine.json, add a block named after your revision after F04. Add a comma after the closing brace of the F04 block, and keep the root-level keys, because capybara.service reads only those:
{
"sensorPort": "/dev/ttyS2",
"frozenPort": "/dev/ttyS1",
"F03": {
"sensorPort": "/dev/ttyS2",
"frozenPort": "/dev/ttyS1"
},
"F04": {
"sensorPort": "/dev/ttyS2",
"frozenPort": "/dev/ttyS1"
},
"F08": {
"sensorPort": "/dev/ttyS2",
"frozenPort": "/dev/ttyS1"
}
}In the Step 6 ssh command, the JSON sits inside a double-quoted string, so escape each quote as \", matching the existing blocks.
Confirm the mapping
After restarting frank.service, confirm that the daemon picked your block and the expected ports. The command reads only the current run of the service, so log lines from before the change do not appear:
ssh -p 8822 root@POD_IP 'journalctl --no-pager _SYSTEMD_INVOCATION_ID="$(systemctl show -p InvocationID --value frank.service)" | grep -E "Using machine config|sensor path"'
# Expected:
# INF: DeviceInfo.cpp getPorts | Using machine config for hwRev F08 (device hwRev: F08)
# INF: main.cpp | sensor path: /dev/ttyS2 frozen path: /dev/ttyS1If the log still shows /dev/ttymxc0, the block name does not match the label. Check spelling and case.
Reported revisions
| Revision | Example label | Cover | Ports (sensorPort / frozenPort) | Reported by | Source |
|---|---|---|---|---|---|
F08 | 20500-0003-F08-… | Pod 4 (STM32G0) | /dev/ttyS2 / /dev/ttyS1 | @JoeGodz | #60 |
To add a revision, open a pull request that adds a row to this table. Include your full device-label prefix, your cover generation, and the Using machine config log line.