Home assistant入门小计(二)

MQTT协议

mqtt协议是物联网常用的一个协议,具体的可以查查资料,简单说下我的理解。
他是基于TCP协议的,有一个服务器和若干个客户端,服务器叫broker。
客户端第一步要连接服务器,需要指定用户名或者key。连接后设备就在线了可以双向通信。具体的通信是可以往一个指定的topic发送一段内容,比如json或者普通文本。也可以订阅一个topic,这样其他设备往这个topic发送数据的时候就会收到相应的内容。

安装MQTT broker

我装的EMQX,主要是他会有一个webUI,配置起来比较方便。而且是国内的所以汉化的也好点。。。

在配置》》加载项》》加载项商店 找到EMQX安装就行。


装好后启动然后打开侧边栏的选项就能在侧边栏看到了


点进去默认用户名和密码是admin和public

然后要在客户端认证里面创建用户以便HA和传感器连接。

MQTT集成

在设备与服务》》添加集成 里面添加mqtt集成


因为emqx安装在本机,所以设置里面ip地址填127.0.0.1就行


configuration.yaml

为了编辑文件,可以先装一个file editor,或者一个vs code的插件


然后找到Homeassistant/下面的configuration.yaml

这里我主要参考的两个文章https://www.home-assistant.io/integrations/binary_sensor.mqtt/
https://blog.csdn.net/qq_31400983/article/details/128967768。后面这个是当HA里面的内容发生变化时推送给EMQX,前面这个是传感器发生变化时同步给HA。

HA接收传感器消息

在configuration.yaml里面输入下面的内容

# Example configuration.yaml entry
mqtt:
  - binary_sensor:
      name: "Window Contact Sensor"
      state_topic: "home-assistant/window/contact"
      payload_on: "ON"
      availability:
        - topic: "home-assistant/window/availability"
          payload_available: "online"
          payload_not_available: "offline"
      qos: 0
      device_class: opening
      value_template: "{{ value_json.state }}"

重启HA后会在面板看到这个东西


然后在emqx看到HA已经订阅了这几个topic

在MQTTX里面可以控制设备上线、状态开关



HA推送信息给MQTT

在configuration.yaml里面添加下面内容后重启HA

# add light
mqtt:
  light:
    # Device name
    - name: "Bookcase_Light"
    # State topic
      state_topic: "LED_Switch"
    # Command topic
      command_topic: "LED_Switch"
    # Command type
      payload_on: "1"
      payload_off: "0"
    # unique_ID
      unique_id: "LED1"
    # optimistic set
      optimistic: false

看到界面显示



EMQX显示



在MQTTX里面订阅LED_Switch这个topic,在界面切换状态时MQTTX就能收到相关的推送了

mqtt light的其他可以配置的内容

可以通过配置,让light变成rgb或者亮度可调的灯,并且每一个都有state传入和command下发两个topic

# Example configuration.yaml entry
mqtt:
  - light:
      name: "Office Light RGB"
      state_topic: "office/rgb1/light/status"
      command_topic: "office/rgb1/light/switch"
      brightness_state_topic: "office/rgb1/brightness/status"
      brightness_command_topic: "office/rgb1/brightness/set"
      rgb_state_topic: "office/rgb1/rgb/status"
      rgb_command_topic: "office/rgb1/rgb/set"
      state_value_template: "{{ value_json.state }}"
      brightness_value_template: "{{ value_json.brightness }}"
      rgb_value_template: "{{ value_json.rgb | join(',') }}"
      qos: 0
      payload_on: "ON"
      payload_off: "OFF"
      optimistic: false

注意,类似下面这种写法已经不被支持

light:
  - platform: mqtt
    name: "Office light"
    state_topic: "status"
    command_topic: "switch"
    brightness_state_topic: 'brightness'
    brightness_command_topic: 'brightness/set'
    qos: 0
    payload_on: "ON"
    payload_off: "OFF"
    optimistic: false
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容