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

 找回密码
 立即注册
查看: 114011|回复: 241

[新奇玩法] 小米魔方的功能挖掘,包括多设备切换,魔方控制激活等

  [复制链接]

8

主题

97

帖子

847

积分

论坛技术达人

积分
847
金钱
745
HASS币
30
发表于 2018-8-22 13:10:56 | 显示全部楼层 |阅读模式
本帖最后由 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"]来实现动作的捕获。基于两个原因:
    1. 之前不知道为何用click_type直接写动作名称时,一直不触发trigger事件。
    2. 用attributes["last_action"]取值好像可以屏蔽掉部分误操作(误识别)导致的多个动作捕获的情况,而直接识别最后一次更准确的动作(只能避免一点点,不能完全避免)
  • 魔方旋转后触发action时,增加延迟1秒再操控风扇并tts语音(且语音用input_text去捕获最后一次的内容),主要是用来避免旋转的操作不连续可能导致操作准度出现问题,这样会导致语音播报连续播出多次而前面的声音又被打断的情况(无法完全避免,但是可以减少出现这种情况)
  • 魔方旋转action处理时,增加了对角度的判断,要求角度至少大于5度(正负都可以),这个是为了防止魔方在识别旋转时如果因为操作不流畅(手抖)的情况下别识别成了多次旋转,屏蔽对角度小于5度的数据(依然属于尽量避免操作识别问题导致TTS播报混乱)
















评分

参与人数 5金钱 +60 收起 理由
neoyang + 5
leonxis + 5 谢谢分享!
lidicn + 20 我来瀚思就为看你!
windgo + 10 膜拜大神!
+ 20 很好很强大

查看全部评分

回复

使用道具 举报

123

主题

4664

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16448
金钱
11699
HASS币
45
发表于 2018-8-22 13:21:14 | 显示全部楼层
恭喜楼主破chu
回复

使用道具 举报

19

主题

341

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
金钱
792
HASS币
0
发表于 2018-8-22 14:02:59 | 显示全部楼层
初次初次初次
回复

使用道具 举报

6

主题

262

帖子

3644

积分

论坛元老

Rank: 8Rank: 8

积分
3644
金钱
3382
HASS币
0
发表于 2018-8-22 14:03:38 | 显示全部楼层
学习学习,谢谢分享
回复

使用道具 举报

19

主题

341

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
金钱
792
HASS币
0
发表于 2018-8-22 14:09:36 | 显示全部楼层
楼主如果改成小米净化器得怎么弄啊??
回复

使用道具 举报

7

主题

109

帖子

1786

积分

金牌会员

Rank: 6Rank: 6

积分
1786
金钱
1677
HASS币
0
发表于 2018-8-22 14:10:57 | 显示全部楼层
感谢楼主的钻研精神
回复

使用道具 举报

8

主题

97

帖子

847

积分

论坛技术达人

积分
847
金钱
745
HASS币
30
 楼主| 发表于 2018-8-22 14:16:57 | 显示全部楼层
yjb89 发表于 2018-8-22 14:09
楼主如果改成小米净化器得怎么弄啊??

净化器手动控制的话,和风扇一样的,区别不大,只是中间的属性值判断条件没那么多,去掉那些状态判断就行。

另外净化器更实用的触发条件应该是空气质量检测吧,手动控制净化器的风量好像不是那么必要?
回复

使用道具 举报

19

主题

341

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
金钱
792
HASS币
0
发表于 2018-8-22 14:21:48 | 显示全部楼层
mobster 发表于 2018-8-22 14:16
净化器手动控制的话,和风扇一样的,区别不大,只是中间的属性值判断条件没那么多,去掉那些状态判断就行 ...

谢谢啦。谢谢哥
回复

使用道具 举报

1

主题

13

帖子

69

积分

论坛分享达人

积分
69
金钱
56
HASS币
0
发表于 2018-8-22 14:30:53 | 显示全部楼层
前来学习。
回复

使用道具 举报

5

主题

295

帖子

2062

积分

金牌会员

Rank: 6Rank: 6

积分
2062
金钱
1766
HASS币
0
发表于 2018-8-22 14:31:36 | 显示全部楼层
学习学习
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-25 02:39 , Processed in 0.065316 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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