Добавить новую страницу в Volttron Central

У меня есть отдельная HTML-страница с jQuery. JQuery используется для вызова AJAX для бэкэнда Python. Мне нужно интегрировать его с Volttron Central. Я посмотрел на документацию, но нет никакого раздела об этом. Я думаю, что было бы неплохо иметь такую ​​информацию в документе.

Мой текущий подход заключается в том, чтобы преобразовать внутренний Python в агент Volttron, но я не знаю, как интегрировать интерфейсную HTML-страницу с VC.

Любое предложение, с чего начать? Благодарю.

1 ответ

Решение

Когда у вас есть агент, который собирается зарегистрировать свою собственную конечную точку, вы должны сделать это во время сигнала запуска. Следующее было извлечено из центрального агента Вольтрона. Он показывает, как зарегистрировать конечную точку, которая является динамической (в качестве конечной точки используется volttron rpc), а также статической (где html просто обслуживается). Я удалил ненужные биты для этого примера.

онстарт вольттрон центральный код

Для ясности MASTER_WEB и VOLTTRON_CENTRAL являются уникальными идентификаторами для тех конкретных агентов, которые работают на экземпляре volttron.

@Core.receiver('onstart')
def _starting(self, sender, **kwargs):
    """ Starting of the platform
    :param sender:
    :param kwargs:
    :return:
    """

    ...

    # Registers dynamic route.
    self.vip.rpc.call(MASTER_WEB, 'register_agent_route',
                      r'^/jsonrpc.*',
                      self.core.identity,
                      'jsonrpc').get(timeout=30)

    # Registers static route.
    self.vip.rpc.call(MASTER_WEB, 'register_path_route', VOLTTRON_CENTRAL,
                      r'^/.*', self._webroot).get(timeout=30)

Поскольку вы добавили маршрут при запуске, вы также должны удалить его, когда агент остановлен. onstop ссылочный код

@Core.receiver("onstop")
def stopping(self, sender, **kwargs):
    '''
    Release subscription to the message bus because we are no longer able
    to respond to messages now.
    '''
    try:
        # unsubscribes to all topics that we are subscribed to.
        self.vip.pubsub.unsubscribe(peer='pubsub', prefix=None, callback=None)
    except KeyError:
        # means that the agent didn't start up properly so the pubsub
        # subscriptions never got finished.
        pass
Другие вопросы по тегам