【IoT应用创新大赛】基于LoRa的智慧办公场景方案

2020-04-21 11:12:30 浏览数 (1)

前言

随着物联网技术的发展,越来越多的应用需求被提及,整个物联网产业链的基础设施也得到快速发展。以腾讯、阿里为首的头部云计算企业,纷纷推出了物联网设备接入的基础设施(嵌入式系统 物联网管理平台),极大的方便了物联网应用场景的落地。在此借【腾讯云loT应用创新大赛】的机会,跟各位从业者一起分享下:如何站在巨人的肩膀上快速落地应用。

本次分享的场景是:智慧办公场景。实际上是传统智能家居在办公职场的延伸,由一个家庭变成了一个公司,一座办公楼,一个园区。

传统智能家居组网方案(如Wi-Fi,Zigbee,蓝牙等)的终端数量和维护复杂度,在办公环境大量设备的情况下,变得更加困难。办公场景下的“智能家居”特点是:终端数量大,数据量小、统一管理。还有一个限制就是,大部分需要后装,线路改造麻烦。LoRa 作为距离远、容量大、星形网络、无线通信,正好满足智慧办公场景的需求,这也正是本方案选择 LoRa 作为底层通信技术的原因。

本方案代码详见 Github。

视频:

演示视频

PPT:

腾讯云IoT应用创新大赛.pptx

零:必要资源

本着 可重复、可验证 的原则,本方案尽量选择腾讯云为大家准备的硬件资源。唯一额外使用的硬件资源就是树莓派,网上有多种型号可以选择,大家可以在淘宝上【树莓派】关键字,根据自己的需求购买。

0.0 硬件组成
  • 树莓派4B :用于运行HomeBridge服务、腾讯云 Iot-Explorer 通信服务。
  • iPhone(iOS 10以上版本):识别语音指令。
  • P-NUCLEO-LRWAN3 开发套件:LoRaWAN 终端执行节点、LoRaWAN 网关接入腾讯云。
0.1 语言 & 应用 & 插件
  • 语言

Python :逻辑控制模块开发,连接腾讯云Iot-Explore 与 homebridge。 C :LoRaWAN 节点功能开发。 JavaScript :腾讯云Iot-Explore 二进制数据解析。

  • 应用

homebridge: 模拟苹果 HomeKit 协议,桥接非苹果认证设备。 iOS 家庭App:关联设备,以便通过Siri语音控制。

  • 插件

homebridge-better-http-rgb :通过 http/https 控制灯。

壹:方案框架

  • 物理层次 物理层次.jpg物理层次.jpg
  • 数据链路
数据链路.jpg数据链路.jpg

贰:技术实现

第一步:安装并启动 HomeBridge 服务
  1. 启动树莓派,通过有线网络连接电脑和树莓派,配置Wi-Fi。参考树莓派装载系统并配置网络。
  2. 安装 HomeBridge。参考HomeBridge在树莓派上的安装。
  3. 安装 homebridge-better-http-rgb。参考此链接。(https://www.npmjs.com/package/homebridge-better-http-rgb),注意命令前面添加 sudo
  4. 配置(模拟)需要控制的设备。

cd ~/.homebridge vim config.json

添加下面内容

代码语言:txt复制
{
    "bridge": {
        "name": "Homebridge",
        "username": "DC:A6:32:64:5B:41",
        "port": 51826,
        "pin": "888-88-888"
    },
    "description": "Homebridge",
    "accessories": [
        {
            "accessory": "HTTP-RGB",
            "name": "灯1",
            "service": "Light",
	    "http_method": "POST",
            "switch": {
                "status": "http://localhost:8006/light/api/v1.0/d896e0004500001b/1/",
                "powerOn": "http://localhost:8006/light/api/v1.0/d896e0004500001b/1/on",
                "powerOff": "http://localhost:8006/light/api/v1.0/d896e0004500001b/1/off"
            }
        }
    ],
    "platforms": []
}
  1. 开机启动 HomeBridge。

cd /etc/systemd/system vim homebridge@pi.service

添加下面内容。

代码语言:txt复制
[Unit]
Description=Homebridge
After=network.target

[Service]
Type=simple
User=pi
ExecStart=/usr/local/bin/homebridge

[Install]
WantedBy=multi-user.target

常用命令

代码语言:txt复制
#更新系统服务设置
sudo systemctl --system daemon-reload 

#设置 HomeBridge 开机启动
sudo systemctl enable homebridge@pi.service 

#常用操作
sudo systemctl stop homebridge@pi.service
sudo systemctl status homebridge@pi.service 
journalctl -f -n 50  -u homebridge@pi.service 
第二步:构建逻辑控制 HTTP 服务
  1. 安装 Flask 。 pip3 install flask
  2. 安装 tencentcloud-sdk-python 。 pip3 install tencentcloud-sdk-python
  3. 编写逻辑控制服务。

cd ~/ mkdir tencent_iot_explorer cd tencent_iot_explorer vim app_tencent_iot_demo.py

添加下面内容。

代码语言:txt复制
import json

from flask import Flask

from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.iotexplorer.v20190423 import iotexplorer_client, models

cred = credential.Credential("你的腾讯云账号ID", "你的腾讯云账号Key")
httpProfile = HttpProfile()
httpProfile.endpoint = "iotexplorer.tencentcloudapi.com"

clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile

app = Flask(__name__)
light_state = 0


def light_state_set(dev_uuid, key_num, state):
    try:
        client = iotexplorer_client.IotexplorerClient(cred, "ap-guangzhou", clientProfile)
        req = models.ControlDeviceDataRequest()
        params = {'ProductId': '你的产品ID', 'DeviceName': dev_uuid, 'Data': "{"key1_state":1}"}

        if state == 1 and key_num == 1:
            params['Data'] = "{"led_switch":1}"

        if state == 0 and key_num == 1:
            params['Data'] = "{"led_switch":0}"

        req.from_json_string(json.dumps(params))

        resp = client.ControlDeviceData(req)
        print(resp.to_json_string())

    except TencentCloudSDKException as err:
        print(err)


@app.route('/')
def hello_world():
    return 'Hello World!'


@app.route('/light/api/v1.0/<string:dev_uuid>/<string:led_num>/', methods=['GET'])
def light_get_status(dev_uuid, led_num):
    return str(light_state)


@app.route('/light/api/v1.0/<string:dev_uuid>/<string:key_num>/<string:st>', methods=['POST'])
def light_set_status(dev_uuid, key_num, st):
    global light_state
    if st == 'on':
        light_state = 1
        light_state_set(dev_uuid, int(key_num), 1)
    elif st == 'off':
        light_state = 0
        light_state_set(dev_uuid, int(key_num), 0)

    return str(light_state)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8006)
  1. 开机启动 app_tencent_iot_demo.py。

cd /etc/systemd/system vim fmtech@pi.service

添加下面内容。

代码语言:txt复制
[Unit]
Description=fmtech-iot-demo
After=network.target

[Service]
Type=simple
User=pi
ExecStart=python3 /home/pi/tencent_iot_explorer/app_tencent_iot_demo.py

[Install]
WantedBy=multi-user.target

常用命令

代码语言:txt复制
#更新系统服务设置
sudo systemctl --system daemon-reload

#设置 fmtech 开机启动
sudo systemctl enable fmtech@pi.service

#常用操作
sudo systemctl stop fmtech@pi.service
sudo systemctl status fmtech@pi.service 
journalctl -f -n 50  -u fmtech@pi.service
第三步:IotExplore 添加产品及解析脚本
  1. 登陆腾讯云并前往物联网开发平台
  2. 创建项目。
创建项目.jpg创建项目.jpg
  1. 创建产品。
创建产品.jpg创建产品.jpg
  1. 点击创建的产品,添加产品属性。
led_switch属性.jpgled_switch属性.jpg
heartbeat_period属性.jpgheartbeat_period属性.jpg
  1. 更新设备类型为 Class C,以便设备能及时收到下行数据。
修改ClaasC.jpg修改ClaasC.jpg
  1. 确定应用层通信协议,添加数据解析脚本。
代码语言:txt复制
//上行,设备上报数据
function RawToProtocol(fPort, bytes) {
	var COMMAND_STATE_REPORT = 0x00;
    var COMMAND_CONFIG_REPORT = 0x02;

    var COMMAND_STATE_GET = 0x80;
    var COMMAND_CONFIG_GET = 0x81;

    var COMMAND_HEARTBEAT_SET = 0x82;
    var COMMAND_LED_STATE_SET = 0x84;
 

    var data = {
        "method": "report",
        "clientToken": new Date(),
        "params": {}
    };


    var cmd = bytes[0]; // command
    var porocol_ver = bytes[1]; // 协议版本

    if (cmd === COMMAND_STATE_REPORT) {
        data.params.led_switch = bytes[2] & 0x01;
        return data;
    }
    
      if (cmd === COMMAND_CONFIG_REPORT) {
        data.params.heartbeat_period = bytes[2];
        return data;
    }

    return data;
}

// 下行,服务端下发数据

function ProtocolToRaw(obj) {
    var COMMAND_STATE_REPORT = 0x00;
    var COMMAND_CONFIG_REPORT = 0x02;

    var COMMAND_STATE_GET = 0x80;
    var COMMAND_CONFIG_GET = 0x81;

    var COMMAND_HEARTBEAT_SET = 0x82;
    var COMMAND_LED_STATE_SET = 0x84;


   var payloadArray = []
  // 追加下行帧头部
    payloadArray = payloadArray.concat(0x0a); // 设备短应用程序端口
    payloadArray = payloadArray.concat(0x01); // LoRa数据包类型,1 confirm包,0 非confirm包
    var params = obj['params'];

    if (params.hasOwnProperty('heartbeat_period')) {

        var heartbeat_period = params['heartbeat_period'];
        payloadArray = payloadArray.concat(COMMAND_HEARTBEAT_SET);
        payloadArray = payloadArray.concat(0x01);
        payloadArray = payloadArray.concat(heartbeat_period);
        return payloadArray;
    }

    if (params.hasOwnProperty('led_switch')) {
        var state = params['led_switch'];
        payloadArray = payloadArray.concat(COMMAND_LED_STATE_SET);
        payloadArray = payloadArray.concat(0x01);
        payloadArray = payloadArray.concat(state);
        return payloadArray;
    }

    return payloadArray;
}
  1. 根据需要进行设备调试。
第四步:终端节点开发
  • 搭建开发环境。请参考腾讯云Iot部门给出的参考文档。
  • 根据协议编码。建议使用Tencent-TinyOS,后期更换硬件平台更方便。
第五步:集成测试
  • 硬件准备。

LoRaWAN 网关上电并连接互联网。 确认节点已经接入腾讯云IotExplorer。 确认树莓派和iPone 手机接入同一WiFi。

  • 测试体验。

叁:总结 & 拓展

方案本身无特别的自创技术,都是在站在巨人的肩膀上开始集成。本方案的技术框架,只能作为DIY使用,在真正的产品中,工程的复杂度还是偏高,需要使用类似边缘计算的方式来架构产品,形成 【端--云--边】 的产品结构,才能正真的市场化。

3.1 方案要点:
  • 充分利用 Apple 的智能家居技术能力, 通过 Siri 获取目标设备与执行动作。
  • LoRaWAN 网络服务器使用腾讯云提供的Iot Explore,利用平台能力,降低集成复杂度。
  • 使用 HomeBridge 桥接客制化设备,遇到复杂控制终端,可编写插件,自由扩展。
3.2 运用拓展:
  • 更多的控制终端,控制场景更加丰富:窗帘、空调、门禁等。
  • 更多的输入终端,场景自动化: 温湿度传感器、亮度传感器、空间占用传感器。
  • 更多的逻辑控制单元,运营自动化:设备状态实时看板、运维监控。

肆:致谢 & 广告

感谢腾讯云IoT创新大赛组委会为大家提供的开发套件及技术支持,没有最好,只有更好。

枫芒科技 是一家关注企业办公效能的创业公司,我们深信物联网技术能为企业带来经济效益,而不仅仅是噱头。欢迎有需要的老板联系我们!

0 人点赞