Skip to main content

Self-configurable Manufacturing Industrial Agents (SMIA).

Project description

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


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 development of the SMIA approach is addressed by Ekaitz Hurtado as part of a PhD thesis in the Control and Systems Integration research group at the University of the Basque Country (EHU).

ℹ️ 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 project is currently under active development, so new features and bug fixes will be introduced continuously. Therefore, although SMIA is not yet an industry-ready implementation, validations of the approach with different use cases will be conducted during its development.

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

smia-0.3.2.tar.gz (390.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

smia-0.3.2-py3-none-any.whl (142.2 kB view details)

Uploaded Python 3

File details

Details for the file smia-0.3.2.tar.gz.

File metadata

  • Download URL: smia-0.3.2.tar.gz
  • Upload date:
  • Size: 390.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for smia-0.3.2.tar.gz
Algorithm Hash digest
SHA256 8286c0dd560a4cb56c266f24b2dd9fdd55cd5edf7d37e315a59ce315b233a4ad
MD5 987b8964ff94f5d7e3d49f8b1b0caff9
BLAKE2b-256 0b086b46eff307e71ea2ca7330fff075b42ba0050d68105c5b006b03988b8178

See more details on using hashes here.

Provenance

The following attestation bundles were made for smia-0.3.2.tar.gz:

Publisher: python-publish.yml on ekhurtado/SMIA

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file smia-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: smia-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 142.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for smia-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0c93fd09d769155261919f6ba8ff9032964fcf76536233f4b9df4c8b3f467b27
MD5 fb65f871c657cc46f8fec8f165218456
BLAKE2b-256 69fecfff127e7616a5f6bdcbd8fe5c542c877efe42505c140902efdd69a12e96

See more details on using hashes here.

Provenance

The following attestation bundles were made for smia-0.3.2-py3-none-any.whl:

Publisher: python-publish.yml on ekhurtado/SMIA

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page