AyMON — the industrial monitoring and automation engine

AyMON

The industrial monitoring and automation engine. It reads devices, keeps every value in one live tree, raises alarms and keeps history — on Windows and Linux, free to start.

How it works

On one side, the things that make data. On the other, the people and systems that need it. AyMON sits between them and speaks to both — in both directions, so a page or an assistant can also change a value, if it is allowed to.

Machines and devices

  • PLCsModbus
  • MachinesOPC UA
  • Sensors, IoTMQTT
  • Network gearSNMP
  • CamerasRTSP, USB
  • Anything elseTCP, serial

AyMON engine

  • one live tree of values
  • alarms and limits
  • history in SQL
  • logic in script

Windows · Linux

People and systems

  • Web pagesHTTP, WS
  • DashboardsMQTT, REST
  • ReportsSQL
  • Mail, filesSMTP, FTP
  • Another AyMONcluster
  • AI assistantsMCP

Three ideas

Everything else follows from these.

1

Everything is an element

A connection, a device, one request to it, a single measured point — each is an element in one XML tree, with an address anything can read or write: con → dev → bi → io.

2

Configuration before code

Scaling, rounding, limits, alarms and history are attributes, not programs. Script — a language close to JavaScript — is for the logic that is really yours.

3

A change is an event

When a value arrives, the functions written beside it run in order: convert, round, check the limits, raise the alarm, publish. Nothing polls the tree.

What it looks like

A tank station on Modbus TCP: one connection, one device, one request for four registers, and the tank level with its scaling and four alarm limits. Not one line of script. Shortened from the example PRJEDU_modbus.

<con id="CN_MB" xdb_fnc="[CON.tcp,PRO.modbus]"
     con_mod="CLIENT" pro_role="MASTER"/>

<dev id="TANK" pro_con="CN_MB" pro_adr="1"
     con_host="127.0.0.1" con_port="1502">

  <!-- one request: read 4 holding registers, every second -->
  <bi id="TANK_BLK" pro_fni="3" pro_adr="0" pro_len="4"
      evt_fnc="[PRO.pol]" evt_per="1" pro_fnc="[PRO.inp]">

    <!-- register 0, tenths of a percent -->
    <io id="TANK_LEVEL" pro_adr="0" pro_fnc="[VAL.put]"
        val_fnc="[VAL.cnv,ATR.rou,ATR.lmt,ALM.onlvl]"
        val_cnv_dlt="0.1" val_rou="0.1" val_unt="%"
        val_alm_onlhi_alm="95" val_alm_onlhi_wrn="85"
        val_alm_onllo_wrn="15" val_alm_onllo_alm="5"/>
  </bi>
</dev>

Where it runs

  • Windows x64, and Linux x86-64 (Ubuntu 22.04+, Debian 12+, RHEL 9 and alike).
  • One executable and its libraries — no runtime to install, no database required.
  • A FREE edition that never expires: enough for every example, for learning and for personal projects.
  • Two engines can share one job — replication, and a cluster that fails over.

Repositories

Start with the examples: each one runs with a single command and needs no hardware, no licence and no database unless it says so.

Start here

AyMON

Runnable projects and short guides: Modbus, MQTT, OPC UA, SNMP, SQL, live web pages, a camera inspecting bottles, a PLC program, a PID lab, a robot cell, an AI assistant on a plant — and the engine for Windows and Linux.

Coming later

AyPLG

The plug-in SDK: add a protocol, a connection type, a script library or an SQL driver to the engine, in plain C, with one header.

Coming later

AyDATA

The core library underneath: the type system, and the live XML tree with XPath and JSON that every value lives in.

AyMON is developed by Şenol Erçetin and licensed exclusively to AKYA Canada Inc.

Questions: Discussions · Support: support@aymon.ca · Licensing: licensing@aymon.ca

See it running

Examples from the repository

Every one starts with one command, with no hardware and no licence. Click a picture to enlarge it.
PRJEDU_vision &mdash; a camera inspects bottles on a filling line inside the engine: 100 frames a second, every bottle judged, no script for the watching.

PRJEDU_vision — a camera inspects bottles on a filling line inside the engine: 100 frames a second, every bottle judged, no script for the watching.

PRJEDU_robotarm &mdash; a six-axis cobot and the cell around it, over its dashboard and Modbus; the cell checks its own rules before every command.

PRJEDU_robotarm — a six-axis cobot and the cell around it, over its dashboard and Modbus; the cell checks its own rules before every command.

PRJEDU_plc &mdash; a PLC program for a filling line: remote I/O over Modbus, a step sequence, interlocks and an HMI.

PRJEDU_plc — a PLC program for a filling line: remote I/O over Modbus, a step sequence, interlocks and an HMI.

PRJEDU_oee &mdash; OEE of a production line shift by shift: availability, performance, quality, losses and a shift report in SQLite.

PRJEDU_oee — OEE of a production line shift by shift: availability, performance, quality, losses and a shift report in SQLite.

PRJPER_adsb &mdash; the aircraft overhead from an ADS-B receiver's stream, with an emergency squawk raised as an alarm.

PRJPER_adsb — the aircraft overhead from an ADS-B receiver’s stream, with an emergency squawk raised as an alarm.

Editions

Free to start, licensed to grow

FREE

Never expires. Every protocol, production use included, within 8 connections and 8 devices.

Education

For classrooms and trying out: the same engine, 32 logged-in users.

Commercial

More connections, devices and users, and engines on separate machines.

News & Updates

Engine releases, guides and news from the plants that run AyMON.

No Results Found

The page you requested could not be found. Try refining your search, or use the navigation above to locate the post.

Where to go next

See what the engine speaks, how the editions differ, or run your first example in five minutes.