Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
These subsections explain deploy MobiusFlow On-Prem.
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Repository of Technical Training walkthrough guides
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
MobiusFlow® is a middleware software application
MobiusFlow® connects, controls and communicates with 1000s of sensors and control devices to provide actionable insights and automated responses. Developed and successfully deployed with many projects over the past 17 years by engineers with first-hand experience in project management and installation such as CBRE, Ingram Micro, TD Synnex and IBM.
Welcome to the MobiusFlow® documentation
MobiusFlow® connects, controls and communicates with 1000s of sensors and control devices to provide actionable insights and automated responses. Developed and successfully deployed with many projects over the past 17 years by engineers with first-hand experience in project management and installation such as CBRE, Ingram Micro, TD Synnex and IBM.
Whether you are looking for a full walkthrough or just dipping in to get more information about a single topic, our documentation site is the perfect companion to the training courses on our main site.
The user guides are instructional walkthroughs. Follow these guides from start to finish or jump to a section to learn how to perform specific tasks.
Looking for more detailed technical information? These articles dive deeper into the more technical aspects of MobiusFlow®, from Architecture to API details, ports, protocols, configuring services creating flows, and more.
Our documentation is always improving and we are adding new articles each week, so come back often to see whats new.
We need your help to improve. Please rate the articles and raise support tickets to tell us where we can improve, what articles are missing, and point out any errors.
For most use cases, Deploying MobiusFlow in the MobiusFlow Cloud is simplest and most cost effective hosting option.
Customers can create new MobiusFlow instances themselves using the MobiusFlow manager platform. A full guide on how to use this platform can be found here.
MobiusFlow a hosting fee for hosting instances in the MobiusFlow cloud. As such, purchaser permissions are required.
When creating a new MobiusFlow instance using manager ensure the Host instance on MobiusFlow Cloud option is checked:
If this option is not available, this is because you do not have purchaser permissions within this fleet.
On creation, there are several options that must be populated:
This is the URL the new MobiusFlow cloud instance will be hosted on. In the above example, Manager has automatically suggested average-pug-2488. As such, new Cloud instance will be accessible at the URL average-pug-2488.mobiusflow.io.
This selects the version of MobiusFlow to use. If use for the MobiusFlow LoRaWAN LNS is required, ensure the MobiusFlow V2 with LoRaWAN Stack option is selected.
This specifies the region of the world the new Cloud instance is to be hosted on. It is recommended to host the instance as near to where it will be used as possible.\
Once a MobiusFlow Cloud hosted instance as online, an Environment is created, in-turn controlling how the instance can communicate with the outside world. A full article on this environment can be found here.
Deploy MobiusFlow or MobiusFlow RPI Connector software to a new balenaCloud device or update existing devices
You must be signed up to balena.io and have a paid plan as these MobiusFlow® images use the Microservices fleet type which is only available on a paid plan
BalenaCloud is a small device fleet management platform which simplifies the process of managing and maintaining 1000s of edge devices. It allows secure remote access and monitoring of each device and installing and updating product firmware of an entire fleet with a few simple clicks. See balenaCloud for more information.
We currently have software images for thee different device types for balenaCloud. These are:
The MobiusFlow RPI Connector works with the following Raspberry Pi types:
Raspberry Pi 4
Raspberry Pi 5
We reccomend at least 1Gb of RAM and 8Gb of storage for all devices
If you have a requirement for a different device type on balenaCloud contact us at www.mobiusflow.com or submit a support ticket by clicking on the support link above
If you are ready to get started, jump into the Creating a Fleet section to begin creating your first fully managed MobiusFlow® device on balenaCloud.
Deploy MobiusFlow® to a balenaCloud fleet
A balenaCloud account with Microservices access (this requires a paid account)
A compatible balenaCloud fleet (Up Board, Intel NUC or Raspberry Pi 4)
You should always backup your MobiusFlow® device before deploying a new version.
See for more details
is a market place for balena.io compatible applications ready to be deployed to your device with just a few clicks.
Navigate to your and login in
Navigate to to select which version of MobiusFlow® to deploy
Navigate to the Apps page
Search for MobiusFlow
If this guide is being followed in the context of deploying MobiusFlow Connector software to as Raspberry Pi, ensure MobiusFlow Connector apps are used instead of the standard MobiusFlow App.
Select the correct device type
Click on the Deploy button
Balena will switch to your balenaCloud dashboard
If you already have a new fleet or want to upgrade the MobiusFlow® version on existing devices, select Use an existing fleet instead
Select the fleet from the drop down and click on the Deploy to fleet button
After a few seconds you will see the new release being built for your fleet
This will take a minute or two. Once the build is complete you will see the release on the dashboard. All devices, which have not been pinned to a specific release, in your fleet will automatically start to update to the new release.
You can also view the release history in the Releases page of your fleet.
Click on a device Summary to see which release it is running. You can also pin device to specific releases on this screen
You can create a new fleet here or deploy to an existing fleet. If creating a new fleet refer to the section for details on what settings are required
MobiusFlow Manager is the management platform MobiusFlow customers can use to the self-manage their MobiusFlow instances.
The full MobiusFlow Manager training course can be here.
Understanding the MobiusFlow® balenaCloud Device Variables
balenaCloud devices are configured using Device Variables. When deploying MobiusFlow® to a balenaCloud fleet a number of Device Variables are created with default values. These are defined at the fleet level but can be overridden at the device level. More information about working with balenaCloud Device Variables can be found here.
For most devices the only Device Variables that require changing are listed below. The rest can be left at their default values.
MOBIUS_LICENCE
MOBIUS_HUB_ID
Remember to override the Device Variables at the device level and not at the fleet level.
Any changes at the fleet level will apply to all devices in the fleet.
The image below shows the Device Variables created when MobiusFlow® is deployed to balenaCloud.
Expand the items below for detailed information on each Device Variable
For MobiusFlow 1.x.x only
The service diagnostics and control page shows all of the configured services, their current status and controls to start and stop services.
The Run State column (2) shows the current run state of the services in a traffic light. The colours are defined as follows:
Grey - Not running, never started
Red - Not running, manually stopped
Amber - Starting or attempting to start
Green - Running
The Actions column (3) has start / stop buttons for each service. Services can be manually started or stopped by clicking on the action buttons.
These action buttons do not modify the value of the Run on Start checkbox on the services configuration page.
The service status column (4) shows the current status of all running services. In addition to a text message, the statuses are colour coded as follows:
Amber - starting or status unknown
Red - service is running but in fault (see text message for details)
Green - service is running and not in fault
The values shown in the Service Status column are tied to the service status object associated with the service. These status objects are automatically created and updated by the services as object profile ID 0001 with instance 0001. You can read the status of these objects but should not write to them.
The View Objects column (5) are hot-links to the Objects Diagnostics page, but filtered to only show objects belonging the the relevant service.
The Objects diagnostics page can be shown by clicking on the Objects button on the left of the screen (section 1 in image below) or by clicking on the View Objects hot-link described above. To view all objects belonging to all services use the Objects button (section 1 in image below).
Clicking on the plus sign (3) next to an object expands it to show all of its resources and their current values (2).
It is possible to manually modify a resource's value by writing to, or clearing a value in its priority array (see MobiusFlow Architecture). Click on a resource to display its full priority array. Click on a priority to modify its value or clear it.
Resource value modifications are temporary and could be overwritten by a service or Node-RED flow, and do not persist between service restarts or node reboots.
Deploy MobiusFlow to on pre-existing hardware either On-Prem or in the Cloud
Page coming soon. Please contact support@mobiusflow.com to arrange a support call on this topic.
Configure the network interfaces for a balenaCloud device
The configuration of the network interfaces of a MobiusFlow® balenaCloud device is handled by the manage microservice. All configuration is stored in a JSON file which can be updated by plugging in a properly configured USB memory stick or through the balenaCloud device terminal.
As each device type has different configurations and names for the underlying network interfaces, the structure of the network configuration may differ depending on the device type you are using
Navigate to your balenaCloud dashboard and login in
Navigate to the Device Summary page of the device you want to configure
Open a terminal in the manage microservice
Change to the /data/.mobius/manage directory and edit the networks.json file by running the following commands:
This will open the network configuration file for editing using the vi editor
Make any required changes and save the file
Exit the terminal and restart the manage microservice by clicking on the restart icon next to the manage service
Be careful when changing the network interface you are using to connect the device to the internet as you could prevent the device from connecting to balenaCloud.
Using a USB memory stick to update the network interfaces is useful when none of the network interfaces is configured to connect to the internet so it is not possible to use the balenaCloud device terminal. You will obviously need physical access to the device to use this method.
Format the USB memory stick as FAT32
Rename the USB memory to MOBIUSCONF
Create a file on the USB memory stick called networks.json
Open the file on your laptop or PC in your favourite text editor and paste in the correct JSON configuration from the examples above
Make any required changes
Save the file and unplug the USB memory stick from your laptop or PC
Plug the USB memory stick into any of the USB ports on your device
Reboot your device
When the device reboots it will copy the networks.json onto the device and use the new configuration for its network interfaces (this will take a minute or two)
You can then remove the USB memory stick and your device will continue to use the new network configuration.
MobiusFlow Toolbox is the User Interface allowing users to configure and interact with MobiusFlow engine.
The full training course on the MobiusFlow Toolbox can be found here.
Configure your MobiusFlow Connector and connect it to a MobiusFlow instance
It is possible to have up to two radios for wireless sensors in a single connector. This is useful when you have combination of sensors using different protocols.
The current options are EnOcean and Workplace Occupancy using either 868MHz for the EMEA region of 915MHz for the USA and Canada.
Configure a MobiusFlow instance for connectors
Configuring MobiusFlow for use with Connectors uses the MobiusFlow Connectors service. A full guide on how to use this service can be found .
Overview of MobiusFlow Connectors
The Connector collects data from sensors and sends data to actuators via standard wireless sensor protocols such as EnOcean and Workplace Occupancy, and sends this data securely to a MobiusFlow using an MQTT based Protocol.
Once the data has been received by a MobiusFlow instance, it is decoded and the associated MobiusFlow object is updated with the latest sensor readings which can then be processed by the gateway.
There are several hardware options for the MobiusFlow Connector software:
What are the mobius, manage, and mongodb microservices?
balenaCloud devices can run multiple microservices in separate Docker containers. Deploying MobiusFlow® to your device will create three microservices. You can start, stop and view logs for each service on the balenaCloud device summary page.
This microservice runs the MobiusFlow® application.
A full version of MongoDB which you can use to store / retrieve data in flows.
The default settings are
For MobiusFlow 1.x.x only
The configuration page is used to create and configure the MobiusFlow configuration for a Mobius node (see ). The page is split into five main sections:
The main menu
The services palette
The objects palette
The configuration tree
The service and object configuration section
The main menu is displayed on all pages. It allows switching between Configuration, Diagnostics, Node-RED Flows and Administration. The Administration option is only shown for users who have admin privileges.
The services palette shows the list of Mobius services that can be added to the configuration. To add a service to your configuration drag it from the services palette and drop it on to the configuration tree.
The objects palette shows the list of Mobius objects that can be added to the configuration. To add an object to your configuration drag it from the objects palette and drop it on to a service in the configuration tree.
The configuration tree shows the services and objects currently added to the configuration. Clicking on the triangles on the left of the tree either expands or contracts a branch of the tree. The currently selected item is shown as highlighted in orange.
To delete a service or object, hover over the item and click on the dustbin icon which appears to the right of the item.
Deleting a service deletes all associated objects
This section is dynamic and updates depending on which item has been selected in the configuration tree. If a service has been selected the service's configuration properties are displayed. Similarly, selecting an object or object resource shows the relevant configuration options.
Always click the Save Changes button to persist changes to a service, object or resource configuration. Any changes to a service, object or resource only become active after the service has been restarted on the diagnostics page.
Create a new balenaCloud fleet
After signing up to follow their instructions to create a fleet and add your first device. We have simplified the process so you will only need to perform some of the actions they list. The steps below outline the process but for more information see the balena.io .
This guide assumes you will be using a Raspberry Pi 4. The instructions are the same for the UP and Intel NUC devices with the exception of loading the initial balenaOS onto your device.
A balenaCloud account with Microservices access (this requires a paid account)
A fleet is a collection of devices with the same device type (or architecture). Fleets allow simple management of a group of devices
Navigate to your and login in
Navigate to the Fleets page
Click on the Create Fleet button
Enter a fleet name
Choose device type Raspberry Pi 4 (using 64bit OS)
Select fleet type Microservices
Click on the Create new fleet button
The Administration page covers user management, backup and restore, licence settings, security as well as setting the node's Hub ID. The page is divided into corresponding tabs accordingly.
Users can be added, modified and deleted from within the User Management Tab on the Administration page.
License your MobiusFlow® instance
All MobiusFlow® instances require a valid licence to run. Licences define the maximum number of MobiusFlow® objects that you can add to an instance. For more information about MobiusFlow® licences refer to the page.
A valid MobiusFlow® licence (licences can only be used on one device)
Licences are added to balenaCloud devices by setting a device variable. All required device variables are created automatically when you deploy MobiusFlow® to a fleet. For more information see .
Licences must be added by overriding a device's licence variable and NOT changing the fleet's variables.
Navigate to your and login in
Navigate to the correct fleet and device
Select the Device Variables page. You will see a list of all of the device's variables with override buttons next to each variable
Click the override button next to the MOBIUS_LICENCE variable
In the popup delete the text <replace with your licence code> and enter your licence code
Leave all other settings as their default values and click the Add button
MobiusFlow® will restart to install the licence
If you extend an expired licence or you purchase a larger licence you do not need to update the licence code
Under some circumstances it may be necessary to enter a new licence code. In order to make the new licence code work follow the procedure above to enter a new code
You will also need to tell MobiusFlow® to renew its licence by setting the Device Variable MOBIUS_LICENCE_RENEW to true
Click the override button next to the MOBIUS_LICENCE_RENEW variable
In the popup change the value from false to true
Leave all other settings as their default values and click the Add button
Wait for MobiusFlow® to restart, confirm that the new licence is working and reset the Device Variable MOBIUS_LICENCE_RENEW to false
Click the override button next to the MOBIUS_LICENCE_RENEW variable
In the popup change the value from true to false
Leave all other settings as their default values and click the Add button
Congratulations, you have deployed your first MobiusFlow® device on balenaCloud.
MobiusFlow has been containerised and is run via docker.
Below is an example docker-compose.yml file you could use when running MobiusFlow. In this example, an online version of MobiusFlow 1.19.1 is used. Note that, as well as the MobiusFlow service (labelled simply 'mobius'), the file also containers a reference to an nginx and mongodb containers.
The nginx container is used for port mapping, and mongodb container used as a database. Neither of these are required to run MobiusFlow.
This file can also be downloaded here:
It is important to include the correct licensing information within the environment variables of your docker-compose.yml file.
Add your device to a balenaCloud fleet
This guide assumes you will be using a Raspberry Pi 4. The instructions are the same for the UP and Intel NUC devices with the exception of loading the initial balenaOS onto your device.
More information and instructions for adding other device types can be found .
A balenaCloud account with Microservices access (this requires a paid account)
A balenaCloud Raspberry Pi 4 Fleet (see )
A Raspberry Pi 4 with minimum 1Gb RAM and 8Gb storage (eMMC or microSD card. The following instructions are for an SD card)
A power supply for your Raspberry Pi 4
An Ethernet network cable
An internet router with a free Ethernet port (or an Ethernet port on your LAN with internet access)
An SD card adaptor for your laptop or PC
balenaEtcher installed on your laptop or PC. You can download balenaEtcher
Navigate to your and login in
Navigate to the Fleets page
Click on the fleet you want to add a device to
Click on the Add device button
Leave all of the default settings. You can add a WiFi network (client or AP) later.
Select the Download balenaOS option in the drop down button. The balenaOS will start to download
Place your microSD card into your SD card adaptor and connect it to your laptop or PC
All data on your SD card will be overwritten!
Open balenaEtcher
Select Flash from file and choose the balenaOS image you downloaded above
Select your SD card as the target
Click on the Flash button
balenaEtcher will burn the balenaOS to your SD card and make it a bootable image. Wait for this to complete and for the image to be verified
Remove the SD card from the SD card adaptor and insert it into your Raspberry Pi 4's SD card slot
Plug the Ethernet cable into your Raspberry Pi 4's Ethernet port and your network
Power up your Raspberry Pi 4
After a few minutes your new device will appear in the balenaCloud dashboard. Navigate to your balenaCloud dashboard, select your fleet and view the fleet's Summary page.
You device will be added to the list at the bottom of the page. It will be given a random name which you can change on the device's summary page
If your device does not appear in the list, check that it is powered up and that the network port you have it plugged into has an internet connection.
A full guide on configuring MobiusFlow for use with Connectors can be found .
Manages network interfaces. See for more information
You have created your first balenaCloud fleet! Now go to to add a device to this fleet
Backup and restore functionality is accessed via the settings tab on the Administration page. A full article covering backup and restore can be found .
All Mobius nodes are identified by their hub ID. This is a six character hexadecimal number and should be unique within any group of Mobius nodes. See and for more information about Hub IDs.
Your licence code will be shown in the Device Variables list (see for more information on all of the device variables shown in this list)
See the main on licensing for a full explanation of what is required for online and offline licensing as well updating a given licence.
You have successfully added a new device to your balenaCloud fleet. To deploy MobiusFlow® to this device go to
EXT00102
EMEA (868MHz)
EXT00110
EMEA (868MHz)
EXT00112
EMEA (868MHz)
EXT10102
US (915MHz)
EXT10110
US (915MHz)
EXT10112
US (915MHz)
Database
mobius
Username
mobius
Password
RmzsXQYReLHaCS5wWGjAPjtJ7VnTw4qL
Configure a connector to connect to a MobiusFlow® instance
A device with a web browser such as a laptop, tablet or smart phone, capable of connecting to a 2.4GHz WiFi access point
A SIM card removal tool, large paper clip or pin to push the configuration mode button
A powered MobiusFlow® connector
The connector's Serial Number
If you leave the connector in configuration mode for more than 5 minutes it will automatically reboot and leave configuration mode
The connector's configuration mode can be enabled in two ways:
Using a pin hold in the configuration mode button (inside the small hole to the right of the USB connector) on the front panel for 2 seconds
Release the button and the green LED will flash rapidly
Using your laptop / tablet / smartphone look for a WiFi network with the same name as the connectors serial number
Connect to this network and enter the connector's Config Mode Password. The default is mobiusflow
Open a web browser on your laptop / tablet / smartphone and enter http://192.168.4.1 into the browsers address bar and hit enter
The web browser will show the connector's configuration Home page
This method is only available if you already know the IP address of the connector
Make sure that the connector and your laptop / tablet / smart phone are connected to the same Ethernet network
Open a web browser and browse to <your connector IP address>:8080 e.g. 192.168.1.20:8080
You will need to enter a user name and password. The user name is admin and the password is the same as the connector's Config Mode Password. The default is mobiusflow
After a short delay the web browser will redirect to the connector's configuration Home page
Manage certificates for TLS connections
When using TLS you will need to set the correct CA / Server certificates. You can have up to three certificates set. If the connector fails to connect using one of the certificates it will cycle through all three, trying each one until it connects
The default certificates are ISRG Root X1 certificates which are used when connecting to MobiusFlow® hosted instances of MobiusFlow®
You can set the certificate by pasting the certificate text into the selected certificate slot
If your setup requires the use of Client certificates you can set up to four different certificates and keys. Paset these into the selected certificate and key slots
You have three options to power the connector
PoE
Power over Ethernet (30 watts)
DC Supply via screw terminals
5 to 24Vdc 500mA
USB
5V 500mA via micro USB
You can connect to your network via wired Ethernet or 2.4GHz WiFi
The image and table below describe the connections and LED indicators on the front panel of the connector.
1
Ethernet port and PoE Supply
2
5 to 24vdc screw terminals
3
USB power
4
Configuration button
Push and hold to enter config mode or factory reset
5
Power OK indicator
Connector is powered
6
5 to 24vdc power OK
7
USB power OK
8
PoE power OK
9
MobiusFlow® connected
Connected to MobiusFlow® gateway
10
Network connected (upstream)
Network connection established
11
Module present in slot 1
12
Module 1 activity
Flashes when module 1 sends or receives data
13
Module present in slot 2
14
Module 2 activity
Flashes when module 2 sends or receives data
The product label is on the bottom of the connector. It shows the part number, software version and serial number of the product.
The serial number is required when configuring both the connector and your MobiusFlow® instance. Make sure you take a note of the serial number before starting
Configure the wired or wireless Ethernet connection
You can choose to use a wired or wireless (2.4GHz WiFi) connection to connect a connector to your MobiusFlow® instance
Select your network type using the Connect Via dropdown. The page layout will change depending on the option selected
When using a wireless connection you need to enter the WiFi network's SSID (name) and password. You can click on the Scan WiFi Networks button to get a list of available WiFi networks
You can set a connection timeout in minutes. If the connector fails to connect to a network within this time it will reboot and try again
You can choose to use a DHCP server to allocate the connector an IP Address or set a static IP Address. If you choose to use a static IP Address a few more options will be shown. Set these according to your network
Once you have configured all network settings click the Save button
Click the Home button on the settings saved confirmation page to return to the Home page
The Home page has the following buttons
Configure the wired or wireless Ethernet network settings
Manage all certificates for TLS connections. The default certificates are for MobiusFlow® cloud hosted instances but you can add your own if required
Configure the connection to the MQTT broker you chose when configuring MobiusFlow® for connectors
Change the configuration mode password
See information about the connector such as the software version, serial number, andwhich modules are installed
You can also update the firmware on this page
Reboot the device to exit configuration mode and use the new settings
Return all settings to factory default
If you forget your connector's Config Mode Password or want to fully reset all settings to the factory default follow the procedure below
A SIM card removal tool, large paper clip or pin to push the configuration mode button
Using a pin hold in the configuration mode button (inside the small hole to the right of the USB connector) on the front panel for 10 seconds
While you are holding the button in the green LED will start to flash rapidly and after 10 seconds the connector will reboot. Once you see the power on LED sequence release the configuration mode button
How to convert a Raspberry Pi into a MobiusFlow Connector
A Raspberry Pi is required. Currently supported Raspberry Pi models include:
Raspberry Pi 4
Raspberry Pi 5
An SD card for each Raspberry Pi is required to store the connector image. We recommend a minimum storage of 8GB.
Most protocol types require specific hardware to translate that protocol to the Raspberry Pi.
The following transceiver types are supported. Only 1 is required per Pi:
TCM310 (Pi Hat)
868MHz (Europe) EnOcean transceiver to plug into Raspberry Pi header
TCM310U (Pi Hat)
902MHz (North America) EnOcean transceiver to plug into Raspberry Pi header
USB 300 (USB Stick)
868MHz (Europe) EnOcean transceiver to plug into Raspberry Pi USB Port
USB 500U (USB Stick)
902MHz (North America) EnOcean transceiver to plug into Raspberry Pi USB Port
MobiusFlow Raspberry Pi connectors run Balena OS. Athlough not required, if your organisation registers with BalenaCloud, Balena OS grants a direct VPN link to the connector, allowing configuration changes to be made over the internet.
When using more than 5 devices, BalenaCloud becomes a piad service. As such, we offer versions of the Balena images which do not support remote access and therefore do not require a subscription to BalneaCloud.
The following, no remote access images can be downloaded:
The following is an overview of the steps involved to use BalenaCloud with MobiusFlow RPI connectors:
Create BalenaCloud Account
Create BalenaCloud Fleet
Attach BalenaCloud Fleet to the corresponding MobiusFlow Connector Balena Application
Add a new device to the fleet and download the subsequent Balena image
Etch the image
We have a full guide on how to use the BalenaCloud with MobiusFlow itself here. Please note
The above guide differs in the context of MobiusFlow Connectors because the BalenaCloud Fleets should be linked to the MobiusFlow Connector BalenaCloud applications, instead of the standard MobiusFlow BalenaCloud applications.
We recommend using the Balena Etcher tool to etch the images onto an SD Card. The tool is self-explanatory, but full full documentation of how to use the tool can be found here.
BalenaCloud charges hosting fees when more than 5 devices are associated to the account. If remote access to the Connector confiruation is not required, the device can be deleted from the BalenCloud fleet. The Connector software running on the device will remain, and the device will operate as normal.
Learn how to use the full version of MobiusFlow
Set the configuration mode password
The Config Mode Password is used to login to the configuration pages of the connector. The default password is mobiusflow
You can change the password on this page
If you forget your password you will have to factory reset the connector
Click the Save button
Click the Home button on the settings saved confirmation page to return to the Home page
Get connector details and update firmware
The about page shows you information about the connector. You can also update the connector's firmware by clicking on the Update Firmware button
Click on the Update Firmware button on the About page
Click on Choose File and select the firmware file you want to upload
Click on the Update button
After a few minutes the connector will reboot and start running the new firmware
Make sure that you choose firmware with the same model number as your connector!
Configure the MQTT connection to MobiusFlow®
MobiusFlow® connectors send and receive data via MQTT. You need to configure the MQTT settings to match the configuration you set in the Configuring MobiusFlow® section of this guide.
You can choose any MQTT client ID but this must be unique for your MQTT broker. The default is the connector's serial number
Enter the IP Address or URL of the MQTT broker. You do not need to specify MQTT:// or MQTTS:// before the URL
Enter the MQTT Port number. This is normally 1883 or 8883 for TLS enabled connections
If required enter the MQTT broker authorisation Username and Password. These can be left blank if no authentication is required
Enter the same pre-shared key (PSK) as you entered in the Configuring MobiusFlow® section of this guide
If you are using TLS make sure you check the TLS using CA Certificate option. You must also set the correct CA Server Certificate on the Manage Certificates page
You may also choose to use a Client Certificate and Key. Check this option if required and ensure that you have setup your client certificate and key on the Manage Certificates page
Once you have configured all MQTT settings click the Save button
Click the Home button on the settings saved confirmation page to return to the Home page
Page covers how to configure a Raspberry Pi Connector
If the Connector is hosted via BalenaCloud and has an internet connection, the configuration can be accessed anywhere via the BalenaCloud Public Device URL.
If the connector is hosted by MobiusFlow, please contact support to receive the Public Device URL.
The BalenaCloud Public Device URL can be found by Navigating to the connector device on the BalenaCloud fleet.
By default, the MobiusFlow connector will broadcast a WiFi access point, the name of which matches the connector's serial number (in the form of MF_XXXXX). Connect to this access point on a computer or mobile device. Then the configuration window is accessible by browsing to 10.42.0.1.
If the connector is connected to a local network via Ethernet or WiFi (with a known IP address) and you're able to also connect to this network using a computer or mobile device, then simple browse to the local IP of the connector.
When browsed to the configuration window of the connector, a login screen is presented.
The default password of all new MobiusFlow connectors is:
mobiusflow
Note that, if the connector is not new, this login password may have been changed.
When on the the home page, the current status of the connector is shown. This includes:
Serial Number
Required in the MobiusFlow connectors service. Note that this is copyable using the copy button displayed next to the number is itself
Ethernet Connection Status
The IP address will be displayed if connected
WiFI Connection Status
The IP address will be displayed if connected
On-Board WiFi Hotspot (Labelled WiFi AP)
Will show a green tick if the On-Board WiFi Access point is enabled
MQTT Connected
Will show a green tick to indicate the connector is has connected to MobiusFlow
Module 1 / Module 2
Will show which types of transceivers are physically connected to the Raspberry Pi
The main menu also allows navigation to the connectors configuration pages. These includes those for Network Configuration, MQTT Configuration, Certification Configuration, and the Change Password page (allows the connector configuration password to be changed).
It is critical that the MobiusFlow connector's network situation is such that it can access the target MobiusFlow instance over the network. This may be over the internet or simply over a local network.
In either situation, the connector must be connected to the network and the configure network page allows for this.
The connection type allows choosing between a Wired or WiFi connection.
If using a Wired connection, ensure the Raspberry Pi is plugged in via Ethernet.
If using WiFi mode, the WiFi SSID and corresponding password must be populated.
Note that: In WiFi mode, the Wired network interface will remain enabled in the background. This acts as a secondary fall back interface, useful for accessing the connector the WiFi has failed to connect.
Note that: If using in WiFi mode, using the Connector as WiFi access point is no longer possible. This is because the Raspberry Pi only contains a single WiFi adapter and therefore it can only be used to either connect to WiFi or as an access point.
The TCP/IP settings allow switching between DHCP and Static IP allocation. Unless there are specific reasons to set the connector on a static IP address, using DHCP is recommended.
If using the connector in Static mode, the Subnet Mask, Default Gateway and DNS 1 can be set. If it is not clear what to use here, use the default settings as shown below.
Note that, the default gateway is not required however if the connector required access to the internet, the local IP address of the internet providing gateway (Network router / modem) must be populated here. This is often in the form XXX.XXX.XXX.1 or XXX.XXX.XXX.0 .
Setting the connector up to be a WiFi access point is useful for two reasons.
Firstly, it allows you to connect to it, allowing for easy wireless access to its configuration page. Secondly, if this connector has internet access via ethernet, it can act as an internet enabled hotspot to connect WiFi device to, in-turn giving them internet access.
Note that: If using in WiFi mode, using the Connector as WiFi access point is no longer possible. This is because the Raspberry Pi only contains a single WiFi adapter and therefore it can only be used to either connect to WiFi or as an access point.
If the WiFi access point is enabled, a WiFi SSID and Password must be set. It is recommended the default SSID is used (This matches the the connectors Serial Number)
To save the changes click the save button. If there are an issues with the configuration, such as an invalid input in one of the fields, the form will show this and the changes will not be saved. If the settings were saved correctly, a pop up will show this after the save button has been clicked.
Note that, when changes are saved here, they're only being saved to the local changes within the browser window. To realise the changes in the connector, the Reconfigure and Reboot button must be clicked on the main menu
Connectors use MQTT to communicate with MobiusFlow. As such, the Configure MQTT page allows the connector to be pointed at a specific MQTT broker. In almost all cases, the broker will be running the MobiusFlow instance itself.
Before setting up the connector's MQTT configuration, ensure you first set up the MobiusFlow instance ready for this connection. A guide on how to do this can be found here.
The configuration window shows the key 6 properties which must configured to allow an authorised connection to the MQTT broker.
Address
The IP location of the MQTT broker. This may be a local IP address, an internet IP address or a DNS name. Do not include any protocol prefix (such as mqtt:// or https://)
Port
The port the MQTT broker is running on. If using the MQTT broker within MobiusFlow, this port number is set and shown within the service settings within the MQTT broker service within MobiusFlow. This is often 1883. Note that, if the MobiusFlow instance is hosted in the MobiusFlow cloud, port 1883 is externally exposed on 8883 (i.e. use 8883 even if MobiusFlow shows 1883)
Username
The username of any MQTT user set up on the MQTT broker (if using the broker within MobiusFlow, this can be set up within the MQTT broker service settings within MobiusFlow)
Password
The password of any MQTT user set up on the MQTT broker (if using the broker within MobiusFlow, this can be set up within the MQTT broker service settings within MobiusFlow)
PSK
The pre-shared key of the connector. This can be anything however it must match the pre-shared key set up within the target connector object within the connectors service within the MobiusFlow instance.
Use TLS
A true / false property determining if the connection will attempt to use MQTT of TLS. This depends on how MobiusFlow is hosted and where the connector is accessing it from. Most set ups which involving accessing MobiusFlow over the internet will use TLS. If using an instance of MobiusFlow hosted via the MobiusFlow cloud, always enable TLS.
To save the changes click the save button. If there are an issue with the configuration, such as an invalid input in one of the fields, the form will show this and the changes will not be saved. If the settings were saved correctly, a pop up will show this after the save button has been clicked.
Note that, when changes are saved here, they're only being saved to the local changes within the browser window. To realise the changes in the connector, the Reconfigure and Reboot button must be clicked on the main menu
Once the changes have been made locally, to implement the changes within the connector, click the Reconfigure and Reboot button.
This will cause the connector to reboot. As such, the configuration window's connection to the connector will be lost. This may automatically be restored once the connector reboots, but this may not be the case if the connector's configuration has changed such that it is no longer accessible over the network.
Reference material for the environment in which MobiusFlow Cloud Instances exist
It is optional to include the LoRaWAN Stack when specifying the hosting type on instance creation. This Stack will grant the ability to use the .
If included, an instance of and it associated infrastructure will be hosted in the background. Accessing this is not necessary to use the LNS, however it is accessible if required. Full details can be found within the .
The table below shows a simple overview illustrating how the ports are mapped. This is a simple overview suitable for most users.
Different parts of the MobiusFlow solution run in different docker containers. These communicate via docker routing. Docker routing allows container names to be resolved in the Host OS, for example, to refer to the Mobius Engine API from the Host OS or a container that is not the mobius container, one could use mobius:8442 (container name followed by Host OS Port).
This means that, if communication between containers is required, the Host OS port and container is required. As such, these are included in the advanced port mappings table below.
The table below gives a full description of the port mappings a MobiusFlow Cloud hosted environment is subject to.
Within a MobiusFlow system all hubs, services, objects and resources are identified by a unique address known as a Uniform Resource Identifier or URI. These URIs are hierarchical so given the URI for a Mobius resource it is possible to identify which object the resource belongs to, what the object type is, which service the object belongs to and which Mobius node the service is running on.
An object’s URI (or name) is defined in 4 parts, namely the hub ID (HID), service ID (SID), object profile ID (PID) and instance number (INS). A fifth part is added when accessing a specific resource, the resource ID (RID).
Each part of an object’s URI is a uppercase string of a defined length (as shown in the table below). The URI’s parts are separated with a forward slash (/).
A full URI is typically defined as HID/SID/PID/INS/RID.
It is possible to address any part of the system by only using the required parts of the URI. e.g. to address a service only the first two parts of the URI are used HID/SID and to address an object only the first four parts are used HID/SID/PID/INS.
An example of an object URI for an object of instance 1, profile 3A, created by service 1F connected to hub 1 is:
000001/01F/003A/0001
and if addressing resource 40 on that object the full URI would be:
000001/01F/003A/0001/40
Under certain conditions, such as subscribing to a resource’s change of value event, it is possible to use wildcards in the URI. These wildcards are described in the table below and follow the MQTT standard.
A typical MobiusFlow system consists of a single or multiple MobiusFlow nodes connected together via a TCP/IP network. Each node is capable of operating independently of the rest of the system, but nodes can interact with each other to form a complex system. All node interaction takes place through one or more brokers via a node’s router.In a multi-node system, the location of the broker is not important. It can reside on the same device as one of the nodes or on an independent device.
Each node is classed as, and exhibits the behavior of, an device. In this context edge devices are not only field devices but could also be on the edge of a server or cloud server providing the server with connectivity to all of the true edge or field devices.
A Mobius node consists of a central Mobius hub, one or more Mobius services and optionally one or more Mobius routers.
Services contain the service logic and an object data store. Connections to sensors, actuators and other communication interfaces such as Modbus or BACnet can be added depending on the service’s purpose and controlled through the service's logic.
The object data store models the physical or virtual connections and provides a standardised method for services and other nodes to communicate and share data with each other through Mobius objects.
All of the communications between services through the hub or nodes through routers and brokers is based on the protocol. The MobiusFlow protocol has been defined on top of this MQTT protocol providing a well-defined API enabling different physical devices and protocols to communicate with each other in a consistent way.
Mobius nodes follow the architecture pattern, where each service is a stand-alone process capable of communication with other microservices creating a large application from small manageable pieces.
Routers are used to cross node boundaries. They provide a secure mechanism for nodes to share data using the MobiusFlow protocol.
The logical structure of a node is detailed below. This diagram shows the hierarchical relationship between all of the parts which make up a node and how objects contain resources, services contain objects and hubs connect to services and routers.
The Mobius URI structure allows addressing any part of a node at any depth.
A Mobius hub is the foundation of a node. At its heart, a Mobius hub is just an MQTT broker which manages and links Mobius services and Mobius routers. Hubs are responsible for ensuring that all services and routers are valid members of a node by verifying their pre-shared authentication key on connection.
When service or router connects to a hub, and has been validated, the hub provides it with a copy of the Mobius object profiles and pre-shared keys files, ensuring that all services and routers connected to the hub are able to communicate and understand one another.
Mobius services are the engines which drive MobiusFlow. Each service is essentially a microservice performing a specific task and possibly acting as an interface to a piece of hardware or a 3rd party service such as Microsoft's Azure platform or the IBM Cloud.
All services MUST implement the full MobiusFlow protocol to enable them to connect to hub and communicate with other services. In addition to implementing the MobiusFlow protocol, services can create Mobius objects to store and share data and can also contain service specific logic to perform the task that they are designed for. When creating services, try an keep them focused on one task and create additional services to perform other tasks. This ensures that services are reusable and Mobius systems can be configured to only contain the logic that they require.
Mobius routers control all MobiusFlow communication into and out of a node. This ensures that nodes are secure and allows nodes to discover each other within a MobiusFlow system.
Routers are capable of routing messages between services belonging to different nodes, essentially allowing a service on one node to read, write and subscribe to change-of-value events on objects in another node.
Mobius objects are predefined in an object profiles file which is passed to a services by the hub when a service connects.
Mobius objects contain one or more resources. It is these resources which are used to define objects that mimic or represent real-world objects. An example of a single object is a room temperature sensor. This object may have resources which define the sensor’s name, location, asset reference, engineering units, set point and actual measured value.
Each resource is capable of storing a single value which can currently be of type Boolean, Number, String, DateTime or TimeSpan. Resources also store meta-data about the value. The actual meta-data depends on the value type chosen. Resources can be read only or read/write. Read only resources have their values set when they are created.
When reading the value of a resource the actual value is returned in the PV(present value) property. The PV is always equal to the value of the highest active (non null) priority in the resource's priority array.
MobiusFlow is a software platform designed for control and monitoring of sensors and actuators in simple (single instance) or complex (multiple instances working together) systems (see for more info). It has a microservice based architecture where each microservice can contain both application logic and object state. Object types are predefined and contain any number of resources which represent the values associated to an object’s attributes (e.g. a temperature sensor may contain resources for Name, Location, Temperature etc.). A MobiusFlow node (a single instance of the software) contains a central hub and one or more microservices. All microservices contain an MQTT client and communicate with each other via the hub which is an MQTT broker. The broker is responsible for authenticating the services when they connect. The TCP/IP port used for internal MQTT comms is normally firewalled off to prevent any external traffic and all messages passed between microservices are encoded using to ensure message integrity. If communication is required between Mobius nodes, a Mobius router is added to the configuration. This is a special microservice which handles external traffic between Mobius nodes. All traffic passed through a router is encoded with JWTs using pre-shared keys (PSKs) specifically for this purpose ensuring that no internal PSKs leave a Mobius node. External traffic is also MQTT based and can be secured with TLS if required. One of the most important part of MobiusFlow is the “ Mobius protocol” over MQTT. This is a predefined set of MQTT topics based around the Mobius object URIs which allows “two way point to point” messaging via MQTT. This means that Mobius nodes and microservices can discover other nodes, services, objects and resources and microservices can read and write resource values on objects belonging to any other microservice on any node within a Mobius system. In addition to reading a writing, a microservice can subscribe to object or resource level change of value (COV) messages. The MobiusFlow protocol is similar to the LWM2M protocol but over MQTT.
The is designed to allow efficient communication for IoT Devices whilst providing structure and definable trust boundaries.
There are 2 ways to move messages to and from a one is via the designed for this task, and preserving the integrity of the the message within the node. the other is with a dedicated , this breaches that integrity to a degree but may be desirable and even necessary in some situations.
With Each node consisting of the base of a hub and one or more services, and optionally routers. If for the purpose of this initial discussion assume that the services are only communicating with local hardware, or handling logic, therefore having no mechanism for communicating off of the local hardware. We will discuss how this can be achieved later on.
As the hub is created a pre-shared key (psk) file is generated, these can also be changed using the configuration service. each valid service must have a copy of its psk, to successfully authenticate with the hub. The hub will have the corresponding psk in its psk file. This key is used as a secret key as part of a .
When a service connects to a hub it uses the . The MQTT username is the service's and 001F/01F and the MQTT password is a JSON object containing the services PID and SID with a timestamp which is then converted into a JWT (JSON Web Token). The time stamp ensures tight time synchronisation is a requirement and provides greater integrity.
If the service signs its JWT with the same psk as is stored in the hub's psk file it will successfully complete the authentication process to the hub. On doing this it will be sent a copy of the hubs psk file, giving the service the ability to the received directly signed messages from authorised services.
After successful authentication the service will have a copy of the psk of all services that are authorised to communicate through the hub. The service will then with no further action from the hub be able to validate the authenticity and integrity of messages that have come from a service on the same node.
Once passing traffic the MQTT message will consist of:
the JSON Web Token will also carry the topic, the message payload itself, and a timestamp this will all be hashed along with the service own key creating a to allow integrity checking:
The time stamp will allow for the message to have a validity life span that can be configured for all services connected to the hub. Internally all messages will be signed in this way and therefore provide a high degree of integrity to the internal communication.
Services may be intentionally created to connect to external interfaces such as a service the connects to remote I/O via TCP/IP or an Azure IoT hub Client, if it is desired to configure a node in this scenario, it is recommended to utilise two interconnected nodes one that handles the external communications and one that handles the more trusted internal communication, the nodes could exist on the same hardware. doing so would allow the creation of multiple trust boundaries
The internal side of the router acts in exactly the same way as a service, but will automatically subscribe to all messages from every other service within that node.
The external side of the router will have the ability to sign its messages in the same fashion as the services do for internal communication, it will have two pre shared keys and internal or service psk and an external psk.
To allow router to validate the authenticity and integrity of messages form other routers, the external psks will be required to be manually shared between all the routers that want to take part in this communication. the result is that the external psk file will contain the keys of all authorised routers and therefore nodes.
This communication is done over the WebSocket protocol as it reduces the need to configure firewalls to allow MQTT communication. node peering is best used in an enclosed environment where there is a high degree of confidence in the integrity of the network with which the communication is taking place. This is like to require the input of network and cyber security professionals.
In larger deployments of nodes peering may not be viable because of the administrative overhead, or there may be low confidence in the network integrity. there may also be a require to not only ensure Authenticity and Integrity of messages, but also confidentiality.
In this case it will almost always be easier to provide the node with access to the public internet where things like server name resolution and certificate control are well practised and understood.
Due to the large complexity in provisioning the system in this scenario, It is envisaged at this stage that IAconnects will provide the service that provides the functions of the architecture shown above.
Each hub within a Mobius system is given a unique ID. This is a six digit hex number which forms the first part of the Mobius URI hierarchy. When referencing a hub, for example during a discovery process, this unique ID must be used (see ).
Each service within a Mobius node is given a unique ID. This is a three digit hex number which forms the second part of the Mobius URI hierarchy. When referencing a service, for example during a discovery process, this unique ID must be used (see ).
Routers are split into two parts, one side of the router communicates internally with its associated hub and all of the services within a node, while the other side of the router communicates externally through a 'no-mans' broker to other routers on other nodes. All external communication is done using MQTT over the protocol. This could be done over a secure or non-secure connection (ws:// or wss://).
The key to the MobiusFlow system is Mobius objects. These objects typically model real-world objects and provide a mechanism for sharing data and storing state in a consistent way. Each object has a unique identifier or which can be discovered and used by any part of the MobiusFlow system.
Each object within a Mobius node is given a unique ID. This ID consists of two parts and is made up of the object profile ID (PID) which describes the object's type, and the object's instance number (INS). The PID is a four digit hex number which forms the third part of the Mobius URI hierarchy and the INS is a four digit hex number which forms the fourth part of the Mobius URI hierarchy. When referencing an object, for example during a discovery process, this unique ID must be used (see ).
Each resource within an object is given a unique ID. This is a two digit hex number which forms the fifth and final part of the Mobius URI hierarchy. When referencing a resource, for example during a read, this unique ID must be used (see ).
Resources store their values in a priority array. This priority array works in a similar manner to a priority array. The array has 16 possible locations with location 1 being the highest priority and location 16 being the lowest priority.
Although as just discussed it is not impossible to create service that communicate to external interfaces, it is not recommended to use these on the same node as it compromises the integrity of the node. It is preferable to utilise a known route into and out from the node, it is recommended that this route is a .
Routers are split into two parts, one side of the router communicates internally with its associated hub and all of the services within a node, while the other side of the router communicates externally through a 'no-mans' broker to other routers on other nodes. All external communication is done using MQTT over the protocol. This could be done over a secure or non-secure connection (ws:// or ws s://).
Node Peering will require the provision of a MQTT broker capable of using . this will be a function that will be optionally provided by the mobius router.
to achieve this the nodes should utilise WebSockets over (TLS), this is in fact simply a upgrade in the same way WebSockets are used, on a connection
8443
8442
mobius
8443
Mobius Engine API
All
8080
8080
toolbox
8080
MobiusFlow UI (Toolbox)
All
1880
1879
mobius
1880
Flows access
All
8883
1883
mobius
1883
Free - Normally MF MQTT Broker
All
30815
30814
mobius
30815
Free
All
30817
30816
mobius
30817
Free
All
8081
8082
chirpstack
8082
Chirpstack UI
MobiusFlow with LoRaWAN Stack Only
/
1884
mosquitto
1884
Chirpstack MQTT broker
MobiusFlow with LoRaWAN Stack Only
/
8090
chirpstack-rest-api
8090
Chripstack Rest API
MobiusFlow with LoRaWAN Stack Only
1700
1700
chirpstack-gateway-bridge-eu868
1700
EU868 Chirpstack LoRaWAN Gateway Bridge
MobiusFlow with LoRaWAN Stack Only
1701
1701
chirpstack-gateway-bridge-us915_0
1700
US915_0 Chirpstack LoRaWAN Gateway Bridge
MobiusFlow with LoRaWAN Stack Only
1702
1702
chirpstack-gateway-bridge-us915_1
1700
US915_1 Chirpstack LoRaWAN Gateway Bridge
MobiusFlow with LoRaWAN Stack Only
Wildcard
Meaning
Example
+
Any value in this location
000001/+/003A/+/40
#
Any value in this location and all subsequent locations
000001/01F/#
8443
8443
Mobius Engine API
All
8080
8080
MobiusFlow UI (Toolbox)
All
1880
1880
Flows access
All
8883
1883
Suggested use for MQTT Broker. If the port is set to 1883 within the service, it will be accessible in the outside via 8883.
All
30815
30815
Free
All
30817
30817
Free
All
8081
8082
Chirpstack UI
MobiusFlow with LoRaWAN Stack
1700
1700
EU868 Chirpstack LoRaWAN Gateway Bridge
MobiusFlow with LoRaWAN Stack
1701
1700
US915_0 Chirpstack LoRaWAN Gateway Bridge
MobiusFlow with LoRaWAN Stack
1702
1700
US915_1 Chirpstack LoRaWAN Gateway Bridge
MobiusFlow with LoRaWAN Stack
URI Section
Length
Example
Description
HID
6
000001
The Mobius Hub or node ID. This should be unique within a MobiusFlow system.
SID
3
01F
The microservice ID. This must be unique for all services on a single node.
PID
4
003A
The object's profile ID. This describes the objects type. Object profiles determine what resources an object has available.
INS
4
0001
The object's instance number. This is unique for each object of a specific type belonging to a service.
RID
2
40
The resource ID
Description of MobiusFlow Engine RESTful API V1
The MobiusFlow Engine API is used interface with MobiusFlow via http and https. The API allows clients to perform all functions within MobiusFlow, from managing user accounts, to getting and setting data, as well as manipulating the MobiusFlow configuration by adding, removing and editing MobiusFlow objects, services and flows.
Additionally, the API allows clients to subscribe to specific real-time events within happening within a given MobiusFlow instance (see subscription controller). In this use case, the API will upgrade the client to use the Websocket protocol (ws / wss).
All API endpoints are described in the following subsections. The subsections are divided into the functional groups (controllers); Authorization, Discover, Node, Service, Object, Profiles, Command, Flows and Subscription.
If connecting to a local instance of MobiusFlow, the http protocol can be used. If connecting to an instance of MobiusFlow via the internet, https should be used. The API is always exposed on port 8443.
All endpoints lead with:
{{protocol}}://{{hostname}}:8443/api/v1
Where the protocol and hostname parameters are replaced with the true protocol and hostname. For example, in the case of connecting to a local instance of MobiusFlow, the leading path would look like:
http://localhost:8443/api/v1
Swagger documentation describing the API in full, can be found here. This documentation includes example bodies and responses for every endpoint. Finally, a postman collection containing parameterised examples of all client calls can be downloaded below.
You can use the backup and restore feature to backup the full configuration of a MobiusFlow instance, and to restore the configuration of a MobiusFlow instance to a previously saved backup.
In summary, all configuration data of a MobiusFlow instance can be stored within a single .zip file. This means the current configuration of any MobiusFlow instance can be backed up by simply downloading this backup file and saving it in a safe location of your choice. Similarly, the configuration of any MobiusFlow instance can restored by uploading one of your previously saved backup files.
All backup and restore functionality is accessed through the 'Backup/Restore' menu located on the 'Administration' Tab.
On the 'Backup/Restore' menu, you can create a backup by clicking 'Backup'.
Giving the backup an appropriate name is recommended. In the above example, the name 'example-backup' has been set. The system will automatically append date/time information to the file name.
Once the backup file has been created, click 'Download Zip' to download it.
Alternatively, the you can click 'Request new backup' to return to the previous menu and generate an updated backup file.
Be sure to save your backup file in a safe location! There is nothing worse than not being able to find a much needed backup file.
The restore feature is particularly useful if you want to copy a MobiusFlow configuration onto to other MobiusFlow instances, however it also useful if you've managed to break everything.
The 'Backup/Restore' menu is also used for restoring. You can restore by first clicking 'Upload Zip' and then browsing to the .zip backup file you previously saved in a safe place.
Once uploaded, the menu will show the backup information as well as allowing you to click 'Restore'.
Accept the a confirmation dialog to proceed.
You will be notified that the restoration process has started and then MobiusFlow will then reboot, completing the restore process.
Congratulations for completing your restore!
The MobiusFlow software has been developed as an MQTT object bus which normalises all device data into standardised MobiusFlow objects which allow interoperability between all devices either real or virtual in the field or Cloud.
MobiusFlow enables actuators, sensors & controllers to connect, control and communicate with each other and to the Cloud so that IoT solutions using scalable monitoring, visualisation and predictive analytics can provide valuable insights into your business and act upon them automatically.
A complete control and communications platform
Microservice based architecture
Secure, open protocol based on MQTT
Scalable to 1000s of devices
Platform and language independent
Does not depend on a network connection for local control
Provides full discovery of nodes, objects and resources in all directions
Pub / Sub change of value notifications
MobiusFlow has been designed from the ground up as a micro service based design with a simple but common set of API commands. All communication between micro services is performed using the MQTT protocol, ensuring that micro services can be written in any programming language and will run on any device capable of TCP/IP network communications. The only requirement for any MobiusFlow system is that it contains at least one Node. This Node consists of a MobiusFlow Hub which initiates and facilitates communication between micro services in a secure way. Micro services can run on the same device as the Hub, or on another device such as a temperature sensor, connected to the Hub via a connection capable of transmitting via TCP/IP (provision has been made for future expansion, by adding translation services, to allow micro services to communicate with the Hub over any transmission medium capable to transmitting binary data).
Each Node is typically a stand-alone island which does not require any connection to any other device in order to perform local control. Nodes can be connected together via secure MobiusFlow Routers allowing the creation of a network of interconnected Nodes. When used in this configuration, Nodes can share data with each other and influence the control algorithms running on any connected Node.
Vanilla MQTT has some limitations in its usefulness as a peer to peer messaging and control protocol. It is based around the Publish / Subscribe pattern which is ideal where multiple devices are sending data to a single end point for logging etc. MQTT can be used where devices or services need to have a two way peer to peer flow of communication but the different services need to be aware of each other at design time. MobiusFlow defines a protocol layer above MQTT which enables discovery of devices and services at runtime and then allows two way peer to peer communication to take place, ensuring that new devices and services can be added at any time without having any design time knowledge of the other devices and services in a system.
Training material used in conjunction or reference following a standard MobiusFlow training session 1.
This section outlines the major technologies reference in this training. Learning about this technologies is recommended.
MQTT (Message Queuing Telemetry Transport) is a lightweight and efficient publish-subscribe messaging protocol, commonly used in IoT (Internet of Things) applications.
MQTT is widely used for data transport throughout the MobiusFlow software.
JSON (JavaScript Object Notation) is a lightweight data interchange format that is easy for humans to read and write, and easy for machines to parse and generate.
Learn how JSON works here.
A basic knowledge of JSON is required when using the Flows (logic engine) within MobiusFlow.
EnOcean is a short distance wireless communication protocol used widely within the IoT space. Each EnOcean device has a unique identifier (UID) which is used to identify the sender of all EnOcean wireless telegrams.
During this training, EnOcean will be used as an exemplar IoT technology to demonstrate MobiusFlow from the device level.
A MobiusFlow instance runs a central MobiusFlow Hub. Services, each of which have a function within the overall solution, reside on the hub, and use it as a relay to communicate information.
A MobiusFlow object often represents a virtual equivalent of a real-world device, however can represent non-physical entities such as calculated data.
Some services can have MobiusFlow objects reside on them, often when the service needs to directly interact with those objects in some way. For example, objects representing EnOcean devices will always reside on an EnOcean devices service.
A MobiusFlow object contains many resources, each being its own individual data stream representing something about that object.
Below shows a screenshot from the MobiusFlow software of the list of resources associated to an EnOcean Temperature / Humidity / C02 sensor.
A point is a chargeable resource. Notice in the above screenshot, the points column is only populated for Temperature, Humidity and CO2.
Also notice how the MobiusFlow software calculates your total point usage and displays this at the bottom right hand corner.
All parts of the MobiusFlow hierarchy are assigned a unique URI with the following structure:
HID/SID/PID/INS/RID
HID
Hub ID
6-Digit Hex
SID
Service ID
3-Digit Hex
PID
Profile ID (A MobiusFlow profile can be thought of as an object type)
4-Digit Hex
INS
Instance ID (The ID of that object instance)
4-Digit Hex
RID
Resource ID
2-Digit Hex
Service
Full example URI of a service:
000001/020
Representing service 020 on hub 000001.
Object
Full example URI of an object:
000001/020/0028/0001
Representing instance 0001 of object type (profile) 0028 on service 020 on hub 000001.
Resource
Full example URI of a resource:
000001/020/0028/0001/40
Representing resource 40 on instance 0001 of object type (profile) 0028 on service 020 on hub 000001.
Conclusion
Using the URI system, it is therefore possible to reference any component of a given MobiusFlow configuration.
This aims to show how data taken from EnOcean sensors at a hardware level, is brought into and through the MobiusFlow system, and then presented in the form of a dashboard.
The following shows a colorless project schematic representing lack of implementation. As the project is implemented, this diagram will be colored in so progress can easily shown.
Note that the EnOcean devices have been dropped from the diagram for simplicity
MQTT Broker
To allow MobiusFlow connectors to connect to and send data to
Connector Service
To collect incoming messages from MobiusFlow connectors and bring the data into the MobiusFlow Hub
EnOcean Devices Service
To decode raw EnOcean messages from the MobiusFlow hub and populate this service's child MobiusFlow objects with human-readable data.
Add and start MQTT Broker service:
The MQTT Broker service has been added, configured and started.
Add connectors service, add a connector to the service, and finally start the service.
Add and start service:
Add a MobiusFlow connector object to the connectors service and configure:
The Connector service has been added, configured and started.
Add EnOcean Devices service, add EnOcean device objects to the service, and finally start the service.
The EnOcean devices service has been added, configured and started.
For full information on how to configure a MobiusFlow connector see here.
MobiusFlow connector is connected.
The status of all service can viewed. This is a helpful insight into the current state of the solution as well as aiding with diagnostics.
The data of any live object can viewed by navigating to that object and then clicking on resources.
Connecting the flows to the MobiusFlow engine, as well as the baseline principles of pulling into the flows is covered here.
In this example, the live state of the buttons on a 4-Rocker EnOcean switch is shown on a basic dashboard.
Using dashboard in the way illustrated can be as simple or as complex as required. Display widgets include graphs, charts and tables, as well input widgets such as switches, buttons, drop-downs and text inputs. Full documentation of the Flows dashboard can be found here.
API Authorization calls
The authorization controller is used to login to the API, in addition user management.
When a login call is completed, the API will return a bearer token which should be used in the auth header of all future calls. This token is set to expire 10 minutes after its generation.
A refresh token is also included in the login response, and this is used in the body of the refresh call to get new tokens with refreshed expiry times. Ensure a refresh call is made prior to any given bearer token's expiry to avoid having to login again.
API Object & Resource Calls
The object calls are used to read, add, remove and manipulate MobiusFlow objects and resources.
API Discover calls
The discover calls are used to learn about the present state of a given MobiusFlow instance
API Service Calls
The service calls are used to read, add, remove and manipulate MobiusFlow services.
The ports in used by Mobius Gateways. These are for services that can be hosted on the Gateway.
The physical gateways fleet management and remote connectivity service require outbound access to these services
80
http
TCP
443
https
TCP
502
modbus
TCP
not enabled by default, only on physical gateway
1883
mqtt
TCP
not enabled by default
4840
opc-ua
TCP
not enabled by default, only on physical gateway
8883
mqtts
TCP
not enabled by default
8443
http / https
TCP
Engine RESTful API
30815
mqtt
TCP
mobius sensor gateway
53
UDP
DNS: used by devices to resolve hostnames for connection to the service
123
UDP
NTP: used by devices to synchronize time
443
TCP
HTTPS: used by devices to poll for updates and to download application and host OS updates. OpenVPN: used by devices to provide real-time status and control
API Calls for Licence Management
API Calls for Node-RED Flows
Used get and set the full configuration the flows.
API Send Command Calls
API Subscription Websocket
Full functionality of Subscription Websocket is described in the connect call below.
API Calls for Service Profiles, Object Profiles and Command Profiles
This page covers how to use the ADFWeb HD67941-B2 DALI/MQTT converter with MobiusFlow. The article covers control, querying and configuration for both standard luminaires and emergency lights.
The ADFWeb HD67941-B2 DALI/MQTT bridge acts as a converter between MQTT and DALI protocols. The bridge connects to an MQTT broker via either ethernet or WiFi. The bridge acts as a DALI master and therefore the pair of DALI lines is run directly into it. This completes the DALI/MQTT connection.
MobiusFlow can be connected to the same MQTT broker as DALI/MQTT bridge, allowing the two the communicate via MQTT. This allows MobiusFlow achieve to two-way communication with a given DALI circuit, hence allowing control, querying and configuration to be achieved.
The overall architecture is shown in the diagram below.
A MobiusFlow service called 'adfweb dali mqtt' has been made to specifically to allow control, querying and configuration to be performed simply and easily from MobiusFlow. Each adfweb dali mqtt service connects to a single HD67941-B2, so if your application uses mutliple HD67941-B2 then multiple adfweb dali mqtt services should be used.
For some use cases that will be covered later in this article, MobiusFlow direct commands (DCMDs) can be used to control some functions of service. These DCMDs are sent via the MobiusFlow engine API most commonly from the Flows, however direct HTTP requests can also be used.
As such, a lower-level system architecture diagram looks as follows:
The MQTT broker can be run anywhere which is accessible over a network to both the HD67941-B2 and MobiusFlow. For ease, in most cases the MQTT broker is run within MobiusFlow itself. As such, the architecture diagram becomes the following:
To configure the HD67941-B2, ADFWeb's documentation on HD67941-B should be followed here. Use the instructions to get the HD67941-B2 to connect to your MQTT broker. To work with MobiusFlow correctly, specific MQTT settings must be set using the SW67941 configurator tool.
Navigate to the the MQTT Set Topic menu:
Once on the MQTT Set Topic menu, navigate to the MQTT publish tab. Create a single entry the following settings:
Note that {MACID} should be replaced with the MAC ID of the HD67941-B2 you're using. For example:
Template
The template should be set to the following JSON string:
All remaining fields should be populated as shown in the screenshot below:
Navigate to the MQTT Subscribe tab.
The topic should be set as follows
As before, {MACID} should be replaced with the MAC ID of the HD67941-B2 you're using. For example:
The remainder of the row should be populated as shown in the screenshot below:
This completes the configuration required for MobiusFlow. Ensure all MQTT changes are saved before flashing the new configuration to the HD67941-B2.
Within MobiusFlow, a given DALI luminaire or DALI group is represented by an equivalent luminaire and group object. Both object types are designed to reside on the adfweb dali mqtt. This service is shown configured and running in the screenshot below.
The two object types are tabulated below.
DALI Luminaire
027A
dali_Luminiaire_v2
adfweb dali mqtt
DALI Group
027B
dali_group
adfweb dali mqtt
A single instance of both of these objects is shown live on an adfweb dali mqtt service in the screenshot below. The screenshot also shows the configuration page for the luminaire object. A DALI short address should be entered to match that of a real-world DALI luminaire.
The configuration window of a group object is shown in the screenshot below. Similarly to a luminaire, a group address should be added to represent the group number of the DALI group this object will represent.
Both Luminaire objects and Group objects feature a setPoint resource (rid: 41). To change the lighting level, this resource should be simply be set in the same manner as any other MobiusFlow resource.
In the case of the Luminaire object, a knowLevel resource is also present. This populated as a result of the the current level being queried. It exists because sometimes due to issues with the system, there may be a discrepancy between the demanded level and actual level.
Within a luminaire, a resource exists for each group, allowing you to choose which groups the luminaire is a member of.
The screenshot below partially shows the resource list for the luminaire object.
Note that, the group membership of all luminaires should be set via changing the default value of any group membership resource prior to starting the adfweb dali mqtt service. Do not make the mistake of changing the live value of these resources after the service has started. Although this will work, if the service is restarted, this group membership information will not be saved.
The group object is simpler. As querying the level of a whole group is not possible in DALI, no known level resource exists. As with the luminaire, the lighting level of the DALI group can be changed by setting the setPoint resource.
Below is an example of a simple flow with two inject buttons, one to set the level to 95% and the other to 5%. The inject nodes are linked to a setResource node which setup to set the setPoint resource of a live DALI luminaire (resource 000001/020/027A/41).
A very similar flow is shown to change the level of a group between 80% and 10%. In this case the setResource has been set to set the setPoint resource of the DALI group (resource 000001/020/027B/0001/41.
A more typical use case may be to have the lights automatically controlled. As well as this, it may be required that groups and single luminaires may need to be controlled as one. In the below flow, an EnOcean PIR is linked to a 'local control' zone node, which is then linked both a setResource node linking to a single DALI luminaire, and a DALI group.
The local control node us used in this case to set time periods of when the lights should be at given levels. The config window for this node is shown below
Note that is node is included within the node-red-contrib-mobius-flow-lighting package and may not be included within your Flows palette by default. If this is the case, it can be instantly added using the palette manager.
The system has been setup to automatically query several key properties of all luminaires. These are as follows:
Group Membership (returned as raw 2 byte, bit-array)
Ballast Status
Lamp failure status
Lamp arc power status
Power failure status
Raw status (all status information returned as 1 byte, bit-array)
Device Type
Max lighting level
Min lighting level
Each luminaire object has resources to store this data. These resources are populated automatically when information is received from the HD67941-B2 DALI/MQTT bridge.
The system also allows the user to perform some additional queries manually. The queries can be sent by sending the adfweb dali mqtt service a recognised MobiusFlow direct command (DCMD). These DCMDs can be sent directly using the MobiusFlow engine API or by using the DCMD node within the Flows. Ensure the DCMD is setup with a timeout time of at least 10,000ms. All queries use the DCMD command name:
Supported queries and their associated DCMD data are tabulated below:
Query power up level
Query system failure level
Query fade time / rate
Query power failure
Query dtr content
In the above table, all payloads were shown for a target DALI luminaire with a DALI short address of 0, however this should be replaced with the DALI short address of whichever luminaire is the target of the query (0-63).
After sending the DCMD, if correct, you should receive a response. This response will be in the form of a raw byte. The DALI documentation should be used to interpret this data.
Data that is automatically queried from all luminaires can be found in that luminaire's resource list.
In the example flow below, a resource COV node has been used to respond to the change of value of the lamp failure status (resource 54). This may be useful if actions need to be taken in such an event, e.g. notifying maintenance. A similar flow could be made to respond to the data from any of the resources.
In the case of special queries (queries which are not automatically run), as explained before, DCMDs should be sent. The flow below shows how this could be set up.
The function node labelled function 1, is used to set the correct DCMD data for the query. The configuration is shown below:
The DCMD node is setup as follows:
Note that the URI property should be set to target the adfweb dali mqtt service. In this case, the service id of the adfweb dali mqtt service is 020 and the hub id the MobiusFlow instance that service is running on is 000001, hence the target URI of 000001/020.
Configuration is performed in the same manner as manual querying, using DCMDs to directly interface with adfweb dali mqtt service, sent either directly to the MobiusFlow engine API or using the Flows.
Ensure the DCMD is setup with a timeout time of at least 10,000ms. All queries use the DCMD command name:
Supported queries and their associated DCMD data are tabulated below:
Set maximum allowed lighting level
Set minimum allowed lighting level
Set power up lighting level
Set system failure level
Set fade time
Set fade rate
Store current lighting level in dtr
In the above table, all data packets were shown for a target DALI luminaire with a DALI short address of 0, however this should be replaced with the DALI short address of whichever luminaire is the target of the query (0-63).
The level parameter should be varied to set the desired quantity accordingly.
The group property can be set to true if an entire DALI group is being configured at once. Note, in this case, the address property will represent the group number (0-15) instead of a DALI short address.
The flow below shows how a DCMD node could be used to send configuration commands, in this case setting the maximum lighting level:
The node function node labelled function 4 is used to set the DCMD data. The configuration for this node is as follows:
The DCMD node is setup as follows:
Note that the URI property should be set to target the adfweb dali mqtt service. In this case, the service id of the adfweb dali mqtt service is 020 and the hub id the MobiusFlow instance that service is running on is 000001, hence the target URI of 000001/020.
A MobiusFlow object type has been created to represent DALI emergency lights. This object type contains resources to capture information regarding the status of the emergency light as well as test results. As with all other DALI object types, the DALI emergency light is designed to be a child of the adfweb dali mqtt service. It's details are tabulated below.
DALI Emergency Light
0259
dali_emergency
adfweb dali mqtt
The screenshot below shows a DALI emergency light object within an adfweb dali mqtt.
Like all DALI objects, the DALI emergency object requires a DALI short address to be assigned to it:
No automatic control or querying of DALI emergency lights is performed. As such, all interfacing is performed using MobiusFlow direct commands (DCMDs) sent to the adfweb dali mqtt service, either via the MobiusFlow engine API or using the Flows.
In case of queries, data received as a result of the query automatically populates the corresponding MobiusFlow object. The data is also returned to the user via the DCMD response as normal.
Ensure the DCMD is setup with a timeout time of at least 10,000ms. All queries use the DCMD command name:
Supported actions and their associated DCMD data are tabulated below:
Rest
Inhibit
ReLight Inhibit
Start function test
Start duration test
Stop test
Reset function test done flag
Reset duration test done flag
Reset lamp time
Store DTR as emergency level
Store test delay time high byte
Store test dalay time low byte
Store function test interval
Store duration test interval
Store test execuation timeout
Store prolong time
Start indentification
Query battery charge
Query duration test result
Query lamp operational time
Query emergency mode
Query failure mode
Query emergency status
In the above table, all data packets were shown for a target DALI emergency light with a DALI short address of 0, however this should be replaced with the DALI short address of whichever emergency light is the target of the action (0-63).
The flows can be used to easily send DCMDs to the adfweb dali mqtt service to complete any desired actions. The flow below has been set to automatically query the potential failure mode on interval.
The function node labelled function 8 is used to set the DCMD data prior to the request. The configuration for the node is as follows:
The DCMD node is setup as follows:
Note that the URI property should be set to target the adfweb dali mqtt service. In this case, the service id of the adfweb dali mqtt service is 020 and the hub id the MobiusFlow instance that service is running on is 000001, hence the target URI of 000001/020.
Note that, no debug node is used here to display query results. This is because, in the case of DALI emergency lights, the data is auto-populated into the corresponding DALI emergency light object.
Technical Documentation of how to use LoRaWAN Local Network Server
You can add the LoRaWAN LNS Service (labelled as lorawan local network server) to the MobiusFlow from the service library.
The service requires the region to be set. If mulitple regions are required, using muliple LoRaWAN LNS services is neccessary.
If muliple LoRaWAN LNS service are used on the same instance, both will use the same LNS backend.
If a device is integrated, MobiusFlow will atomically handle the decoding of device data and the movement of this data into corresponding MobiusFlow objects (Uplink). Some devices also support downlink, i.e. sending data from MobiusFlow to the device. For integrated device types, if there is a public downlink encoder available, MobiusFlow will automatically handle the encoding and sending of data to devices of that type.
The list will be populated soon. Please contact support for enquires about specific devices.
All LoRaWAN devices intend to be integrated in future. To request integration of a new device type, please contact MobiusFlow support at info@mobiusflow.com.
Currently supported regions are shown in the following list:
EU868
US915_0
US915_1
Support for all regions is planned for the near future. To request support for a specific region, please contact MobiusFlow support at info@mobiusflow.com.
LoRaWAN gateways are added as MobiusFlow objects to the LoRaWAN LNS service. When viewing the configuration of LoRaWAN LNS service, search for lorawan_gateway in the object library. A lorawan_gateway object (PID 028D) should be added for each physical LoRaWAN gateway MobiusFlow will connect to.
For each lorawan_gateway object, the 16 character (Hex) Gateway ID must be populated to match that of the ID of the physical LoRaWAN gateway. Ensure the object settings are saved. As with all MobiusFlow services, a stop/start cycle or hot reload must be performed if any settings are changed or objects are added or removed.
Ensure the MobiusFlow is accessible by the LoRaWAN gateway, i.e. if MobiusFlow is running in the cloud, ensure the gateway has an internet connection. Alternatively, if MobiusFlow is running on-prem, ensure the LoRaWAN gateway has access to it over the local network.
The connection between LoRaWAN gateway and MobiusFlow uses Semtech UDP. Set up a Semtech UDP packet forwarder on each gateway with the following paramaters.
Use the standard TCP/IP hostname of the gateway. If the gateway is running in the cloud and hosted by MobiusFlow, it will be in the form xxx.mobiusflow.io e.g. grand-eagle-11.mobiusflow.io. If MobiusFlow is being hosted on-prem or elsewhere, use the IP address of the host or DNS designation of the host. Do not include any protocol or a port in the hostname.
The Semtech UDP packet forwarded allows both an inbound and outbound port to be specified in the configuration. Ensure the same port number is used for both inbound and outbound.
The exact port number depends on which region the gateway is operating in. See the table below for all port numbers by region.
It is critical the correct port i used. The gateway may still be able to connect if the incorrect port is used, however this will cause the LNS to confuse the region of this gateway causing further problems.
Ensure the required ports are open on the gateway's network. Also ensure the required ports are open on the network where MobiusFlow is running. If the instance of MobiusFlow is hosted in the MobiusFlow cloud, the ports for all region types will be open by default.
To add a device, when inside the LoRaWAN LNS Service's configuration, search for that device type in the objects library and add instance of it.
For each new object, the Device EUI and Device App Key (OTAA Key) must be populate to match that of the device.
Ensure the settings are saved. As with all MobiusFlow services, a stop/start cycle or hot reload must be performed if any settings are changed or objects are added or removed.
If the credentials are set correctly, the device is in range of the LoRaWAN gateway, and the LoRaWAN gateway is connected to MobiusFlow, live decoded data from the device will now appear within the new object's resources.
The flows can be used to enqueue downlink messages to some device types. MobiusFlow is packaged with a set of MobiusFlow/LoRaWAN specific nodes designed to work with the LoRaWAN LNS service.
To enqueue downlink messages to device types that have been integrated with MobiusFlow, use the lorawan send downlink node type shown below.
This node will accept into its input an incoming unencoded payload as per how the manufacture's downlink encoder accepts the messages.
Inside the node's configuration allows specification of which device the downlink messages will be enqueued on. This is done by specifying the device's MobiusFlow URI which can either be pasted in or searched for.
The node's output will send messages informing the user of the result of the attempted downlink enqueue action.
Results include a success, a failure due to an incorrectly structured input payload (included in the error message is information regarding the correct payload structure), or failure due to this device type not supporting downlink all together.
The number of currently enqueued messages can be found for each device by viewing resource 21 of that object representing that device.
The following example uses an inject input to trigger the inital message. Then a function node formats to message's payload into the correct format for the device type. The lorawan send downlink node has been set to connect to a specific MobiusFlow object. The debug is used to monitor the output of the lorawan send downlink node so the user is informed if the action was a success or failure.
The contents of the function node using to format the payload is follows:
For some device types, manufactures do not release downlink encoders, and as such it is not possible to integrate this functionality into MobiusFlow. It is however possible to write your own in the flows and then send this via the LoRaWAN LNS service to be enqueued directly to a LoRaWAN device. This is done using same basic flow as regular downlink however using the lorawan send raw node.
The lorawan send raw node bypasses helpers and checks provided by MobiusFlow objects. As such, the node's configuration requires the specification of a LoRaWAN device EUI instead of a MobiusFlow object's URI.
The node does not have an output. This is because it uses a 'fire-and-forget' style mechanism and therefore cannot monitor if the enqueue action was successful or not.
The message payload must be built inside the function node. The result of this encoding must be an object containing the required LoRaWAN fPort as well the data property. This data property contains the raw data that will be enqueued (hex bytes in string).
The contents of the above example function node are shown below.
For unintegrated device types, that is device types that MobiusFlow does not feature inbuilt uplink decoders, downlink encoders and shaped MobiusFlow objects, the lorawan_generic_device object type can be used.
As with all LoRaWAN object, the device EUI and App Key must be set to match of the LoRaWAN device.
To the object's configuration is set with the correct device EUI and App Key, data will be pulled into the MobiusFlow object as with all other LoRaWAN object types. Unlike these object types, the data will not be decoded and left a raw string in resource 40. The data can then be handled / post-processed by the user in the flows at will.
Downlink is handled in the same manner as for integrated device types. If using the lorawan_send_downlink node, for the lorawan_generic_device object type, no checks are made regarding the format of the payload. As such, ensure the message is pre-encoded into an object containing the fPort and data (hex bytes as string) properties.
The lorawan_send_raw node can also be used as before, to enqueue downlink message to unintegrated device types.
The MobiusFlow LNS Service uses Chirpstack V4 as an LNS backend. As such, for debugging purposes it is possible to log into this backend if required. Chirpstack runs on port 8081, to browse to this port to access chirpstack.
Every MobiusFlow LNS Service contains a statistics object. This includes some information about the health of the LNS as well as the chirpstack login credentials.
Article covering MobiusFlow Connectors service
MobiusFlow connectors are transceiver hardware that connect to the following technologies:
Connectors are designed to bridge the gap between these technologies and MobiusFlow via the MobiusFlow Connectors service.
The Connectors service uses MQTT to communicate with the Connectors. As such, the service must be pointed to and authenticated with an MQTT broker.
The service configuration pane requires entry of the following:
Once these fields have been populated, save and start the service:
The MQTT connection status can then be observed within the service status:
The above screenshot shows a running example of a Connectors service connected to a local MQTT broker.
Each real-world connector must be represented in MobiusFlow using a connector object. The object settings require connector details such Serial Number and Pre-Shared Key (PSK) to be specified. It also allows the viewing of live connector status.
To add a connector object to the Connectors service, first navigate the to the service's object configuration page.
Once navigated to service's object configuration page, a MobiusFlowConnector object for each real-world connector should be added.
Each connector object requires the following configuration settings to be specified:
Ensure the service is restarted or hot-reloaded to realise changes made to objects
Once the connector object is live, the status of it can be checked by navigating to the resources of that object:
The above screenshots shows the useful status information a connected connector makes available. Checking if the connector is connected is possible by observing the objectLastUpdate resource.
Raw sensor data is not displayed anywhere within the Connector object. Instead, the service automatically relays incoming data from authorised connectors to the MobiusFlow hub, where it is then broadcast to all MobiusFlow services.
Some service types such as the EnOcean service, listen for and decode these messages into useable data. If the sensor data is valid, those service will then go on to populate corresponding device objects based.
The flowchart below shows how data flows from device level into the corresponding MobiusFlow objects via the Connectors and Connectors service:
Description of how to setup connection between Node-RED Flows and MobiusFlow Engine
The flows are powered by Node-RED. Use the link below to learn more about Node-RED specifically.
Node-RED can be used independently of MobiusFlow, however if you want move data between the MobiusFlow Engine and the Node-RED flows, you will need to link the two.
A MobiusFlow connection is defined within a Node-RED configuration node. Once defined, all MobiusFlow specific nodes in your flows can use this connection to interface with the MobiusFlow Engine.
To create a new connection, open the config window of any MobiusFlow node. If no connection has yet been defined, the node will prompt you to add a new one.
Clicking the pencil icon will open the new connection's configuration window.
All connections require a valid API username and password to ensure this instance of Node-RED is authorised to connect to MobiusFlow.
The default cradentials are:
Username: admin
Password: adm123
We heavily recommend you change the default admin password. If your MobiusFlow instance is not brand new it's very likely this will have been changed already.
If you're using the instance of Node-RED that has come pre-packaged with MobiusFlow, that means Node-RED and the MobiusFlow Engine and running locally to one another in parallel docker containers . As such, the following settings must be used:
mobius:8443
This controls if the connection uses HTTP or HTTPS. As Node-RED is running locally relative to the MobiusFlow Engine, this should be left unchecked to ensure the connection uses HTTP.
When running Node-RED remotely relative to the MobiusFlow Engine, we recommend SSL/TLS is enabled so the connection is secure. Also ensure the port is appended to the hostname if required.
Once set up, you should check that the flows are successfully connected to the MobiusFlow Engine.
On any MobiusFlow node, select the newly added connection. If this is the only connection you have set up, it will be selected by default.
Upon clicking done and deploying your flows, all MobiusFlow nodes using this connection should show the status 'Connected' if the connection to the MobiusFlow Engine has been made.
If you the connection has not successfully been made, the status of all nodes using that connection will reflect this.
Article covering MobiusFlow Object Store service
The Object Store service can be considered a service type only for storing MobiusFlow objects. It has no functional backend. This means, unlike most other MobiusFlow services, the service will not interact with the objects stored on it.
For storing non-service specific objects such as the Numeric Value objects or String Value objects (Often these will be used if values are being calculated based on other objects)
Manually writing to an object type, instead of relying on its functional parent service (e.g. manually writing the data into a LoRaWAN device object from the Flows, instead of using the LoRaWAN LNS service)
Testing
Diagnostics
Although it is possible to place any object type in an Object Store service, because the service has no functional backend, it cannot interact with most object types in fully functional way. For example, adding a LoRaWAN device object to an Object Store service is possible, however the object will not be automatically populated by incoming LoRaWAN messages. If the LoRaWAN device object was placed into its functional parent service (LoRaWAN LNS service / LoRaWAN Devices service) instead, it would function as normal, as these service types have the correct backend to work with this object type.
Article covering MobiusFlow EnOcean Devices service
The EnOcean Devices service handles the decoding of incoming data from EnOcean devices. All EnOcean Devices services listen for EnOcean message broadcasts from the MobiusFlow hub. If any incoming EnOcean messages correspond to any EnOcean device object on a given EnOcean Devices service, the service will decode the data and populate that object.
Each real-world EnOcean device must be represented in MobiusFlow by a corresponding EnOcean device object. To work correctly, these objects must exists within an EnOcean Devices service.
To add new EnOcean device objects, navigate to the object configuration page of the EnOcean Devices service.
EnOcean device objects can added via the Object Library:
All EnOcean device objects require the EnOcean UID of the corresponding real-world EnOcean device to entered:
To realise any changes, the object settings must be saved and the service started / restarted:
Once the object is live, any decoded data from the corresponding EnOcean device can viewed by navigating to that objects resources:
Data can still be received from and sent to unintegrated device types, however the users must handle data decoding and encoding manually. A full explanation of working with unintegrated device types can be found in .
Reading the sections on and are recommended before reading this section.
The EnOcean technology sometimes requires messages /commands to be sent the devices. This is possible is MobiusFlow using the Flows. A full article on receiving and sending EnOcean telegrams within the flows can be found .
A set of MobiusFlow specific nodes have been created to facilitate data transmission between the Flows and the MobiusFlow Engine. The nodes are found in the Node-RED package . If you're using Node-RED pre-packaged with MobiusFlow, this package will be installed by default however if you're using Node-RED running elsewhere, you will need to add this to your palette using the Node-RED palette manager.
In most cases data is brought in through MobiusFlow connectors. A full guide on setting up MobiusFlow connectors can be found .
The following diagram shows the full data flow between the EnOcean devices and their corresponding MobiusFlow objects. This is explained in full in the .
It is possible to send data from MobiusFlow to EnOcean devices via the flows using the MobiusFlow connectors service. The full article covering Receiving and Sending Raw EnOcean Telegrams in the Flows can be found .
EU868
1700
US915_0
1701
US915_1
1702
MQTT Broker
IP address / DNS name of where the broker is running. The service will assume MQTT (no TLS) however MQTTS (TLS) can be used by adding the mqtts:// prefix. In the most cases, the service will be set up to connect to the local MQTT broker running within MobiusFlow. As such, in this situation, the address of the broker will be localhost.
MQTT Port
The MQTT broker port. This will have been setup within the MQTT broker. Likely 1883 if using MQTT or 8883 if using MQTTS
MQTT Username
The username of the MQTT user set up within the MQTT broker
MQTT Password
The password of the MQTT user set up within the MQTT broker
Serial Number
The serial number of the connector. In the form of MF_XXXXX. Can be found within the connector's configuration.
Pre-Shared Key (Key)
The unique pre-shared key of the connector. This can be anything however the key must be set to match within both the Connector object and the real-world Connector.
Sick of the jargon? Lost in a sea of terms and acronyms? This glossary will help you smash your way through it.
Application Programming Interface (API) - A well-defined language to allow different software modules to communicate with each other to share data or commands. (see RESTful API)
Edge computing is a computing architecture focused on bringing computing as close to the source of data as possible in order to reduce latency and bandwidth use. In simpler terms, edge computing means running fewer processes in the cloud and moving those processes to local places, such as on a user’s computer, an IoT device, or an edge server.
Endpoints are the start and end of a data flow in an IoT application. These can include sensors, gateways, cloud servers, applications, and databases. In the context of a complex solution, an endpoint may also be defined as the end of a sub-section of that solution.
An IoT gateway is a small computing device, normally installed at the edge, for collecting and processing sensor data. It is mostly used where direct communication with a cloud server is undesirable, for instance, when performing local control, a reliable internet connection is unavailable, or when security concerns dictate data should not be published on the internet.
Hypertext Transfer Protocol (HTTP) - This is the most widely used communication protocol used transfer data between computers over the internet.
HTTPS is a secure version of HTTP where all data is encrypted using TLS (transport layer security)
The Industrial Internet of Things (IIoT) is a subset of IoT for industrial rather than consumer or commercial applications.
The Internet of Things (IoT) describes the network of objects or things that are connected together to provide or consume data to you, your business or processes. Things include sensors, actuators, software and other devices that form part of this network.
The term IoT has grown to include systems and devices connected via the internet and via private offline networks.
A software architecture where small independent software modules, responsible for a single, specific task, communicate through well-defined APIs to create a more complex system.
A piece of software that acts as a bridge between devices, an operating system, or database and applications, especially on a network. It can be described as "software glue"
MQTT is an OASIS standard messaging protocol for the Internet of Things (IoT). It is designed as an extremely lightweight publish/subscribe messaging transport that is ideal for connecting remote devices with a small code footprint and minimal network bandwidth. MQTT today is used in a wide variety of industries, such as automotive, manufacturing, telecommunications, oil and gas, etc.
MQTT originally stood for Message Queue Telemetry Transport, but this definition has since been dropped.
See recursion
A RESTful API is an architectural style for an application program interface (API) that uses HTTP requests to access and use data. That data can be used to GET, PUT, POST and DELETE data types, which refers to the reading, updating, creating and deleting of operations concerning resources.
Software as a Service - a method of software delivery and licensing in which software is accessed online via a subscription, rather than bought and installed on individual computers.
Three Letter Acronym - IT teams love acronyms. Sometimes we have to laugh at ourselves!
Transport Layer Security is a cryptographic protocol typically used with HTTP to secure data transferred between computers or the internet or your private network.
Licence information is included within the the environment variables of the Mobius service in the docker-compose.yml file
For online licences only the licence code itself needs to be included
The environment variable used for this MOBIUS_LICENCE
For example:
As well as the licence code, offline licences must include a licence key and licence token
These are included in the environment environment variables MOBIUS_LICENCE_KEY and MOBIUS_LICENCE_TOKEN respectively For example:
If the licence information is replaced, the environment variable MOBIUS_LICENCE_RESET must be set to true as shown below
This forces MobiusFlow to reload and update it's licence information
Once MobiusFlow has started, ensure that this environment variable is set back to false for any subsquent restarts where the licence information has not been changed
For offline licences, if you are updating the licence code, you must also update the licence token
Article explaining how to use MobiusFlow INGY service. It is recommended you read this article in its entirety before using the MobiusFlow INGY integration.
The MobiusFlow INGY integration implements the following features:
Changing lighting level set points of group scenes
Switching between lighting scenes of a given group
Adding / removing devices from groups
Acquisition of data from INGY devices
Direct interfacing with INGY API and Datastream
This article explains how to use the INGY service to achieve all of the above.
To interface with an INGY system, an INGY gateway must be present on the project site. These INGY gateways can be acquired directly from INGY.
The INGY gateway host's and MQTT broker, and as such, MobiusFlow uses an MQTT connection to this broker to allow two-way communication between MobiusFlow and INGY.
INGY gateways create 3 MQTT users, each with different sets of permissions. MobiusFlow requires usage of the datastream and MQTT JSON server (API) users. These user credentials can be found in the Gateway MQTT server section of the INGY gateway configuration page.
Ensure the INGY gateway is accessible by MobiusFlow over an on-site (or otherwise) network. As it is likely the local IP address of the INGY gateway will be directly referenced within MobiusFlow, it is recommended that this should be set up on the network with a static local IP address. This means the connection will not break due to DHCP reassignment.
Once the INGY service has been added, the following configuration window is shown:
The following fields must be populated to allow MobiusFlow the connect the INGY gateway.
MQTT Broker
The IP location of the MQTT broker (IP address, DNS name, or otherwise). For MQTT over TLS include mqtts:// prefix, otherwise, inclusion of protocol is not required.
MQTT Port
Run by INGY on 1883 by default.
MQTT Username (Datastream)
Found on INGY gateway configuration page.
MQTT Password (Datastream)
Found on INGY gateway configuration page.
MQTT Username (JSON API)
Found on INGY gateway configuration page.
MQTT Password (JSON API)
Found on INGY gateway configuration page.
INGY Firmware Version
85, 94, etc. To use mixed firmware versions, use multiple INGY services each with different firmware versions.
The INGY service will attempt to connect via MQTT to the INGY gateway when the service is started. As such, to test the connection, start the service and observe the service status:
Lighting control is exclusively performed by commanding lighting groups to change to different scenes.
For every INGY lighting group, add an ingy_group (PID 028A) MobiusFlow object to represent the group within MobiusFlow. The group number of the INGY group can be set in the object settings.
Note that: If INGY groups have been pre-configured in the using the INGY App, ensure the group number matches that of group number displayed in the INGY App. See full section here.
Viewing the resources on an INGY group object shows:
If using a group the has been pre-configured using the INGY App, ensure the group number is MobiusFlow is set equal to the group number of the group previously created in the INGY App.
If a group with a matching group number has been set up within the INGY App, MobiusFlow will automatically pull (given some time) the sceneSetLevel values of any scenes which have already been set up using the app.
The scene number matches the display order shown in the INGY App. As such, the first scene shown in the list on the INGY App is scene 0, the second is scene 1, the third is scene 2, and so on.
Each lighting group supports 8 different scenes (numbered 0 - 7). These may have been previously set up using the INGY app. MobiusFlow will automatically query the level set point of each scene and will display this in the corresponding knownLevel resource. MobiusFlow can also be used to change each scene's level set point (0% - 100%) by setting that scene's corresponding setLevel resource.
Note that: If the INGY App has been used to pre-set up some scenes, MobiusFlow will still allow you to change these settings. As such, it as advised to adhere to a common source of truth, either configuring all scenes within the INGY App or within MobiusFlow.
It may be possible that the real-world scene setting levels or MobiusFlow have become out of synchronous. This could have been caused if they were changed by something that was not MobiusFlow, such the INGY app or INGY API. To ensure the real-world scene level settings do match the settings within MobiusFlow, set the resendSetLevelCommands (RID 83) to true. Note that MobiusFlow will immediately reset this back to false, whilst also resending the command to set the scene level settings of all scenes.
MobiusFlow automatically queries which scene is currently being exhibited by the group, and shows this information in the knownScene resource.
Changing the currently exhibited scene on a given group is done in two steps:
Set the sceneSetting resource to scene number of the desired scene (if the resource currently shows the desired scene, this step can be skipped)
Set the send trigger to true (the service will automatically set this back to false immediately afterwards). This will cause MobiusFlow to command the INGY group to change to the desired scene.
Alternatively, these steps can be handled in one by using the INGY Set Scene flows node.
When configured, this node is pointed at an INGY group object, and will receive an input payload (0 - 7) representing the desired scene number. The node automatically handles the resource changes to cause the group to change scene.
MobiusFlow objects can added to represent real-world INGY devices. These objects are used to query and encapsulate the data coming from these devices in addition to control which group a given device is a member of.
Searching ingy in the objects library will display the list of options of MobiusFlow objects that can represent the real-world INGY devices.
Add these options in the correct quantities to represent the INGY devices within MobiusFlow.
Every INGY object type will require the entry of the INGY node address (wirepas address) as well some other information:
If knowing the current lighting level of any lighting device is required, ensure Auto Query Level is checked to ensure MobiusFlow automatically pulls current level data from this device.
Some INGY nodes can be partitioned to act as separate controllable devices. Represent these partitions using multiple MobiusFlow objects with the same Node Address but different partition numbers. If the INGY node has not been partitioned, the partition number should be set to the default of 0.
The known group membership of all devices is automatically queried by MobiusFlow and this data is stored into knownGroupMembership resource.
The group membership of a given device can be changed by setting the setGroup resource. The knownGroupMembership resource should reflect this change after a period of time.
Sometimes it may be required that the command to group a given INGY device needs to be re-sent. This often can occur if the device is offline when the original setGroup command is sent. In this situation, set the sendRegroup resource to true. Note that, MobiusFlow will immediately set this resource back to false whilst sending the regroup command.
MobiusFlow will automatically pull all possible data from the known INGY nodes into corresponding MobiusFlow objects.
Two flow nodes have been written to aid direct interfacing with the INGY API.
Note that all INGY flow nodes share the MobiusFlow connection configuration node. If this has not been created already, the node will prompt you to set up the connection between flows and MobiusFlow.
The INGY Spy node is used to view all the Datastream and API messages coming from INGY gateway. This includes data sent out over the INGY gateway's datastream as well as directly viewing all API commands and responses.
The INGY spy node can be aimed to a given MobiusFlow INGY service within it's config, and set up with debug nodes as shown above. The two outputs map to the datastream and api respectively.
The INGY send raw command node is used to send direct API command to the INGY API.
The node must be aimed at a specific MobiusFlow INGY service within the node's configuration.
The node takes input messages who's payload must be formatted to be a valid INGY API command as shown in the INGY API documentation. The response to this command will be outputted from the nodes output.
It is recommended a function is used to set the command body as shown in the example flow below:
In the above example the code in the function node is a as follows:
This page explains how to use the MobiusFlow specific Node-RED nodes to pull data from the MobiusFlow Engine into the flows, as well as how to move data from the flows back into the MobiusFlow Engine.
Understanding the following articles is recommended before reading this article:
All Node-RED nodes that facilitate the data transfer between the MobiusFlow Engine and the Flows are contained in the node-red-contrib-mobius-flow-base package. Ensure you add this package to your palette to continue. Also ensure you have setup a connection between the MobiusFlow engine and the Flows by following this guide.
All specific information on how to use each node can also be found within that nodes help pane within Node-RED. As well as this guide, we recommend using the help panes as a close reference when first learning how these nodes are used.
Pulling data into a given flow can be triggered in two ways. Firstly, a message within the flows can cause a 'Get', where data is pulled from the MobiusFlow Engine on demand. Alternatively, flows can be setup to respond to a change of value (COV) of a given MobiusFlow resource or object within the MobiusFlow Engine.
The simplest 'Get' nodes come in the form of getResource and getObject nodes, which get the current value of a specified MobiusFlow resource or object respectively. An example flow using the getResource node is shown below.
Both the getResource and getObject nodes require a MobiusFlow URI to be specified to control which data they fetch. This is set within the node configuration.
In the above example, the URI has been set to the resource 000001/027/0201/0001/40. Upon clicking done, the node label reflects this specification.
When the getResource or getObject nodes receive an input message, the 'Get' will be performed and the results will be sent out of the node's outputs. In the above case, clicking the inject button will trigger the flow causing the 'Get' to occur, and the output of this will be detected and displayed by the debug node.
The getObject node works in an identical way however an object URI is specified instead of a resource URI.
Note that the output from a getObject node is more complex due to the data from a whole MobiusFlow object (including all resources) being pulled rather than just a specified resource.
Basic COV nodes include the resourceCov and objectCov nodes. These directly reflect how the getResource and getObject nodes work respectively however respond to a change of value within the MobiusFlow Engine, rather than a trigger message.
The nodes are configured in the same way, by specifying either a resource URI or object URI.
In the above example, the resourceCov node has responded the resource of URI 000001/027/0201/0001/40 changing to value of 1. This is reflected in the debug window.
The equivalent flow can also be constructed for the objectCov node. This flow will a respond to a change of any of the resources contained within the specified object.
Notice, in the case of the objectCov node, in the debug window only changed resource are shown (in this case the objectLastUpated time and the value). It can be changed in the nodes configuration so all resources are contained in the output message if this is required.
The getResource, getObject, resourceCov and objectCov nodes can also make use or URI wildcarding, allowing for a group of objects or resources to be selected instead of a just one.
You may have noticed that in the case of the some nodes, an extra output is present. This output provides a response with an increased level of information if this is required in your flow.
Notice in the above debug window, the resultant response contains both the name of the resource as well as its new value, instead of just the value itself.
Increasing the level of detail of the output response can be further expanded for almost all MobiusFlow nodes by enabling the 'Use detailed outputs' option in the node configuration.
Notice now in the flow below that the node now has four outputs. Each output has an ever increasing level of detail and this is shown in the four responses in the debug window.
There is an array of other node types which allow data fetching from the MobiusFlow Engine in a variety of specific ways. These will not be explained in full but will be summarised here.
Mobius Flow Inject
COV
Get Multi-Object
Get
Filter by Rid Value
Get
Allows a set of objects to be specified as well as a single resource. When triggered, the node will test the specified resource of all objects against a user defined filtration function and will output a list of all objects which passed the filter.
Discover
Get
Allows a the discovery of MobiusFlow entities based on a URI specified within the input topic. The discovery will work on any level (service / profile / object / etc. ) based on how specified the input URI is.
Discover Object List
Get
Often useful data will be in your flows from an external sources or maybe simply the result of a calculation based on several other pieces of data. Either way, it is often useful to put this data back into a MobiusFlow resource so it can be used in the same way as any other data within MobiusFlow.
A 'Set' can be performed as a single resource or a group of multiple resource at once using the setResource and setMultiResource nodes respectively.
The setResource node allows the user to specify a target resource URI, and if valid, will set that resource to whatever the payload of the input message is.
In the above case, the inject node has been set up to inject a message with a payload of 10, causing the setResource node to set the MobiusFlow resource of URI 000001/027/0201/0001/40 to a value of 10.
You may notice the setResource node also contains outputs of its own. These allow the message to continue to trigger further actions if required.
The setMultiResource requires specification of a target object URI. It expects the input payload to contain an array of JSON objects each containing a resource / priority / value (RPV) triplet. More information can be found in the nodes help pane. An example payload to set resource 40 to a value of 1 and a resource 41 to a value of True may look like the following.
It is very important to note that most of the node's functionality depend on input topic. If any of the nodes detect that the input topic is the form of a MobiusFlow URI, this input topic will override the URI specified within the nodes own configuration. This can often cause problem if you're stringing multiple MobiusFlow nodes together which relate to different URIs. These issues can be circumvented by using a change node to delete or change message topics where necessary.
The behaviour can also be very useful. This is because you can leave a given MobiusFlow node's URI field unspecific an rely solely on input topic to control its function. This means that the function of a single node can be dynamically change based on the state of other parts of your flows, avoiding the need for long lists of of the same type of node and complex switching logic.
This article aims to explain how raw EnOcean telegrams can be sent and received within MobiusFlow. The article briefly covers the supported telegram types and illustrates how these types affect the setup of a given flow.
EnOcean telegrams can be received and injected into a given flow using the Subscribe to Broadcast Command node, labeled 'sub bcmd'. This node is shown below.
Within the node's configuration, you can specify a Mobius Command ID. This Command ID controls which type of incoming telegrams the node receives.
Once an incoming telegram of the specified type is detected by the sub bcmd node, the node will forward this telegram out of its output.
The table below shows which Command ID entries relate to which telegram types. The table also shows screenshots of each Command ID being used within the sub bcmd node configuration.
Type
Command ID
Example Screenshot
ERP1
(EnOcean Radio Protocol 1- Fixed Length)
ENOCEAN_RADIO_ERP1
ERP1 VLD (EnOcean Radio Protocol 1 - Variable Length
ENOCEAN_RADIO_ERP1_VLD
MSC (Manufactuere Specific Commands)
ENOCEAN_RADIO_MSC
RMC (Remote Management Command)
ENOCEAN_RADIO_RMC
In this example, a Sub BCMD node is used to subscribe to incoming EnOcean RMC telegrams. The sub bcmd node is linked to a debug node to allow the telegram to be displayed. This setup is shown in the flow below.
The configuration of the sub bcmd node is shown below.
This sections covers how to send EnOcean telegrams using the MobiusFlow Connector hardware.
Note that, sending is only support for MobiusFlow Connectors running firmware version v3.2.0 or later. Downloads links to the firmware version can be found here.
EnOcean telegrams can be sent from the flows using the Send Broadcast Command node, labeled 'send bcmd'. This node is shown below.
On opening the node's configuration, a Command ID is required to specify the function of the node. To allow the node to send EnOcean telegrams, the Command ID should read 'ENOCEAN_RADIO_TX'. This is shown in the configuration window below.
The node accepts and forwards data contained within the payload of incoming messages. The appropriate incoming message structure is shown below.
connectorURI
The URI of the MobiusFlow Connector that will be used to transmit the EnOcean telegram.
rawData
An array of single-byte numbers containing the transmission data. The length of this array will depend on the telegram type.
Below is shown an example configuration of a function node that can be used to generate a payload of the required format.
This data is also shown in the following code block.
As well as supporting the Sub BCMD node method from MobiusFlow versions 1.x.x, MobiusFlow 2.x.x introduces the EnOcean Connector TX node for further ease of sending EnOcean telegrams.
Within the node's configuration, you must specify a MobiusFlow connector in which telegrams will be sent from.
The URI of the connector can either be typed in, or it can be searched for using the search button. In the above example, the connector with URI '000001/024/FFC0/0001' has been selected.
The node will send any data within the payload of the incoming message. A screenshot of example code of a function node used to set this payload is given below.
This code is also given in the following code block.
All EnOcean telegram types feature a sync byte and some checksum bytes to ensure message integrity. When forming a telegram, the user does not need to include the sync byte or checksum bytes, as these are automatically added by MobiusFlow.
For further information about EnOcean telegrams structures we recommend consulting documentation provided by EnOcean.
This article explains how to use some of more advanced MobiusFlow nodes used for data transfer to and from the MobiusFlow Engine.
Understanding the following articles is recommended before reading this article:
This article includes information on the following nodes:
Injects object information on object change of value. Based on user defined list of object subscriptions to COV (change of value) events. Defined as list of URIs (including wildcards)
Gets multiple objects based on a list of object URIs (no wildcards)
Gets multiple resources based on a list of resource URIs (no wildcards)
Returns a list of children of a given Hub, Service, Profile or Instance, specified by URI
Returns a list of objects based on a URI or URIs (including wildcards)
Returns a list of resources on a specified service filtered by applying a user defined filtering function on a specified RID of each object
Clears a resource value at a specified priority level
All nodes are part of the node-red-contrib-mobiusflow-base Node-RED package. All the nodes require a connection to the MobiusFlow Engine.
The MobiusFlow inject node injects MobiusFlow objects into the flows based on when there is a change of value within that object. The object range the MobiusFlow inject node covers is specified as a list of included / excluded URIs or wildcard URIs.
The node allows a list of subscriptions to be specified in the subscriptions table. These subscriptions tell the node which objects to subscribe to change of value events from. As such, this table is specified as a list of URIs or URI wildcards.
The add button at the bottom of the table can used to add more subscription rows
Each subscription can be specified as an include or an exclude. This will either include or exclude that subscription group from the object selection respectively.
In the config window screenshot above, the 1st subscription row is used to select everything on service 022. The 2nd subscription row is then used to exclude specifically instance 000001/022/000B/0001 from the selection.
The flow below is used to demonstrate the out of the MobiusFlow inject node:
Following a COV event, the debug window showed the following output:
The full JSON response is copyable in the code block below:
The get Multi-Object node gets multiple objects based on a defined set of object URIs.
The Get-Multi Object requires a list of object URIs to be specified within the objects table. Each row will point to a single object URI.
The use of URI Wildcards is NOT valid here. For this feature, consider using the Discover Object List node
More URI rows can be added using the add button at the bottom left of the Objects table. The following screenshot shows an example node's config populated with 3 object URIs:
Any input message can trigger the node.
The node outputs an array of MobiusFlow objects. The following code block is a copyable JSON response example:
The get Multi-Resource node returns multiple resources based on a specified set of resource URIs.
The node requires of one or more resource URIs to be defined in the resources table.
The use of URI Wildcards is NOT valid here.
Additionally, the send property allows control of how the resources are outputted.
Any input message can trigger the node.
The format of outputted resources can be switched between simply showing the resource values, or including the resources name and URI with each resource. Example JSON outputs are as follows:
Simple array of PVs, one for each resource defined in the nodes config:
Object keyed by URI, one key for each resource defined in the node's config. Each containing resources PV and name:
The discover node returns a list of children of a given Hub, Service, Profile or Instance, specified by URI. The following table shows the return type based on which level the URI is specified to.
Hub
000001
List of service of the specified hub
Service
000001/022
List of profiles on the specified service
Profile
000001/022/000B
List of instances on the specified profile
Instance
000001/022/000B/0001
The specified instances and all its resources
The node allows the discovery URI to be specified via the configuration window.
Specifying the discovery URI within the configuration window is not required. This is because it is also possible to specify the discovery URI dynamically via the input topic. If a valid URI is found in both the input topic and the node's configuration, the node's configuration takes precedence.
Any input message can trigger the node. It also possible to define the discovery URI in the topic of the input message. This allows the discovery URI to be dynamically changed. If a valid URI is found in both the input topic, and the node's configuration, the node's configuration takes precedence.
The output type of the discover node varies depending on which level the discovery is made. For all types, the data is packaged within data sub property of the response property of the output payload. See the following screenshot as an example:
Here are example copyable JSON responses at all discovery levels:
The discover object list node returns a list of MobiusFlow objects based on a URI or URIs (including wildcards).
The node takes the following config properties:
HID
The MobiusFlow hub to discover on (in most cases 000001).
Output
Controls if the output should be MobiusFlow objects or just the URIs of the objects.
Send
Decides if the output is sent as an array packaged in one message or a set of individual messages.
Discover
Allows listing of the discovery URIs. If URIs are specified to hub, service or profile level, URI wildcarding should be used e.g. 000001/#. Each URI can be specified as an include or an exclude. This will either include or exclude that URI group from the object selection respectively.
The node can be triggered by any input message.
Depending on the setting of the output property in the node's configuration, the node will either send whole MobiusFlow objects, or just their URIs. Below are copyable example JSON responses in both cases, based on the following example:
The node type also allows the output to be in the form of a single message, or a message for each discovered object. This is controlled by the send configuration property. The screenshots below show this action via use of the following flow:
The Filter By Rid Value node returns a list of object URIs on a specified service, filtered by a user defined filtering function. This filtering function is applied to a user specified resource on each object and is written in Javascript.
The node takes the following configuration properties:
URI
URI of the MobiusFlow service to search in (HID/SID)
PIDs
An JSON array of profile IDs the search will cover. Suppose IDs 0258 and 0259 were to be covered, this field would be written as ["0258", "0259"].
RID
The resource ID of the resource on each object the filtering function will evaluate.
Limit
Maximum number of results to return from search.
Function
Filtering function written in Javascript taking a parameter v, representing the value to apply the filtering function to.
The node is triggered via any input message.
The node will return a list of resources matching the criteria specified in the configuration.
The following is a simple flow to trigger the Filter By Rid Value node and display the output in the debug window.
In this example, the config of the Filter By Rid Value node is set to the following:
The filtering function is also shown in the following code block:
The node has been setup to search on MobiusFlow Hub 000001, service 02A. The search has been specified to only cover PID 0201. Resource 40 has been selected as the resource to which the filtering function will be applied.
In this example, the filtering functional itself has been coded to return a true result if the resource's value is greater than 0.
Triggering flow yields the following in the debug panel:
The results is the URIs of the objects which passed the filtering function when applied to resource 40 on each object.
The clear resource node clears the value of a resource at a specified priority.
The node takes the following configuration:
URI
URI of resource value to be cleared. This can left blank because this can also by specified in the input topic.
Priority
Priority level within priority array to be cleared, default 15. (If you do not understand this leave this at 15)
The node is triggered via any input message. The URI of the resource to be cleared can be specified in the topic of the input message. This allows the target resource of the node to become dynamic.
If the target URI is defined both in the node config and the topic of the input message, the node will use URI specified in the config.
Following the use of this node, the node will output the new value of the resource. If priority 15 was cleared, this will likely be the falling back value residing in priority slot 16.
Allows the definition of a set included or exluded URIs (including ). The node will act similar to an objectCov node for all of these included (but not excluded) URIs and output their data into your flow in the MobiusFlow Inject standard format. Nodei s very useful when linked with a Cloud Format node to allow data to be send to cloud application.
Get several objects in a single message when triggered based on a pre-specified set of URIs (including ).
Works the same as the discover node however allows a set of URIs to specified (including ). Node outputs all discovered MobiusFlow entities as either individual messages or a single array packaged message.
Default Response
Ok response
Username
Default Response
Result
Username
Ok response
User ID
Refresh token data
Refresh token
Ok response
API token
API refresh token
API token lifetime in seconds
API refresh token lifetime in seconds
Engine API Login credentials
Username
Password
Ok response
API token
API refresh token
API token lifetime in seconds
API refresh token lifetime in seconds
User ID
New password information
New password
Ok response
Result
User ID
Role profile
Has admin permission
Has flows editing permission
Has configuration editing permission
Has subscription permission
Has write permission
Has read permission
New user data
Username
Password
Role profile
Has admin permission
Has flows editing permission
Has configuration editing permission
Has subscription permission
Has write permission
Has read permission
Ok response
User ID
Upon making this request, the server will upgrade to websocket connection. The websocket can then be used to manage subscriptions to MobiusFlow object COVs (change of values), resource COVs, service status changes and broadcast commands. Once the connection is initally established, the websocket server sends back a connected message, featuring the topic 'connected' as shown below. Once the upgrade is complete, all subsequent subcription communications are performed via websocket messages.
Following the inital http connect call, the now upgraded websocket connection expects a follow up authorization websocket message within 10 seconds. The authorization websocket message must feature the topic 'authorize' and a payload containing the API bearer token. An example message is shown below:
On successful authorization, the websocket server will send back a confirmation message, containing the topic 'authorized' as shown below.
If no authorization message is received by the websockeet server within 10 seconds, the connection is dropped by the server.
Each subscription or unsubscription message must contain topic 'subscribe' or 'unsubscibe' respectively. Additonally, each message must feature a payload containing both the subscription type and subscription URI. Valid subscription types are denoted in the following table:
Note, the URI field may contain MQTT style wildcards where appropriate.
An example subscibe message is shown below:
Following a successful subscription or unsubscripton message, the websocket server will echo the message back to the client, confirming the action has been made.
Each event response will feature a timestamp, topic and payload. The topic will be one of the valid event types as denoted in the above table. The payload will contain uri and value fields, the form of the latter varrying based on the type and nature of the event. An example response is shown below:
The values for each event type are as follows:
Switching Protocols
Topic name, will always be "connected"
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Licence code data
Licence code
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Licence code data
Licence code
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Array of flow configurations
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020"
Response data
MobiusFlow object profile ID
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D"
Response data
MobiusFlow object instance ID
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Response data
Result
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Start service result information
Result
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Stop service result information
Result
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020"
Reload service result information
Result
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Licence information
Licence code
Licence size
Licencable points used
Licence is active and not deleted
Licence is active and the size has not been exceeded
Licence type
Count of all configured objects
Licence is object based
Licence points per object
Licence uses custom points map
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Array of object profile families
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Array of flow configurations
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Set achknowledgement
"OK"
MobiusFlow Command ID
"ENOCEAN_RADIO_ERP1"
Payload of command
Payload of command
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"ENOCEAN_RADIO_ERP1"
Acknowledgement data
Result
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Command ID
"ENOCEAN_RADIO_ERP1"
^[0-9A-Za-z_]*$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius command profile
Command profile description
Command profile schema
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius Node Configuration (array of services information)
Service ID
Service name
Service enabled flag
Run at start flag
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Response data
Service ID
Service profile ID
Service registered
Service status
Service last connected time
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
MobiusFlow Resource ID
"40"
^[0-9A-Fa-f]{2}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D/0001/40"
Response data
Resource ID
Resource type
Resource name
Resource value
Resource priority array
Resource value for given priority
Resource settings
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
User ID
New roles information
Role profile
Has admin permission
Has flows editing permission
Has configuration editing permission
Has subscription permission
Has write permission
Has read permission
Ok response
Role profile
Has admin permission
Has flows editing permission
Has configuration editing permission
Has subscription permission
Has write permission
Has read permission
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service Profile ID
"0032"
^[0-9A-Fa-f]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service profile
Service profile ID
Default service ID
Service profile name
Service profile description
Service type configurable flag
Array of allowed object families
Object family name
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
MobiusFlow Resource ID
"40"
^[0-9A-Fa-f]{2}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D/0001/40"
Mobius live resource information
Resource ID
Resource type
Resource name
Resource value
Resource priority array
Resource value for given priority
Resource settings
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius Node Configuration (array of services information)
Service ID
Service name
Service enabled flag
Run at start flag
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
New service ID information
New service ID
^[0-9A-F]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius Node Configuration (array of services information)
Service ID
Service name
Service enabled flag
Run at start flag
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Clone service information
Number of copies
Starting service ID for 1st copy, subsequent copies will be incremented
^[0-9A-F]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius Node Configuration (array of services information)
Service ID
Service name
Service enabled flag
Run at start flag
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Time, in seconds, since last update to consider object as dead. Assumed 24 hours if not specified
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Response data
Service ID
Service status
Service name
Number of objects in fault
Object URI
Last updated
Last updated epoch
Object name
Name of the object profile type
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Array of Mobius service profiles
Service profile ID
Default service ID
Service profile name
Service profile description
Service type configurable flag
Array of allowed object families
Object family name
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
MobiusFlow Resource ID
"40"
^[0-9A-Fa-f]{2}$
Resource information
Priority of the resource value
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D/0001/40"
Mobius live resource information
Resource ID
Resource type
Resource name
Resource value
Resource priority array
Resource value for given priority
Resource settings
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Object information
Replacement object instance ID
Array of resource IDs and settings
Resource ID
Resource settings
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
New service information
Service ID
^[0-9A-F]{3}$
Service profile ID
^[0-9A-F]{4}$
Service name
Service enabled flag
Service run at start flag
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius Node Configuration (array of services information)
Service ID
Service name
Service enabled flag
Run at start flag
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
MobiusFlow Resource ID
"40"
^[0-9A-Fa-f]{2}$
Resource information
Priority of the resource value
Value of the resource
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D/0001/40"
Mobius live resource information
Resource ID
Resource type
Resource name
Resource value
Resource priority array
Resource value for given priority
Resource settings
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius object profile
Object profile header
Object profile ID
Object profile name
Object type configurable flag
Object profile instances
Object profile UI name
Object profile description
Array of object profile families
Object family name
Object profile resources
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Object Profile Name
"iqrf_05383_AirQuality"
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius object profile
Object profile header
Object profile ID
Object profile name
Object type configurable flag
Object profile instances
Object profile UI name
Object profile description
Array of object profile families
Object family name
Object profile resources
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D/0001"
Mobius live object information
Profile ID associated to the object
Instance ID of the object
Profile name associated to the object
Object description
Array of resources
Resource ID
Resource type
Resource name
Resource value
Resource priority array
Resource value for given priority
Resource settings
Array of families
Family name
Object is from config, 0 for created but not configured, 1 for created from config
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D/0001"
Response data
Profile ID associated to the object
Instance ID of the object
Profile name associated to the object
Object description
Array of resources
Resource ID
Resource type
Resource name
Resource value
Resource priority array
Resource value for given priority
Resource settings
Array of families
Family name
Object is from config, 0 for created but not configured, 1 for created from config
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius command profiles
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service configuration
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service configuration
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Response data
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Array of patched live resources
Resource ID
Priority of the resource value
Value of the resource
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001/020/000D/0001"
Mobius live object information
Profile ID associated to the object
Instance ID of the object
Profile name associated to the object
Object description
Array of resources
Resource ID
Resource type
Resource name
Resource value
Resource priority array
Resource value for given priority
Resource settings
Array of families
Family name
Object is from config, 0 for created but not configured, 1 for created from config
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
New service configuration
Service name
Service enabled flag
Service run at start flag
Custom service settings configuration
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service configuration
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
Array of resources
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service configuration
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Array of resources
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service configuration
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
MobiusFlow Object Profile ID
"014A"
^[0-9A-Fa-f]{4}$
MobiusFlow Object Instance ID
"0001"
^[0-9A-Fa-f]{4}$
Object cloning information
Number of copies to be created
Starting instance ID of the 1st copy, subsequent copies will be incremented
^[0-9A-F]{4}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service configuration
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
MobiusFlow Service ID
"020"
^[0-9A-Fa-f]{3}$
Array of configured objects on service
Object PID
Array of objects
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius service configuration
Service ID
Service profile ID associated to the service
Service name
Service enabled flag
Service run at start flag
Mobius base service settings
MQTT settings
Hub MQTT broker host location
Hub MQTT broker port
Timeouts
Local timeout in ms
Remote timeout in ms
Custom settings
Array of configured objects on service
Object PID
Array of objects
MobiusFlow Hub ID
"000001"
^[0-9A-Fa-f]{6}$
Ok response
Timestamp of the response
"2022-12-21T10:25:54.585Z"
URI of the response
"000001"
Mobius object profiles
UP Board from Aaeon
Image supports:
UP2 Edge
UP2 Edge Pro
Up Extreme Edge
and more..
Raspberry Pi 4
Perfect for:
Low cost deployments
Proof of Concept applications
Testing and demonstrations
Intel NUC
Many different manufacturers
Wide range of prices depending on specification
Always available