上篇博客 https://mianao.info/2022/08/25/363507 写了我买了 SOFFON ZigBee USB Dongle Plus (93元)作为协调器,京鱼座四件套(99元)设备(非常不建议购买,就是一套垃圾,原因在此: 废物利用之京鱼座ZigBee无线开关 https://mianao.info/7f706742),还买了涂鸦的 ZigBee 零火开关单开(60元)。
安装完加载项 Zigbee2MQTT 和 Mosquitto broker 后就可以添加 ZigBee 设备了。

添加京鱼座四件套

京鱼座四件套性价比还是挺高的,闲鱼上现在 90 多一套。我开始用 ZHA 集成的时候有很多问题,换了 Zigbee2MQTT 就完美了。
本身 Zigbee2MQTT 是支持京鱼座套件的,可以在这里看到:
https://github.com/Koenkk/zigbee-herdsman-converters/blob/master/src/devices/jxuan.ts

但不知道为什么还有点问题,还好有网友做了补丁:

  1. 下载:https://share.mianao.info/Blog/jingxuan.js

    其代码如下:

    // 20240506 已更新
    const {} = require('zigbee-herdsman-converters/lib/modernExtend');
    // Add the lines below
    const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
    const tz = require('zigbee-herdsman-converters/converters/toZigbee');
    const exposes = require('zigbee-herdsman-converters/lib/exposes');
    const reporting = require('zigbee-herdsman-converters/lib/reporting');
    const ota = require('zigbee-herdsman-converters/lib/ota');
    const utils = require('zigbee-herdsman-converters/lib/utils');
    const globalStore = require('zigbee-herdsman-converters/lib/store');
    const e = exposes.presets;
    const ea = exposes.access;

    const fzLocal = {
    WSZ01_on_off_action: {
    cluster: '65029',
    type: ['attributeReport'],
    convert: (model, msg, publish, options, meta) => {
    const clickMapping = {0: 'release', 1: 'single', 2: 'double', 3: 'hold'};
    return {action: `${clickMapping[msg.data[1]]}`};
    },
    },

    };

    module.exports = [
    // 人体传感器
    // 人传配对方式:长按重置键,网关发现后,每隔一秒按一次重置键
    {
    zigbeeModel: ['wall pir'],
    model: 'PRZ01',
    vendor: 'J.XUAN',
    description: 'Human body movement sensor',
    fromZigbee: [fz.ias_occupancy_alarm_1_with_timeout, fz.battery],
    toZigbee: [],
    exposes: [e.occupancy(), e.battery_low(), e.battery()],
    },
    // 无线开关
    {
    zigbeeModel: ['JD-SWITCH\u000002'],
    model: 'WSZ01',
    vendor: 'J.XUAN',
    description: 'Wireless switch',
    supports: "action, battery, linkquality",
    fromZigbee: [fzLocal.WSZ01_on_off_action,fz.battery],
    toZigbee: [],
    exposes: [e.action(['release', 'single', 'double', 'hold']), e.battery()],
    },
    // 插座
    {
    zigbeeModel: ['00090bdc'],
    model: 'SPZ01',
    vendor: 'J.XUAN',
    description: 'plug',
    fromZigbee: [fz.on_off, fz.electrical_measurement, fz.metering],
    exposes: [e.switch(), e.power(), e.power_outage_memory().withAccess(ea.STATE_SET), e.energy()],
    toZigbee: [tz.on_off, tz.SPZ01_power_outage_memory],
    configure: async (device, coordinatorEndpoint, logger) => {
    const endpoint = device.getEndpoint(1);
    await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement']);
    },
    },
    ]
  2. 将该文件放到 Zigbee2MQTT 配置目录下 config\zigbee2mqtt

  3. 打开 Zigbee2MQTT 加载项的设置,添加 jingxuan.js

  4. 添加 ZigBee 设备。
    打开 Zigbee2MQTT,点击允许添加新设备

    按下设备重置键或配对键,等待网关 Zigbee2MQTT 自动发现;需要注意的是人体传感器,网关发现后还要每隔一秒按一下重置键,直到配对完成。

添加其他设备

打开 Zigbee2MQTT,点击允许添加新设备

涂鸦的 ZigBee 零火开关配对就很简单了,长按开关,等待网关 Zigbee2MQTT 自动发现,配对就完成了。
Zigbee2MQTT 网络图显示终端设备,路由设备,协调器的连接状态。

虽然 Zigbee2MQTT 支持的设备很多,但总有新设备开发出来,添加当前没支持的设备官网有介绍方法:
https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html#_3-adding-converter-s-for-your-device

添加天气集成

天气预报是很基本的集成,但 HomeAssistant 并没有默认内置一个,所以要自己添加。
首先就是到天气网站申请开发者账号,弄个 API。我申请的是彩云天气的,感觉相对简单一点。
https://dashboard.caiyunapp.com/
简单介绍一下彩云天气预报的安装:

  1. 进入 HACS 的集成,点击右下角 + 搜索彩云天气,安装后重启 HomeAssistant;
  2. 进入 HACS 的前端,点击右下角+搜索Colorfulclouds Weather Card,安装后重启 HomeAssistant;
  3. 点击系统配置进入设备与服务,右下角添加集成,搜索 colorfulclouds,填入前面在彩云网站申请的 key,经纬度填写自己的位置;
    可在此查询:https://jingweidu.bmcx.com
  4. 概览里面添加天气预报的卡片 。

重点:在 HACS 中安装集成,只是把文件从 GitHub 下载到了本地,要使用还是得从 HA 的配置中再次添加集成

更新

现在 HomeAssistant 更新还是比较简单的,只要你访问国外网络通畅,无论是系统还是集成,加载项等,有更新就会有提示,直接点击安装就可以了。

每个月上旬系统更新较为频繁,建议在每个月下旬至少更新一次系统。

修改 SOFFON ZigBee USB Dongle Plus 发射功率

SOFFON ZigBee USB Dongle Plus 发射功率默认是 5,我们总希望信号更好,所以要修改发射功率,其实我在上篇就有,只是没单独写。
SOFFON 官方是给了一个手册,专门写了如何修改发射功率的,但我看了觉得不方便:
方法一,下载固件,修改 znp.syscfg 发射功率值,然后再烧录到设备。给的固件是 hex,我不知道用什么软件能打开了修改,文档也没说;
方法二,通过串口指令修改,但只给了发送的 4 位值:01 21 14 功率值,有没有功能指令不知道,文档也没说;
风险有点大啊,所以我没试。

Zigbee2MQTT 官方给了修改发射功率的配置,只需要在 Zigbee2MQTT 配置选项里添加很方便:
zigbee2mqtt.io/guide/configuration/adapter-settings.html#transmitter-power

advanced:
# Optional: Transmit power setting in dBm (default: 5).
# This will set the transmit power for devices that bring an inbuilt amplifier.
# It can't go over the maximum of the respective hardware and might be limited
# by firmware (for example to migrate heat, or by using an unsupported firmware).
# For the CC2652R(B) this is 5 dBm, CC2652P/CC1352P-2 20 dBm.
transmit_power: 5