Table of Contents
- Development status
- Compiling and Packaging
- Setting up a development environment
- Optional Components
- Directory structure
Internet of Things data server. Implementation of O-MI Node as specified in Open Messaging Interface (O-MI) v1.0 standard with Open Data Format (O-DF) v1.0 standard. It is intended to be as reference implementation that shows how these standards work in more detail. See Features.md for more details.
O-MI can be used to query or update data, but also to set up data streams with subscriptions. It means that the standard can be used to make peer-to-peer like connections, but it can also be used in traditional client-server setup. O-MI standardizes the requests with XML, and they can be sent with almost any text based protocol. This implementation supports http, https and websocket.
O-DF is a simple object hierarchy format defined in XML. O-DF is used as data payload in O-MI. Simply put, O-DF can be thought as a file structure with directories which are
Objects and files which are
InfoItems. O-MI also supports use of any text based data format, but request semantics might be more ambigious. Payloads other than O-DF are not yet supported in this implementation.
All important features are working, but the project is in beta phase where things are not yet very optimized and malicious requests might cause crashing. However, the project can be used in production if the server has low risk profile or authentication.
For large amounts of data, it is not recommended to use the default value history database. Instead, it can be disabled or changed to e.g. InfluxDB, see FAQ for instructions.
O-MI Node can be extended with special request logic which can be implemented with "agents". Different authentication and authorization mechanisms can be implemented via auth apis. New databases can be implemented with DB interface. Other payloads than O-DF cannot yet be implemented.
development branch for latest progress.
- O-MI Specification (html) (pdf)
- O-DF Specification (html) (pdf)
- API Documentation ScalaDoc
- API Documentation JavaDoc
- Examples of requests and responses, as handled by this server
- Technical Documentation (outdated)
- For running:
- Java 8 JRE (JDK on Mac)
- For building:
- Java 8 JDK
- SBT (Simple Build Tool) or SBT enabled IDE
File to choose:
o-mi-node-x.y.z.debfor Ubuntu, Debian or other linux with dpkg
o-mi-node-x.y.z.rpmfor Red Hat linux
o-mi-node-x.y.z.tgzfor Mac or other Unix
For zip or tgz file:
- Download and extract the file
- Navigate to the
- Run O-MI Node run the corresponding startup script from the bin directory for your OS:
bin/o-mi-nodefor Unix and Mac
By default it will start at url http://localhost:8080/ and has some example and demo agents.
This will run O-MI Node with configuration in
More Information in the Configuration section.
For linux packages
dpkg -i o-mi-node-x.y.z.debor
rpm -i o-mi-node-x.y.z.rpm
sudo systemctl start o-mi-node
- If it needs to start after a reboot:
sudo systemctl enable o-mi-node
docker pull aaltoasia/o-mi
docker run -p 8080:8080 aaltoasia/o-mi
Setting up a development environment
- Install sbt
- (on windows: logout, or put sbt into PATH yourself)
- Open a cmd or shell to the
- Then run
sbtand in opened the ">" prompt run
reStartto compile and run the O-MI Node
- Visit http://localhost:8080/ to see that it's working
You can check our Simple Build Tool cheat sheet section to learn more
If you would like to use an IDE, check how to set up Eclipse or IntelliJ IDEA
Compiling and packaging
- Follow the instructions 1-4 in Setting up a development environment above
sbt universal:packageBin(For other package types, use
- Result can be found in
See SBT Universal Plugin for more packaging methods.
See reference.conf for the defaults and configuration documentation in the comments.
- In package releases:
- In tar and zip releases:
- In development environment:
./O-MI-Node/src/main/resources/application.conf(create a new file if not found)
- Default values are stored in
- Default values are stored in
Configuration file allows json-like syntax but it is not very strict about the object syntax. See here.
application.conf can also have a lot of Akka (threading framework and HTTP server) and Slick (database) specific settings:
- HTTP server settings (Akka HTTP)
- Threading system etc. (Akka)
- SQL value history database (Slick forConfig)
- see also guide on how to use a different db
- Authentication and/or Authorization module
- InfluxDB as value history db. Install it separately and see this guide
- Warp10 as value history db. Branch
warp10integrationhas experimental integration to Warp10 as the DB backend. Download
-warp10version from releases.
O-MI-Node/- Main directory for the o-mi-node server
src/main- Server source code
src/test- Source code of automatic tests
html/- Developer web app source
Agents/- Sources for all internal agent examples
tools/- Some scripts and examples for working with O-DF/O-MI
database/- Database location when running
project/dependencies.scala- Library dependencies list and versions
build.sbt- Build system settings and instructions
src/- Only some specific files for releases, see
O-MI-Node/srcfor real sources
Sections of this project has been developed as part of the bIoTope Project, which has received funding from the European Union’s Horizon 2020 Research and Innovation Programme under grant agreement No. 688203.