IOTOS物联中台CoAP驱动开发实例

登录平台:IOTOS®爱投斯物联中台

账号:iotos_test    密码:iotos123

代码地址:IOTOSDK-Python: IOTOS Python版本SDK,自带原生接口和采集引擎 (gitee.com)

  • 前言

        Coap(Constrained Application Protocol)是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,运行TCP和HTTP是不可以接受的。

对于那些微型设备而言接入互联网非常困难。在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的。但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求。为了让小设备可以接入互联网,CoAP协议被设计出来。 CoAP是一种应用层协议,它运行于 UDP协议之上而不是像HTTP那样运行于TCP之上。CoAP协议非常小巧,最小的数据包仅为4字节。

  • 驱动目的

        将以CoAP通讯方式的设备数据上云


  • 适用范围

        CoAP通讯协议、可以自行设置连接CoAP服务端ip和端口的设备

  • 使用示例

  •  进入爱投斯中台,账号为iotos_test,密码为iotos123,在【创建模板】->【我的模板】,创建模板,填写相关信息,配置需要的参数

  • 创建网关

 

  • 填好网关名称后点击确认 

  • 创建设备示例点击【系统设备】 -> 【通信网关】 -> 【设备实例】->【创建设备】 

  • 填写【设备名称】、选择刚刚创建的【模板驱动】和【通信网关】。

  • 创建数据点,点击【我的设备】 -> 【通信网关】 -> 【设备实例】 -> 【数据点】,并在【设备实例】下拉列表选择刚刚创建的设备实例

  • 点击右边的创建数据点,填写名称

  •  设备转发过来多少个数据就创建几个数据,采用批量上传的方式,第一个点需要在param参数下配置一个变量"private",值为first_point如下:

  •  其他数据数据点中的属性需要填写"point"和"index",数据点中的point为上述提到的第一个点的oid,index表示除开第一个后该数据点为第几个,是第几个就填几个,从1开始。

  •   在【系统设备】 -> 【通信网关】中找到刚才创建的网关,点击【高级】

  •  开启云网关,密码为账号密码

  •  点击 【系统设备】 -> 【通信网关】 -> 【设备实例】->【数据点】,选择刚才创建的设备实例

  • 即可查看数据已经上报成功   

  • 驱动代码

#!coding:utf8
import sys
sys.path.append("..")
from driver import *

from coapthon.client.helperclient import HelperClient

# host = "192.168.11.36"
# port = 5683
# path = "zxcvb"

class CoAP(IOTOSDriverI):
    # 1、通信初始化
    def InitComm(self, attrs = None):
        try:
            self._HOST = self.sysAttrs['config']['param']['HOST']
            self._PORT = self.sysAttrs['config']['param']['PORT']
            self._PATH = self.sysAttrs['config']['param']['PATH']
            self._client=HelperClient(server=(self._HOST, self._PORT))
            self.setPauseCollect(False)
            self.setCollectingOneCircle(False)
            self.online(True)

        except Exception as e:
            self.debug(u'初始化失败'+e.message)

    # 2、采集
    def Collecting(self, dataId):
        try:
            cfgtmp = self.data2attrs[dataId]['config']
            # 过滤掉非采集点
            if cfgtmp["param"] == "":
                return ()

            # 过滤采集点
            if 'disabled' in cfgtmp and cfgtmp['disabled'] == True:
                return ()
            else:
                self.debug(self.name(dataId))

            if 'private' in cfgtmp['param'] and cfgtmp['param']['private'] == 'first_point':
                response = self._client.get(self._PATH)
                if response.payload:
                    data_list = []
                    for key, value in eval(response.payload).items():
                        data_list.append(value)
                    self.debug(tuple(data_list))
                    return tuple(data_list)

            return ()
        except Exception as e:
            self.debug(u'采集失败'+e.message)

    # 事件回调接口,监测点操作访问
    def Event_setData(self, dataId, value):
        return json_dumps({'code': 0, 'msg': '', 'data': ''})

  • 驱动解析

  •  运行环境为python3,需要先安装CoAPython3包用于CoAP的通讯,首先先导入驱动和CoAP通讯所需的包
#!coding:utf8
import sys
sys.path.append("..")
from driver import *

from coapthon.client.helperclient import HelperClient
  • 先进行驱动的初始化,拿到中台设备实例中设置的参数,在初始化中建立CoAP连接并且
class CoAP(IOTOSDriverI):
    # 1、通信初始化
    def InitComm(self, attrs = None):
        try:
            self._HOST = self.sysAttrs['config']['param']['HOST']
            self._PORT = self.sysAttrs['config']['param']['PORT']
            self._PATH = self.sysAttrs['config']['param']['PATH']
            self._client=HelperClient(server=(self._HOST, self._PORT))
            self.setPauseCollect(False)
            self.setCollectingOneCircle(False)
            self.online(True)

        except Exception as e:
            self.debug(u'初始化失败'+e.message)
  •  进行采集,先利用数据点中的配置过滤掉非采集点,再确定采集点,如果设备将数据转发过来的话就进行数据的解析将数据上传至中台
# 2、采集
    def Collecting(self, dataId):
        try:
            cfgtmp = self.data2attrs[dataId]['config']
            # 过滤掉非采集点
            if cfgtmp["param"] == "":
                return ()

            # 过滤采集点
            if 'disabled' in cfgtmp and cfgtmp['disabled'] == True:
                return ()
            else:
                self.debug(self.name(dataId))

            if 'private' in cfgtmp['param'] and cfgtmp['param']['private'] == 'first_point':
                response = self._client.get(self._PATH)
                if response.payload:
                    data_list = []
                    for key, value in eval(response.payload).items():
                        data_list.append(value)
                    self.debug(tuple(data_list))
                    return tuple(data_list)

            return ()
        except Exception as e:
            self.debug(u'采集失败'+e.message)

    # 事件回调接口,监测点操作访问
    def Event_setData(self, dataId, value):
        return json_dumps({'code': 0, 'msg': '', 'data': ''})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IOTOS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值