RPC crashes with AttributeError: 'NoneType' object has no attribute 'call'

一世执手 提交于 2019-12-12 02:16:02

问题


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'

回答1:


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)


来源:https://stackoverflow.com/questions/38468962/rpc-crashes-with-attributeerror-nonetype-object-has-no-attribute-call

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!