[](https://github.com/fligneul/aps2mqtt)
[](https://github.com/fligneul/aps2mqtt/releases)
[](https://badge.fury.io/py/aps2mqtt)
[](https://hub.docker.com/r/fligneul/aps2mqtt)
[](https://github.com/python-semantic-release/python-semantic-release)
# APS2MQTT
Allows you to access your [APsystems](http://www.apsystems.com) Energy Communication Unit (ECU) data by MQTT. This MQTT bridge queries the ECU directly at regular interval for new data, parse the returned data and publish them over MQTT.
In this way you can integrate your APsystems devices with whatever smart home infrastructure you are using.
:warning: It currently supports only one ECU.
## Acknowledgements
This work is based on the awesome [homeassistant-apsystems_ecur (v1.2.30)](https://github.com/ksheumaker/homeassistant-apsystems_ecur). This couldn't have been done without their hardwork.
## Prerequisites
[See full version](aps2mqtt/apsystems/README.md#Prerequisites)
* A compatible APSystems ECU
* ECU-B
* ECU-R
* ECU-C
* Some inverters
* YC1000/QT2
* YC600/DS3/DS3-H/DS3-L/DS3D
* QS1/QS1A
Your ECU needs to be fully configured by the EMA Manager and should have a fixed IP address. APS2MQTT should run on a machine in the same network (or in an accessible one) as the ECU.
ECU-C and modern ECU-R (ID starting with 2162) can be automatically restarted in case of connection error. For older ECU-R and for ECU-B, the restart need to be done manually.
### Test your connection
[See full version](aps2mqtt/apsystems/README.md#Test-your-connection)
You can test the connection between APS2MQTT and the ECU using Netcat. From your terminal, run the following command (assuming your ECU IP address is 192.168.1.42) to open the connection
``` sh
nc -v 192.168.1.42 8899
```
ECU should response with an "open" message
``` sh
192.168.1.42 (192.168.1.42:8899) open
```
Connection is now established, the ECU is ready to receive commands
``` sh
APS1100160001END
```
If this command return with an APS message, you are ready to start APS2MQTT. If not, rebbot your ECU and try again.
## Install
Binaries are available in the release asset or on [PyPI](https://pypi.org/project/aps2mqtt/).
Using a virtual env is recommended for better insulation.
``` sh
# with PyPI
pip3 install aps2mqtt
# manually
pip3 install aps2mqtt-[version]-py3-none-any.whl
```
Start it
``` sh
python3 -m aps2mqtt -h
```
### Run as a service
Using systemd, APS2MQTT can be started automatically
``` yaml
[Unit]
Description=APS2MQTT
After=multi-user.target
[Service]
Type=simple
User=user
Restart=on-failure
ExecStart=/path-to-your-venv/python3 -m aps2mqtt -c config.yaml
[Install]
WantedBy=multi-user.target
```
## Configuration
APS2MQTT configuration can be provided by a yaml config file or by environment variables (in a container context for example).
### MQTT
| Key | Description | Example | Default value |
|---|---|---|---|
| MQTT_BROKER_HOST | Host of the MQTT broker | "192.168.1.1", "broker.hivemq.com" | "127.0.0.1" |
| MQTT_BROKER_PORT | Port of the MQTT broker | 1883 | 1883 |
| MQTT_BROKER_USER | User login of the MQTT broker | "john-doe" | "" |
| MQTT_BROKER_PASSWD | User password of the MQTT broker | "itsasecret" | "" |
| MQTT_CLIENT_ID | Client ID if the MQTT client | "MyAwesomeClient" | "APS2MQTT" |
| MQTT_TOPIC_PREFIX | Topic prefix for publishing | "my-personal-topic" | "" |
| MQTT_RETAIN | Retain MQTT messages | True | False |
| MQTT_DISCOVERY_ENABLED | Enable MQTT discovery | True | False |
| MQTT_DISCOVERY_PREFIX | MQTT discovery prefix | "homeassistant" | "homeassistant" |
| MQTT_BROKER_SECURED_CONNECTION | Use secure connection to MQTT broker | True | False |
| MQTT_BROKER_CACERTS_PATH | Path to the cacerts file | "/User/johndoe/.ssl/cacerts" | None |
### ECU
| Key | Description | Example | Default value |
|---|---|---|---|
| APS_ECU_IP | IP of the ECU | "192.168.1.42" | None, this field id mandatory |
| APS_ECU_PORT | Communication port of the ECU | 8899 | 8899 |
| APS_ECU_TIMEZONE | Timezone of the ECU | 'Europe/Paris' | None (use system timezone) |
| APS_ECU_AUTO_RESTART | Automatically restart ECU in case of error | True | False |
| APS_ECU_WIFI_SSID | SSID of the ECU Wifi <br />:information_source: Only used if automatic restart is enabled | "My Wifi" | "" |
| APS_ECU_WIFI_PASSWD | Password of the ECU Wifi <br />:information_source: Only used if automatic restart is enabled | "secret-key" | "" |
| APS_ECU_STOP_AT_NIGHT | Stop ECU query during the night | True | False |
| APS_ECU_POSITION_LAT | Latitude of the ECU, used to retrieve sunset and sunrise <br />:information_source: Only used if stop at night is enabled | 51.49819 | 48.864716 (Paris) |
| APS_ECU_POSITION_LNG | Longitude of the ECU, used to retrieve sunset and sunrise <br />:information_source: Only used if stop at night is enabled | -0.13087 | 2.349014 (Paris) |
### Timezone
Without any specific configuration, aps2mqtt use your system's timezone as a reference.
* If you use aps2mqtt as a python application, setting the ECU timezone is recommended by setting the configuration variable 'APS_ECU_TIMEZONE' for better processing.
* If you are using aps2mqtt as a Docker image, you can configure the timezone for the whole container using the environement variable 'TZ'
### MQTT Discovery
APS2MQTT supports MQTT discovery for seamless integration with home automation platforms like Home Assistant.
When enabled, `aps2mqtt` will publish configuration messages to the specified discovery prefix. These messages allow your home automation platform to automatically discover and configure the ECU and all its associated inverters and panels as devices and entities.
To enable this feature, set the `MQTT_DISCOVERY_ENABLED` option to `True` in your configuration.
```yaml
mqtt:
# ... other mqtt settings
MQTT_DISCOVERY_ENABLED: True
# Optional: Change the discovery prefix if your platform requires it
MQTT_DISCOVERY_PREFIX: 'homeassistant'
```
Once enabled, you should see the devices automatically appear in your home automation platform.
### Example
#### Unsecured connection
``` yaml
ecu:
APS_ECU_IP: '192.168.1.42'
APS_ECU_TIMEZONE: 'Europe/Paris'
APS_ECU_STOP_AT_NIGHT: True
APS_ECU_POSITION_LAT: 47.206
APS_ECU_POSITION_LNG: -1.5645
mqtt:
MQTT_BROKER_HOST: '192.168.1.12'
MQTT_BROKER_PORT: 1883
MQTT_BROKER_USER: 'johndoe'
MQTT_BROKER_PASSWD: 'itsasecret'
MQTT_RETAIN: True
MQTT_DISCOVERY_ENABLED: True
```
#### Secured connection
``` yaml
ecu:
APS_ECU_IP: '192.168.1.42'
APS_ECU_TIMEZONE: 'Europe/Paris'
APS_ECU_STOP_AT_NIGHT: True
APS_ECU_POSITION_LAT: 47.206
APS_ECU_POSITION_LNG: -1.5645
mqtt:
MQTT_BROKER_HOST: 'broker.hivemq.com'
MQTT_BROKER_PORT: 8883
MQTT_BROKER_SECURED_CONNECTION: True
MQTT_DISCOVERY_ENABLED: True
MQTT_DISCOVERY_PREFIX: 'custom_discovery'
```
#### Using Docker Compose
``` yaml
services:
aps2mqtt:
image: fligneul/aps2mqtt:latest
restart: always
environment:
- TZ=Europe/Paris
- DEBUG=True
- APS_ECU_IP=192.168.1.42
- APS_ECU_STOP_AT_NIGHT=True
- APS_ECU_POSITION_LAT=47.206
- APS_ECU_POSITION_LNG=-1.5645
- MQTT_BROKER_HOST=broker.hivemq.com
- MQTT_BROKER_PORT=8883
- MQTT_BROKER_USER=johndoe
- MQTT_BROKER_PASSWD=itsasecret
- MQTT_BROKER_SECURED_CONNECTION=True
```
## Breaking Changes
With the introduction of MQTT Discovery, the MQTT topic structure has changed significantly to align with Home Assistant's best practices for discovery. Previously, each data point was published to a separate topic (e.g., `aps/[ECU_ID]/power`). Now, data for an ECU or an inverter is published as a single JSON payload to a base topic (e.g., `aps/[ECU_ID]` or `aps/[ECU_ID]/[INVERTER_ID]`).
**Migration Steps:**
1. **Enable MQTT Discovery:** It is highly recommended to enable MQTT Discovery by setting `MQTT_DISCOVERY_ENABLED: True` in your `mqtt` configuration. This will automatically configure your devices in Home Assistant.
2. **Update Manual Configurations:** If you were previously using manual MQTT sensor configurations in Home Assistant (or any other platform), you will need to update them to reflect the new JSON payload structure and base topics. You will need to use `value_template` to extract the specific values from the JSON payload.
**Example (Old vs. New for ECU Power):**
**Old (Manual Sensor):**
```yaml
mqtt:
sensor:
- name: "ECU Power"
state_topic: "aps/123456789/power"
unit_of_measurement: "W"
```
**New (Manual Sensor - if not using discovery):**
```yaml
mqtt:
sensor:
- name: "ECU Power"
state_topic: "aps/123456789"
unit_of_measurement: "W"
value_template: "{{ value_json.current_power }}"
```
Similar changes will be required for all inverter and panel sensors.
## MQTT topics
The `aps2mqtt` retrieves data from the entire PV array as a whole, as well as detailed information for each individual inverter.
* `aps/status` - Current status of the `aps2mqtt` service, publishing `online` or `offline`. The `offline` message is sent as a Last Will and Testament (LWT) message by the MQTT broker upon unexpected disconnection. This topic is also used as the `availability_topic` for MQTT Discovery.
### ECU data
* `aps/[ECU_ID]` - Publishes a JSON payload containing the following data for the entire ECU:
* `current_power` - Total amount of power (in W) being generated right now.
* `today_energy` - Total amount of energy (in kWh) generated today.
* `lifetime_energy` - Total amount of energy (in kWh) generated from the lifetime of the array.
### Inverter data
* `aps/[ECU_ID]/[INVERTER_ID]` - Publishes a JSON payload containing the following data for each individual inverter:
* `online` - `True` if the inverter is communicating with the ECU, `False` otherwise.
* `signal` - The signal strength of the zigbee connection.
* `temperature` - The temperature of the inverter in your local unit (C or F).
* `frequency` - The AC power frequency (in Hz).
* `power` - The current power generation (in W), sum of all panel power.
* `voltage` - The AC voltage (in V).
* `panel_[ID]_power` - The current power generation (in W) of the selected panel.
* `panel_[ID]_voltage` - The AC voltage (in V) of the selected panel.
Raw data
{
"_id": null,
"home_page": null,
"name": "aps2mqtt",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.14,>=3.9",
"maintainer_email": null,
"keywords": "mqtt, ap-systems, ecu, iot, solar, home-automation",
"author": null,
"author_email": "Florian Ligneul <contact@florian-ligneul.fr>",
"download_url": "https://files.pythonhosted.org/packages/20/f2/7cfdb827d30e320087b59e78d3e165b3430283247f2f7dc30e1f10978cb9/aps2mqtt-2.0.2.tar.gz",
"platform": null,
"description": "[](https://github.com/fligneul/aps2mqtt)\n[](https://github.com/fligneul/aps2mqtt/releases)\n[](https://badge.fury.io/py/aps2mqtt)\n[](https://hub.docker.com/r/fligneul/aps2mqtt)\n[](https://github.com/python-semantic-release/python-semantic-release)\n\n# APS2MQTT\n\nAllows you to access your [APsystems](http://www.apsystems.com) Energy Communication Unit (ECU) data by MQTT. This MQTT bridge queries the ECU directly at regular interval for new data, parse the returned data and publish them over MQTT.\n\nIn this way you can integrate your APsystems devices with whatever smart home infrastructure you are using.\n\n:warning: It currently supports only one ECU.\n\n## Acknowledgements\n\nThis work is based on the awesome [homeassistant-apsystems_ecur (v1.2.30)](https://github.com/ksheumaker/homeassistant-apsystems_ecur). This couldn't have been done without their hardwork.\n\n## Prerequisites\n\n[See full version](aps2mqtt/apsystems/README.md#Prerequisites)\n\n* A compatible APSystems ECU\n * ECU-B\n * ECU-R\n * ECU-C\n* Some inverters\n * YC1000/QT2\n * YC600/DS3/DS3-H/DS3-L/DS3D\n * QS1/QS1A\n\nYour ECU needs to be fully configured by the EMA Manager and should have a fixed IP address. APS2MQTT should run on a machine in the same network (or in an accessible one) as the ECU.\n\nECU-C and modern ECU-R (ID starting with 2162) can be automatically restarted in case of connection error. For older ECU-R and for ECU-B, the restart need to be done manually.\n\n### Test your connection\n\n[See full version](aps2mqtt/apsystems/README.md#Test-your-connection)\n\nYou can test the connection between APS2MQTT and the ECU using Netcat. From your terminal, run the following command (assuming your ECU IP address is 192.168.1.42) to open the connection\n\n``` sh\nnc -v 192.168.1.42 8899\n```\n\nECU should response with an \"open\" message\n\n``` sh\n192.168.1.42 (192.168.1.42:8899) open\n```\n\nConnection is now established, the ECU is ready to receive commands\n\n``` sh\nAPS1100160001END\n```\n\nIf this command return with an APS message, you are ready to start APS2MQTT. If not, rebbot your ECU and try again.\n\n## Install\n\nBinaries are available in the release asset or on [PyPI](https://pypi.org/project/aps2mqtt/).\nUsing a virtual env is recommended for better insulation.\n\n``` sh\n# with PyPI\npip3 install aps2mqtt\n# manually \npip3 install aps2mqtt-[version]-py3-none-any.whl\n```\nStart it\n\n``` sh\npython3 -m aps2mqtt -h\n```\n\n### Run as a service\n\nUsing systemd, APS2MQTT can be started automatically\n\n``` yaml\n[Unit]\nDescription=APS2MQTT\nAfter=multi-user.target\n\n[Service]\nType=simple\nUser=user\nRestart=on-failure\nExecStart=/path-to-your-venv/python3 -m aps2mqtt -c config.yaml\n\n[Install]\nWantedBy=multi-user.target\n```\n\n## Configuration\n\nAPS2MQTT configuration can be provided by a yaml config file or by environment variables (in a container context for example).\n\n### MQTT\n\n| Key | Description | Example | Default value |\n|---|---|---|---|\n| MQTT_BROKER_HOST | Host of the MQTT broker | \"192.168.1.1\", \"broker.hivemq.com\" | \"127.0.0.1\" |\n| MQTT_BROKER_PORT | Port of the MQTT broker | 1883 | 1883 |\n| MQTT_BROKER_USER | User login of the MQTT broker | \"john-doe\" | \"\" |\n| MQTT_BROKER_PASSWD | User password of the MQTT broker | \"itsasecret\" | \"\" |\n| MQTT_CLIENT_ID | Client ID if the MQTT client | \"MyAwesomeClient\" | \"APS2MQTT\" |\n| MQTT_TOPIC_PREFIX | Topic prefix for publishing | \"my-personal-topic\" | \"\" |\n| MQTT_RETAIN | Retain MQTT messages | True | False |\n| MQTT_DISCOVERY_ENABLED | Enable MQTT discovery | True | False |\n| MQTT_DISCOVERY_PREFIX | MQTT discovery prefix | \"homeassistant\" | \"homeassistant\" |\n| MQTT_BROKER_SECURED_CONNECTION | Use secure connection to MQTT broker | True | False |\n| MQTT_BROKER_CACERTS_PATH | Path to the cacerts file | \"/User/johndoe/.ssl/cacerts\" | None |\n\n### ECU\n\n| Key | Description | Example | Default value |\n|---|---|---|---|\n| APS_ECU_IP | IP of the ECU | \"192.168.1.42\" | None, this field id mandatory |\n| APS_ECU_PORT | Communication port of the ECU | 8899 | 8899 |\n| APS_ECU_TIMEZONE | Timezone of the ECU | 'Europe/Paris' | None (use system timezone) |\n| APS_ECU_AUTO_RESTART | Automatically restart ECU in case of error | True | False |\n| APS_ECU_WIFI_SSID | SSID of the ECU Wifi <br />:information_source: Only used if automatic restart is enabled | \"My Wifi\" | \"\" |\n| APS_ECU_WIFI_PASSWD | Password of the ECU Wifi <br />:information_source: Only used if automatic restart is enabled | \"secret-key\" | \"\" |\n| APS_ECU_STOP_AT_NIGHT | Stop ECU query during the night | True | False |\n| APS_ECU_POSITION_LAT | Latitude of the ECU, used to retrieve sunset and sunrise <br />:information_source: Only used if stop at night is enabled | 51.49819 | 48.864716 (Paris) |\n| APS_ECU_POSITION_LNG | Longitude of the ECU, used to retrieve sunset and sunrise <br />:information_source: Only used if stop at night is enabled | -0.13087 | 2.349014 (Paris) |\n\n### Timezone\n\nWithout any specific configuration, aps2mqtt use your system's timezone as a reference.\n\n* If you use aps2mqtt as a python application, setting the ECU timezone is recommended by setting the configuration variable 'APS_ECU_TIMEZONE' for better processing. \n\n* If you are using aps2mqtt as a Docker image, you can configure the timezone for the whole container using the environement variable 'TZ'\n\n### MQTT Discovery\n\nAPS2MQTT supports MQTT discovery for seamless integration with home automation platforms like Home Assistant.\n\nWhen enabled, `aps2mqtt` will publish configuration messages to the specified discovery prefix. These messages allow your home automation platform to automatically discover and configure the ECU and all its associated inverters and panels as devices and entities.\n\nTo enable this feature, set the `MQTT_DISCOVERY_ENABLED` option to `True` in your configuration.\n\n```yaml\nmqtt:\n # ... other mqtt settings\n MQTT_DISCOVERY_ENABLED: True\n # Optional: Change the discovery prefix if your platform requires it\n MQTT_DISCOVERY_PREFIX: 'homeassistant'\n```\n\nOnce enabled, you should see the devices automatically appear in your home automation platform.\n\n### Example\n\n#### Unsecured connection\n\n``` yaml\necu:\n APS_ECU_IP: '192.168.1.42'\n APS_ECU_TIMEZONE: 'Europe/Paris'\n APS_ECU_STOP_AT_NIGHT: True\n APS_ECU_POSITION_LAT: 47.206\n APS_ECU_POSITION_LNG: -1.5645\n\nmqtt:\n MQTT_BROKER_HOST: '192.168.1.12'\n MQTT_BROKER_PORT: 1883\n MQTT_BROKER_USER: 'johndoe'\n MQTT_BROKER_PASSWD: 'itsasecret'\n MQTT_RETAIN: True\n MQTT_DISCOVERY_ENABLED: True\n```\n\n#### Secured connection\n\n``` yaml\necu:\n APS_ECU_IP: '192.168.1.42'\n APS_ECU_TIMEZONE: 'Europe/Paris'\n APS_ECU_STOP_AT_NIGHT: True\n APS_ECU_POSITION_LAT: 47.206\n APS_ECU_POSITION_LNG: -1.5645\n\nmqtt:\n MQTT_BROKER_HOST: 'broker.hivemq.com'\n MQTT_BROKER_PORT: 8883\n MQTT_BROKER_SECURED_CONNECTION: True\n MQTT_DISCOVERY_ENABLED: True\n MQTT_DISCOVERY_PREFIX: 'custom_discovery'\n```\n\n#### Using Docker Compose\n\n``` yaml\nservices:\n aps2mqtt:\n image: fligneul/aps2mqtt:latest\n restart: always\n environment:\n - TZ=Europe/Paris\n - DEBUG=True\n - APS_ECU_IP=192.168.1.42\n - APS_ECU_STOP_AT_NIGHT=True\n - APS_ECU_POSITION_LAT=47.206\n - APS_ECU_POSITION_LNG=-1.5645\n - MQTT_BROKER_HOST=broker.hivemq.com\n - MQTT_BROKER_PORT=8883\n - MQTT_BROKER_USER=johndoe\n - MQTT_BROKER_PASSWD=itsasecret\n - MQTT_BROKER_SECURED_CONNECTION=True\n```\n\n## Breaking Changes\n\nWith the introduction of MQTT Discovery, the MQTT topic structure has changed significantly to align with Home Assistant's best practices for discovery. Previously, each data point was published to a separate topic (e.g., `aps/[ECU_ID]/power`). Now, data for an ECU or an inverter is published as a single JSON payload to a base topic (e.g., `aps/[ECU_ID]` or `aps/[ECU_ID]/[INVERTER_ID]`).\n\n**Migration Steps:**\n\n1. **Enable MQTT Discovery:** It is highly recommended to enable MQTT Discovery by setting `MQTT_DISCOVERY_ENABLED: True` in your `mqtt` configuration. This will automatically configure your devices in Home Assistant.\n2. **Update Manual Configurations:** If you were previously using manual MQTT sensor configurations in Home Assistant (or any other platform), you will need to update them to reflect the new JSON payload structure and base topics. You will need to use `value_template` to extract the specific values from the JSON payload.\n\n **Example (Old vs. New for ECU Power):**\n\n **Old (Manual Sensor):**\n ```yaml\n mqtt:\n sensor:\n - name: \"ECU Power\"\n state_topic: \"aps/123456789/power\"\n unit_of_measurement: \"W\"\n ```\n\n **New (Manual Sensor - if not using discovery):**\n ```yaml\n mqtt:\n sensor:\n - name: \"ECU Power\"\n state_topic: \"aps/123456789\"\n unit_of_measurement: \"W\"\n value_template: \"{{ value_json.current_power }}\"\n ```\n\n Similar changes will be required for all inverter and panel sensors.\n\n## MQTT topics\n\nThe `aps2mqtt` retrieves data from the entire PV array as a whole, as well as detailed information for each individual inverter.\n\n* `aps/status` - Current status of the `aps2mqtt` service, publishing `online` or `offline`. The `offline` message is sent as a Last Will and Testament (LWT) message by the MQTT broker upon unexpected disconnection. This topic is also used as the `availability_topic` for MQTT Discovery.\n\n### ECU data\n\n* `aps/[ECU_ID]` - Publishes a JSON payload containing the following data for the entire ECU:\n * `current_power` - Total amount of power (in W) being generated right now.\n * `today_energy` - Total amount of energy (in kWh) generated today.\n * `lifetime_energy` - Total amount of energy (in kWh) generated from the lifetime of the array.\n\n### Inverter data\n\n* `aps/[ECU_ID]/[INVERTER_ID]` - Publishes a JSON payload containing the following data for each individual inverter:\n * `online` - `True` if the inverter is communicating with the ECU, `False` otherwise.\n * `signal` - The signal strength of the zigbee connection.\n * `temperature` - The temperature of the inverter in your local unit (C or F).\n * `frequency` - The AC power frequency (in Hz).\n * `power` - The current power generation (in W), sum of all panel power.\n * `voltage` - The AC voltage (in V).\n * `panel_[ID]_power` - The current power generation (in W) of the selected panel.\n * `panel_[ID]_voltage` - The AC voltage (in V) of the selected panel.\n",
"bugtrack_url": null,
"license": null,
"summary": "Access APSystems ECU data over MQTT",
"version": "2.0.2",
"project_urls": {
"Homepage": "https://github.com/fligneul/aps2mqtt"
},
"split_keywords": [
"mqtt",
" ap-systems",
" ecu",
" iot",
" solar",
" home-automation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e8dafd0c42c134539985ad43b7bfc712545ce8f7447156ba31a94fb50b475c1a",
"md5": "f7927541c6d9b3bbf4f2cb9faf82b2b0",
"sha256": "46061ef50e33102cc05876db426ef4ae1c74510c75cead7cfe8f77cfb5ca67e9"
},
"downloads": -1,
"filename": "aps2mqtt-2.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f7927541c6d9b3bbf4f2cb9faf82b2b0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.14,>=3.9",
"size": 28386,
"upload_time": "2025-07-22T21:49:23",
"upload_time_iso_8601": "2025-07-22T21:49:23.806151Z",
"url": "https://files.pythonhosted.org/packages/e8/da/fd0c42c134539985ad43b7bfc712545ce8f7447156ba31a94fb50b475c1a/aps2mqtt-2.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "20f27cfdb827d30e320087b59e78d3e165b3430283247f2f7dc30e1f10978cb9",
"md5": "d3895b2c6d6e6ceb1994a819d47689b2",
"sha256": "23b07d637334540f8bc6f769818da4c4baaeac0fec36f05a71e3e6155303ef40"
},
"downloads": -1,
"filename": "aps2mqtt-2.0.2.tar.gz",
"has_sig": false,
"md5_digest": "d3895b2c6d6e6ceb1994a819d47689b2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.14,>=3.9",
"size": 31223,
"upload_time": "2025-07-22T21:49:25",
"upload_time_iso_8601": "2025-07-22T21:49:25.270000Z",
"url": "https://files.pythonhosted.org/packages/20/f2/7cfdb827d30e320087b59e78d3e165b3430283247f2f7dc30e1f10978cb9/aps2mqtt-2.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-22 21:49:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fligneul",
"github_project": "aps2mqtt",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "requests",
"specs": [
[
"==",
"2.32.4"
]
]
},
{
"name": "paho.mqtt",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "pyyaml",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "suntime",
"specs": [
[
"==",
"1.2.5"
]
]
},
{
"name": "build",
"specs": [
[
"==",
"1.2.2"
]
]
},
{
"name": "setuptools",
"specs": [
[
">=",
"80.9.0"
]
]
},
{
"name": "twine",
"specs": [
[
"==",
"6.1.0"
]
]
},
{
"name": "python-semantic-release",
"specs": [
[
"==",
"10.2.0"
]
]
},
{
"name": "str2bool",
"specs": [
[
"==",
"1.1"
]
]
},
{
"name": "tzdata",
"specs": [
[
"==",
"2025.2"
]
]
}
],
"lcname": "aps2mqtt"
}