miot

    1.1.18 • Public • Published

    miot · Downloads Version License

    miot 命名 来自于 MQTT IOT,它是一个基于 MQTT 协议的物联网平台框架。请注意,它和小米公司没任何关系。通过它,你可以快速地搭建属于你自己的物联网平台。通过下图,你可以大概地了解该平台的结构。

    此平台分为四层,其主要名称和功能如下:

    • 视图层 : 该层给用户提供操作界面
    • 外网网关 : 外网网关连接内网网关并为用户层提供服务
    • 内网网关 : 内网网关连接配件且与外网网关直接通信
    • 配件层 : 配件通过内网网关组织起来,对外提供操作接口以及数据服务

    此外,为了便于后面的叙述,下面对涉及平台相关的一些名词做出解释:

    • 视图 : 视图层的组成单元,WEB 应用,通过 MQTT 协议与外网网关相连
    • 配件 : 配件层的组成单元,终端应用,通过 MQTT 协议与内网网关相连
    • 中间件 : 与视图及配件相匹配,含两个文件,一个为视图提供服务,另一个为配件提供服务
    • 应用 : 由视图,中间件以及配件按 1:1:1 组成,其中任何一部分都是可选的

    外网网关

    如果你已经安装了 npm 客户端,可以通过 npm 安装服务程序 miot:

    $ npm install miot

    此服务程序即外网网关,同时它内置了视图服务以及中间件服务,下面给出的是项目的基本结构:

    miot/
    ├── miot.js            // 主文件
    ├── config.json        // 配置文件
    ├── middle/            // 中间件目录
    └── static/
        ├── views/         // 视图层目录
        └── index.html     // 视图层入口
    

    这里仅对配置文件做些说明,对于其它内容,你只需要稍微了解就可以,当后面各章节会有详细的说明。

    {
        "proxy": {
            "http": {"port": 8080, "static": "dir/static"}
            //"https": { "port": 443, bundle: true, "static": "dir/static" }, 
            //"secure": { "keyPath": "dir/secure/tls-key.pem", "certPath": "dir/secure/tls-cert.pem" } },
        },
        "mosca": {
            "port": 1883
            //"secure": { "port": 8443, "keyPath": "dir/secure/tls-key.pem",  "certPath": "dir/secure/tls-cert.pem" }
        },
        "logger": {
            "lever": "info",
            "appender" "default"
        }
    }

    上面配置中,proxy 是提供给视图连接的配置,你可以根据需要来决定是否提供 https 服务。mosca 是提供给内网网关连接的配置,你可以根据需要来决定是否启用 lts 安全连接。logger 是日志打印配置。

    视图层与中间件

    在上节给出的项目的基本结构中,视图层位于 /miot/static/views 目录中。其中,index.html 是主文件,旗下目录 views 存放了相关的视图目录。

    在视图层主文件 index.html 的开头是外网网关的 MQTT 服务器的地址配置,你可以按需修改该内容:

    <meta name="mqtt-server" content="ws://localhost:8080">

    上面 content 中的 8080 即来自上节中配置文件的 port 值。当一切配置就绪后,即可使用如下命令启动项目:

    $ node miot.js

    项目启动后,用浏览器访问 index.html,使用初始用户名 admin 和密码 123456 即可登录后台进行配置管理。

    与视图类似,中间件也依附于外网网关,位于 /miot/middles/ 目录中,中间件由外网网关动态按需实例化。

    内网网关

    首先,安装内网网关服务程序 miot-local:

    $ npm install miot-local

    此服务程序包含了内网网关的相关文件,下面仅列出最要紧的两个文件:

    miot-local/
    ├── miot-local.js            // 主文件
    └── config.json              // 配置文件
    

    相对于于外网网关,内网网关较为简单,在此着重对配置文件做些说明:

    {
        "proxy": {
            "port": 1883,                       // 若开启 tls,则使用 8443 端口
            "host": "localhost",
            "clientId": "be1aa660-2b48-11ec-a191-4dbcbb23f97f", // 连接到外网网关的客户端标识符
            "protocol": "mqtt",                 // 若开启 tls,则使用 mqtts
            //"rejectUnauthorized": true,       // 开启授权
            //"ca": "dir/secure/tls-cert.pem"   // 自签名证书
        },
        "mosca": {
            "port": 1883,
            //"secure": { "port": 8443, "keyPath": "dir/secure/tls-key.pem",  "certPath": "dir/secure/tls-cert.pem" }
        },
        "parts": [
            { "id": "d9ae5656-9e5e-4991-b4e4-343897a11f28", "path": "/system" },
            { "id": "35e64bc0-1268-477a-9327-94e880e67866", "path": "/player" }
        ]
    }

    上面配置中,proxy 是连接到外网网关的配置,你可以根据需要来决定是否使用 lts 连接。mosca 是提供给内网配件连接的配置,你可以根据需要来决定是否开启 lts 安全连接。

    另外,上述 parts 项是连接到内网网关的配件列表,parts 中的 path 参数用于唯一地命名配件,其描述方式类似于操作系统的文件定位。

    当一切配置就绪后,即可使用如下命令启动网关服务:

    $ node miot-local.js

    配件层

    任何支持 MQTT 客户端的软硬件平台都可以非常方便地建立配件以接入内网网关。下面仅以 Node.js 环境示例。首先安装 miot-part 模块。

    $ npm install miot-part

    下面一个是配件的示例,由此示例可知,配件想要连接到内网网关,提供的参数与上节中连接到外网网关的 proxy 配置类似。

    let xmlplus = require("miot-part");     // 模块引入
    let config = {
        "port": 1883,                       // 若开启 tls,则使用 8443 端口
        "host": "localhost",
        "partId": "d9ae5656-9e5e-4991-b4e4-343897a11f28", // 连接到外网网关的客户端标识符
        "protocol": "mqtt",                 // 若开启 tls,则使用 mqtts
        //"rejectUnauthorized": true,       // 开启授权
        //"ca": "dir/secure/tls-cert.pem"   // 自签名证书
    };
    
    xmlplus("part-demo", (xp, $_) => {
    $_().imports({
        Index: {
            cfg: { index: config },
            xml: "<i:Client id='index' xmlns:i='//miot-part'/>",
            fun: function (sys, items, opts) {
                this.watch("/hi/alice", (e, body)=> {
                    this.trigger("to-users", "/hi/bob");
                });
            }
        }
    });
    }).startup("//part-demo/Index");

    与中间件不同,配件是一个独立的终端应用程序,它通过 MQTT 协议与内网网关相联系。

    Keywords

    Install

    npm i miot

    DownloadsWeekly Downloads

    79

    Version

    1.1.18

    License

    MIT

    Unpacked Size

    3.32 MB

    Total Files

    128

    Last publish

    Collaborators

    • qudou