embedded
Edge hardware, industrial peripherals and the constraints of small machines.
-
I Reverse-Engineered My Smart Ring BLE Protocol Clean-Room
COLMi R02, Realtek RTL8762E, BLE from Linux and a Pixel 10a. 16-byte framing, an unenforced checksum, and a clean-room method with evidence levels.
-
Multicast Service Discovery on a Host With a WireGuard Interface
"Required key not available" (ENOKEY) on multicast sendto: kernel WireGuard has no peer for 239.0.0.0/8. Filter interfaces on IFF_MULTICAST and IFF_POINTOPOINT.
-
The NTP Clock Jump That Made the Scheduler Skip a Week of Measurements
time.time() vs time.monotonic() in a Python scheduler: a backwards NTP step delayed runs by nine days. Monotonic durations and a jump-injecting test.
-
MQTT Persistent Sessions and Retained Messages for Offline Subscribers
MQTT clean_session=False only persists with a stable client ID, QoS 1 and Mosquitto persistence true. Retained messages give new subscribers the last value.
-
SMR Drives in a Replicated Cluster: Finding the Disk That Ruins the Pool
lsblk ZONED=none does not rule out drive-managed SMR. A 30-minute fio randwrite probe and p99 latency ratio catch the cliff before it hits a Ceph OSD.
-
Powering and Discovering Peripherals over PoE with Multicast Announcements
IP_ADD_MEMBERSHIP multicast discovery for PoE sensors in Python: announcer, collector with expiry, and why IGMP snooping without a querier breaks it.
-
Provisioning a Single-Board Computer as an Industrial Edge Node
/proc/device-tree/model read by Ansible to load board-revision vars via include_vars with_first_found, with a generic fallback and a container test.