ESPHome不经过HA设备1直接控制设备2

编程入门 行业动态 更新时间:2024-10-20 05:38:14

ESPHome<a href=https://www.elefans.com/category/jswz/34/1587631.html style=不经过HA设备1直接控制设备2"/>

ESPHome不经过HA设备1直接控制设备2

目录

  • 1.公共配置文件
  • 2.设备2:台灯
  • 3.控制器(http.post)
  • 4.获取状态(http.get)
  • 5.提取Json数据(`string`类型)
  • 6.提取Json数据(`int`类型)
  • `注意`

1.公共配置文件

#wifi.yaml
wifi: networks:- ssid: "123"password: "www.123"- ssid: "456"password: "www.123"# 当连接不上指定wifi,开启热点配网ap:ssid: "设备配网"# 强制门户
captive_portal:# web界面
web_server:port: 80

2.设备2:台灯

主要是控制一个IO口

substitutions: { desc: 台灯, devicename: sensor }esphome:name: $devicenameplatform: ESP8266board: nodemcuv2arduino_version: latest# Enable logging
logger:# Enable Home Assistant API
api:encryption:key: "MhXiJqKKyCXTqjZWqtegaP1tQSUpPtbnXP9iV1i2TzE="ota:password: "8e9c493c1fda598d0789f514507f3538"packages:wifi: !include common/wifi.yamloutput:- pin: 2id: led_pin2platform: gpiolight:- id: ledoutput: led_pin2platform: binaryname: "${devicename}_led" # ${devicename}_led 的实际参数是 sensor_led

3.控制器(http.post)

esphome:name: httpfriendly_name: httpesp8266:board: nodemcuv2# Enable logging
logger:# Enable Home Assistant API
api:encryption:key: "hGNx5NzLL+UnGsUWxs6tvYghEZDgVfQjOcsMQaMgrg4="ota:password: "65290e2cae0c69b31b50bdb80bcd4f4c"packages:wifi: !include common/wifi.yamlhttp_request:useragent: esphome/deviceid: my_requesttimeout: 10sinterval:- interval: 2sthen:- http_request.post: /light/sensor_led/toggle

interval启动了一个定时器,2s执行一次http_request.post动作

当你的设备2:台灯正常连接上网络,在局域网中,可以访问

/light/sensor_led/toggle

获取设备2:台灯的状态

因为我们使用的浏览器是get,只能获取设备的状态,并不能控制设备

想要控制设备,就要使用到post

- http_request.post: /light/sensor_led/toggle


和点击web网页上面的按钮效果是一样的

4.获取状态(http.get)

如果是想获取设备的状态,并不是控制设备,可以使用get

esphome:name: httpfriendly_name: httpesp8266:board: nodemcuv2# Enable logging
logger:# Enable Home Assistant API
api:encryption:key: "hGNx5NzLL+UnGsUWxs6tvYghEZDgVfQjOcsMQaMgrg4="ota:password: "65290e2cae0c69b31b50bdb80bcd4f4c"packages:wifi: !include common/wifi.yamlhttp_request:useragent: esphome/deviceid: my_requesttimeout: 10sinterval:- interval: 10sthen:# - http_request.post: /light/sensor_led/toggle- http_request.get: url: "/light/sensor_led"on_response:- lambda: |- ESP_LOGD("http_request", "data: %s", id(my_request).get_string());

如果访问成功,就将获取到的数据通过ESP_LOGD打印出来

5.提取Json数据(string类型)

已经获取到Json数据,肯定需要将里面的数据提取出来

esphome:name: httpfriendly_name: httpesp8266:board: nodemcuv2# Enable logging
logger:# Enable Home Assistant API
api:encryption:key: "hGNx5NzLL+UnGsUWxs6tvYghEZDgVfQjOcsMQaMgrg4="ota:password: "65290e2cae0c69b31b50bdb80bcd4f4c"packages:wifi: !include common/wifi.yamlhttp_request:useragent: esphome/deviceid: my_requesttimeout: 10stext_sensor:- platform: templatename: "Switch State"id: switch_state_label- platform: templatename: "id name"id: id_name_label- platform: templatename: "color mode"id: color_mode_labelinterval:- interval: 10sthen:# - http_request.post: /light/sensor_led/toggle- http_request.get: url: "/light/sensor_led"on_response:- lambda: |- ESP_LOGD("http_request", "data: %s", id(my_request).get_string());json::parse_json(id(my_request).get_string(), [](JsonObject root) {id(switch_state_label).publish_state(root["state"]);id(id_name_label).publish_state(root["id"]);id(color_mode_label).publish_state(root["color_mode"]);});

6.提取Json数据(int类型)

例如Json是下面的例子,把value的值提取出来

{"id": "number-sensor_time","value": 100,"state": "100"
}
sensor:- platform: templatename: "My Sensor Time"id: my_valueinterval:- interval: 10sthen:- http_request.get:url: "/number/sensor_time"on_response:- lambda: |-std::string json_string = id(my_request).get_string();// 打印 JSON 字符串ESP_LOGI("Rx", "%s", json_string.c_str());// 尝试解析 JSONjson::parse_json(json_string.c_str(), [](JsonObject root) {id(my_value).publish_state(root["value"]);});

注意

ESP8266 和 ESP32 是有区别的
ESP32 只能调用一次id(my_request).get_string(),第二次调用的时候就是空(NULL)的了
稍微更改一下,使用json_string 来缓存Json数据

interval:- interval: 5sthen:- http_request.get:url: "/number/sensor_time"on_response:- lambda: |-std::string json_string = id(my_request).get_string();// 打印 JSON 字符串ESP_LOGI("Rx", "%s", json_string.c_str());// 尝试解析 JSONjson::parse_json(json_string.c_str(), [](JsonObject root) {id(my_sensor_time).publish_state(root["state"].as<std::string>());});

更多推荐

ESPHome不经过HA设备1直接控制设备2

本文发布于:2024-03-05 04:24:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1711302.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不经过   控制设备   设备   ESPHome   HA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!