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

 找回密码
 立即注册
查看: 322|回复: 3

[基础教程] 用 Converters 给 Gateway3集成自定义设备

[复制链接]

2

主题

7

帖子

110

积分

注册会员

Rank: 2

积分
110
金钱
103
HASS币
0
发表于 2024-10-29 18:22:26 | 显示全部楼层 |阅读模式
本帖最后由 Bobby_Leung 于 2024-10-29 18:34 编辑

最近买了个新米家mesh开关,接入到ha以后发现没有任何开关实体,所以就上网找方法来尝试自定义Gateway3集成的实体,最终找到作者提供了Converters这种方法
友情提示:一定要确保Gateway3集成是最新的或者是4.0.3版本以后的,否则你会发现时间将是如何被浪费的

准备
  • 确保Home Assistant已经正确安装,并且Xiaomi Gateway3集成已经更新到最新版本
  • 在Home Assistant中,与Configuration.yaml文件同级文件夹里创建文件xiaomi_gateway3.py。

                                   
    登录/注册后可看大图

image.png
查找设备的pdid
  • 未被Gateway3集成识别的设备pdid可以直接在Gateway3集成里面看到
    图中的14737就是

    image (1).png

                                   
    登录/注册后可看大图
  • 如果Gateway3集成里面看不到pdid,可以miot-spec.com里搜索设备名字,然后点击使用说明,新打开的网址中就会包含pdid

                                   
    登录/注册后可看大图

    image (2).png

    https://home.mi.com/views/introduction.html?region=cn&pdid=1367&model=zhimi.humidifier.va1
    # pdid

    • 如果不知道设备名称,可以先用Xiaomi Miot Auto集成添加设备,然后在设备页面点击访问,后续步骤同第二点。
      image (3).png


编写Converters代码
打开xiaomi_gateway3.py文件,这部份可以参考官方文档作者的代码结构来编写,也可以按照下面的模板编写。
这里以我新买的giot.switch.v83ksm开关为例子,基本可以覆盖大部分的设备
from custom_components.xiaomi_gateway3.core.devices import *
# from custom_components.xiaomi_gateway3.core.converters.devices import * 这行是旧版本代码,不要使用

DEVICES = [{
#   pdid    <厂商名称>     <设备名称>                         <设备识别符>
    20448: ["GranwinIoT", "Mesh Smart Triple Wall Switch", "giot.switch.v83ksm"],
    "spec": [
        # 开关设置
        # 开关用BaseConv定义
        #       实体名称  实体类型   设备信号(详情见下)
        BaseConv("左键", "switch", mi="2.p.1"),
        BaseConv("中键", "switch", mi="3.p.1"),
        BaseConv("右键", "switch", mi="4.p.1"),
        
        # 开关模式设置
        # 模式默认是数字,需要匹配转换成文本显示,用MapConV定义
        MapConv("左键开关模式", "select", mi="2.p.2", map={
            0: "普通开关", 
            1: "无线开关", 
            2: "快速断通", 
            3: "点动开关", 
            4: "普通+无线"
        }),
        MapConv("中键开关模式", "select", mi="3.p.2", map={
            0: "普通开关", 
            1: "无线开关", 
            2: "快速断通", 
            3: "点动开关", 
            4: "普通+无线"
        }),
        MapConv("右键开关模式", "select", mi="4.p.2", map={
            0: "普通开关", 
            1: "无线开关", 
            2: "快速断通", 
            3: "点动开关", 
            4: "普通+无线"
        }),
        
        # 灯光设置
        MapConv("普通开关模式灯光", "select", mi="16.p.1", map={
            0: "跟随", 
            1: "相反", 
            2: "常灭", 
            3: "常亮"
        }),
        MapConv("非普通开关模式灯光", "select", mi="16.p.2", map={
            0: "跟随", 
            1: "相反", 
            2: "常灭", 
            3: "常亮"
        }),
        BaseConv("背光开关", "switch", mi="22.p.1"),
        
        # 无线信号设置
        # 单键的无线开关如下设置
        # BaseConv("action", "sensor"), # 必须要先定义这行,ha里才会出现Action实体来显示信号
        # ConstConv("action", mi="12.e.1", value=BUTTON_SINGLE),
        # ConstConv("action", mi="12.e.2", value=BUTTON_DOUBLE),
        # ConstConv("action", mi="12.e.3", value=BUTTON_HOLD),
        # 多键的无线开关如下设置
        # BaseConv和ConstConv定义的名称需要对上;value值不可以随意更改,意思分别代表:单击、双击、长按
        BaseConv("Left Botton Action", "sensor"), # 每个键单独设置一个sensor
        ConstConv("Left Botton Action", mi="12.e.1", value=BUTTON_SINGLE),
        ConstConv("Left Botton Action", mi="12.e.2", value=BUTTON_DOUBLE),
        ConstConv("Left Botton Action", mi="12.e.3", value=BUTTON_HOLD),
        BaseConv("Middle Botton Action", "sensor"), # 每个键单独设置一个sensor
        ConstConv("Middle Botton Action", mi="13.e.1", value=BUTTON_SINGLE),
        ConstConv("Middle Botton Action", mi="13.e.2", value=BUTTON_DOUBLE),
        ConstConv("Middle Botton Action", mi="13.e.3", value=BUTTON_HOLD),
        BaseConv("Right Botton Action", "sensor"), # 每个键单独设置一个sensor
        ConstConv("Right Botton Action", mi="14.e.1", value=BUTTON_SINGLE),
        ConstConv("Right Botton Action", mi="14.e.2", value=BUTTON_DOUBLE),
        ConstConv("Right Botton Action", mi="14.e.3", value=BUTTON_HOLD),
    ],
}]+ DEVICES
最后贴上我自己的教程链接(Hassbian的排版也太复古了)
https://www.wolai.com/bobbyleung/7JGLK23aETXXWLqpPHbDCh






回复

使用道具 举报

0

主题

135

帖子

1139

积分

金牌会员

Rank: 6Rank: 6

积分
1139
金钱
1004
HASS币
0
发表于 2024-10-29 19:19:16 | 显示全部楼层
很详细,感谢
回复

使用道具 举报

0

主题

215

帖子

2549

积分

金牌会员

Rank: 6Rank: 6

积分
2549
金钱
2334
HASS币
0
发表于 2024-10-29 21:09:46 | 显示全部楼层
感谢分享,赞一个先
回复

使用道具 举报

8

主题

139

帖子

1042

积分

论坛技术达人

积分
1042
金钱
898
HASS币
40
发表于 2024-10-30 00:15:19 | 显示全部楼层
教程建议用md来写
非常好用
论坛置顶有
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-21 20:21 , Processed in 1.768898 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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