OpenADMS

The Open Automatic Deformation Monitoring System (OpenADMS) is a free and open-source software for sensor control, observation data processing, data storage, and data exchange in the Internet of Things (IoT).

OpenADMS is written in Python 3 and consists of three projects:

The development of the software has been halted in favour of DMPACK.

OpenADMS Node

The OpenADMS Node software is used for automating geodetical and geotechnical control measurements within sensor networks.

Some of the features of OpenADMS Node are:

  • platform-independent
  • supports geodetic, geotechnical, and meteorological sensors
  • enables IoT sensor networks based on the MQTT messaging protocol
  • compatible to the Raspberry Pi and other single-board computers
  • export of observation data to CSV files
  • support for NoSQL databases (PostgreSQL, Apache CouchDB, TinyDB)
  • automated alarming system (e-mail, SMS, IRC, RSS, Mastodon, optical/acoustical)
  • processing of total station measurements (polar transformation, Helmert transformation, atmospheric distance correction, serial measurements in two faces)
  • virtual sensors
  • JSON-based configuration and data exchange
  • data validation with JSON Schema
  • web-based user interface
  • transmission of observations, log messages, and heartbeats to OpenADMS Server
  • open source (BSD-2-Clause)
Raspberry Pi 2
The ARM-based single-board computer Raspberry Pi is supported too

Download

The latest development version is available on GitHub:

$ git clone https://github.com/dabamos/openadms-node

Or download the master branch directly as a Zip file. Release versions are available for download as well, but slightly outdated.

Please refer to the OpenADMS Node manual for further instructions.

Platforms and Operating Systems

OpenADMS Node runs on a broad range of computer platforms, like x86, x86-64, ARM, and MIPS. The software is compatible to all modern operating systems, including:

  • GNU/Linux
  • Unix (FreeBSD, NetBSD, OpenBSD, …)
  • Microsoft Windows Vista/7/8/10
  • macOS
  • Android

OpenADMS Node requires a recent Python 3 interpreter, either CPython 3.6+ or PyPy3.5+.

Versions

A list of all versions of OpenADMS Node.

VersionCode NameDateDescription
0.1Anchorage28.02.2014First implementation in Go
0.2Brisbane19.09.2015Scheduler, FTP and SMTP support
0.3Copenhagen19.11.2016Re-implementation in Python 3
0.4Dar es Salaam24.04.2017Minor improvements and fixes
0.5Eindhoven06.09.2017JSON schema, graphical launcher
0.6Fukuyama05.10.2017Apache CouchDB, further means of alerting
0.7Geneva29.08.2018Database caching, signal handler

Screen Shots

Some screen shots of different versions of OpenADMS Node.

screen shot
Graphical launcher for OpenADMS 0.5
screen shot
OpenADMS 0.4 on Microsoft Windows 7
screen shot
First version of the graphical launcher
screen shot
OpenADMS 0.3 running on a Raspberry Pi 2 (NetBSD 7)

OpenADMS Server

OpenADMS Server is a set of scripts and configuration files to run an HTTP service for time series data, obtained from IoT sensor networks based on OpenADMS Node or 3rd party applications. A HTTP-RPC API is provided for accessing sensor data, log messages, and heartbeats. OpenADMS UI is a web-based user interface to OpenADMS Server.

Access the API from your web browser, with command-line tools like cURL or HTTPie, or directly from within your programming language (for instance, by using jQuery or Python Requests).

OpenADMS Server is based on PostgreSQL and nginx. Time series are stored in JSONB format. Please see the documentation for installation notes and API descriptions.

Quick Start

  1. Install PostgreSQL 11 (or higher).
  2. Configure PostgreSQL.
  3. Install and configure nginx or OpenResty.
  4. Test the HTTP RPC API.
  5. Run OpenADMS Node to store observation data in the PostgreSQL database.
  6. Retrieve transmitted data from the server.

OpenADMS UI

OpenADMS UI is a single-page application for access to OpenADMS Server instances. It is written in ECMAScript 2015 and relies on jQuery, Backbone.js, Underscore.js, Papa Parse, and Plotly.js. Please see the GitHub repository for the latest version.