## Flies起源


“飞蝇”意义表轻巧、快速。Fli取自飞猪前半部分，将Fly复数化。可帮助个人开发者实现快速搭建家庭私有物联网，目标能让开发者通过框架实现前端展现变成通用范式并统一通信规范，框架包含Ruff的构建和实时通信及通信鉴权以保证IoT安全。

## 基于阿里云物连网通信
![](https://pic2.zhimg.com/v2-996dae52fa83f69b019a6b07470a75cb_r.jpg)

## 通信原理

![](https://img.alicdn.com/tfs/TB1VQhMnC_I8KJjy0FoXXaFnVXa-1604-768.png)


## 项目说明

- web server采用egg作为服务端，react作为view层，主要进行页面的托管和用户鉴权，以及消息中转
- mqtt broker 采用阿里云物联网套件
- 硬件端采用ruff development board,其对硬件操作都做了基于js语言的抽象，对于开发者十分友好
- 设备采用mqtt协议和阿里云物联网条件进行交互。阿里云套件将设备上报信息存入消息队列。服务端可以从消息队列取出消息,进行消费

## Node 服务端运行方法
### 安装项目依赖
  如果项目生成时未选择自动安装依赖,在项目根目录下执行
```sh
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm i 
```
这样安装项目所需要的依赖包。
### 阿里云IOT套件连接接参数
```js
`config/config.default.js` 
exports.aliyunIot={
    endpoint: 'https://iot.cn-shanghai.aliyuncs.com',
    apiVersion: '2018-01-20',
    region: 'cn-shanghai',
    accessKeyId: '阿里云accessKeyId',
    accessKeySecret: '阿里云accessKeySecret',
    aliyunId:'阿里云账户id',
    queueName:'开通阿里云物联网套件生成MNS消息队列',
    productKey:'阿里云物联网套件中申请的productKey',
    deviceName: "阿里云物联网套件中申请的deviceName",
  }
  
```
下面对主要阿里云iot参数获取的进行说明：
<br/>

- 1.queueName,阿里云消息队列名称 如图下面在阿里云网站获取
 ![](https://img.alicdn.com/tfs/TB1EPtKnH_I8KJjy1XaXXbsxpXa-2810-1330.png)
 
- 2.deviceName, productKey 如图下面在阿里云网站获取
 ![](https://img.alicdn.com/tfs/TB1iqyZliqAXuNjy1XdXXaYcVXa-2796-1454.png)
- 3 accessKeyId，accessKeySecret 为访问阿里云api的秘钥，如图下面在阿里云网站获取
![](https://img.alicdn.com/tfs/TB1XCoBnC_I8KJjy0FoXXaFnVXa-2786-936.png)

### 配置阿里云通信Topic
* 1.系统使用的Topic类列表为
	*  ledStatus
	*  ledOperate
	*  getLedStatus 
* 2.需要在阿里云iot 套件中新建对应的topic，建立好对应的Topic类列表如下图所示
![](https://img.alicdn.com/tfs/TB1zf0.nILJ8KJjy0FnXXcFDpXa-2812-1412.png)

* 3.在阿里云iot中建立对应的topic列表后，设备和应用可以通过阿里云iot 消息中心进行通信。
### 测试用户和密码配置

```js
`config/config.default.js` 
 
 exports.auth={
     username:'test',
     password:'666666'
  }
  
```
其中'test'代表可登入服务器的用户名,'password'代表登录密码。

### 启动web server
于项目根目录执行命令
```
npm run dev
```
启动完成后浏览器浏览器打开链接http://localhost:7001,页面如下所示

![](https://img.alicdn.com/tfs/TB1iC3WncrI8KJjy0FhXXbfnpXa-790-1440.png_320x480.jpg)

输入配置的‘username’和‘password’即可链接服务器成功。页面文件路径为app/web/page/home。

## ruff 开发板运行方法
### 安装ruff sdk
  [具体安装方法参考ruff官网step 4。](https://ruff.io/docs/getting-started.html#Step_1_3A_Downloading_and_Configuring_Ruff_SDK)  
### ruff配置配置阿里云IOT参数
  
```js
`ruff/src/config.js` 
module.exports={
    "productKey": "阿里云物联网套件中申请的productKey",
    "deviceName": "阿里云物联网套件中申请的deviceName",
    "deviceSecret": "阿里云物联网套件中申请的deviceSecret"
}
```
- 其中productKey，deviceName，deviceSecret 可以参考上面 阿里云IOT套件连接接参数 配置详解

### ruff IP 配置
* 由于系统架构需要ruff 开发版需要直接将消息推送到阿里云服务端，因此ruff 开发版需要直接连接外部wifi。
* 具体操作如下：
	* 请确保开发机已经连接到开发板提供的无线网络上。
	* 在浏览器中访问 console.ruff.io（当域名不可用时，请访问 192.168.78.1）。
	* 填写常用无线网络的 SSID 和密码并确认（注意开发板仅支持 2.4G 无线网络）。
	* 具体操作还可以参考[ruff官网添加外部wifi](https://ruff.io/zh-cn/docs/getting-started-net.html)
 
### 安装样例demo所需的按钮组件
在项目根目录执行命令封装好的命令
```sh
npm run ruff-layout-visual
```
或者进入./ruff目录执行原生命令
```sh
rap layout --visual
```
会在浏览器打开一个可视化界面，按照图示将按钮连接上ruff开发版即可。

### 部署代码到ruff开发板
在项目根目录执行命令封装好的命令
```sh
npm run ruff-deploy
```
或者进入./ruff目录执行原生命令
```sh
rap deploy -s
```
### 部署完成
   完成上述步骤，整个项目便能运行成功，此时点击web界面里的开关，ruff开发板的红色led灯会相应的点亮或熄灭。按下ruff开发板上连接的按钮，也可控制led的亮灭，并且状态会实时反映到web界面上。

