本文章为原创,转载请注明出处!

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

账号:iotos_test    密码:iotos123

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

目录

前言

驱动目的

适用范围

使用示例

驱动代码

驱动解析


  • 前言

BACnet是用于智能建筑的通信协议,是国标标准化组织(ISO)、美国国家标准协会(ANSI)及美国采暖、制冷与空调工程师学会(ASHRAE)定义的通信协议。BACnet针对智能建筑及控制系统的应用所设计的通信,可用在暖通空调系统(HVAC,包括暖气、通风、空气调节),也可以用在照明控制、门禁系统、火警侦测系统及其相关的设备。优点在于能降低维护系统所需成本并且安装比一般工业通信协议更为简易,而且提供有五种业界常用的标准协议,此可防止设备供应商及系统业者的垄断,也因此未来系统扩展性与兼容性大为增加。

  • 驱动目的

将BACnet协议设备的数据拿到并上传至云上

  • 适用范围

BACnet协议设备

  • 使用示例

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

  • 创建网关

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

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

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

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

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

  • 并在高级配置中配置数据点的相关标志,objectName类型的数据在私有属性“objectName”中填入其名称,并在“num”属性中加入序号;可以用于修改的数据点则在私有属性“private”中填入“write”,并用"num"表示需要修改的objectName类型数据点的序号,例如:

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

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

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

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

  • 点击可以用于下发的数据点旁边的下发按钮,设置需要下发的值,点击下发,即可看到设备的数据已经改变

  • 驱动代码

#coding=utf-8
import sys
sys.path.append("..")
import BAC0
import time
from driver import *class Bacnet(IOTOSDriverI):def InitComm(self,attrs):self.setPauseCollect(False)self.setCollectingOneCircle=Trueself.online(True)#建立连接并且在通路里搜索bacnet设备的ip和设备idtry:self.bacnet=BAC0.connect()self.bacnet.whois()# 搜索局域网内的bacnet协议设备并且打印出来for each in self.bacnet.discoveredDevices:deviceName = (self.bacnet.read('%s device %s objectName' % (each[0], each[1])))self.deviceAddr = each[0]self.debug('Found device : %s at address %s' % (deviceName, self.deviceAddr))# 打印设备地址为deviceAddr 的objectList property 前十个read_pro = self.deviceAddr + ' device 3 objectList'self.debug(self.bacnet.read(read_pro)[:10])except Exception as e:self.bacnet.disconnect()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']=='write' and 'num' in cfgtmp['param']:if "memoryvalue" not in self.data2attrs[dataId]:return ('请下发',)else:return (self.data2attrs[dataId]["memoryvalue"],)#上传数据点if 'objectName' in cfgtmp['param'] and 'num' in cfgtmp['param']:data_val = self.deviceAddr + ' ' + str(cfgtmp['param']['objectName'])+' '+str(cfgtmp['param']['num'])+' '+'objectName description presentValue units'self.debug(data_val)#读取bacnet设备中属性的值data = self.bacnet.readMultiple(data_val)return (str(data[2]),)except Exception as e:# 连接会一定时间后断开,需要再次开启self.bacnet.disconnect()self.bacnet = BAC0.connect()self.bacnet.whois()return ()def Event_setData(self, dataId, value):#更改bacnet里面属性的值,一般只能是analoValue属性if 'private' in self.data2attrs[dataId]['config']['param']:if self.data2attrs[dataId]['config']['param']['private']== 'write':data_wri=self.deviceAddr+' '+'analogValue'+' '+ str(self.data2attrs[dataId]['config']['param']['num']) +' presentValue ' + str(value)self.debug(data_wri)self.bacnet.write(data_wri)self.setValue(self.name(dataId), value)return json.dumps({'code': 0, 'msg': '', 'data': ''})
  • 驱动解析

  • 运行环境为python3,需要先安装BAC0包用于bacnet的通讯,首先先导入驱动所需的包
#coding=utf-8
import sys
sys.path.append("..")
import BAC0
import time
from driver import *
  • 首先,先进行驱动的初始化,在初始化中建立bacnet连接并且在路由里面搜索bacnet设备的ip和设备的id,用于后续拿到设备的数据
class Bacnet(IOTOSDriverI):def InitComm(self,attrs):self.setPauseCollect(False)self.setCollectingOneCircle=Trueself.online(True)#建立连接并且在通路里搜索bacnet设备的ip和设备idtry:self.bacnet=BAC0.connect()self.bacnet.whois()# 搜索局域网内的bacnet协议设备并且打印出来for each in self.bacnet.discoveredDevices:deviceName = (self.bacnet.read('%s device %s objectName' % (each[0], each[1])))self.deviceAddr = each[0]self.debug('Found device : %s at address %s' % (deviceName, self.deviceAddr))# 打印设备地址为deviceAddr 的objectList property 前十个read_pro = self.deviceAddr + ' device 3 objectList'self.debug(self.bacnet.read(read_pro)[:10])except Exception as e:self.bacnet.disconnect()
  • 进行数据的采集,首先先利用数据点里面的参数过滤非采集点和采集点,获取用于数据下发的点和数据上传的点,并通过bacnet协议获取设备的值进行上报
    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']=='write' and 'num' in cfgtmp['param']:if "memoryvalue" not in self.data2attrs[dataId]:return ('请下发',)else:return (self.data2attrs[dataId]["memoryvalue"],)#上传数据点if 'objectName' in cfgtmp['param'] and 'num' in cfgtmp['param']:data_val = self.deviceAddr + ' ' + str(cfgtmp['param']['objectName'])+' '+str(cfgtmp['param']['num'])+' '+'objectName description presentValue units'self.debug(data_val)#读取bacnet设备中属性的值data = self.bacnet.readMultiple(data_val)return (str(data[2]),)except Exception as e:# 连接会一定时间后断开,需要再次开启self.bacnet.disconnect()self.bacnet = BAC0.connect()self.bacnet.whois()return ()
  • 数据下发。利用私有属性‘private’判断需要修改的数据点的属性,对数据点进行下发时就会直接对设备的数据进行修改
    def Event_setData(self, dataId, value):#更改bacnet里面属性的值,一般只能是analoValue属性if 'private' in self.data2attrs[dataId]['config']['param']:if self.data2attrs[dataId]['config']['param']['private']== 'write':data_wri=self.deviceAddr+' '+'analogValue'+' '+ str(self.data2attrs[dataId]['config']['param']['num']) +' presentValue ' + str(value)self.debug(data_wri)self.bacnet.write(data_wri)self.setValue(self.name(dataId), value)return json.dumps({'code': 0, 'msg': '', 'data': ''})

IOTOS物联中台Bacnet驱动开发实例相关推荐

  1. IOTOS物联中台modbus驱动对接雅达电表设备

    本文章为原创,转载请注明出处! 登录平台:IOTOS®爱投斯物联中台 账号:iotos_test    密码:iotos123 代码地址:IOTOSDK-Python: IOTOS Python版本S ...

  2. IOTOS物联中台modbus驱动对接科士达精密空调设备

    本文章为原创,转载请注明出处! 登录平台:IOTOS®爱投斯物联中台 账号:iotos_test    密码:iotos123 代码地址:IOTOSDK-Python: IOTOS Python版本S ...

  3. IOTOS物联中台Modbus_Tcp驱动对接Wheelers控制器设备

    目录 前言 驱动目的 适用范围 使用示例 驱动源码 驱动解析 前言 Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议.通过此协议,控制器相互之间.或控制器经由网络(如以太网)可以和其它 ...

  4. IOTOS物联中台从0到1开发modbus_rtu驱动 实例详解

    本文章为原创,转载请注明出处! 登录平台:IOTOS®爱投斯物联中台 账号:iotos_test    密码:iotos123 代码地址:IOTOSDK-Python: IOTOS Python版本S ...

  5. IOTOS物联中台开发驱动支持NB-IoT光电感烟火灾探测报警器设备

    本文章为原创,转载请注明出处! 登录平台:IOTOS®爱投斯物联中台 账号:iotos_test    密码:iotos123 代码地址:IOTOSDK-Python: IOTOS Python版本S ...

  6. IOTOS物联中台开发驱动支持中安易科智能门锁API 详解

    本文章为原创,转载请注明出处! 登录平台:IOTOS®爱投斯物联中台 账号:iotos_test    密码:iotos123 代码地址:IOTOSDK-Python: IOTOS Python版本S ...

  7. IOTOS物联中台非标modbus驱动对接易事特UPS电源设备

    本文章为原创,转载请注明出处! 登录平台:IOTOS®爱投斯物联中台 账号:iotos_test    密码:iotos123 代码地址:IOTOSDK-Python: IOTOS Python版本S ...

  8. Linux USB 驱动开发实例(七)—— 基于USB 总线的无线网卡浅析

    回顾一下USB的相关知识 USB(Universal Serial Bus)总线又叫通用串行外部总线, 它是20世纪90年代发展起来的.USB接口现在得到了广泛的应用和普及,现在的PC机中都带有大量的 ...

  9. USB WDM驱动开发实例 bulkusb

    参考书籍<<Windows驱动开发技术详解>> 1.该示例介绍如何进行USB驱动的开发. 它全面地支持了即插即用的处理, 也很全面地支持了电源管理,同时很好地支持了USB设备的 ...

最新文章

  1. java 庖丁解牛api_Java Restful API Best Practices
  2. Xamarin.Forms的相对布局RelativeLayout
  3. 微服务部署HTTP反向代理、负载均衡工具Træfɪk
  4. boost之对象池使用实例
  5. 恢复VMware vSphere已孤立的虚拟机
  6. vb定义模块且使用模块_ET200S 1 STEP 步进模块使用入门
  7. php数据库录入和输出,PHP数据库之CURD操作
  8. SOA理论与概念深入剖析
  9. jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题
  10. javascript中children和childNodes的区别
  11. ExtJS+DWR+Spring+Hibernate开发HRMS(3)
  12. 华为p50出厂自带鸿蒙,真的假的?华为P50系列出厂就预装鸿蒙
  13. 谷歌开源缓存框架Guava Cache
  14. 如何制作DUN-14条形码
  15. qlv是什么格式的视频,怎么把qlv格式转换成mp4
  16. 横向浅析Small,RePlugin两个插件化框架
  17. fastdb缩小初始生成文件
  18. vue 里面的slot属性
  19. AS移动开发 类微信界面2_Activity的生命周期与跳转(持续更新中)
  20. nexus 向私服推送jar包 两种方式实现

热门文章

  1. (热学 热力学统计物理 )大题典选--------热力学状态与热力学第一定律
  2. vb.net 教程 20-3 控制Ie浏览器 4
  3. idea :跟着任亮做练习题 22,异常
  4. 青岛新媒体运营教程:你知道几个,短视频变现的方式
  5. 第一章——操作系统概论
  6. python数据分析要求高性能计算机_仅需1秒!搞定100万行数据:超强Python数据分析利器...
  7. 常用的分布式事务解决方案
  8. 学计算机的男生发这个给我看是什么意思?
  9. python开发出来的crm系统_基于Django实现的CRM系统
  10. 如何把计算机窗口合成一个窗口,如何让电脑的某个窗口永远在最前端