Metadata-Version: 2.4
Name: arthexis
Version: 0.1.34
Summary: Power & Energy Infrastructure
Author-email: "Rafael J. Guillén-Osorio" <tecnologia@gelectriic.com>
License-Expression: GPL-3.0-only
Project-URL: Repository, https://github.com/arthexis/arthexis
Project-URL: Homepage, https://arthexis.com
Classifier: Programming Language :: Python :: 3
Classifier: Framework :: Django
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: amqp==5.3.1
Requires-Dist: anyio==4.9.0
Requires-Dist: asgiref==3.10.0
Requires-Dist: attrs==25.3.0
Requires-Dist: autobahn==24.4.2
Requires-Dist: Automat==25.4.16
Requires-Dist: billiard==4.2.2
Requires-Dist: bleach==6.3.0
Requires-Dist: black==25.11.0
Requires-Dist: celery==5.5.3
Requires-Dist: certifi==2025.10.5
Requires-Dist: cffi==2.0.0
Requires-Dist: channels==4.1.0
Requires-Dist: charset-normalizer==3.4.4
Requires-Dist: click==8.3.1
Requires-Dist: click-didyoumean==0.3.1
Requires-Dist: click-plugins==1.1.1.2
Requires-Dist: click-repl==0.3.0
Requires-Dist: colorama==0.4.6
Requires-Dist: constantly==23.10.4
Requires-Dist: cron-descriptor==2.0.6
Requires-Dist: cryptography==45.0.5
Requires-Dist: daphne==4.2.1
Requires-Dist: diff-match-patch==20241021
Requires-Dist: defusedxml==0.7.1
Requires-Dist: Django==5.2.8
Requires-Dist: django-celery-beat==2.8.1
Requires-Dist: django-debug-toolbar==6.1.0
Requires-Dist: django-import-export==4.3.13
Requires-Dist: django-object-actions==5.0.0
Requires-Dist: django-otp==1.6.3
Requires-Dist: django-timezone-field==7.1
Requires-Dist: dnspython==2.7.0
Requires-Dist: docutils==0.22.2
Requires-Dist: gpiozero==2.0.1; sys_platform == "linux"
Requires-Dist: graphviz==0.21
Requires-Dist: geckodriver-autoinstaller==0.1.0
Requires-Dist: h11==0.16.0
Requires-Dist: httpcore==1.0.9
Requires-Dist: httpx==0.28.1
Requires-Dist: pytest==8.3.4
Requires-Dist: hyperlink==21.0.0
Requires-Dist: idna==3.11
Requires-Dist: incremental==24.7.2
Requires-Dist: kombu==5.5.4
Requires-Dist: Markdown==3.9
Requires-Dist: mdx_truly_sane_lists==1.3
Requires-Dist: mfrc522==0.0.7; sys_platform == "linux"
Requires-Dist: outcome==1.3.0.post0
Requires-Dist: packaging==25.0
Requires-Dist: pillow==12.0.0
Requires-Dist: prompt_toolkit==3.0.52
Requires-Dist: psutil==7.1.3
Requires-Dist: psycopg==3.2.9
Requires-Dist: psycopg-binary==3.2.13
Requires-Dist: pyasn1==0.6.1
Requires-Dist: pyasn1_modules==0.4.2
Requires-Dist: pycparser==2.23
Requires-Dist: pyOpenSSL==25.1.0
Requires-Dist: pyxel==2.1.9
Requires-Dist: PySocks==1.7.1
Requires-Dist: python-crontab==3.3.0
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: python-dotenv==1.2.1
Requires-Dist: qrcode==8.2
Requires-Dist: redis==7.0.1
Requires-Dist: reportlab==4.4.4
Requires-Dist: requests==2.32.5
Requires-Dist: selenium==4.34.2
Requires-Dist: service-identity==24.2.0
Requires-Dist: setuptools==80.9.0
Requires-Dist: six==1.17.0
Requires-Dist: smbus2==0.5.0
Requires-Dist: sniffio==1.3.1
Requires-Dist: sortedcontainers==2.4.0
Requires-Dist: sqlparse==0.5.3
Requires-Dist: tablib==3.9.0
Requires-Dist: tinycss2==1.4.0
Requires-Dist: toml==0.10.2
Requires-Dist: trio==0.30.0
Requires-Dist: trio-websocket==0.12.2
Requires-Dist: Twisted==25.5.0
Requires-Dist: twine==6.1.0
Requires-Dist: txaio==25.9.2
Requires-Dist: typing_extensions==4.14.1
Requires-Dist: tzdata==2025.2
Requires-Dist: urllib3==2.5.0
Requires-Dist: vine==5.1.0
Requires-Dist: wcwidth==0.2.14
Requires-Dist: webencodings==0.5.1
Requires-Dist: websocket-client==1.8.0
Requires-Dist: websockets==15.0.1
Requires-Dist: webauthn==2.7.0
Requires-Dist: whitenoise==6.11.0
Requires-Dist: plyer==2.1.0; sys_platform == "win32"
Requires-Dist: wsproto==1.2.0
Requires-Dist: zope.interface==8.0.1
Dynamic: license-file

# Arthexis Constellation

[![CI](https://github.com/arthexis/arthexis/actions/workflows/ci.yml/badge.svg)](https://github.com/arthexis/arthexis/actions/workflows/ci.yml) [![Coverage](https://raw.githubusercontent.com/arthexis/arthexis/main/coverage.svg)](https://github.com/arthexis/arthexis/actions/workflows/coverage.yml) [![OCPP 1.6 Coverage](https://raw.githubusercontent.com/arthexis/arthexis/main/ocpp_coverage.svg)](https://github.com/arthexis/arthexis/blob/main/docs/development/ocpp-user-manual.md) [![OCPP 2.0.1 Coverage](https://raw.githubusercontent.com/arthexis/arthexis/main/ocpp201_coverage.svg)](https://github.com/arthexis/arthexis/blob/main/docs/development/ocpp-user-manual.md) [![OCPP 2.1 Coverage](https://raw.githubusercontent.com/arthexis/arthexis/main/ocpp21_coverage.svg)](https://github.com/arthexis/arthexis/blob/main/docs/development/ocpp-user-manual.md) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)


## Purpose

Arthexis Constellation is a [Django](https://www.djangoproject.com/)-based [software suite](https://en.wikipedia.org/wiki/Software_suite) that centralizes tools for managing [electric vehicle charging infrastructure](https://en.wikipedia.org/wiki/Charging_station) and orchestrating [energy](https://en.wikipedia.org/wiki/Energy)-related [products](https://en.wikipedia.org/wiki/Product_(business)) and [services](https://en.wikipedia.org/wiki/Service_(economics)).

Visit our [Changelog Report](https://arthexis.com/changelog/) to browse past and future features and other updates.

## Latest developments

- OCPP 1.6 CSMS coverage now includes dispatch, logging, and badge updates for `GetDiagnostics`, `RemoteStartTransaction`, `RemoteStopTransaction`, and `SetChargingProfile`, lifting unique operation support to 93% while tracking diagnostics uploads.

## Current Features

- Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) by defaut, while allowing Chargering Stations to upgrade to newer protocols if they support them. 

  **Charge point → CSMS**

  | Action | 1.6 | 2.0.1 | 2.1 | What we do |
  | --- | --- | --- | --- | --- |
  | `Authorize` | ✅ | ✅ | ✅ | Validate RFID or token authorization requests before a session starts. |
  | `BootNotification` | ✅ | ✅ | ✅ | Register the charge point and update identity, firmware, and status details. |
  | `DataTransfer` | ✅ | ✅ | ✅ | Accept vendor-specific payloads and record the results. |
  | `DiagnosticsStatusNotification` | ✅ | — | — | Track the progress of diagnostic uploads kicked off from the back office. |
  | `FirmwareStatusNotification` | ✅ | ✅ | ✅ | Track firmware update lifecycle events from charge points. |
  | `Heartbeat` | ✅ | ✅ | ✅ | Keep the websocket session alive and update last-seen timestamps. |
  | `LogStatusNotification` | — | ✅ | ✅ | Report log upload progress from the charge point for diagnostics oversight. |
  | `MeterValues` | ✅ | ✅ | ✅ | Persist periodic energy and power readings while a transaction is active. |
  | `SecurityEventNotification` | — | ✅ | ✅ | Record charge point security events for audit trails. |
  | `StartTransaction` | ✅ | — | — | Create charging sessions with initial meter values and identification data. |
  | `StatusNotification` | ✅ | ✅ | ✅ | Reflect connector availability and fault states in real time. |
  | `StopTransaction` | ✅ | — | — | Close charging sessions, capturing closing meter values and stop reasons. |

  **CSMS → Charge point**

  | Action | 1.6 | 2.0.1 | 2.1 | What we do |
  | --- | --- | --- | --- | --- |
  | `CancelReservation` | ✅ | ✅ | ✅ | Withdraw pending reservations and release connectors directly from the control center. |
  | `ChangeAvailability` | ✅ | ✅ | ✅ | Switch connectors or the whole station between operative and inoperative states. |
  | `ChangeConfiguration` | ✅ | — | — | Update supported charger settings and persist applied values in the control center. |
  | `ClearCache` | ✅ | ✅ | ✅ | Flush local authorization caches to force fresh lookups from the CSMS. |
  | `DataTransfer` | ✅ | ✅ | ✅ | Send vendor-specific commands and log the charge point response. |
  | `GetConfiguration` | ✅ | — | — | Poll the device for the current values of tracked configuration keys. |
  | `GetDiagnostics` | ✅ | — | — | Request a diagnostics archive upload to a signed URL for troubleshooting. |
  | `GetLocalListVersion` | ✅ | ✅ | ✅ | Retrieve the current RFID whitelist version and synchronize entries reported by the charge point. |
  | `RemoteStartTransaction` | ✅ | — | — | Initiate a charging session remotely for an identified customer or token. |
  | `RemoteStopTransaction` | ✅ | — | — | Terminate active charging sessions from the control center. |
  | `ReserveNow` | ✅ | ✅ | ✅ | Reserve connectors for upcoming sessions with automatic connector selection and confirmation tracking. |
  | `Reset` | ✅ | ✅ | ✅ | Request a soft or hard reboot to recover from faults. |
  | `SendLocalList` | ✅ | ✅ | ✅ | Publish released and approved RFIDs as the charge point's local authorization list. |
  | `TriggerMessage` | ✅ | ✅ | ✅ | Ask the device to send an immediate update (for example status or diagnostics). |
  | `UnlockConnector` | ✅ | ✅ | ✅ | Release stuck connectors without on-site intervention. |
  | `UpdateFirmware` | ✅ | ✅ | ✅ | Deliver firmware packages to chargers with secure download tokens and track installation responses. |

  **OCPP roadmap.** Explore the upcoming OCPP 1.6, 2.0.1, and 2.1 catalogue work in the [OCPP roadmap cookbook](docs/cookbooks/ocpp-roadmap.md).

- Charge point reservations with automated connector assignment, energy account and RFID linkage, EVCS confirmation tracking, and control-center cancellation support.
- [API](https://en.wikipedia.org/wiki/API) integration with [Odoo](https://www.odoo.com/), syncing:
  - Employee credentials via `res.users`
  - Product catalog lookups via `product.product`
- Runs on [Windows 11](https://www.microsoft.com/windows/windows-11) and [Ubuntu 22.04 LTS](https://releases.ubuntu.com/22.04/)
- Tested for the [Raspberry Pi 4 Model B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/)

Project under rapid active and open development.

## Role Architecture

Arthexis Constellation ships in four node roles tailored to different deployment scenarios.

<table border="1" cellpadding="8" cellspacing="0">
  <thead>
    <tr>
      <th align="left">Role</th>
      <th align="left">Description &amp; Common Features</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td valign="top"><strong>Terminal</strong></td>
      <td valign="top"><strong>Single-User Research &amp; Development</strong><br />Features: GUI Toast</td>
    </tr>
    <tr>
      <td valign="top"><strong>Control</strong></td>
      <td valign="top"><strong>Single-Device Testing &amp; Special Task Appliances</strong><br />Features: AP Public Wi-Fi, Celery Queue, GUI Toast, LCD Screen, NGINX Server, RFID Scanner</td>
    </tr>
    <tr>
      <td valign="top"><strong>Satellite</strong></td>
      <td valign="top"><strong>Multi-Device Edge, Network &amp; Data Acquisition</strong><br />Features: AP Router, Celery Queue, NGINX Server, RFID Scanner</td>
    </tr>
    <tr>
      <td valign="top"><strong>Watchtower</strong></td>
      <td valign="top"><strong>Multi-User Cloud &amp; Orchestration</strong><br />Features: Celery Queue, NGINX Server</td>
    </tr>
  </tbody>
</table>

## Quick Guide

### 1. Clone
- **[Linux](https://en.wikipedia.org/wiki/Linux)**: open a [terminal](https://en.wikipedia.org/wiki/Command-line_interface) and run `git clone https://github.com/arthexis/arthexis.git`.
- **[Windows](https://en.wikipedia.org/wiki/Microsoft_Windows)**: open [PowerShell](https://learn.microsoft.com/powershell/) or [Git Bash](https://gitforwindows.org/) and run the same command.

### 2. Start and stop
Terminal nodes can start directly with the scripts below without installing; Control, Satellite, and Watchtower roles require installation first. Both approaches listen on [`http://localhost:8888/`](http://localhost:8888/) by default.

- **[VS Code](https://code.visualstudio.com/)**
   - Open the folder and go to the **Run and Debug** panel (`Ctrl+Shift+D`).
   - Select the **Run Server** (or **Debug Server**) configuration.
   - Press the green start button. Stop the server with the red square button (`Shift+F5`).

- **[Shell](https://en.wikipedia.org/wiki/Shell_(computing))**
   - Linux: run [`./start.sh`](start.sh) and stop with [`./stop.sh`](stop.sh).
   - Windows: run [`start.bat`](start.bat) and stop with `Ctrl+C`.

### 3. Install and upgrade
- **Linux:**
   - Run [`./install.sh`](install.sh) with a node role flag:
     - `--terminal` – default when unspecified and recommended if you're unsure. Terminal nodes can also use the start/stop scripts above without installing.
     - `--control` – prepares the single-device testing appliance.
     - `--satellite` – configures the edge data acquisition node.
     - `--watchtower` – enables the multi-user orchestration stack.
   - Use `./install.sh --help` to list every available flag if you need to customize the node beyond the role defaults.
   - Upgrade with [`./upgrade.sh`](upgrade.sh).
   - Consult the [Install & Lifecycle Scripts Manual](docs/development/install-lifecycle-scripts-manual.md) for complete flag descriptions and operational notes.
   - Review the [Auto-Upgrade Flow](docs/auto-upgrade.md) for how delegated upgrades run and how to observe them.

- **Windows:**
   - Run [`install.bat`](install.bat) to install (Terminal role) and [`upgrade.bat`](upgrade.bat) to upgrade.
   - Installation is not required to start in Terminal mode (the default).

### 4. Administration
- Access the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) at [`http://localhost:8888/admin/`](http://localhost:8888/admin/) to review and manage live data. Use `--port` with the start scripts or installer when you need to expose a different port.
- Browse the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/) at [`http://localhost:8888/admindocs/`](http://localhost:8888/admindocs/) for API documentation that is generated from your models.
- Follow the [Install & Administration Guide](docs/cookbooks/install-start-stop-upgrade-uninstall.md) for deployment, lifecycle tasks, and operational runbooks.
- Upgrade channels: new installs default to `--fixed`, keeping auto-upgrade off. Opt into automated updates on the stable channel with `--stable` (24-hour checks aligned to release revisions) or track mainline revisions with `--unstable`/`--latest` (15-minute checks).
- Onboard and service chargers with the [EVCS Connectivity & Maintenance Cookbook](docs/cookbooks/evcs-connectivity-maintenance.md).
- Configure payment gateways with the [Payment Processors Cookbook](docs/cookbooks/payment-processors.md).
- Reference the [Sigils Cookbook](docs/cookbooks/sigils.md) when configuring tokenized settings across environments.
- Manage exports, imports, and audit trails with the [User Data Cookbook](docs/cookbooks/user-data.md).
- Plan feature rollout strategies using the [Node Features Cookbook](docs/cookbooks/node-features.md).
- Curate shortcuts for power users through the [Favorites Cookbook](docs/cookbooks/favorites.md).
- Connect Slack workspaces through the [Slack Bot Onboarding Cookbook](docs/cookbooks/slack-bot-onboarding.md).

## Support

Arthexis Constellation is still under very active development and new features are added every day.

If you decide to use our suite for your energy projects, you may contact us at [tecnologia@gelectriic.com](mailto:tecnologia@gelectriic.com) or visit our [web page](https://www.gelectriic.com/) for [professional services](https://en.wikipedia.org/wiki/Professional_services) and [commercial support](https://en.wikipedia.org/wiki/Technical_support).

## Project Guidelines

- [AGENTS](AGENTS.md) – operating handbook for repository workflows, testing, and release management.
- [DESIGN](DESIGN.md) – visual, UX, and branding guidance that all interfaces must follow.

## About Me

> "What, you want to know about me too? Well, I enjoy [developing software](https://en.wikipedia.org/wiki/Software_development), [role-playing games](https://en.wikipedia.org/wiki/Role-playing_game), long walks on the [beach](https://en.wikipedia.org/wiki/Beach) and a fourth secret thing above all else."
> --Arthexis
