## Flies起源


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

![](https://img.alicdn.com/tfs/TB1pDC3k5qAXuNjy1XdXXaYcVXa-1612-896.png)

## 项目说明

- web server采用egg作为服务端，react作为view层，主要进行页面的托管
- mqtt broker 采用基于js的mosca开源实现。
- 硬件端采用ruff development board,其对硬件操作都做了基于js语言的抽象，对于开发者十分友好
- 硬件和客户端的消息均采用mqtt协议进行交互。

## 运行方法
### 安装项目依赖
  如果项目生成时未选择自动安装依赖,在项目根目录下执行
```sh
npm i
```
依赖安装中可能出现一些依赖安装不成功的情况，是因为依赖本地编译时需要的一些c/c++包找不到所致。下面以macOS为例:
1. mac上找不到pkg-config
   - 使用brew install pkg-config 因为mac上默认没有
2. 找不到libzmq
   - install zmq using brew : brew install zmq
   - export PKG_CONFIG_PATH=/usr/local/Cellar/zeromq/4.0.4/lib/pkgconfig/
   - sudo visudo and add Defaults env_keep += "PKG_CONFIG_PATH"
   - sudo npm install zmq

这样一般便能安装成功依赖  
### web server配置
```js
`config/config.default.js` 
exports.mosca={
    auth:{
      test: { 
        password: '666666', 
        subscribe: [
          'led-status',
          'led-operate',
          'get-led-status'
        ],
        publish: ['get-led-status','led-operate']
      }
    }
  }
```
  其中'test'代表可登入服务器的用户名,'password'代表登录密码，'subscribe'数组里为该用户名可订阅的topic,publish为该用户名可发布的topic。初始项目可不必更改，保持原状。

### 启动web server
于项目根目录执行命令
```
npm run dev
```
启动完成后会自动打开浏览器,页面如下所示

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

输入配置的‘username’和‘password’即可链接服务器成功。页面文件路径为app/web/page/home。
### 安装ruff sdk
  [具体安装方法参考ruff官网step 4。](https://ruff.io/docs/getting-started.html#Step_1_3A_Downloading_and_Configuring_Ruff_SDK)  
### ruff配置
  ```js
`ruff/src/config.js` 
module.exports={
    "url": "mqtt://{IP}:1883",
    "username": "test",
    "password": "666666"
}
```
   其中{IP}为你电脑连上ruff开发板时的ip。[具体连接开发板操作方法参考ruff官网step 4。](https://ruff.io/docs/getting-started.html#Step_4_3A_Connecting_a_Device)‘username’和‘password’和web server配置保持一致。
### 安装样例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界面上。

