我一直致力于在 Volttron 中培养我的代理开发技能。我对该平台完全陌生,并试图了解如何创建发布和订阅 Volttron 总线的基本代理。在这个冒险中,我并不孤单,并从其他一些有经验的人那里得到帮助,但即使是他们也很难过。我们使用通过 GitHub 共享的相同代理文件,但代理在他们的计算机上工作,而不是在我的计算机上工作。
发布代理从与代理位于同一目录中的 CSV 文件中读取数据,并假设从该文件中发布信息。我一直小心地在我的源代码中映射文件目录以匹配我的设置。当我开始使用在 Linux Mint 18.1 Serena 上运行的 eclipse“mars”运行我的发布代理时,我收到以下消息:
2017-02-02 14:27:22,290 volttron.platform.agent.utils 调试:缺少文件 /home/edward/.volttron/keystores/f9d18589-d62b-42b7-bac8-3498a0c37220/keystore.json
2017-02-02 14:27:22,290 volttron.platform.agent.utils 信息:创建文件 /home/edward/.volttron/keystores/f9d18589-d62b-42b7-bac8-3498a0c37220/keystore.json
2017-02-02 14:27:22,292 volttron.platform.vip.agent.core 调试:地址:ipc://@/home/edward/.volttron/run/vip.socket
2017-02-02 14:27:22,292 volttron.platform.vip.agent.core 调试:身份:无
2017-02-02 14:27:22,292 volttron.platform.vip.agent.core 调试:agent_uuid:无
2017-02-02 14:27:22,292 volttron.platform.vip.agent.core 调试:severkey:无
2017-02-02 14:27:32,324 volttron.platform.vip.agent.core 错误:10 秒后没有响应 hello 消息。
2017-02-02 14:27:32,324 volttron.platform.vip.agent.core 错误:常见原因是 VIP 身份冲突。
2017-02-02 14:27:32,324 volttron.platform.vip.agent.core 错误:关闭代理。
2017-02-02 14:27:32,324 volttron.platform.vip.agent.core 错误:可能的冲突身份是:f9d18589-d62b-42b7-bac8-3498a0c37220
我做了以下事情:
创建了丢失的文件“/home/edward/.volttron/keystores/f9d18589-d62b-42b7-bac8-3498a0c37220/keystore.json”。当我再次运行代理时,唯一发生的事情是它给了我相同的调试消息,但文件名不同。
我查看了“volttron.platform.vip.agent.core”文件,不知道在那里做什么。我不想给自己制造更多的问题。
我一直在使用“Volttron 的文档”来尝试排除故障,但是当我尝试运行任何代理时,我总是会收到相同的消息。我在测试平台并通过终端运行“make-listener”时取得了成功,但仅此而已。
最近几天我一直在网上搜索并看到类似的问题,但是在尝试按照发布的建议来解决这种情况时,我没有运气。 错误:volttron.platform.web 信息:Web 服务器未启动
在我的虚拟机上重新安装 Volttron、Mint 和 Eclipse 几次以克服任何兼容性问题......
代理源代码如下:
#testcodeisforpublishingandprinting
import logging
import sys
#import json
from volttron.platform.vip.agent import Agent, Core, PubSub, compat
#from volttron.platform.vip.agent import *
#from volttron.platform.vip.agent import compat
from volttron.platform.agent import utils
from volttron.platform.messaging import headers as headers_mod
from datetime import datetime
#import numpy as NP
#from numpy import linalg as LA
import csv
outdata=open("/home/edward/volttron/testagent/Agent/PredictionfileP.csv","rb")
Pdata=csv.DictReader(outdata)
Price=[]
for row in Pdata:
Price.append(float(row['Price'])*0.01)
#from volttron.platform.agent import BaseAgent, PublishMixin, periodic, matching, utils
#from volttron.platform.agent import BaseAgent, PublishMixin, periodic
utils.setup_logging()
_log = logging.getLogger(__name__)
class testagent1(Agent):
def __init__(self, config_path, **kwargs):
self.config = utils.load_config(config_path)
super(testagent1, self).__init__(**kwargs)
self.step=0
#print('TestAgent example agent start-up function')
@Core.receiver('onsetup')
def onsetup(self, sender, **kwargs):
self._agent_id = self.config['agentid']
@Core.receiver('onstart')
def onstart(self, sender, **kwargs):
pass
@Core.receiver('onstop')
def onstop(self, sender, **kwargs):
pass
@Core.receiver('onfinish')
def onfinish(self, sender, **kwargs):
pass
@Core.periodic(5)
def simulate(self):
self.step=self.step+1#timestep increase
print('Simulationrunning')
now = datetime.utcnow().isoformat(' ')#time now
headers = {
'AgentID': self._agent_id,
headers_mod.CONTENT_TYPE: headers_mod.CONTENT_TYPE.PLAIN_TEXT,
headers_mod.DATE: now,
}
print(self.step)
self.vip.pubsub.publish('pubsub', 'testcase1/Step', headers, self.step)
print('Simulationupdatingloopingindex')
def main(argv=sys.argv):
'''Main method called by the eggsecutable.'''
try:
utils.vip_main(testagent1)
except Exception as e:
_log.exception('unhandled exception')
if __name__ == '__main__':
# Entry point for script
sys.exit(main())
我使用 2017 年 1 月发布的 3.5RC1 手册安装了我的 Volttron 版本。