所谓开机盒子,就是可以控制电脑远程开机的一个小盒子,需要电脑支持支持以太网唤醒(Wake On Lan)。目前比较新的台式机主板和笔记本电脑一般都支持。但有的型号可能需要在BIOS里面先开启。

小盒子使用OpenWRT系统,MIPS架构。使用etherwake命令来唤醒电脑,命令格式如下:

etherwake -i eth0 00:11:22:33:44:55

需要盒子和电脑在一个局域网内。主要是思路是,使用MQTT协议连接到OneNET平台,进行远程控制。最近OneNET平台更新以后可以使用配套的和物安卓APP来控制了,免开发只需要配置APP模板,变得非常方便。

首先登陆OneNET平台,在控制台里的产品管理添加一个新产品,产品品类会影响可以使用的APP模板,这里选择排插,模板里面有开关类控件可以用于控制电脑开机。

联网方式选择以太网,WIFI方式默认需要配网,也就是设置wifi密码的过程,这里不需要。

然后在产品物模型里面配置,添加3个MAC地址,3个开关,一共可以控制3个设备。

 接着在交互配置里面配置APP模板,配置完成可以用和物APP扫码预览。

配置好的效果如图:

 

这边产品的配置就完成了。

 然后在产品的设备开发界面下载SDK放在设备上。

接着在设备管理界面创建一个设备。在详情的设备信息里面记录下生成的设备id和设备密钥以及刚刚创建的产品名称。

 

 接着进行SDK开发,SDK解压之后修改代码。

修改examples/things_model/main.c文件,在里面填写设备id和设备密钥以及产品名称。并添加开机自动上报MAC:

    /** 设备登录*/
    ret = tm_login(TM_PRODUCT_ID, TM_DEVICE_NAME, TM_ACCESS_KEY, TM_EXPIRE_TIME, 3000);
    CHECK_EXPR_GOTO(ERR_OK != ret, _END, "ThingModel login failed!");
    logi("ThingModel login ok");

    tm_prop_mac1_notify(NULL,NULL,0,200);
    tm_prop_mac2_notify(NULL,NULL,0,200);
    tm_prop_mac3_notify(NULL,NULL,0,200);
    while (1) {
        if (0 != (ret = tm_step(200))) {
            logi("ThingModel tm_step failed,ret is %d",ret);
            break;
        }
        time_delay_ms(50);
    }

 然后修改examples/things_model/tm_user.c文件,在里面添加读写MAC地址及响应平台命令调用etherwake的一些代码,如:

int save_mac() {
    FILE* fp=fopen(CONFIG_FILE,"w");
    if(fp) {
        fprintf(fp,"%s\r\n%s\r\n%s\r\n",mac[0],mac[1],mac[2]);
        fclose(fp);
    }
    return 1;
}

int execute_wake(int n) {
    check_init();
    char cmd[64]={0};
    sprintf(cmd,"etherwake -i %s %s",ETH_INTERFACE,mac[n-1]);
    system(cmd);
    return 0;
}

 编译完成之后,运行产生的程序,然后在设备调试界面扫码添加盒子。

 

就可以在和物APP上使用了。MAC地址会保存在盒子的配置文件里,并与平台自动同步。APP上每拨动一次唤醒设备开关,盒子就会发送一次唤醒命令。运行效果如下:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐