问题描述:

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)
相关阅读:
Top