Metadata-Version: 2.4
Name: arthexis
Version: 0.1.22
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: annotated-types==0.7.0
Requires-Dist: anyio==4.9.0
Requires-Dist: asgiref==3.10.0
Requires-Dist: atproto==0.0.62
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.2.0
Requires-Dist: black==25.9.0
Requires-Dist: celery==5.5.3
Requires-Dist: certifi==2025.7.14
Requires-Dist: cffi==2.0.0
Requires-Dist: channels==4.1.0
Requires-Dist: charset-normalizer==3.4.4
Requires-Dist: click==8.2.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.7
Requires-Dist: django-celery-beat==2.8.1
Requires-Dist: django-debug-toolbar==6.0.0
Requires-Dist: django-import-export==4.3.12
Requires-Dist: django-object-actions==5.0.0
Requires-Dist: django-otp==1.5.4
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: h11==0.16.0
Requires-Dist: httpcore==1.0.9
Requires-Dist: httpx==0.28.1
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: libipld==3.2.0
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==11.3.0
Requires-Dist: prompt_toolkit==3.0.51
Requires-Dist: psutil==7.1.2
Requires-Dist: psycopg==3.2.9
Requires-Dist: psycopg-binary==3.2.12
Requires-Dist: pyasn1==0.6.1
Requires-Dist: pyasn1_modules==0.4.2
Requires-Dist: pycparser==2.22
Requires-Dist: pydantic==2.11.7
Requires-Dist: pydantic_core==2.33.2
Requires-Dist: pyOpenSSL==25.1.0
Requires-Dist: pyperclip==1.11.0
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.1.1
Requires-Dist: qrcode==8.2
Requires-Dist: redis==7.0.1
Requires-Dist: reportlab==4.2.2
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.8.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.6.1
Requires-Dist: typing-inspection==0.4.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==13.1
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

[![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)


## Purpose

Arthexis Constellation is a [narrative-driven](https://en.wikipedia.org/wiki/Narrative) [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)).

## Current Features

- Compatible with the [Open Charge Point Protocol (OCPP) 1.6](https://www.openchargealliance.org/protocols/ocpp-16/) central system, handling:
  - Lifecycle & sessions
    - `BootNotification`
    - `Heartbeat`
    - `StatusNotification`
    - `StartTransaction`
    - `StopTransaction`
  - Access & metering
    - `Authorize`
    - `MeterValues`
  - Maintenance & firmware
    - `DiagnosticsStatusNotification`
    - `FirmwareStatusNotification`
- [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:8000/`](http://localhost:8000/) 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.
     - `--constellation` – 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).

- **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
Visit [`http://localhost:8000/admin/`](http://localhost:8000/admin/) for the [Django admin](https://docs.djangoproject.com/en/stable/ref/contrib/admin/) and [`http://localhost:8000/admindocs/`](http://localhost:8000/admindocs/) for the [admindocs](https://docs.djangoproject.com/en/stable/ref/contrib/admin/admindocs/). Use `--port` with the start scripts or installer when you need to expose a different port.

## Sigils

Sigils are bracketed tokens such as `[ENV.SMTP_PASSWORD]` that Arthexis expands at runtime. They make it possible to reference configuration secrets, system metadata, or records stored in other apps without duplicating values across the project.

### Syntax at a glance

- `[PREFIX.KEY]` &mdash; returns a field or attribute. Hyphens and casing are normalized automatically.
- `[PREFIX=IDENTIFIER.FIELD]` &mdash; selects a specific record by primary key or any unique field.
- `[PREFIX:FIELD=VALUE.ATTRIBUTE]` &mdash; filters by a custom field instead of the primary key.
- `[PREFIX.FIELD=[OTHER.SIGIL]]` &mdash; nests sigils so the value after `=` resolves before the outer token.
- `[PREFIX]` &mdash; for entity prefixes, returns the serialized object in JSON; for configuration prefixes, resolves to an empty string when the key is missing.

The platform ships with three configuration prefixes:

- `ENV` reads environment variables.
- `CONF` reads Django settings.
- `SYS` exposes computed system information such as build metadata.

Additional prefixes are defined through **Sigil Roots**, which map a short code (for example `ROLE`, `ODOO`, or `USER`) to a Django model. You can review them from **Admin &rarr; Sigil Builder** (`/admin/sigil-builder/`), where a test console is also available.

Unknown prefixes remain in place (e.g. `[UNKNOWN.VALUE]`) and are logged. When the optional `gway` CLI is installed, the resolver will attempt to delegate unresolved tokens to it before falling back to the original text.

## Support

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."
> --Arthexis

