本帖最后由 wdmywm3 于 2024-9-4 16:59 编辑
【PART C】
最后,最麻烦的部分来了。 当一个开关按键,被转换为无线开关后,它尽管依旧具有on和off的开关状态,但实际上我们很多时候真正需要的,是它的单击、双击、长按等“事件”。 当然了,具体支持哪些事件,还要看厂商的设计,我这个开关转无线之后,就只支持单击事件,并没有另外两种事件,不过这里拿来作为参考足够了。 而实际上,在设备的spec信息中,这些“事件”属于一个单独的功能。 比如我的开关,它的这些事件,就单独有一个siid为6的“switch sensor”功能,在这个功能下,它的具体属性piid为2。 BaseConv("action", "sensor"), MapConv("action", mi="6.e.1.p.2", map={1: BUTTON_1_SINGLE, 2: BUTTON_2_SINGLE, 3: BUTTON_3_SINGLE, 4: BUTTON_4_SINGLE, 5: "button_5_single", 6: "button_6_single"}), 其中BaseConv("action", "sensor"),部分,和最初的开关一样,它定义了一个基础转换器,自定义名称为“action”,类型为“sensor” MapConv转换器,名称依旧是“action”,代表的是依旧给上面的转换器赋值,而不是另开一个新的转换器。 好了,最迷惑的部分来了。 相信很多人第一次看到转换器文件的时候都会疑惑—— 6.p.2好理解,6.e.1.p.2是个什么鬼??? e是哪来的?? 为什么e我写多少都不对?? 我找到的几乎所有教程,都没有提这玩意儿到底是啥,以及应该怎么判断,并且设备的spec参数列表里,也完全没有这东西! 一直到我昨晚随手点进了这里…… 这玩意儿居然是个超链接,你丫藏得够深的啊! 点进去以后乍一看眼睛都要花了,不过不要紧,勾一下左上角的【美观输出】,它就能变成可阅读的格式了 然后通过关键词,一路往下找,找到了这里 上面的红框里,就是我们6.p.2的属性 而下面的红框里,还显示了一个真正的events事件! p代表的是properties属性,e代表的是events事件。 在这里,这个事件叫做“click”,也就是单击事件,而对应的编号则是1。 (有些设备的events事件直接设置了四位数,所以才会看到e.1012之类的奇怪数字,厂商拍脑子定的,没办法) 因此6.e.1.p.2的真正含义是: siid为6,eiid为1,piid为2 翻译过来就是,当eiid=1,也即单击事件发生时,看piid=2的属性是多少,来判断究竟是哪个开关进行了单击 后面的map={1: BUTTON_1_SINGLE, 2: BUTTON_2_SINGLE, 3: BUTTON_3_SINGLE, 4: BUTTON_4_SINGLE, 5: "button_5_single", 6: "button_6_single"}部分, 就是根据6.e.1.p.2所获得的数值,来判断究竟是哪种事件 值得一提的是,gateway3自己原生支持的单击事件只有四个,因此前面的1: BUTTON_1_SINGLE不用加引号,而后面的5: "button_5_single", 6: "button_6_single"需要加引号,不然会报错(好像是这样) 到这里,保存converter,重启ha,一个显示具体事件的传感器也出现在ha里了!
|