Python Library for dealing with openader

pyopenadr的Python项目详细描述


#pyopenadr

pyopenadr是一个python 3模块,它为openadr提供了一个方便的接口 系统。它包含一个openadr客户机,您可以使用它与其他openadr交谈 系统,它包含一个具有方便集成的openadr服务器(vtn) 可能性。

在尽可能少地使用openadr协议和复杂性的同时,很容易连接到自己的功能部件。如果您愿意,一切都可以是协同活动和基于事件的,只要发生感兴趣的事情,您的协同活动就会被调用。

如果您想了解基本的openadr通信流是如何发生的,请阅读[openadr basics](openadr basics)部分。

##客户机(VEN)

您可以使用OpenADR客户端(虚拟端节点)与OpenADR虚拟顶层节点进行对话。

###手动模式

如果您想在手动模式下使用客户机,您可以用一个venu-name和一个vtn-url来实例化openadrclient,然后调用一次create-party-registration()和一次poll()方法。openadr客户端将跟踪分配的vtnven id注册id。前者用于许多消息,如果您想从vtn"注销",则使用后者。

poll()方法将返回一个元组(消息类型,消息负载)供您解释。消息有效负载是一个尽可能包含本地python类型的dict。

###自动模式

当应用程序需要查看或响应事件或报告时,客户端可以处理自动轮询并调用自己的函数或协同程序。如果要使用自动轮询,请实现on_eventon_report处理程序,然后调用client.run()启动。所有处理程序都可以实现为常规方法或协同路由;协同路由的优点是不阻塞客户机的其余部分(例如轮询)。

###处理事件

要链接您自己的事件处理程序,请在openadrclient中填充on_event方法。对于每个传入的事件,如果这些事件是在来自vtn的单个消息中提供的,则此方法或协程将为一次。您可以通过提供oadrcreatedevent消息的内容来决定对每个事件的响应。通常,您需要返回字符串"opt in""opt out"来选择加入或退出事件。客户将对vtn执行必要的请求。

###处理报告

要链接您自己的报表处理程序,请在openadrclient中实现on_report方法。为每个报表调用一次方法或协同程序,将报表的内容提供给函数。

###提供报告

如果要自动向vtn提供报告,请在openadrclient中实现next_report方法。您的方法或协同程序应提供oadrcreatereport消息的内容。

##服务器(vtn)

虚拟顶层节点是vens连接到的"服务器"。pyopenadr服务器实现了大部分行为,但您必须将其连接到提供数据的后端。

##连接到数据源

###响应查询

处理事件的方法

  • on_created_event(payload)方法在VEN发送oadrcreatedevent消息时调用,可能会通知您他们打算如何处理您给他们的事件。
  • on_request_event(ven_id):这将返回您为ven拥有的下一个事件(如果有)。如果返回none,则返回一个空白的oadresponse
  • on_request_report(ven_id):这将返回下一个报告(如果有的话)你有。如果不返回,则返回一个空白响应到VEN。
  • on_poll(ven_id):这将返回第行的下一条消息,通常是新的oadrreportoardistributeevent消息。

处理报告的方法

如果您不确定OpenADR报告所涉及的正确消息流,请阅读[OpenADR基础:报告](报告)部分。

  • on create_report(payload)方法在VEN发送oadrcreatereport消息时调用,请求您定期生成VEN的报告。
  • on_register_report(payload)方法在VEN发送oadrregistereport消息时调用,可能是为了向您注册它们的报告功能。
  • on_update_report(payload)方法在VEN发送oadrupdatereport时调用,可能包括来自VEN的实际报告。
  • on_registered_report(payload)每当VEN确认您的报告功能通信时,都会调用方法。
  • onu created_report(payload)方法在VEN发送oadrcreatedreport消息时调用,可能会通知您他们将为您准备定期报告。

你必须提供你自己的课程。下面将解释每个后端。

###获取有关已连接虚拟机的元信息

如果VEN联机或脱机(错过了三个可配置的轮询间隔),服务器还可以调用方法或协同路由:

  • 在线(文号)
  • 在脱机状态下(ven id)

##OpenADR基础知识

openadr围绕来自vtn的消息进行ven轮询。

###注册

(待添加)

###报告

报告可能是openadr中最复杂的交互。它包括以下步骤:

  1. 甲方使用oadrregisterreport消息向乙方公布其报告能力。
  2. 乙方以oadrregisteredreport消息回应,可选择包括oadrreportrequest部分,告知甲方乙方对哪个感兴趣。
  3. 甲方以oadrcreatedreport消息通知乙方将定期生成报告。

此仪式以VTN为甲方和VEN为甲方各举行一次。

ven方可以使用oadrpolloadrequestreport机制从vtn收集其请求的报告。vtn将用包含实际报告的oadrupdatereport消息响应。然后,VEN应以oadrupdatedreport消息响应。

Ven应使用oadrupdatereport消息主动向VTN提供报告,VTN将用oadrupdatereport消息响应这些消息。

###事件

openadr有一个非常灵活的事件建模,这使得事情变得非常复杂。机制非常简单,并遵循以下逻辑:

  1. 车辆识别号询问车辆识别号是否有车辆识别号的事件。这可以使用oarrequesteventoadrpoll方法来完成。
  2. vtn将使用oardistributeevent消息向ven提供事件。
  3. ven可以决定是"opt-in"还是"opt-out",这包含在oadrcreatedevent消息中。

openadr事件由以下属性(或多或少)组成:

  • 此事件激活时间的说明,以及激活事件时允许的公差(激活周期)
  • 事件应用到的目标列表。这可以是虚拟企业、集团、资产、地理区域等。
  • 包含名称、类型和多个间隔(包含开始日期和一些有效负载值)的信号列表。

###轮询

(待添加)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何加载JNI。具有依赖项的动态库文件,但未获得未满足的链接错误?   java ResultSet元数据未返回第一行   无法从java xml解析器中的当前节点获取节点列表   java如何从for循环值创建单个数组   java如何在没有arrayList的情况下查找对象   java ItemizedOverlayWithFocus在聚焦osmdroid时显示另一个覆盖   java使用迭代器进行“向下”迭代的优雅方式   java如何使用OnListItemClick为listview和AlertDialog使用单独的arraylist?   arraylist读取txt文件Java中存储的数组   javascript IE 11与RicoLive Grid 2.2框架不兼容   java我能得到水豚的maven依赖性吗?   简单Escp Java:PrintPreviewPane在JDK7中不起作用   java取出给定字符串的一部分,并将所取部分作为变量返回?   java如何替换“instanceof”函数中的变量   来自url的Java utf8编码   java方法获取类Gregorianalendar?   安卓如何在java 7中使用AndroidStudio和DDMS监视器   java测试在JUnit4下运行,但不是在JUnit5下运行-编译干净,但执行0测试   java无法使用Azure服务总线发送消息