I am trying to develop an agent that queries platform.historian but got this error message when using RPC query method: AttributeError: 'NoneType' object has no attribute 'call'
class TCMAgent(Agent):
def __init__(self, config_path, **kwargs):
super(TCMAgent, self).__init__(**kwargs)
self.config = utils.load_config(config_path)
self.site = self.config.get('campus')
self.building = self.config.get('building')
self.unit = self.config.get('unit')
self.subdevices = self.config.get('subdevices')
self.subdevice = self.subdevices[0]
...
...
def test_api():
'''To test Volttron APIs'''
import os
topic_tmpl = "{campus}/{building}/{unit}/{subdevice}/{point}"
tcm = TCMAgent(os.environ.get('AGENT_CONFIG'))
topic1 = topic_tmpl.format(campus='PNNL',
building='SEB',
unit='AHU1',
subdevice='VAV123A',
point='MaximumZoneAirFlow')
result = tcm.vip.rpc.call('platform.historian',
'query',
topic=topic1,
count=20,
order="LAST_TO_FIRST").get(timeout=100)
assert result is not None
if __name__ == '__main__':
# Entry point for script
#sys.exit(main())
test_api()
Update Error Trace below:
2016-07-19 14:58:31,362 volttron.platform.vip.agent.core DEBUG: publickey is None
2016-07-19 14:58:31,362 volttron.platform.vip.agent.core DEBUG: secretkey is None
Traceback (most recent call last):
File "/home/hngo/volttron/examples/TCMAgent/tcm/agent.py", line 236, in <module>
test_api()
File "/home/hngo/volttron/examples/TCMAgent/tcm/agent.py", line 230, in test_api
order="LAST_TO_FIRST").get(timeout=100)
File "/home/hngo/volttron/volttron/platform/vip/agent/subsystems/rpc.py", line 303, in call
request, result = self._dispatcher.call(method, args, kwargs)
AttributeError: 'NoneType' object has no attribute 'call'
Your agent doesn't connect to the platform nor does it "start". That is the issue you are dealing with here. I don't see how you are specifying your vip address to connect to the running platform either.
You need to run your agent before you are able to allow it to make rpc calls. Something like the following, modified from https://github.com/VOLTTRON/volttron/blob/develop/examples/SimpleForwarder/simpleforwarder/simpleforwarder.py#L118 as an example.
destination_vip="tcp://127.0.0.1:22916?serverkey=blah&publickey=wah&privatekey=nah
agent = TMCAgent(config_path=cfg_path, identity=tester, address=destination_vip)
event = gevent.event.Event()
# agent.core.run set the event flag to true when agent is running
gevent.spawn(agent.core.run, event)
# Wait until the agent is fully initialized and ready to
# send and receive messages.
event.wait(timeout=3)