小米路由器插件(以下简称“插件”)是对小米路由器本身进行扩展,能够完成很多有用和有趣的功能。
当一个插件安装好之后,用户可以从手机上打开插件,看到一个展示的web页面。用户通过对web页面进行操作和管理,web处理逻辑会将信息发给路由器,路由器调用开发者的程序或者内置的API进行响应。这样实现了用户与路由器的交互,完成插件功能。
开发者只需要熟悉html,j*ascript,css 等知识,即可进行**类插件的开发。
开发者需要登录小米开发者中心(注册开发者账号,等待审核通过后,得到开发者身份。 然后在“路由器插件”模块中申请“创建路由器插件” 。 创建路由器插件成功后,会获得服务器分配的(***ID,***Key,***Secret),用来标识和验证开发者的身份。还会有插件的基本信息,这些基本信息在下文的xiaomi.project 文件里会用到。
申请路由器插件之后,在对应的插件应用页面下方有“账号接入服务” 需要启用该服务。 启用该服务的时需要填写回调地址。注意在开放接口里“访问您的小米路由器”的状态是否为“已开启”。 注意, 回调地址要填写开发者实际的前端地址,用户授权后跳转的地址要与这个地址进行验证。否则验证不通过的话会无法访问插件。验证方式是判断这个回调地址是不是授权跳转地址的前缀。 这个回调地址是可以随时更改的。
插件web**并不保存在小米的服务器上,所以开发者需要将web**(html,js,css,image 等)存放到一个外网可访问的Web服务器上。当然,开发者在开发插件的时候,只需要在本地运行一个Web服务器也是可以的。开发者可以使用 httpd,tomcat,IIS 等自己熟悉的Web服务器 。这里简单起见,以node.js为例,在linux环境下搭建一个简单的Web服务器。
接着写个简单的server.js脚本通过node执行可以作为一个简单的web服务器使用。
在浏览器里面访问 ,就会输出 Hello World。 如果出现错误,可能要检查端口是否被占用,以及使用管理员权限运行。
我们在网站(上提供了用于生成密钥,证书和插件打包等在线工具。 该工具有个局限是,全部的**文件不能超过10MB。所以如果插件很大,还是要使用下面的工具。
c.开发者将证书申请文件交给小米服务器,在路由器插件模块里面点击“申请开发者证书”按钮。然后服务器会返回一个.pem 格式的证书文件,保存该文件和 a 步骤生成的client.key文件,在 2.5 步骤里面会用到这两个文件。
方法参见2.5,生成的证书申请文件,仍需要在dev.xiaomi.com中换回开发者证书。
Windows 打包工具的使用方法: key和证书申请文件的生成脚本,运行gencsr.bat可以生成key和csr文件,key是私钥,csr文件是开发者证书申请文件,利用csr文件在 dev.xiaomi.com上换回pem文件。 打包工具,用户填入所有的信息并选择key和pem文件,就会自动生成 mpk。 工具依赖于.5安装包:打包工具截图如下:
xiaomi.project文件在小米路由器插件的配置文件,插件的基本信息都在xiaomi.project文件里记录。
生成好了mpk文件(也就是插件安装包文件),那怎么在路由器里安装呢?这里需要先将mpk文件放到手机里,然后用小米路由器手机客户端上传该mpk文件到路由器里面,具体的UI入口在2.0***“工具箱”里面,右上角有个menu,点击后会提示上传插件并安装,安装完毕后在已安装插件里面就能看到自己的插件啦。(这里需要注意上文说的control_url一定要在公网上否则手机***的webview 控件会无法访问control_url)
这里举一个插件的例子,插件的功能是下载一个url到路由器里面。开发平台是Ubuntu 64bit。 先写一个 server.js,具体内容如下:
Oauth 的说明:用户在第一次使用插件时,插件会跳转到授权页面,引导用户授权插件使用自己的设备;授权成功之后,插件拿到access token,进而调用服务器的 API 去执行一些操作,完成插件的功能。其中的具体流程有些复杂的,遵循OAuth2.0标准,详情参见的开发文档。为了简化开发,我们将上述流程简单封装成一个j*ascript 的 API。下面的开发说明就是基于这个 API 进行的。
绑定 host(方便本地调试用):还记得我们在2.2步骤里面在小米开发者中心填写的回调地址吗,***设为那么开发者需要将 127.0.0.1 绑定到 。
这里 ,我们可以在外网上访问,我们已经把它封装成一个api 。 打开 将会得到下面的页面。 (如果看不到内容,请按ctrl+F5,强制刷新,注意ctrl+F5和直接F5的区别 )
插件授权 :当用户点击“授权”的时候,如果用户未进行授权过,则跳转到授权页面。当用户同意后,自动跳转回来。 如果尚未得到用户授权,那么就请求用户授权。通routerRequest.hasAccessToken()判断插件是否已经拿到用户的授权,如果没有就使用routerRequest.authorize(directUrl, ***Id)方法,跳转到小米用户授权页面,显式的让用户授权给***Id对应插件。授权完毕之后,会自动跳转到directUrl指定的url来。 必须保证小米开发者中心“账号接入服务”中填写的回调地址是这个directUrl的前缀。
向服务器发起API请求:当用户填写好正确的路由器ID和下载的URL之后,点击”下载“的时候,我们将使用routerRequest.request方法完成这个任务。下面逐一讲解各个参数的意义。
data:是请求的参数。其中,***Id是必须要传入的,用来验证开发者的插件的身份;url表示要下载的**;deviceId表明下载到哪个路由器上,实际开发完插件后,需要去掉,因为插件运行在小米路由器客户端时,客户端会自动加上这个参数的。
success:如果请求成功,会回调success对应的函数。 注意,这里的请求成功不代表操作成功。参数data是一个json 结构,判断data.code是不是0可以知道请求的结果。
error::如果出现授权失败,网络故障等问题会回调error对应的函数。
type: 请求的方法可以是“POST”或者是“GET”, 默认是GET。下面代码中使用的是默认的。
注意:在路由***里安装了插件后可直接调用HTTP Core Api,在浏览器里调试时需在Api的参数中增加deviceId,开发者可登录查看已绑定路由的deviceId,否则调用HTTP Core Api是会提示“数据缺失”。
打包插件:打包插件的流程,先填写xiaomi.project文件,执行plugin_packager就OK啦。打包完成后就会看到 ***.mpk这个文件啦~~ 还可以在网站上填写插件信息,打包下载生成的***.mpk文件。
在路由器上本地安装插件:在手机***里面可以选择打包好的mpk然后上传安装到路由器里面。
使用插件:在浏览器里面敲选好一个设备ID,输入下载的链接,下载成功就会出现下面的情景。下载成功后通过手机***就能在路由器文件管理的下载目录里看到啦。
卸载插件:在手机1.0***里面,扩展插件里面找到自己安装的插件,右上角有个menu,点击弹出卸载选项。2.0***里的工具箱“添加与管理工具”按钮里点移除插件即可。
上传插件到插件商店:在dev.xiaomi.com里面对应的路由器插件里面就可以上传刚才打包后的***.mpk啦。
开发者可以开发带有可执行程序的插件,插件的可执行程序在路由器上运行,控制页面可以通过插件系统提供的api进行与可执行文件进行交互。开发者打包时将自己编译好的文件与start_script放在相同目录下,并将该目录传入打包工具,生成mpk包。插件安装时,会将打包目录下的所有文件释放到插件运行的根目录中。
开发者应该写一个类继承自MR***,并在代码中声明一个派生类的全局变量。这样编译出来的插件从才能正常运行,并带有与插件控制页面交互的功能。例如:
onParameterRecieved是控制页面控制插件时会被调到的处理函数。当控制页面中调用http core api 12号,控制插件api时,插件平台会将控制页面传入的信息转发到插件中。然后调用MR***类的onParameterRecieved函数。插件开发者在onParameterRecieved函数中实现对信息的处理。开发者还可以将处理完毕的信息以函数返回值的形式返回出去,控制页面就可以在12号api中得到返回值。12号api的超时时间为1秒。
onExit是插件退出是会被调到的处理函数,这个函数执行结束后程序就会退出。开发者应该在这个函数中保存相关的数据。
该类中的所有函数需要“下载”权限,插件必须在打包时声明“下载”权限才能使用这些函数。(support_download= true);
该类中的所有函数需要“***控制”权限,插件必须在打包时声明“***控制”权限才能使用这些函数。(support_***_operation= true 小米路由器mini不支持)。 1.设置一个***设备(proto目前只支持 l2tp)
该类中的所有函数需要“已连接的设备信息”权限,插件必须在打包时声明“已连接的设备信息”权限才能使用这些函数(support_connected_device_info= true)。 1.获取链接设备的信息
start_script是一个由小米路由器定义的用来控制插件行为的一些列命令的集合,开发者可以通过这些命令控制插件的开启,关闭和为安装插件做一些准备工作。提供的命令包括:MKDIR,RUN。 MKDIR命令的作用是在插件安装时创建一个目录。MKDIR后面跟的参数为创建的目录。此命令会在插件安装时运行 RUN命令的作用是运行一个文件。RUN后面跟的参数为插件启动时要执行的文件。此命令会在插件安装、打开插件、路由器启动(如果启动时插件状态是开启)时运行。
Sdk level是描述路由器rom提供的api能力的。如果插件用到了高level的api,那么该插件只能在高于此level的rom上运行。一个插件的sdk level等于该插件用到的sdk和http api中最高的sdk level。例如如果一个插件用到了level为1和2的api,那么该插件的sdk level为2。 每一个路由器rom都有对应的sdk level,rom的level必须大于等于插件的level,插件才能正常运行。
我们给开发者提供了一个高级功能,见下图。在浏览器访问miwifi.com进入路由管理页面,找到高级功能-开发者选项,输入自己的插件ID ,就可以开通ssh了,在客户端输入ssh -p 2222就可以登录到路由器里面,然后scp自己的可执行文件到路由器里,就可以在路由器里调试了,比如查看log之类,注意使用scp的时候端口号必须是2222,比如scp -P 2222 a.txt :/folder1,并且P是大写哦。。需要说明的是,出于安全考虑,我们给插件提供的权限和工具都是有限的,如果有特殊需求请发信联系我们。
插件包中必须要有start_script文件,该文件中必须有至少一个RUN命令用来启动可执行文件。start_script文件需要和可执行文件一起放到mpk包中。
开发者可以通过一些shell命令来调用路由器的功能(小米路由器mini不支持)。
Tag: 瑞银信大机 瑞银信如何