Metadata-Version: 2.4
Name: flexEngine
Version: 0.6.0
Summary: flexEngine - An engine purpose-built for flexible industrial automation applications.
Home-page: https://flexia.readthedocs.io/en/latest/index.html
Author: Bert Van Acker
Author-email: bert.vanacker@uantwerpen.be
License: Apache License 2.0
Keywords: Industrial automation,Deployment,Over-the-air updater
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: certifi==2025.1.31
Requires-Dist: charset-normalizer==3.4.1
Requires-Dist: idna==3.10
Requires-Dist: psutil==6.1.1
Requires-Dist: PyYAML==6.0.3
Requires-Dist: redis==7.4.0
Requires-Dist: requests==2.32.3
Requires-Dist: urllib3==2.3.0
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary


-----------------------------------------------------------------------------------
  flexEngine: A Pythonic framework to develop trustworthy self-adaptive robotics
-----------------------------------------------------------------------------------

|pypi-version|

# flexEngine

flexEngine is an engine purpose-built for deploying and monitoring flexible industrial automation applications. It streamlines the deployment process of automation tasks, integrates powerful monitoring capabilities, and facilitates maintenance and troubleshooting in complex industrial environments.

---

## Table of Contents

- [Overview](#overview)
- [Features](#features)
- [Installation](#installation)
- [Requirements](#requirements)
- [License](#license)
- [Support](#support)

---

## Overview

flexEngine is designed to provide a robust, scalable, and adaptable platform for industrial automation. It supports:
- **Deploying automation applications:** Seamlessly roll out new functionalities.
- **Real-time monitoring:** Keep track of system performance and key metrics.
- **Modular integration:** Easily integrate third-party tools and extend functionality.

Whether you’re managing a small automation task or overseeing a large industrial operation, flexEngine provides the flexibility and control needed to ensure smooth and efficient operations.

---

## Features

- **Easy Deployment:** Simplified workflows for rapid application deployment.
- **Real-Time Monitoring:** Integrated dashboards and metrics to monitor system health.
- **Scalability:** Designed to grow from small installations to enterprise-level operations.
- **Modular Architecture:** Plug-and-play design allows for custom extensions and integrations.
- **Robust Security:** Adheres to industry-standard security practices to safeguard operations.
- **Logging and Alerts:** Comprehensive logging with customizable alerting mechanisms for proactive maintenance.

---

## Installation

flexEngine is a pure-Python package, so the same lightweight install path
works on Windows, macOS, Linux, and Linux ARMv6+ (e.g. Raspberry Pi) — no
compiled installers needed. Each option below installs flexEngine into an
isolated environment (no admin/root rights required) and then scaffolds a
ready-to-run **agent workspace** (`apps/`, `configuration/`, `logs/`,
`agent.py`).

### Quick install

**macOS / Linux / Linux ARMv6+ (Raspberry Pi):**

```bash
curl -fsSL https://raw.githubusercontent.com/BertVanAcker/flexEngine/master/scripts/install.sh | bash
```

To answer the configuration prompts interactively (device name, flexCloud
credentials, Redis connection, ...) rather than getting the non-interactive
defaults, run it as:

```bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/BertVanAcker/flexEngine/master/scripts/install.sh)"
```

**Windows (PowerShell):**

```powershell
iwr -useb https://raw.githubusercontent.com/BertVanAcker/flexEngine/master/scripts/install.ps1 | iex
```

**Manual install (any platform):**

flexEngine requires Python 3.10 or newer. Check which interpreter you have
before installing:

```bash
python3 --version
```

If that reports an older Python (or none at all), install a 3.10+ interpreter
first — e.g. `sudo apt install python3.10` on Debian/Ubuntu, `brew install
python@3.10` on macOS, or download it from
[python.org](https://www.python.org/downloads/) on Windows — and use that
interpreter explicitly below (e.g. `python3.10`).

```bash
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
python -m pip install --upgrade pip
pip install flexEngine
flexEngine init my-agent-workspace
```

### Setting up the workspace

`flexEngine init` creates the workspace layout and either builds
`configuration/config.yaml` from your answers to a short set of prompts, or
copies in a config file you already have:

```bash
# interactive setup
flexEngine init my-agent-workspace

# bring your own config.yaml
flexEngine init my-agent-workspace --config /path/to/config.yaml

# non-interactive, defaults only (useful for scripted installs)
flexEngine init my-agent-workspace --non-interactive
```

### Running the agent

In the foreground (blocks the terminal, stop with Ctrl+C):

```bash
cd my-agent-workspace
python agent.py    # if "python" isn't found, use "python3 agent.py"
```

As a background process (keeps running after you close the terminal):

```bash
flexEngine start my-agent-workspace     # launch detached, prints its pid
flexEngine status my-agent-workspace    # check whether it's running
flexEngine stop my-agent-workspace      # gracefully stop it
```

`flexEngine start` writes a pid file (`agent.pid`) and the process's
stdout/stderr (`logs/agent.out.log`) into the workspace; `flexEngine stop`
signals the agent to shut down cleanly and waits up to `--timeout` seconds
(default 10) before force-killing it. This works the same way on
Windows/macOS/Linux. For start-on-boot or automatic restart-on-crash on a
fixed deployment (e.g. an always-on Raspberry Pi), prefer an OS service
manager (systemd/launchd/Windows Service) that invokes `python agent.py`
directly instead.

flexEngine connects to Redis on startup (see `flexCloud.redis_host` /
`redis_port` in `configuration/config.yaml`) — make sure a Redis instance is
reachable before starting the agent.

Docker is optional and only needed if you plan to deploy applications as
containers. Check whether it's installed and its daemon is running with:

```bash
flexEngine docker
```

---

## Requirements

- **Operating System:** Windows, macOS, Linux, or Linux ARMv6+ (e.g. Raspberry Pi OS).
- **Python:** 3.10 or newer.
- **Redis:** reachable locally or remotely — required by flexEngine's flexCloud connector.
- **Docker** *(optional)*: only needed if you deploy applications as
  containers. The quick-install scripts will ask whether to install it for
  you; to skip the prompt, pass `--install-docker`/`--no-docker` (bash) or
  `-InstallDocker`/`-NoDocker` (PowerShell).
- **Note for Linux ARMv6/ARMv7 devices:** one dependency (`psutil`) may not
  have a prebuilt wheel for your architecture and could require compiling
  from source (`sudo apt install python3-dev build-essential`) during
  install.

---


## License
flexEngine is distributed under the Apache 2.0 License. Please review the LICENSE file for further details.

---

## Support

For assistance or inquiries, please reach out via:

Email: bert.vanacker@uantwerpen.be
Issue Tracker: Open an issue on our GitHub Issues page

Maintainers cutting a new release should see [RELEASING.md](RELEASING.md).
