PhilippTheServer

embedded

Edge hardware, industrial peripherals and the constraints of small machines.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

All topics · All writing