前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【IoT应用创新大赛】基于LoRa的智慧办公场景方案

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

原创
作者头像
古月瘦水
修改2020-04-21 11:12:30
1.6K0
修改2020-04-21 11:12:30
举报
文章被收录于专栏:腾讯云IoT腾讯云IoT

前言

随着物联网技术的发展,越来越多的应用需求被提及,整个物联网产业链的基础设施也得到快速发展。以腾讯、阿里为首的头部云计算企业,纷纷推出了物联网设备接入的基础设施(嵌入式系统 + 物联网管理平台),极大的方便了物联网应用场景的落地。在此借【腾讯云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属性.jpg
led_switch属性.jpg
heartbeat_period属性.jpg
heartbeat_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创新大赛组委会为大家提供的开发套件及技术支持,没有最好,只有更好。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 零:必要资源
    • 0.0 硬件组成
      • 0.1 语言 & 应用 & 插件
      • 壹:方案框架
      • 贰:技术实现
        • 第一步:安装并启动 HomeBridge 服务
          • 第二步:构建逻辑控制 HTTP 服务
            • 第三步:IotExplore 添加产品及解析脚本
              • 第四步:终端节点开发
                • 第五步:集成测试
                • 叁:总结 & 拓展
                  • 3.1 方案要点:
                    • 3.2 运用拓展:
                    • 肆:致谢 & 广告
                    相关产品与服务
                    物联网
                    腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                    http://www.vxiaotou.com