本帖最后由 mobster 于 2018-8-22 17:00 编辑
新人处女贴(此处需要有掌声),依然是前人种树后人乘凉的一贯风格
前人种树
一号树:使用小米魔方控制灯泡亮度
二号树:抛砖引玉:aqara小米开关、魔方等按键动作不够用?我帮你
后人乘凉
经验分享
- 通过文档查询,得知魔方支持的动作有翻转90(
flip90 ), 翻转180(flip180 ), 移动(move ), 轻敲两次(tap_twice ), 摇一摇(shake_air ),甩动(swing ), 静止一段时间后被触动?(alert ), 自由落体(free_fall ), 旋转(rotate )。
- 其中个人实际体验中发现比较容易操作出来的:翻转90(flip90),移动(move), 轻敲两次(tap_twice), 摇一摇(shake_air),旋转(rotate)
- 极容易误触导致动作出发的:移动(move), 旋转(rotate)
- 操作比较难的:翻转180(flip180)
- 一次都没成功过的:甩动(swing), 静止一段时间后被触动?(alert), 自由落体(free_fall)
- 这里面提到的误触是一个比较难处理的情况,比如在旋转时同时触发了移动+误触两个动作,比如旋转时中间有轻微停顿导致出发了两次或更多次的旋转事件
实战效果
- 设备:
小米智能风扇(349的新款,model: zhimi.fan.sa1)
小爱同学(负责TTS)
小米魔方(控制器)
- 魔方摇一摇
shake_air ,实现控制多设备切换(利用input_select)
- 魔方敲两下
tap_twice ,实现魔方控制功能开启(利用input_boolean控制是否开启魔方控制,防止误触误操作)
- 魔方敲两下开启控制功能后,1分钟内有效(利用timer控制1分钟的效期,主要还是用来防止魔方控制功能开启后的误触误操作)
- 魔方旋转
rotate ,实现数值调节(增加或减少),主要用来控制如灯泡亮度、风扇风量、电视音量等等(魔方和其他普通开关的最大区别就是这个了),这里的教程是用来控制风扇风量。使用前提:魔方控制功能为开启状态(否则误操作后TTS乱播报很难受)
- 魔方其他操作,和普通按钮点击差不多,这里不再多述
- 我这里补充了一个魔方移动
move 时,读取当前设备的一些状态信息(通过TTS),使用前提:魔方控制功能为开启状态(否则误操作后TTS乱播报很难受)
代码分享
部分代码解读
- 在魔方操作的事件中,我并没有用click_type直接写触发动作名称(move、rotate之类),而是用的both,再下面再补充condition,用attributes["last_action"]来实现动作的捕获。基于两个原因:
- 之前不知道为何用click_type直接写动作名称时,一直不触发trigger事件。
- 用attributes["last_action"]取值好像可以屏蔽掉部分误操作(误识别)导致的多个动作捕获的情况,而直接识别最后一次更准确的动作(只能避免一点点,不能完全避免)
- 魔方旋转后触发action时,增加延迟1秒再操控风扇并tts语音(且语音用input_text去捕获最后一次的内容),主要是用来避免旋转的操作不连续可能导致操作准度出现问题,这样会导致语音播报连续播出多次而前面的声音又被打断的情况(无法完全避免,但是可以减少出现这种情况)
- 魔方旋转action处理时,增加了对角度的判断,要求角度至少大于5度(正负都可以),这个是为了防止魔方在识别旋转时如果因为操作不流畅(手抖)的情况下别识别成了多次旋转,屏蔽对角度小于5度的数据(依然属于尽量避免操作识别问题导致TTS播报混乱)
|