UDP 组件
此组件允许使用用户数据报协议 (UDP) 在网络上接收和发送数据。 结合数据包传输组件,它可用于广播传感器数据。
# 示例配置条目udp: listen_address: 239.0.60.53 addresses: ["255.255.255.255", "208.87.135.110"]-
id (可选, ID): 手动指定用于代码生成的 ID。
-
port (可选, 整数): 要使用的目标 UDP 端口号。默认为
18511。可以通过映射而不是单个端口号指定不同的监听端口和广播端口:- listen_port (必填, 整数): 用于接收数据包的端口。
- broadcast_port (必填, 整数): 用于发送数据包的端口。
-
addresses (可选, IPv4 地址列表): 一个或多个用于广播数据的 IP 地址。默认为
255.255.255.255即本地网络广播地址。 -
listen_address (可选, IPv4 地址): 更改为多播,添加一个用于监听的地址。默认为无多播地址,仅 本地网络广播地址
255.255.255.255。注意: 添加多播地址将停止在广播地址上监听。
UDP 与任何其他网络协议一样,不保证数据会被传递,但与 TCP 不同,它甚至 不提供任何关于数据是否已成功传递的指示。
udp.write 动作
Section titled “udp.write 动作”要向 UDP 端口写入数据,请使用 udp.write 动作。此动作接受一个参数,即要写入 UDP 端口的数据。
要在 UDP 端口接收到数据时触发动作,请使用 on_receive 触发器。触发器使用单个参数 data 调用,表示接收数据的 std::vector<uint8_t>。
udp: on_receive: then: - logger.log: format: "收到 %s" args: [format_hex_pretty(data).c_str()]有关如何使用此组件的示例,请参阅数据包传输组件。
下面显示了一个更复杂的示例:
下面的示例显示了一个提供者设备将数据分离发送给不同的消费者。有两个提供者配置,具有不同的 ID。
transport_internal 提供者每 10 秒以纯文本格式向所有网络成员广播所选传感器状态,而 transport_external
提供者将其他传感器数据发送到外部 IP 地址和端口,并进行加密。该节点还通过 transport_external 配置中指定的端口监听来自 remote-node 的数据:
udp: - id: udp_internal - id: udp_external port: listen_port: 18511 broadcast_port: 18512 addresses: - 10.87.135.110
packet_transport: - id: transport_internal udp_id: udp_internal update_interval: 10s sensors: - temp_outdoor - temp_rooma - temp_roomb - temp_roomc - temp_garage - temp_water - humi_rooma - humi_roomb - humi_roomc
- id: transport_external udp_id: udp_external update_interval: 60s encryption: "Muddy Waters" ping_pong_enable: true rolling_code_enable: true binary_sensors: - binary_sensor_door sensors: - temp_outdoor
binary_sensor: - platform: packet_transport id: binary_sensor_unlock transport_id: transport_external provider: remote-node remote_id: binary_sensor_unlock_me on_press: - lambda: |- ESP_LOGI("main", "d command to binary_sensor_unlock");