『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 16549|回复: 24

[基础教程] 自建网关接入 Sonoff_Basic_R3 Zigbee 版并实现 HA 控制

[复制链接]

8

主题

736

帖子

4570

积分

论坛元老

Rank: 8Rank: 8

积分
4570
金钱
3829
HASS币
40
QQ
发表于 2019-11-16 22:34:59 | 显示全部楼层 |阅读模式
本帖最后由 Aiden1 于 2019-11-18 00:42 编辑

没错,我是来交“作业”的首先非常感谢业界大佬@Alexie提供的Zigbee版的Sonoff_Basic_R3。目前国内还没有售卖,但是WiFi版的已经可以买到了,如果有需要的话可以先买个WiFi版的,他们的外观和zigbee版的一样,Zigbee版的话估计还要等一段时间。老样子还是先说一下体验,此次接入还是挺顺利的,正好手里有一个 CC2530 的模块我提前就把所需的协调器(网关)环境搭建好了就等开关模块到货,由于双十一大佬仓库那边耽搁了,今天才拿到货。使用起来感觉比之前的 WiFi 版要顺畅,之前 WiFi 版是放到灯里面的,外面还有一个铁盒子装起来的,信号也衰减了一大半,时不时就掉线了,这次的最主要是 zigbee 的不会受周围的干扰,因为我这边接了好多 WiFi 模块,设备一多延迟就特别大。虽然这次没有把之前的换掉,我感觉问题应该不大,我在网关上加了一根天线。首先我们来看一下外观和内部结构

                               
登录/注册后可看大图

                               
登录/注册后可看大图

                               
登录/注册后可看大图

说实话这次的做工质量比我之前的版本好了很多,外壳的材料也换成了 PC 材料,之前的貌似是 ABS 的。
听业界大佬描述无需 App 直接支持 Echo Plus / Echo show 等音箱直接接入控制(通过亚马逊 WWA 认证),支持三星 SmartThings Hub(通过三星 WWST 认证,同时海外博主实测兼容小米(Mijia)网关和欧瑞博 mini 网关接入,我没有上述的音响和网关,所以这次使用自建网关接入,最主要是接入 HA 所以就选择 zigbee2mqtt。

搭建网关环境:
所需工具和模块

                               
登录/注册后可看大图
zigbee2mqtt 运行起来之后就开始进出配对,在配对之前先修改一下树莓派上 zigbee2mqtt 的 configuration.yaml 使之允许设备加入,编辑 sudo nano /opt/zigbee2mqtt/data/configuration.yaml
homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://192.168.1.18'   //mqtt
  user: *******
  password: *******
  client_id: zigbee
  include_device_information: true


当然也可以在 HA 里面加入一个允许加入设备的开关,这样方便以后加入设备就不用每次编辑配置文件,这样配对的时候直接使用开关就好了。
input_select:
  zigbee2mqtt_log_level:
    name: Zigbee2mqtt Log Level
    options:
     - debug
     - info
     - warn
     - error
    initial: info
    icon: mdi:format-list-bulleted

# Input boolean for enabling/disabling joining
input_boolean:
  zigbee_permit_join:
    name: Allow devices to join
    initial: off
    icon: mdi:cellphone-wireless

# Timer for joining time remaining (360 sec = 6 min)
timer:
  zigbee_permit_join:
    name: Time remaining
    duration: 360

# Sensor for monitoring the bridge state
sensor:
  - platform: mqtt
    name: Zigbee2mqtt Bridge state
    state_topic: "zigbee2mqtt/bridge/state"
    icon: mdi:router-wireless

# Switch for enabling joining
switch:
  - platform: mqtt
    name: "Zigbee2mqtt Main join"
    state_topic: "zigbee2mqtt/bridge/config/permit_join"
    command_topic: "zigbee2mqtt/bridge/config/permit_join"
    payload_on: "true"
    payload_off: "false"


automation:
  - alias: Zigbee2mqtt Log Level
    initial_state: 'on'
    trigger:
      - platform: state
        entity_id: input_select.zigbee2mqtt_log_level
        to: debug
      - platform: state
        entity_id: input_select.zigbee2mqtt_log_level
        to: warn
      - platform: state
        entity_id: input_select.zigbee2mqtt_log_level
        to: error
      - platform: state
        entity_id: input_select.zigbee2mqtt_log_level
        to: info
    action:
      - service: mqtt.publish
        data:
          payload_template: '{{ states(''input_select.zigbee2mqtt_log_level'') }}'
          topic: zigbee2mqtt/bridge/config/log_level

  - id: enable_zigbee_join
    alias: Enable Zigbee joining
    hide_entity: true
    trigger:
      platform: state
      entity_id: input_boolean.zigbee_permit_join
      to: 'on'
    action:
    - service: mqtt.publish
      data:
        topic: zigbee2mqtt/bridge/config/permit_join
        payload: 'true'
    - service: timer.start
      data:
        entity_id: timer.zigbee_permit_join

  - id: disable_zigbee_join
    alias: Disable Zigbee joining
    hide_entity: true
    trigger:
    - entity_id: input_boolean.zigbee_permit_join
      platform: state
      to: 'off'
    action:
    - data:
        payload: 'false'
        topic: zigbee2mqtt/bridge/config/permit_join
      service: mqtt.publish
    - data:
        entity_id: timer.zigbee_permit_join
      service: timer.cancel

  - id: disable_zigbee_join_timer
    alias: Disable Zigbee joining by timer
    hide_entity: true
    trigger:
    - platform: event
      event_type: timer.finished
      event_data:
        entity_id: timer.zigbee_permit_join
    action:
    - service: mqtt.publish
      data:
        topic: zigbee2mqtt/bridge/config/permit_join
        payload: 'false'
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.zigbee_permit_join

homeassistant:
 customize:
  timer.zigbee_permit_join:
   friendly_name: 倒计时
  input_boolean.zigbee_permit_join:
   friendly_name: 允许设备加入
  sensor.zigbee2mqtt_bridge_state:
   friendly_name: Zigbee桥状态
group:
  zigbee:
    view: false
    control: hidden
    name: Zigbee网关
    entities:
      - input_boolean.zigbee_permit_join
      - timer.zigbee_permit_join
      - sensor.zigbee2mqtt_bridge_state
      - switch.zigbee2mqtt_main_join
      - automation.enable_zigbee_joining
      - automation.disable_zigbee_joining
      - automation.disable_zigbee_joining_by_timer
      - input_select.zigbee2mqtt_log_level
      - automation.zigbee2mqtt_log_level

sonoff 开关首次上电会自动进入配对模式,如长时间没配对成功,设备可能退出了配对模式,长按手动开关 5 秒直到信号指示灯闪烁即可,网关没问题的话就会出现如下图的配对成功日志(实时日志可运行 sudo journalctl -u zigbee2mqtt.service -f 查看)

                               
登录/注册后可看大图
同时 HA 里面也会自动出现(前提已开启 MQTT 自动发现)一个类似 switch.0x00124b001f669712_switch 和 sensor.0x00124b001f669712_linkquality 的设备 ID,使用 switch.0x00124b001f669712_switch 就可以控制了。
如果没有开启自动发现或者自动发现没有生效时也可以再 HA 里面加入
注意这里的 <FRIENDLY_NAME> 为配对时的 friendlyName,类似 0x00124b001f669712,在实时日志里可以看到。
switch:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    payload_off: "OFF"
    payload_on: "ON"
    value_template: "{{ value_json.state }}"
    command_topic: "zigbee2mqtt/<FRIENDLY_NAME>/set"

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "-"
    value_template: "{{ value_json.linkquality }}"

再附一张开关模块的 IO 口,期待各位大佬能开发出更好的固件

                               
登录/注册后可看大图
最后与我之前的模块对比一下,总体上内部结构都差不对,大小也差不多,zigbee 版的稍微大一点点,基本上普通 86 盒都能塞的下。

                               
登录/注册后可看大图

                               
登录/注册后可看大图




评分

参与人数 4金钱 +62 HASS币 +20 收起 理由
Chong83 + 2 我来瀚思就为看你!
jyz_0501 + 20 墙都不扶,就服楼主!
Roger + 20 + 20 墙都不扶,就服楼主!
+ 20 大神666!

查看全部评分

回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16412
金钱
11666
HASS币
45
发表于 2019-11-16 22:47:17 | 显示全部楼层
这份作业我打99分,多一分怕你骄傲!
回复

使用道具 举报

18

主题

704

帖子

4024

积分

元老级技术达人

积分
4024
金钱
3310
HASS币
60
发表于 2019-11-16 23:01:36 | 显示全部楼层
我的没收到
回复

使用道具 举报

17

主题

800

帖子

5738

积分

论坛元老

Rank: 8Rank: 8

积分
5738
金钱
4933
HASS币
0
发表于 2019-11-16 23:16:59 | 显示全部楼层
zigbee的不用刷固件直接用这点很省心。
回复

使用道具 举报

8

主题

736

帖子

4570

积分

论坛元老

Rank: 8Rank: 8

积分
4570
金钱
3829
HASS币
40
QQ
 楼主| 发表于 2019-11-16 23:19:40 | 显示全部楼层
sirakawa 发表于 2019-11-16 23:16
zigbee的不用刷固件直接用这点很省心。

现在zigbee2mqtt已经支持很多产品了,米家的大部分都已经支持了
回复

使用道具 举报

17

主题

800

帖子

5738

积分

论坛元老

Rank: 8Rank: 8

积分
5738
金钱
4933
HASS币
0
发表于 2019-11-16 23:23:57 | 显示全部楼层
Aiden1 发表于 2019-11-16 23:19
现在zigbee2mqtt已经支持很多产品了,米家的大部分都已经支持了

嗯,之前一直小米的网关,最近发现加新设备新加的随时掉线。。。估计到数量上限了。
头几天买了一套cc2531,等到了折腾下~
回复

使用道具 举报

8

主题

736

帖子

4570

积分

论坛元老

Rank: 8Rank: 8

积分
4570
金钱
3829
HASS币
40
QQ
 楼主| 发表于 2019-11-16 23:29:32 | 显示全部楼层
sirakawa 发表于 2019-11-16 23:23
嗯,之前一直小米的网关,最近发现加新设备新加的随时掉线。。。估计到数量上限了。
头几天买了一套cc253 ...

设备多的话拿几个cc2531当路由就好了
回复

使用道具 举报

17

主题

800

帖子

5738

积分

论坛元老

Rank: 8Rank: 8

积分
5738
金钱
4933
HASS币
0
发表于 2019-11-16 23:48:50 | 显示全部楼层
Aiden1 发表于 2019-11-16 23:29
设备多的话拿几个cc2531当路由就好了

拿cc2531中继信号还是多个2531当多个网关?
2531看起来是可以实现不少功能的样子。
回复

使用道具 举报

8

主题

736

帖子

4570

积分

论坛元老

Rank: 8Rank: 8

积分
4570
金钱
3829
HASS币
40
QQ
 楼主| 发表于 2019-11-16 23:56:09 | 显示全部楼层
sirakawa 发表于 2019-11-16 23:48
拿cc2531中继信号还是多个2531当多个网关?
2531看起来是可以实现不少功能的样子。 ...

官方回答
zigbee2mqtt.png
回复

使用道具 举报

8

主题

736

帖子

4570

积分

论坛元老

Rank: 8Rank: 8

积分
4570
金钱
3829
HASS币
40
QQ
 楼主| 发表于 2019-11-17 00:32:47 | 显示全部楼层
囧 发表于 2019-11-16 22:47
这份作业我打99分,多一分怕你骄傲!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-26 10:32 , Processed in 0.089632 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表