“IoT Messaging made secure, trusted, and easy”
Source Code | No Royalties | GPL Free
Remote control embedded devices directly from HTML5 in real-time, stream data to and from devices, and/or use broker/server for IoT Edge Node data acquisition.
SMQ is an easy to use IoT (M2M) publish subscribe protocol designed and optimized for embedded systems providing instantaneous Edge Node connectivity. The solution allows resource contrained real-time control, analysis, and updates.
The figure below shows an NXP CortexM3 board running the SMQ LED demo and being controlled from a tablet. The board and the tablet connect to our public broker simplemq.com, which is shown embedded to the right.
SMQ Source Code
We provide several SMQ source code implementations for various programming languages.Download
Embedded Devices initiate the IoT communication with the SMQ Broker by use of a standard web URL, which is either HTTP for non secure or HTTPS for secure communication. The device to broker communication is established in a similar fashion to how WebSockets are initiated.
Once a connected session occurs, the SimpleMQ Client may then publish and subscribe to topic names. A topic name can be any string value, but is typically structured in a hierarchical fashion, which is by common comparison equivalent to that of a file system hierarchy found in a UNIX like environment.
Topic names are then translated into numbers by the server, thus enabling fast processing of messages by using lookup tables and values stored on the server. The client subscribes to a topic and the server responds with a topic ID that identifies the topic channel. Each client is also assigned a unique ID by the broker know as the ephemeral topic ID. The ephemeral topic ID is used in a unique way such as "publisher's address" by subscriber, thus enabling each subscriber the ability to send messages directly to a device by using the pehemeral topic ID. The ephemeral topic ID also enables an application to simulate a remote procedure (RPC) call.
The SMQ broker provides easy segmentation of products/customers by enabling an unlimited number of broker instances running in the server. Each Message Queue entry (URL) in the server is associated with one broker instance, thus the number of instances that can be installed in the server at any given time are only limited to any inherent memory limitations.
SimpleMQ Client is provided in C Source Code and is built for a direct device interaction with TCP/IP. The communication client is designed and utilized to preserve resources, which are typically vital for small constrained microcontrollers. Devices may authenticate themselves by using standard credentials such as username/password, or key values by example. The SimpleMQ client while operating in a (non-secure) mode still allows for an easy use of hash based authentication, which is useful to establish a secure encrypted password connection to prevent eavesdropping.
SharkMQ is simply the secure version of the SimpleMQ Client which makes use of the SharkSSL TLS stack for maintaining a trusted, secure, and encrypted communication. Designers may use certificates for both device and broker authentication, thus optionally enable mutual authentication by use of X.509 certificates.
The figure to the right shows our bare metal SharkMQ reference platform is a mere 38Kb ROM and 13Kb RAM. The reference platform includes application (demo) code, SharkMQ, SharkSSL, TCP/IP stack, and drivers; all in tiny 38Kb. Also the complete RAM usage for the entire system is only 13Kb. As proof, we have made the linker's map file available for download.
The Java SMQ client stack can be used on any Java powered environment such as Android. A demo showcasing how to control LEDs in a device in real-time is available and can be installed on any Android device. The native Android app provides an alternative to the browser based LED demo user interface. The Android app is available at the Android app store as the SMQ IoT LED Demo.
SMQ Broker enables IoT SSL termination. To illustrate by example we have an external browser using secure WebSockets sending a message to non-secure devices utilizing the SimpleMQ Client. In this example the SMQ Broker decrypts the message received from the browser and then forwards the unencrypted result to the two non-secure devices. This communication also works in reciprocal pattern where a non secure client is able to send messages to a secure client.