MQTT-SN Gateway: Core
This module is part of mqttsngw. It is responsible for handling parsed MQTT-SN packets from the event bus and maintaining state machines for connected sensors. If necessary it requests a connection to the broker on the event bus.
Factory
const Core = require('mqttsngw-core');
mqttsngw.attach(Core(opts));
Creates a new Core factory and attaches it to an existing instance of mqttsngw. opts has the following fields:
log: Optional. An object containing logging callbacks for all log levels (error,warn,info,debug). Every callback is called with a human-readable message as the first argument followed by an object containing more information regarding the event:{ error: (msg, info) => { ... }, ...}.enforceUniqueClientIds: If set totrue, existing connections will be disconnected if a new connection with the same MQTT Client ID is established.
State Machines
[Core] Main
- init: Preparing the state machine
- listening: Listens for incoming connection requests from the sensor network. If a request is received, a new instance of [Core] Client is created and started.
[Core] Client
Reflects the current sensor state.
- init: Preparing the state machine.
- willTopic: Waits for a will topic sent by the sensor.
- willMessage: Waits for a will message sent by the sensor.
- connectBroker: Tries to connect to the broker.
- active: The sensor is connected. Depending on the received sensor messages, it will start the state machines [Core] Subscribe, [Core] PublishToBroker or [Core] PublishToClient.
- sleep: The sensor may enter sleep state by stating a non-zero duration in the DISCONNECT packet. The gateway will collect ingress publishes from the broker and sends them to the sensores once it's active again.
[Core] Subscribe
Handles topic subscription requested sent by sensors.
- init: Checks subscription request.
- brokerSubscribe: Subscribes the topic at the broker.
[Core] PublishToBroker
Sends a message to the broker
- init: Checks the publish request and translates the
topicIdto the topic name. - publishToBroker: Sends the message to the broker.
[Core] PublishToClient
Sends a message to the sensor
- init: Lookup the
topicIdto the given topic name or register one. - registerTopic: Registers a topic at the sensor.
- publishToClient: Sends the message to the sensor.
Events
Several events are consumed and emitted by the Core module on the event bus.
Consumed
| Event | State Machine | Description |
|---|---|---|
| snUnicastIngress,*,connect | [Core] Main | Incoming connection requests packet |
| brokerConnect,*,res | [Core] Client | Response to a broker connection request |
| snUnicastIngress,*,disconnect | [Core] Client | Sensor sent disconnect |
| snUnicastIngress,*,register | [Core] Client | Sensor registers a new topic name |
| snUnicastIngress,*,subscribe | [Core] Client | Sensor subscribes to a new topic |
| snUnicastIngress,*,unsubscribe | [Core] Client | Sensor unsubscribes from a topic |
| snUnicastIngress,*,publish | [Core] Client | Sensor publishes a message |
| snUnicastIngress,*,pingreq | [Core] Client | Sensor sent ping request |
| brokerDisconnect,*,notify | [Core] Client | Connection to the broker has been disconnected |
| brokerPublishToClient,*,req | [Core] Client | A message shall be sent from the broker to the sensor |
| brokerSubscribe,*,res | [Core] Subscribe | Response to a subscription request |
| brokerUnsubscribe,*,res | [Core] Unsubscribe | Response to a desubscription request |
| brokerPublishFromClient,*,res | [Core] PublishToBroker | Response to a publish to broker request |
| snUnicastIngress,*,regack | [Core] PublishToClient | Reaction to a register request from the sensor |
| snUnicastIngress,*,puback | [Core] PublishToClient | Reaction to a publish request from the sensor |
Emitted
| Event | State Machine | Description |
|---|---|---|
| brokerConnect,*,req | [Core] Client | Request a connection to the broker |
| brokerDisconnect,*,call | [Core] Client | Disconnect from the broker |
| snUnicastOutgress,*,connack | [Core] Client | Send a CONNACK to the sensor |
| snUnicastOutgress,*,disconnect | [Core] Client | Disconnect from sensor |
| snUnicastOutgress,*,regack | [Core] Client | Send a REGACK to the sensor |
| snUnicastOutgress,*,pingresp | [Core] Client | Respond to a ping request |
| brokerSubscribe,*,req | [Core] Subscribe | Subscribes a topic at the broker |
| snUnicastOutgress,*,suback | [Core] Subscribe | Respond to a subscription request |
| brokerUnsubscribe,*,req | [Core] Unsubscribe | Unsubscribes a topic at the broker |
| snUnicastOutgress,*,unsuback | [Core] Unsubscribe | Respond to a desubscription request |
| brokerPublishFromClient,*,req | [Core] PublishToBroker | Publish a message to the broker |
| snUnicastOutgress,*,puback | [Core] PublishToBroker | Send PUBACK to the sensor |
| snUnicastOutgress,*,register | [Core] PublishToClient | Register a topic at the sensor |
| snUnicastOutgress,*,publish | [Core] PublishToClient | Publish a message to the sensor |
| brokerPublishToClient,*,res | [Core] PublishToClient | Respond to publish request from the broker |