{"id":27276767,"url":"https://github.com/dabamos/dmpack","last_synced_at":"2026-02-15T00:14:56.863Z","repository":{"id":181685742,"uuid":"667139568","full_name":"dabamos/dmpack","owner":"dabamos","description":"Sensor network middleware in Fortran 2018, for deformation monitoring and geodetic control measurements in the IoT (client and server).","archived":false,"fork":false,"pushed_at":"2026-01-18T22:15:11.000Z","size":10944,"stargazers_count":19,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-01-19T02:48:09.080Z","etag":null,"topics":["deformation-monitoring","engineering","environmental-monitoring","fortran","geocom","geodesy","geospatial","iiot","monitoring","sensor","sensor-data","sensor-data-collection","sensor-monitor","sensor-network","wsn","xmpp"],"latest_commit_sha":null,"homepage":"https://www.dabamos.de/","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dabamos.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-16T19:08:50.000Z","updated_at":"2026-01-11T13:56:00.000Z","dependencies_parsed_at":"2026-01-05T12:05:03.730Z","dependency_job_id":null,"html_url":"https://github.com/dabamos/dmpack","commit_stats":{"total_commits":287,"total_committers":1,"mean_commits":287.0,"dds":0.0,"last_synced_commit":"a3ed79b9e839ed401112a17618914a5da843cdf0"},"previous_names":["dabamos/dmpack"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/dabamos/dmpack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dabamos%2Fdmpack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dabamos%2Fdmpack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dabamos%2Fdmpack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dabamos%2Fdmpack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dabamos","download_url":"https://codeload.github.com/dabamos/dmpack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dabamos%2Fdmpack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29461560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T22:42:09.113Z","status":"ssl_error","status_checked_at":"2026-02-14T22:42:05.053Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deformation-monitoring","engineering","environmental-monitoring","fortran","geocom","geodesy","geospatial","iiot","monitoring","sensor","sensor-data","sensor-data-collection","sensor-monitor","sensor-network","wsn","xmpp"],"created_at":"2025-04-11T16:48:36.744Z","updated_at":"2026-02-15T00:14:56.857Z","avatar_url":"https://github.com/dabamos.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deformation Monitoring Package (DMPACK)\n\n![Language](https://img.shields.io/badge/-Fortran-734f96?logo=fortran\u0026logoColor=white)\n![License](https://img.shields.io/github/license/dabamos/dmpack?color=blue)\n![Version](https://img.shields.io/badge/version-1.0.0-blue)\n![Build](https://img.shields.io/github/actions/workflow/status/dabamos/dmpack/build.yml)\n\n**DMPACK** is a free software package for IoT-based automatic deformation\nmonitoring and distributed control measurements in engineering geodesy and\ngeotechnics. The project is the successor of\n[OpenADMS](https://www.dabamos.de/openadms.html) and in active development.\n\nThe library and the accompanying programs are written in Fortran 2018, with\nsome smaller parts in Lua 5.4. At the moment, **DMPACK** runs on 64-bit Linux\nand FreeBSD only.\n\n* [Project Website](https://www.dabamos.de/dmpack.html)\n* [User Guide](https://www.dabamos.de/dmpack/guide/)\n* [Screen Shots](https://www.dabamos.de/dmpack.html#screen-shots)\n* [Source Code Documentation](https://www.dabamos.de/dmpack/doc/)\n* [GitHub Repository](https://github.com/dabamos/dmpack)\n\n## Overview\n\n**DMPACK** is a scientific monitoring system and sensor network middleware\ndeveloped for automated control measurements of buildings, infrastructure,\nterrain, geodetic nets, and other objects.\n\nThe software runs on sensor nodes, usually IoT gateways, industrial embedded\nsystems, or single-board computers, and obtains observation data from arbitrary\nsensors, like robotic total stations, digital levels, inclinometers, weather\nstations, or GNSS receivers.\n\nThe raw sensor data is then processed, stored, and optionally transmitted to a\nserver. The software package may be used to monitor objects like:\n\n* bridges, tunnels, dams\n* motorways, railways\n* construction sites, mining areas\n* landslides, cliffs, glaciers\n* churches, monasteries, and other heritage buildings\n\n**DMPACK** is built around the relational SQLite database for time series and\nlog storage on client and server. The server component is optional. It is\npossible to run **DMPACK** on clients only, without data distribution. The\nclient-side inter-process communication is based on POSIX message queues and\nPOSIX semaphores.\n\n## System Architecture\n\n![Schema](https://raw.githubusercontent.com/dabamos/dmpack/refs/heads/master/guide/resources/images/schema.png)\n\n## Features\n\n**DMPACK** includes modules for:\n\n* sensor control (RS-232/422/485, TTL/UART, Modbus RTU/TCP, 1-Wire,\n  sub-process, file system)\n* SQLite database access\n* message passing with POSIX message queues\n* process synchronisation with POSIX semaphores\n* data serialisation (ASCII, CSV, GeoJSON, HDF5, JSON, JSON Lines, Namelist)\n* server-side web applications (CGI, FastCGI)\n* HTTP-based remote procedure call API\n* concurrent data synchronisation between client and server\n* FTP file transfer\n* client status messages (heartbeats)\n* distributed logging\n* Leica GeoCOM API in Fortran\n* Deutscher Wetterdienst (DWD) API\n* MPPT and solar battery monitoring (VE.Direct)\n* camera access (RTSP, V4L2)\n* time series plotting\n* Lua scripting\n* MQTT and XMPP connectivity\n* report generation (HTML5, PDF)\n* Atom XML web feeds\n* e-mail (SMTP)\n* compression (deflate, zstd)\n* regular expression matching\n\n## Requirements\n\n**DMPACK** has the following requirements:\n\n* Linux or FreeBSD operating system\n* 64-bit platform (x86-64, AArch64)\n* Fortran 2018 and ANSI C compiler (GNU, LLVM, Intel)\n\nThird-party dependencies have to be present to build and run the software of\nthis package:\n\n* FastCGI\n* Gnuplot\n* HDF5\n* LAPACK\n* libcurl\n* libmodbus\n* libstrophe\n* Lua 5.4\n* PCRE2\n* SQLite 3\n* zlib\n* zstd\n\nOn Linux, development headers are required for compilation. It is recommended\nto additionally install:\n\n* FFmpeg\n* Ghostscript\n* GNU roff\n* GraphicsMagick\n\nTo generate the [man pages](adoc/README.md), the [user guide](guide/README.md),\nand the source code documentation, you will need furthermore:\n\n* [AsciiDoctor](https://asciidoctor.org/), [Pygments](https://pygments.org/), and\n  [pygments.rb](https://rubygems.org/gems/pygments.rb/versions/2.2.0)\n* [FORD](https://github.com/Fortran-FOSS-Programmers/ford)\n\n## Program Overview\n\nThe following programs are based on the **DMPACK** library.\n\n| Name                           | Description                                                         |\n|--------------------------------|---------------------------------------------------------------------|\n| [dmapi](adoc/dmapi.adoc)       | FastCGI-based HTTP-RPC API service.                                 |\n| [dmbackup](adoc/dmbackup.adoc) | Creates online backups of DMPACK databases.                         |\n| [dmbeat](adoc/dmbeat.adoc)     | Sends status messages (heartbeats) periodically to RPC service.     |\n| [dmbot](adoc/dmbot.adoc)       | XMPP chat bot that answers to commands from authorised users.       |\n| [dmcamera](adoc/dmcamera.adoc) | Captures images from USB webcam or IP camera.                       |\n| [dmdb](adoc/dmdb.adoc)         | Stores observations received from message queue in database.        |\n| [dmdbctl](adoc/dmdbctl.adoc)   | Command-line interface to observation databases.                    |\n| [dmdwd](adoc/dmdwd.adoc)       | Reads weather reports from DWD open data API.                       |\n| [dmexport](adoc/dmexport.adoc) | Exports database records to file.                                   |\n| [dmfeed](adoc/dmfeed.adoc)     | Creates Atom feeds in XML format from log messages.                 |\n| [dmfs](adoc/dmfs.adoc)         | Reads sensor values from file system (file, named pipe, OWFS).      |\n| [dmgrc](adoc/dmgrc.adoc)       | Generates log messages from GeoCOM return codes.                    |\n| [dmimport](adoc/dmimport.adoc) | Imports CSV file into database.                                     |\n| [dminfo](adoc/dminfo.adoc)     | Prints system and database information as key–value pairs.          |\n| [dminit](adoc/dminit.adoc)     | Creates and initialises DMPACK databases.                           |\n| [dmlog](adoc/dmlog.adoc)       | Sends log messages to logger through message queue.                 |\n| [dmlogger](adoc/dmlogger.adoc) | Stores log messages received from message queue in database.        |\n| [dmlua](adoc/dmlua.adoc)       | Runs Lua script to handle observations received from message queue. |\n| [dmmb](adoc/dmmb.adoc)         | Sensor control program for Modbus RTU/TCP.                          |\n| [dmmbctl](adoc/dmmbctl.adoc)   | Command-line utility for read and write access to Modbus registers. |\n| [dmpipe](adoc/dmpipe.adoc)     | Reads sensor values from sub-process.                               |\n| [dmplot](adoc/dmplot.adoc)     | Generates plots from observations in database.                      |\n| [dmrecv](adoc/dmrecv.adoc)     | Receives logs and observations from message queue.                  |\n| [dmreport](adoc/dmreport.adoc) | Creates reports of plots and log messages in HTML or PDF format.    |\n| [dmsend](adoc/dmsend.adoc)     | Sends observations and logs to message queue.                       |\n| [dmserial](adoc/dmserial.adoc) | Reads sensor values from serial port.                               |\n| [dmsync](adoc/dmsync.adoc)     | Synchronises local databases with RPC API (from client to server).  |\n| [dmsystem](adoc/dmsystem.adoc) | Monitors system parameters (free disk space, load average, …).      |\n| [dmupload](adoc/dmupload.adoc) | Transfers captured camera images to RPC service.                    |\n| [dmuuid](adoc/dmuuid.adoc)     | Generates UUIDv4 identifiers.                                       |\n| [dmved](adoc/dmved.adoc)       | Reads status of MPPT charger or battery monitor (VE.Direct).        |\n| [dmweb](adoc/dmweb.adoc)       | CGI-based web user interface for database access (client, server).  |\n\n## Installation\n\nThe **DMPACK** library and programs have to be built from source by either\nexecuting the provided Makefile, or by using the\n[Fortran Package Manager](https://fpm.fortran-lang.org/). See the\n[User Guide](https://www.dabamos.de/dmpack/guide/_installation.html) for\ncomplete installation instructions.\n\nClone the **DMPACK** repository or download an archive of it, then execute the\nMakefile with build target `freebsd`, `linux`, or `linux_aarch64`:\n\n```\n$ git clone --depth 1 https://github.com/dabamos/dmpack\n$ cd dmpack/\n$ make [freebsd|linux|linux_aarch64]\n$ make install PREFIX=/opt\n```\n\nOn 64-bit Raspberry Pi single-board computers running Linux, select target\n`linux_aarch64`.\n\n## Library\n\n| Name           | Description            |\n|----------------|------------------------|\n| `libdmpack.a`  | DMPACK static library. |\n| `libdmpack.so` | DMPACK shared library. |\n\nEither link your programs against static library `libdmpack.a` or `-ldmpack` if\n`libdmpack.so` is in your library search path, for example:\n\n```\n$ gfortran -I/opt/include/dmpack -o example example.f90 /opt/lib/libdmpack.a\n```\n\nThe directory containing the **DMPACK** module files is passed through argument\n`-I`. Depending on which parts of the **DMPACK** library are used by third-party\napplications, additional shared libraries have to be linked:\n\n| Module          | Libraries           | Linker Libraries                                  |\n|-----------------|---------------------|---------------------------------------------------|\n| `dm_config`     | Lua 5.4             | `pkg-config --libs lua-5.4`                       |\n| `dm_crypto`     | libcrypto           | `-lcrypto`                                        |\n| `dm_db`         | SQLite 3            | `pkg-config --libs sqlite3`                       |\n| `dm_dwd_api`    | libcurl             | `pkg-config --libs libcurl`                       |\n| `dm_fcgi`       | FastCGI             | `-lfcgi`                                          |\n| `dm_ftp`        | libcurl             | `pkg-config --libs libcurl`                       |\n| `dm_hdf5`       | HDF5                | `pkg-config --libs hdf5_fortran`                  |\n| `dm_im`         | libstrophe          | `pkg-config --libs libstrophe expat openssl zlib` |\n| `dm_la`         | LAPACK, BLAS        | `pkg-config --libs lapack blas`                   |\n| `dm_lua`        | Lua 5.4             | `pkg-config --libs lua-5.4`                       |\n| `dm_lua_api`    | Lua 5.4             | `pkg-config --libs lua-5.4`                       |\n| `dm_lua_geocom` | Lua 5.4             | `pkg-config --libs lua-5.4`                       |\n| `dm_mail`       | libcurl             | `pkg-config --libs libcurl`                       |\n| `dm_modbus`     | libmodbus           | `pkg-config --libs libmodbus`                     |\n| `dm_mqtt`       | libcurl             | `pkg-config --libs libcurl`                       |\n| `dm_mqueue`     | POSIX               | `-lrt`                                            |\n| `dm_mutex`      | POSIX               | `-lpthread`                                       |\n| `dm_regex`      | PCRE2               | `pkg-config --libs libpcre2-8`                    |\n| `dm_rpc`        | libcurl, zlib, zstd | `pkg-config --libs libcurl zlib libzstd`          |\n| `dm_sem`        | POSIX               | `-lpthread`                                       |\n| `dm_thread`     | POSIX               | `-lpthread`                                       |\n| `dm_transform`  | LAPACK, BLAS        | `pkg-config --libs lapack blas`                   |\n| `dm_z`          | zlib, zstd          | `pkg-config --libs zlib libzstd`                  |\n| `dm_zlib`       | zlib                | `pkg-config --libs zlib`                          |\n| `dm_zstd`       | zstd                | `pkg-config --libs libzstd`                       |\n\nSome modules use standard input/output to communicate with external programs:\n\n| Module           | Packages       | Expected Binary Names |\n|------------------|----------------|-----------------------|\n| `dm_camera`      | FFmpeg         | `ffmpeg`              |\n| `dm_ghostscript` | Ghostscript    | `gs`, `ps2pdf`        |\n| `dm_gm`          | GraphicsMagick | `gm`                  |\n| `dm_plot`        | Gnuplot        | `gnuplot`             |\n| `dm_roff`        | GNU roff       | `groff`               |\n\n## Source Code Structure\n\n| Path       | Description                                          |\n|------------|------------------------------------------------------|\n| `adoc/`    | AsciiDoc source files of man pages.                  |\n| `app/`     | Source of programs based on DMPACK.                  |\n| `config/`  | Example configuration files.                         |\n| `dist/`    | DMPACK libraries and executables.                    |\n| `doc/`     | Source code documentation generated by FORD.         |\n| `guide/`   | User Guide source and output files.                  |\n| `include/` | Fortran module files (required for linking).         |\n| `lib/`     | Fortran interface libraries (required for linking).  |\n| `man/`     | Generated man pages (includes HTML and PDF exports). |\n| `share/`   | Example files, style sheets, scripts, and so on.     |\n| `src/`     | Source of DMPACK library modules.                    |\n| `test/`    | Test programs for DMPACK modules.                    |\n| `vendor/`  | Third-party dependencies.                            |\n\n## Manual Pages\n\nTo create all **DMPACK** man pages from source, run:\n\n```\n$ make man\n```\n\nThe output files are written to `man/`.\n\n## User Guide\n\nTo convert the [User Guide](guide/README.md) from AsciiDoc to HTML, run:\n\n```\n$ make guide\n```\n\nThe output is written to `guide/guide.html`.\n\n## Source Code Documentation\n\nThe source code documentation of the **DMPACK** library has to be created with\n[FORD](https://github.com/Fortran-FOSS-Programmers/ford). Install the Python\npackage with:\n\n```\n$ python3 -m pip install -U ford\n```\n\nIn the **DMPACK** repository, run:\n\n```\n$ make doc\n```\n\nThe HTML files will be written to directory `doc/`. Open `index.html` in a web\nbrowser.\n\n## Licence\n\nISC\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdabamos%2Fdmpack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdabamos%2Fdmpack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdabamos%2Fdmpack/lists"}