2016-07-19 7 views
0

Ich habe eine eigenständige HTML-Seite mit jQuery. Mit jQuery wird der AJAX-Aufruf an das Python-Backend ausgeführt. Ich muss es mit Volttron Central integrieren. Ich habe mir die Dokumentation angesehen, aber es gibt keinen Abschnitt, der darüber spricht. Ich denke, es wäre schön, diese Art von Informationen im Doc zu haben.Hinzufügen einer neuen Seite zu Volttron Central

Mein aktueller Ansatz ist es, das Backend Python zu einem Volttron-Agent zu konvertieren, aber ich weiß nicht, wie ich die Frontend-HTML-Seite mit VC integrieren soll.

Irgendwelche Vorschläge, wo ich anfangen soll? Vielen Dank.

Antwort

1

Wenn Sie einen Agenten haben, der seinen eigenen Endpunkt registriert, sollten Sie dies während des Onstart-Signals tun. Das Folgende wurde aus dem Volttron Central Agent extrahiert. Es zeigt, wie man einen Endpunkt registriert, der dynamisch ist (verwendet Volttron RPC als Endpunkt), sowie statisch (wo der HTML einfach bedient wird). Ich habe die un-notwendigen Bits für dieses Beispiel entfernt.

onstart volttron central code

Aus Gründen der Klarheit und MASTER_WEB VOLTTRON_CENTRAL sind eindeutige Kennungen für die spezifischen Agenten auf der volttron Instanz laufen.

@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) 

Da Sie die Route onstart hinzugefügt haben, sollten Sie sie auch entfernen, wenn der Agent gestoppt wurde. onstop referenced code

@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 
+0

Dank Craig. Ich werde es versuchen und später darauf zurückkommen. – HNGO

+0

Wenn es 10 verschiedene Apps mit 10 verschiedenen UIs gibt, erzeugt dieser Ansatz zu viele Backend-Agenten, Routen und Frontend-Ressourcen überall? – HNGO

+0

Diese Registrierung von Routen ist eine Standardmethode. Es ist nicht neu. Die Frontend-Ressourcen sind und sollten auf der Client-Seite sein. – Craig