Deploy MQTT layer for SolarNet to accept data from nodes and publish instructions to them

XMLWordPrintable

    • Type: Epic
    • Resolution: Fixed
    • Priority: Major
    • Component/s: SolarIn
    • None
    • MQTT

      Currently SolarNet accepts data from nodes via the SolarIn JSON REST batch-oriented API. For some deployment scenarios it would be beneficial to have a true 2-way communication channel established between SolarNode and SolarNet, so that

      1. nodes can publish data in actual real time, as data is captured
      2. SolarNet can push instructions to nodes in actual real time

      MQTT is a well-established publish/subscribe message protocol used in many industries today. The AWS IoT platform uses MQTT, for example. Thus it makes sense to use MQTT in SolarNetwork (as opposed to other message protocols). The requirements for using MQTT include the following:

      1. nodes must authenticate via their existing X.509 certificates over a TLS connection
      2. nodes must be allowed to publish messages only to topics within a node-specific hierarchy, like node/123/data; these will be called node publish topics
      3. nodes must be allowed to subscribe to instructions only from a node-specific topic, like node/123/instr; these will be called node subscription topics
      4. SolarNet must connect using a TLS connection, but may use a simple username/password for authentication
      5. SolarNet must be allowed to read messages posted to all node publish topics, for example node/+/data
      6. SolarNet must be allowed to publish messages to all node subscription topics, for example node/+/instr

      Based on those requirements, a new SolarIn module can be added that subscribes to all node publish topics for data ingestion, and a SolarUser module can be added to publishes instructions to node subscription topics as they are created. These modules may in fact be written as one solution.

            Assignee:
            Matt Magoffin
            Reporter:
            Matt Magoffin
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: