ESPHome boards can already share sensor readings through packet_transport, over UDP or a UART. A new component, packet_interface, adds a level underneath: a common way to send packets over a link, with optional layers that resend lost packets, check whether the other side is still there and encrypt the traffic. The author, clydebarrow, split the work into a stack of pull requests. The component itself, with a UART link, was merged on 23 October 2026. The UDP link and three layers followed on 24 October. All of it is in the development branch for ESPHome 2026.11.
Links
The uart link frames packets with the same byte stuffing that the UART platform of packet_transport already uses. The udp link sends each packet as one UDP datagram to every address configured in the udp component.
A new packet_interface platform for packet_transport connects the two, so existing sensor sharing can run over any link. This is the example from the encryption pull request:
uart:
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 115200
packet_interface:
- platform: uart
id: serial_link
encryption:
key: Johnny Cash
rolling_code_enable: true
session:
keep_alive: 10s
binary_sensor:
name: Link connected
packet_transport:
- platform: packet_interface
packet_interface: serial_link
sensors:
- temperature
Three layers
Layers are configured on the link's entry and are always stacked in a fixed order, whatever order you write them in.
- Reliability (
reliability:) follows HDLC and delivers packets between two devices in order, without loss or duplicates. It adds 3 bytes per packet: a control byte and a CRC-16. Sequence numbers run modulo 8, and a gap is answered with a REJ frame, so the peer resends at once. The timeout is at least 50 ms (200 ms by default) and gets up to a quarter added at random, so two devices whose frames collided do not resend at the same moment.ack_delaylets one acknowledgement cover several frames, which the author says matters on half-duplex radios. - Session (
session:) sends keep-alives and reports whether the peer is reachable, optionally to a binary sensor. Each keep-alive carries a random number chosen at boot, so a restart of the peer is noticed even when it is quicker than the timeout.keep_alivecan be set from 1 s to 1 h, and the timeout defaults to three keep-alive intervals. - Encryption (
encryption:) encrypts and authenticates every packet with XXTEA and a 256-bit key, the SHA-256 of the configured key text. A modified packet, or one encrypted with another key, is dropped. Withrolling_code_enable, a boot number saved in flash and a packet counter also reject replayed packets. The layer adds 4 to 8 bytes per packet, or 16 to 19 with the rolling code.
Before you use it on a network
In the merged code the UDP link accepts datagrams from any sender. A later pull request should make it accept only the peer when udp sends to a single unicast address. Until then, the author says a shared network needs an encryption or addressing layer on top. The test environment lists only ESP32 with ESP-IDF, and the documentation is still an open pull request (esphome.io #7783).
Next in the stack: addressing and fragmentation layers, an entity_transport component, and TCP, ESP-NOW and LoRa links.