在VOLTTRON中,如何使用VIP让代理通过远程平台实例进行通话?

时间:2016-08-29 18:11:06

标签: remote-access volttron

我正在尝试让代理通过远程平台实例相互通信。例如,在machine1(192.168.1.10)上运行的Agent1想要与使用VOLTTRON环境的machine2(192.168.1.11)上运行的Agent2通信。我认为VOLTTRON互连协议(VIP)可能是实现它的不错选择,但是如何设置呢?有人能告诉我一个例子吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您是否正在尝试让两个座席直接对话,或者他们的目标是将消息发布到远程总线以供其他座席查看?如果是后者,您可以在ForwardHistorian中看到一个示例:https://github.com/VOLTTRON/volttron/blob/develop/services/core/ForwardHistorian/forwarder/agent.py

默认情况下,代理可以与其本地消息总线通信,以便与需要设置此连接的远程通信对话(其中“destination_vip”是远程VOLTTRON的vip地址,包括serverkey):

    agent = Agent(address=destination_vip)
    event = gevent.event.Event()
    agent.core.onstart.connect(lambda *a, **kw: event.set(), event)
    gevent.spawn(agent.core.run)
    event.wait()

然后他们可以使用它来发布或订阅该总线:

self._target_platform.vip.pubsub.publish(peer='pubsub',
                                    topic="MyTopic",
                                    message="Some message").get()

使用这些方法,代理可以发布和订阅远程消息总线,并以与本地总线相同的方式与其进行交互。

如果您正在寻找如何直接调用其他代理,那么与ActuatorAgent交互的SchedulerExample提供了一个示例:https://github.com/VOLTTRON/volttron/blob/develop/examples/SchedulerExample/schedule_example/agent.py

该调用类似于上面的pub / sub示例,只是它使用了rpc子系统。呼叫代理使用目标代理的VIP标识,要调用的方法以及参数。 ActuatorAgent具有set vip标识,使其更容易调用,并且在“set_point”方法上具有“@ RPC.export”装饰器。

            result =  self._target_platform.vip.rpc.call(
                                   'platform.actuator', 
                                   'set_point',
                                   agent_id, 
                                   'campus/building/unit3/some_point',
                                   '0.0').get(timeout=10)