Skip to main content

Self-configurable Manufacturing Industrial Agents: SMIA

Python versions Docker badge GitHub release (latest SemVer) Codacy Badge Documentation Status

GitHub Read the Docs DockerHub YouTube

DOIscientific DOIsw DOIdataset


SMIA Logo

The Self-configurable Manufacturing Industrial Agents (SMIA) is a proposal for the implementation of the concept of the I4.0 Component from the Reference Architectural Model Industrie 4.0 (RAMI 4.0) as an AAS-compliant agent-based Digital Twin (DT). The features of the SMIA approach include:

  • free & open-source
  • AAS-compliant: standardized approach
  • Ontology-based
  • easily customizable and configurable
  • self-configuration at software startup
  • easy to usage
  • containerized solution

💡 TIP: For more details on Self-configurable Manufacturing Industrial Agents (SMIA) see the 📄 full documentation.

The SMIA approach originated as part of a PhD thesis addressed by Ekaitz Hurtado in the Systems Control and Integration (GCIS) research group at the University of the Basque Country (EHU). Following the completion of the thesis, the framework remains under active and continuous development to expand its ecosystem and enhance its industrial maturity.

ℹ️ IMPORTANT: The SMIA software is developed as part of scientific research. If you use SMIA in scientific works, please cite the following articles.

Scientific contribution

E. Hurtado, A. Burgos, A. Armentia, and O. Casquero, Self-configurable Manufacturing Industrial Agents (SMIA): a standardized approach for digitizing manufacturing assets, Journal of Industrial Information Integration, vol. 47, p. 100915, Sept. 2025, doi: 10.1016/j.jii.2025.100915

Software contribution

E. Hurtado, I. Sarachaga, A. Armentia, and O. Casquero, An open-source reference framework for the implementation of type 3 Asset Administration Shells, Software Impacts, vol. 27, p. 100807, Apr. 2026, doi: 10.1016/j.simpa.2025.100807

Usage

❗ IMPORTANT: The SMIA reference framework is under active and continuous development, regularly introducing new features, architectural improvements, and bug fixes. Ongoing experimental validations and new industrial use cases continue to be integrated as the ecosystem evolves.

Multiple ways of running SMIA software are available. The associated GitHub repository shows how to run the base SMIA software.

In this case, how to use the SMIA Python package is shown.

Installation

The SMIA approach can be easily installed using pip:

pip install smia

Available facilities

The SMIA approach offers different facilities for its use:

  • smia.launchers: some launchers to run the base SMIA software.
    • smia.launchers.smia_cli_starter.py: launcher to run the SMIA software by passing the AAS model as CLI argument.
    • smia.launchers.smia_starter.py: launcher to run the SMIA software by passing the AAS model through Python code.
    • smia.launchers.smia_docker_starter.py: launcher to run the SMIA software as Docker container by passing the AAS model as environmental variable.
  • smia.agents: the Agent classes available to be instantiated and used.
    • smia.agents.SMIAAgent: the generic SMIA agent.
    • smia.agents.ExtensibleSMIAAgent: the extensible SMIA agent offering all extension methods.
  • smia.assetconnection: tools related to connection with assets.
    • smia.assetconnection.HTTPAssetConnection: tools related to connection with assets through HTTP communication protocol.

The other modules are available for import when, for example, developing an extension to SMIA.

Extensibility

SMIA extensibility is provided through the special agent ExtensibleSMIAAgent. It provides some methods to extend the base SMIA and add own code:

  • add_new_agent_capability(behaviour_class): this method adds a new agent capability to SMIA to increase its intelligence and autonomy. The new capability is added as a SPADE behavior instance.
  • add_new_agent_service(service_id, service_method): this method adds a new agent service to SMIA to increase its intelligence and autonomy. The new service is added as a Python method that will be called when the service is requested.
  • add_new_asset_connection(aas_interface_id_short, asset_connection_class): this method adds a new asset connection to SMIA. The new connection is added by the instance class inherited from the official SMIA generic class AssetConnection and the associated AAS interface element.

Examples

Create and run an SMIAAgent:

import smia
from smia.agents.smia_agent import SMIAAgent

smia.load_aas_model('<path to the AASX package containing the AAS model>')
my_agent = SMIAAgent()

smia.run(my_agent)

Extensibility examples

Create an ExtensibleSMIAAgent:

import smia
from smia.agents.extensible_smia_agent import ExtensibleSMIAAgent

smia.load_aas_model('<path to the AASX package containing the AAS model>')
my_agent = ExtensibleSMIAAgent()

Add new Agent Capability to ExtensibleSMIAAgent:

import spade
from smia.agents.extensible_smia_agent import ExtensibleSMIAAgent  # Import from the SMIA package

new_capability = spade.behaviour
my_extensible_agent.add_new_agent_capability(new_capability)

Add new Agent Service to ExtensibleSMIAAgent:

from smia.agents.extensible_smia_agent import ExtensibleSMIAAgent  # Import from the SMIA package

my_extensible_agent.add_new_agent_service(new_service_id, new_service_method)

Add new Asset Connection to ExtensibleSMIAAgent:

from smia.agents.extensible_smia_agent import ExtensibleSMIAAgent  # Import from the SMIA package

my_extensible_agent.add_new_asset_connection(aas_interface_id_short, asset_connection_class)

Complete example of an Extensible SMIA agent:

import smia
import asyncio
from spade.behaviour import CyclicBehaviour
from smia.agents.extensible_smia_agent import ExtensibleSMIAAgent  # Import from the SMIA package
from my_asset_connections import MyAssetConnection

class MyBehaviour(CyclicBehaviour):
    async def on_start(self):
        print("MyBehaviour started")
        self.iteration = 0

    async def run(self):
        print("MyBehaviour is in iteration {}.".format(self.iteration))
        self.iteration += 1
        await asyncio.sleep(2)

def new_service_method():
    print("This is a new service to be added to SMIA.")
    
def main():
    my_extensible_agent = ExtensibleSMIAAgent()
    smia.load_aas_model('<path to the AAS model>')
    
    my_behav = MyBehaviour()
    my_extensible_agent.add_new_agent_capability(my_behav)
    
    my_extensible_agent.add_new_agent_service('new_service_id', new_service_method)
    
    new_asset_connection = MyAssetConnection()
    my_extensible_agent.add_new_asset_connection('new_connection_idshort', new_asset_connection)
    
    smia.run(my_extensible_agent)

if __name__ == '__main__':
    main()

Dependencies

The SMIA software requires the following Python packages to be installed to run correctly. These dependencies are listed in pyproject.toml so that they are automatically obtained when installing with pip:

  • spade (MIT license)
  • basyx-python-sdk (MIT license)
  • owlready2 (GNU LGPL licence v3)

License

GNU General Public License v3.0. See LICENSE for more information.

Metadata

Release files for smia 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for smia 1.0.3
File Size Uploaded Provenance Actions
smia-1.0.3.tar.gz 402.8 kB With provenance Details for smia-1.0.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for smia 1.0.3
File Interpreter ABI Platform Actions
smia-1.0.3-py3-none-any.whl Python 3 none any Details for smia-1.0.3-py3-none-any.whl

Total release size: 557.7 kB

Release files / smia-1.0.3.tar.gz

Download URL smia-1.0.3.tar.gz
Size 402.8 kB
Tags Source
SHA-256 checksum
How to use checksums
52cd740f849049ff63d8f4f0fe15eb671cf7ee4e1b89653e3daf7e263a8c1d95
BLAKE2b-256 checksum
How to use checksums
7ee1c7923e20d095272b29179f4de93c675566a4069c9159b8639b0aa27b9dee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / smia-1.0.3-py3-none-any.whl

Download URL smia-1.0.3-py3-none-any.whl
Size 155.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4ca85f5307884ed5ef718271156ba372ff40b9b4d51c89dc5aa11d90c2de5dcd
BLAKE2b-256 checksum
How to use checksums
2d98bfc0377a26ebcdafd23ff7580cfeb31a2772365403b3e56cd4d907596fcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Security for smia 1.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for smia-1.0.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page