小米智能家居之使用JS API 开发控制Yeelight智能灯

作者: 转移到知乎熊的一些事 | 来源:发表于2020-01-30 19:23 被阅读0次

    我家里的小米智能电器有米家、yeelight、aqara等品牌,米家有小米电视、米家空调等,yeelight有各个房间的吸顶灯,aqara有智能开关。由于米家开发者文档显示目前当前仅面向企业开放,暂未面向个人开发者开放。而aqara智能开关可玩性一般(文档可访问这里),而yeelight智能灯可以调节灯光开关、光暗、与传感器联动,可玩性更高,于是我就把魔爪伸向了yeelight智能灯了。

    先来看一下效果:视频地址

    ​由于百度谷歌都没有JS实现相关的教程,于是我只能从头开始摸索了。yeelight的开发文档比较简陋,而且是全英文的,社区更是提问题的多,解答问题的少,真是不太友好。

    晦涩难懂的开发文档

    对可行性存在怀疑的我决定先​尝试运行一下网站提供的mac版demo代码,看看是不是能跑通的。为此我还安装了xcode。结果直接运行会报如下错误:
    error: No account for team "S4JD8QVPVY". Add a new account in the Accounts ...
    解决办法是,这儿需要换上自己的开发者账号所在的team。

    换上自己的开发者账号所在的team
    运行成功后发现找不到灯设备,fine,那我暂时也没办法了。

    本着快速实现的想法,我逆转了一下思路,到github上看看有没有相关的轮子。筛选一下语言、高赞、文档详细的项目后,最后选择了几个项目尝试跑一下,但都没有找到灯设备。百思不得其解地吃了一个下午茶,以及抢了一轮小米有品的口罩结果被耍猴之后,不得不感叹整个下午都被小米耍了。

    此刻作为一个逆转裁判粉丝,我也逆转一下思路,既然这么多demo都找不到设备,但他们既然存在,存在就是合理,那是不是其实demo是能跑通的,只是我缺了哪些步骤呢?把yeelight的论坛以及官网翻了个片后,我注意到官网的“局域网控制”入口,那是否我要给这些灯打开局域网控制才能够被发现呢?于是我被逼按照提示下载了他们的app来打开控制。再运行一遍mac版的demo,果然找到灯泡设备了!github上的项目也能顺利运行了。

    允许局域网控制灯 找到设备了

    没想到要运行成功一个demo,还需要经历探索、推理、逆转思路的过程,yeelight灯的开发入门真是趣味满满!建议官方出一个文档,让人按着步骤去做吧。这方面aqara的文档就做得好多了。

    对比试用几个github库后,我最终选择了jamesblanksby的库来开发,虽然现在已经不再维护了。

    实现如下:

    先安装库:
    npm i --save node-yeelight

    再编写代码:

    var Yeelight = require('node-yeelight');
    var y = new Yeelight;
    
    y.on('ready', function() {
        console.log('ready');
        y.discover();
    });
    
    y.on('deviceadded', function(device) {
        console.log('device added');
        y.connect(device);
    });
    
    var deviceList = [];
    y.on('deviceconnected', function(device) {
        console.log('device connected');
        deviceList.push(device);
        var state = true;
        setTimeout(function(){
            setInterval(function() {
    
                // 设置灯泡开关及过度时间
                // y.setPower(device, state, 2500);
        
                state = state ? false : true;
                
                // 设置灯泡亮度
                y.setBrightness(
                    device, // device object
                    state?100:1, // brightness percentage (1-100)
                    800 // transition speed in ms
                );
            }, 1000);
        },(deviceList.length-1)*1000);
        
    });
    
    y.listen();
    
    

    以上代码实现的是两个灯轮流变光变暗,即开始的视频效果。

    接着我搭配可编程的门窗传感器,总算实现了门开灯开的效果了。这个下午也没白呆了。可惜的是这个是局域网控制,就是要时刻开着服务器来控制,有点不太方便了,如果能提供云控制的办法就好了。

    至此总算把功能实现了。在遇到新的技术难题时,我们要尝试从多个角度去分析应对,一条路走不通就换个思路走,在解决的过程中逐渐理解问题所在。另外还要懂得用轮子,弯路会少走很多,效率也会提高很多。

    相关文章

      网友评论

        本文标题:小米智能家居之使用JS API 开发控制Yeelight智能灯

        本文链接:https://www.haomeiwen.com/subject/yacbthtx.html