pax_global_header 0000666 0000000 0000000 00000000064 15036725112 0014514 g ustar 00root root 0000000 0000000 52 comment=3dda47abb393d1883345b7e62b02dbb8b7eeda55
python-stiebel-eltron-0.2.0/ 0000775 0000000 0000000 00000000000 15036725112 0015762 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/.devcontainer.json 0000664 0000000 0000000 00000003412 15036725112 0021414 0 ustar 00root root 0000000 0000000 // For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/python
{
"name": "Python 3",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/vscode/devcontainers/python:3.13",
"postCreateCommand": "curl -LsSf https://astral.sh/uv/install.sh | sh && uv sync",
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"github.vscode-pull-request-github",
"ryanluker.vscode-coverage-gutters",
"ms-python.vscode-pylance",
"charliermarsh.ruff"
],
"settings": {
"files.eol": "\n",
"editor.tabSize": 4,
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"editor.formatOnType": false,
"files.trimTrailingWhitespace": true,
"python.analysis.typeCheckingMode": "basic",
"python.analysis.autoImportCompletions": true,
"python.defaultInterpreterPath": "/usr/local/bin/python",
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff"
}
}
}
},
"remoteUser": "vscode",
"features": {},
"remoteEnv": {
"PATH": "${containerEnv:PATH}:/home/vscode/.local/bin"
}
} python-stiebel-eltron-0.2.0/.github/ 0000775 0000000 0000000 00000000000 15036725112 0017322 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/.github/workflows/ 0000775 0000000 0000000 00000000000 15036725112 0021357 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/.github/workflows/release-to-pypi.yml 0000664 0000000 0000000 00000002447 15036725112 0025130 0 ustar 00root root 0000000 0000000 name: Release to PyPI
# Trigger the workflow on new tag creation
on:
push:
tags:
- 'v*' # Triggers on version tags like v1.0.0, v0.1.1, etc.
permissions:
contents: read
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
# Check out the repository code
- name: Checkout code
uses: actions/checkout@v4
# Set up Python environment
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.12'
# Install build dependencies
- name: Install build dependencies
run: |
python -m pip install --upgrade pip
python -m pip install build twine
# Build wheel and source distributions
- name: Build distributions
run: |
python -m build
# Verify the distributions were created
- name: Verify build artifacts
run: |
ls -la dist/
echo "Built packages:"
ls dist/
# Check the distributions before upload
- name: Check distributions
run: |
python -m twine check dist/*
# Upload to PyPI using twine
- name: Upload to PyPI
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
python -m twine upload dist/* python-stiebel-eltron-0.2.0/.github/workflows/test-python-package.yml 0000664 0000000 0000000 00000001274 15036725112 0025775 0 ustar 00root root 0000000 0000000 name: Test python package
on:
push:
pull_request:
branches:
- master
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.12", "3.13"]
steps:
- uses: actions/checkout@v2
- name: Install uv
uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: uv sync --locked --all-extras --dev
- name: Run tests
run: |
uv run pytest \
-qq \
--durations=10 \
-o console_output_style=count \
-p no:sugar \
test
python-stiebel-eltron-0.2.0/.gitignore 0000664 0000000 0000000 00000002400 15036725112 0017746 0 ustar 00root root 0000000 0000000 # Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
# ------------------------------------------
# Visual Studio Code
.vscode/*
python-stiebel-eltron-0.2.0/LICENSE 0000664 0000000 0000000 00000002055 15036725112 0016771 0 ustar 00root root 0000000 0000000 MIT License
Copyright (c) 2018 Martin Fuchs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
python-stiebel-eltron-0.2.0/MANIFEST.in 0000664 0000000 0000000 00000000031 15036725112 0017512 0 ustar 00root root 0000000 0000000 include README.md LICENSE python-stiebel-eltron-0.2.0/README.md 0000664 0000000 0000000 00000006217 15036725112 0017247 0 ustar 00root root 0000000 0000000
# python-stiebel-eltron
Python API for interacting with the STIEBEL ELTRON ISG web gateway via modbus for controlling integral ventilation units and heat pumps.
This module is based on the STIEBEL ELTRON [modbus user manual](https://www.stiebel-eltron.ch/content/dam/ste/ch/de/downloads/kundenservice/smart-home/Modbus/Modbus%20Bedienungsanleitung.pdf), but is not official, developed, supported or endorsed by Stiebel Eltron GmbH & Co. KG. For questions and other inquiries, use the issue tracker in this repo please.
## Requirements
You need to have [Python](https://www.python.org) installed.
* STIEBEL ELTRON Internet-Service Gateway [ISG WEB](https://www.stiebel-eltron.com/en/home/products-solutions/renewables/controller_energymanagement/internet_servicegateway/isg_web.html) with enabled [modbus module](https://www.stiebel-eltron.ch/de/home/service/smart-home/modbus.html)
* You can call the STIEBEL ELTRON support, if your ISG does not have the modbus module enabled. They upgraded mine for free.
* STIEBEL ELTRON heatpumpt (compatible). Successfully used devices:
* LWZ504e
* LWZ304
* Network connection to the ISG WEB
## Installation
The package is available in the [Python Package Index](https://pypi.python.org/).
```bash
$ pip install python-stiebel-eltron
```
## Example usage of the module
The sample below shows how to use this Python module (api for wpm heat pumps).
```python
from pystiebeleltron.wpm import WpmStiebelEltronAPI, WpmSystemParametersRegisters
api = WpmStiebelEltronAPI('IP_ADDRESS_ISG')
await api.connect()
await api.async_update()
print("water comfort target temperature: {}".format(api.get_register_value(WpmSystemParametersRegisters.COMFORT_TEMPERATURE)))
await api.close()
```
## Example usage of the module
The sample below shows how to use this Python module (old api for lwz heat pumps).
```python
from pystiebeleltron import pystiebeleltron as pyse
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
client = ModbusClient(host='IP_ADDRESS_ISG', port=502, timeout=2)
client.connect()
unit = pyse.StiebelEltronAPI(client, 1)
unit.update()
print("get_target_temp: {}".format(unit.get_target_temp))
client.close()
```
## License
``python-stiebel-eltron`` is licensed under MIT, for more details check LICENSE.
python-stiebel-eltron-0.2.0/api/ 0000775 0000000 0000000 00000000000 15036725112 0016533 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/api/README.md 0000664 0000000 0000000 00000001022 15036725112 0020005 0 ustar 00root root 0000000 0000000 # API definition
This folder contains the csv files which are describing the registers of the ISG modbus interface. The values in the cvs files are manually copied from the [Stiebel Eltron modbus documentation](https://www.stiebel-eltron.ch/content/dam/ste/ch/de/downloads/kundenservice/smart-home/Modbus/Modbus%20Bedienungsanleitung.pdf).
The files can either be manually edited with your Code Editor (e.g. Visual Studio Code) or edited with a spreadsheet editor like LibreOffice or Excel. The encoding of the files is UTF-8.
python-stiebel-eltron-0.2.0/api/energy_system_information.csv 0000664 0000000 0000000 00000000340 15036725112 0024547 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,WPMsystem,WPM 3,WPM 3i,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
5001,SG READY OPERATING STATE,x,x,x,,1,4,6,,r,
5002,CONTROLLER IDENTIFICATION,x,x,x,,,,6,,,
python-stiebel-eltron-0.2.0/api/lwz_energy_data.csv 0000664 0000000 0000000 00000003567 15036725112 0022441 0 ustar 00root root 0000000 0000000 "Modbus
Address",Object designation,LWZ,LWA,Comments,Min. value,Max. value,Data type,Unit,Write/read (w/r),Suffix
3001,HEAT METER HTG DAY,x,x,,0,65535,6,kWh,r,
3002,HEAT METER HTG TTL,x,x,,0,999,6,kWh,r,LOW
3003,HEAT METER HTG TTL,x,x,,0,65535,6,MWh,r,HI
3004,HEAT METER DHW DAY,x,x,,0,65535,6,kWh,r,
3005,HEAT METER DHW TTL,x,x,,0,999,6,kWh,r,LOW
3006,HEAT METER DHW TTL,x,x,,0,65535,6,MWh,r,HI
3007,HEAT M BOOST HTG TTL,x,x,,0,999,6,kWh,r,LOW
3008,HEAT M BOOST HTG TTL,x,x,,0,65535,6,MWh,r,HI
3009,HEAT M BOOST DHW TTL,x,x,,0,999,6,kWh,r,LOW
3010,HEAT M BOOST DHW,x,x,,0,65535,6,MWh,r,HI
3011,HEAT M RECOVERY DAY,x,,,0,65535,6,kWh,r,
3012,HEAT M RECOVERY TTL,x,x,,0,999,6,kWh,r,LOW
3013,HEAT M RECOVERY TTL,x,,,0,65535,6,MWh,r,HI
3014,HM SOLAR HTG DAY,x,,only for LWZ with solar capability,0,65535,6,kWh,r,
3015,HM SOLAR HTG TOTAL,x,,only for LWZ with solar capability,0,999,6,kWh,r,LOW
3016,HM SOLAR HTG TOTAL,x,,only for LWZ with solar capability,0,65535,6,MWh,r,HI
3017,HM SOLAR DHW DAY,x,,only for LWZ with solar capability,0,65535,6,kWh,r,
3018,HM SOLAR DWH TOTAL,x,,only for LWZ with solar capability,0,999,6,kWh,r,LOW
3019,HM SOLAR DWH TOTAL,x,,only for LWZ with solar capability,0,65535,6,MWh,r,HI
3020,HM COOLING TOTAL,x,,only for LWZ with cooling capacity,0,999,6,kWh,r,LOW
3021,HM COOLING TOTAL,x,,only for LWZ with cooling capacity,0,65535,6,MWh,r,HI
3022,PWR CON HTG DAY,x,x,,0,65535,6,kWh,r,
3023,PWR CON HTG TTL,x,x,,0,999,6,kWh,r,LOW
3024,PWR CON HTG TTL,x,x,,0,65535,6,MWh,r,HI
3025,PWR CON DHW DAY,x,x,,0,65535,6,kWh,r,
3026,PWR CON DHW TTL,x,x,,0,999,6,kWh,r,LOW
3027,PWR CON DHW TTL,x,x,,0,65535,6,MWh,r,HI
3028,COMPRESSOR HEATING,x,x,,0,65535,6,h,r,
3029,COMPRESSOR COOLING,x,,only for LWZ with cooling capacity,0,65535,6,h,r,
3030,COMPRESSOR DHW,x,x,,0,65535,6,h,r,
3031,ELEC BOOSTER HEATING,x,x,,0,65535,6,h,r,
3032,ELEC BOOSTER DHW,x,x,,0,65535,6,h,r,
python-stiebel-eltron-0.2.0/api/lwz_energy_management_settings.csv 0000664 0000000 0000000 00000000365 15036725112 0025555 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,LWZ,LWA,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
4001,SWITCH SG READY ON AND OFF,x,x,,0,1,6,,r/w,
4002,SG READY INPUT 1,x,x,,0,1,6,,r/w,
4003,SG READY INPUT 2,x,x,,0,1,6,,r/w,
python-stiebel-eltron-0.2.0/api/lwz_energy_system_information.csv 0000664 0000000 0000000 00000000316 15036725112 0025446 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,LWZ,LWA,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
5001,SG READY OPERATING STATE,x,x,,1,4,6,,r,
5002,CONTROLLER IDENTIFICATION,x,x,,,,6,,r,
python-stiebel-eltron-0.2.0/api/lwz_system_parameters.csv 0000664 0000000 0000000 00000003517 15036725112 0023721 0 ustar 00root root 0000000 0000000 "Modbus
Address",Object designation,LWZ,LWA,Comments,Min. value,Max. value,Data type,Unit,Write/read (w/r),Suffix
1001,OPERATING MODE,x,x,,0,14,8,,r/w,
1002,ROOM TEMPERATURE DAY,x,x,"Set room heating, heating circuit 1",10,30,2,°C,r/w,HK1
1003,ROOM TEMPERATURE NIGHT,x,x,"Set room heating, heating circuit 1",10,30,2,°C,r/w,HK1
1004,MANUAL HC SET,x,x,Heating circuit 1,10,65,2,°C,r/w,HK1
1005,ROOM TEMPERATURE DAY,x,x,"Set room heating, heating circuit 2",10,30,2,°C,r/w,HK2
1006,ROOM TEMPERATURE NIGHT,,,"Set room heating, heating circuit 2",10,30,2,°C,r/w,HK2
1007,MANUAL HC SET,,,Heating circuit 2,10,65,2,°C,r/w,HK2
1008,GRADIENT,x,x,Heating curve heating circuit 1,0,5,7,,r/w,HK1
1009,LOW END,x,x,Heating curve heating circuit 1,0,20,2,°C,r/w,HK1
1010,GRADIENT,x,x,Heating curve heating circuit 2,0,5,7,,r/w,HK2
1011,LOW END,x,x,Heating curve heating circuit 2,0,20,2,°C,r/w,HK2
1012,DHW SET DAY,x,x,DHW,10,55,2,°C,r/w,
1013,DHW SET NIGHT,x,x,DHW,10,55,2,°C,r/w,
1014,DHW SET MANUAL,x,x,DHW,10,65,2,°C,r/w,
1015,MWM SET DAY,x,,only for LWZ 504,50,288,6,l,r/w,
1016,MWM SET NIGHT,x,,only for LWZ 504,50,288,6,l,r/w,
1017,MWM SET MANUAL,x,,only for LWZ 504,50,288,6,l,r/w,
1018,DAY STAGE,x,x,Ventilation,0,3,6,,r/w,
1019,NIGHT STAGE,x,x,Ventilation,0,3,6,,r/w,
1020,PARTY STAGE,x,x,Ventilation,0,3,6,,r/w,
1021,MANUAL STAGE,x,x,Ventilation,0,3,6,,r/w,
1022,ROOM TEMPERATURE DAY,x,,"HC 1 cooling, only for LWZ with cooling",10,30,2,°C,r/w,HK1 COOLING
1023,ROOM TEMPERATURE NIGHT,x,,"HC 1 cooling, only for LWZ with cooling",10,30,2,°C,r/w,HK1 COOLING
1024,ROOM TEMPERATURE DAY,x,,"HC 2 cooling, only for LWZ with cooling",10,30,2,°C,r/w,HK2 COOLING
1025,ROOM TEMPERATURE NIGHT,x,,"HC 2 cooling, only for LWZ with cooling",10,30,2,°C,r/w,HK2 COOLING
1026,RESET,x,,only for LWZ 504,0,1,6,,r/w,
1027,RESTART ISG,x,x,,0,2,6,,r/w,
python-stiebel-eltron-0.2.0/api/lwz_system_state.csv 0000664 0000000 0000000 00000000555 15036725112 0022675 0 ustar 00root root 0000000 0000000 "Modbus
Address",Object designation,LWZ,LWA,Comments,Min. value,Max. value,Data type,Unit,Write/read (w/r),Suffix
2001,OPERATING STATUS,x,x,bit-coded,0,65535,6,,r,
2002,FAULT STATUS,x,x,System fault,0,1,6,,r,
2003,BUS STATUS,x,x,CAN bus status,-4,0,6,,r,
2004,DEFROST INITIATED,x,x,defrost signal,0,1,6,,r,
2005,OPERATING STATUS 2,x,x,bit-coded,0,65535,6,,r,
python-stiebel-eltron-0.2.0/api/lwz_system_values.csv 0000664 0000000 0000000 00000003575 15036725112 0023061 0 ustar 00root root 0000000 0000000 "Modbus
Address",Object designation,LWZ,LWA,Comments,Min. value,Max. value,Data type,Unit,Write/read (w/r),Suffix
1,ACTUAL ROOM T HC1,x,x,Remote control value ,-20,60,2,°C,r,
2,SET ROOM TEMPERATURE HC1,x,x,,-20,60,2,°C,r,
3,RELATIVE HUMIDITY HC1,x,x,Remote control value ,0,100,2,%,r,
4,ACTUAL ROOM T HC2,x,x,Remote control value ,-20,60,2,°C,r,
5,SET ROOM TEMPERATURE HC2,x,x,,-20,60,2,°C,r,
6,RELATIVE HUMIDITY HC2,x,x,Remote control value ,0,100,2,%,r,
7,OUTSIDE TEMPERATURE,x,x,,-60,80,2,°C,r,
8,ACTUAL VALUE HC1,x,x,,0,90,2,°C,r,
9,SET VALUE HC1,x,x,,0,65,2,°C,r,
10,ACTUAL VALUE HC2,x,x,,0,90,2,°C,r,
11,SET VALUE HC2,x,x,,0,65,2,°C,r,
12,FLOW TEMPERATURE,x,x,,0,90,2,°C,r,
13,RETURN TEMPERATURE,x,x,,0,90,2,°C,r,
14,PRESSURE HTG CIRC,x,,only for LWZ 304/404/504/Trend,0,6,2,bar,r,
15,FLOW RATE ,x,,only for LWZ 304/404/504/Trend,,,2,l/min,r,
16,ACTUAL DHW T,x,x,,10,65,2,°C,r,
17,DHW SET TEMPERATURE,x,x,,10,65,2,°C,r,
18,VENTILATION AIR ACTUAL FAN SPEED,x,,,0,100,6,Hz,r,
19,VENTILATION AIR SET FLOW RATE,x,,,0,300,6,m³/h,r,
20,EXTRACT AIR ACTUAL FAN SPEED,x,x,,0,100,6,Hz,r,
21,EXTRACT AIR SET FLOW RATE,x,x,,0,300,6,m³/h,r,
22,EXTRACT AIR HUMIDITY,x,,only for LWZ 304/404/504/Trend,0,100,6,%,r,
23,EXTRACT AIR TEMP,x,,only for LWZ 504,0,65535,2,°C,r,
24,EXTRACT AIR DEW POINT,x,,only for LWZ 504,0,65535,2,°C,r,
25,DEW POINT TEMP HC1,x,,only for LWZ with cooling capacity,-40,30,2,°C,r,
26,DEW POINT TEMP HC2,x,,only for LWZ with cooling capacity,-40,30,2,°C,r,
27,COLLECTOR TEMPERATURE,x,,only for LWZ with solar capacity,-60,200,2,°C,r,
28,HOT GAS TEMPERATURE,x,x,,0,140,2,°C,r,
29,HIGH PRESSURE,x,x,,0,50,7,bar,r,
30,LOW PRESSURE,x,x,,0,25,7,bar,r,
31,COMPRESSOR STARTS,x,x,,0,65535,6,,r,HI
32,COMPRESSOR SPEED,x,,only for LWZ 504,0,240,2,Hz,r,
33,MIXED WATER AMOUNT,x,,only for LWZ 504,0,65535,6,l,r,
34,COMPRESSOR STARTS,x,x,,0,65535,6,,r,LOW
python-stiebel-eltron-0.2.0/api/wpm_energy_data.csv 0000664 0000000 0000000 00000013263 15036725112 0022422 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,WPMsystem,WPM 3,WPM 3i,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
3501,VD HEATING DAY,x,x,x,Amount of heat - all heat pumps,0,65535,6,kWh,r,
3502,VD HEATING TOTAL,x,x,x,Amount of heat - all heat pumps,0,999,6,kWh,r,LOW
3503,VD HEATING TOTAL,x,x,x,Amount of heat - all heat pumps,0,65535,6,MWh,r,HI
3504,VD DHW DAY,x,x,x,Amount of heat - all heat pumps,0,65535,6,kWh,r,
3505,VD DHW TOTAL,x,x,x,Amount of heat - all heat pumps,0,999,6,kWh,r,LOW
3506,VD DHW TOTAL,x,x,x,Amount of heat - all heat pumps,0,65535,6,MWh,r,HI
3507,NHZ HEATING TOTAL,x,x,x,Amount of heat - all heat pumps,0,999,6,kWh,r,LOW
3508,NHZ HEATING TOTAL,x,x,x,Amount of heat - all heat pumps,0,65535,6,MWh,r,HI
3509,NHZ DHW TOTAL,x,x,x,Amount of heat - all heat pumps,0,999,6,kWh,r,LOW
3510,NHZ DHW TOTAL,x,x,x,Amount of heat - all heat pumps,0,65535,6,MWh,r,HI
3511,VD HEATING DAY,x,x,x,Power consumption - all heat pumps,0,65535,6,kWh,r,CONSUMED
3512,VD HEATING TOTAL,x,x,x,Power consumption - all heat pumps,0,999,6,kWh,r,LOW CONSUMED
3513,VD HEATING TOTAL,x,x,x,Power consumption - all heat pumps,0,65535,6,MWh,r,HI CONSUMED
3514,VD DHW DAY,x,x,x,Power consumption - all heat pumps,0,65535,6,kWh,r,CONSUMED
3515,VD DHW TOTAL,x,x,x,Power consumption - all heat pumps,0,999,6,kWh,r,LOW CONSUMED
3516,VD DHW TOTAL,x,x,x,Power consumption - all heat pumps,0,65535,6,MWh,r,HI CONSUMED
3517,VD HEATING,,,x,Runtime,0,999,6,h,r,
3518,VD DHW,,,x,Runtime,0,999,6,h,r,
3519,VD COOLING,,,x,Runtime,0,999,6,h,r,
3520,NHZ 1,,,x,Runtime,0,999,6,h,r,
3521,NHZ 2,,,x,Runtime,0,999,6,h,r,
3522,NHZ 1_2,,,x,Runtime,0,999,6,h,r,
3523,VD HEATING DAY,x,x,,Amount of heat HP 1,0,65535,6,kWh,r,HP 1
3524,VD HEATING TOTAL,x,x,,Amount of heat HP 1,0,999,6,kWh,r,LOW HP 1
3525,VD HEATING TOTAL,x,x,,Amount of heat HP 1,0,65535,6,MWh,r,HI HP 1
3526,VD DHW DAY,x,x,,Amount of heat HP 1,0,65535,6,kWh,r,HP 1
3527,VD DHW TOTAL,x,x,,Amount of heat HP 1,0,999,6,kWh,r,LOW HP 1
3528,VD DHW TOTAL,x,x,,Amount of heat HP 1,0,65535,6,MWh,r,HI HP 1
3529,NHZ HEATING TOTAL,x,x,,Amount of heat HP 1,0,999,6,kWh,r,LOW HP 1
3530,NHZ HEATING TOTAL,x,x,,Amount of heat HP 1,0,65535,6,MWh,r,HI HP 1
3531,NHZ DHW TOTAL,x,x,,Amount of heat HP 1,0,999,6,kWh,r,LOW HP 1
3532,NHZ DHW TOTAL,x,x,,Amount of heat HP 1,0,65535,6,MWh,r,HI HP 1
3533,VD HEATING DAY,x,x,,Power consumption HP 1,0,65535,6,kWh,r,CONSUMED HP 1
3534,VD HEATING TOTAL,x,x,,Power consumption HP 1,0,999,6,kWh,r,LOW CONSUMED HP 1
3535,VD HEATING TOTAL,x,x,,Power consumption HP 1,0,65535,6,MWh,r,HI CONSUMED HP 1
3536,VD DHW DAY,x,x,,Power consumption HP 1,0,65535,6,kWh,r,CONSUMEDHP 1
3537,VD DHW TOTAL,x,x,,Power consumption HP 1,0,999,6,kWh,r,LOW CONSUMED HP 1
3538,VD DHW TOTAL,x,x,,Power consumption HP 1,0,65535,6,MWh,r,HI CONSUMED HP 1
3539,VD 1 HEATING,x,x,,Runtime HP 1,,,6,h,r,HP 1
3540,VD 2 HEATING,x,x,,Runtime HP 1,,,6,h,r,HP 1
3541,VD 1_2 HEATING,x,x,,Runtime HP 1,,,6,h,r,HP 1
3542,VD 1 DHW,x,x,,Runtime HP 1,,,6,h,r,HP 1
3543,VD 2 DHW,x,x,,Runtime HP 1,,,6,h,r,HP 1
3544,VD 1_2 DHW,x,x,,Runtime HP 1,,,6,h,r,HP 1
3545,VD COOLING x,x,x,,Runtime HP 1,,,6,h,r,HP 1
3546,NHZ 1,x,x,,Runtime reheating stage,,,6,h,r,REHEATING
3547,NHZ 2,x,x,,Runtime reheating stage,,,6,h,r,REHEATING
3548,NHZ 1_2,x,x,,Runtime reheating stage,,,6,h,r,REHEATING
3549,VD HEATING DAY,x,x,,Amount of heat HP 2,0,65535,6,kWh,r,HP 2
3550,VD HEATING TOTAL,x,x,,Amount of heat HP 2,0,999,6,kWh,r,LOW HP 2
3551,VD HEATING TOTAL,x,x,,Amount of heat HP 2,0,65535,6,MWh,r,HI HP 2
3552,VD DHW DAY,x,x,,Amount of heat HP 2,0,65535,6,kWh,r,HP 2
3553,VD DHW TOTAL,x,x,,Amount of heat HP 2,0,999,6,kWh,r,LOW HP 2
3554,VD DHW TOTAL,x,x,,Amount of heat HP 2,0,65535,6,MWh,r,HI HP 2
3555,VD HEATING DAY,x,x,,Power consumption HP 2,0,65535,6,kWh,r,CONSUMED HP 2
3556,VD HEATING TOTAL,x,x,,Power consumption HP 2,0,999,6,kWh,r,LOW CONSUMED HP 2
3557,VD HEATING TOTAL,x,x,,Power consumption HP 2,0,65535,6,MWh,r,HI CONSUMED HP 2
3558,VD DHW DAY,x,x,,Power consumption HP 2,0,65535,6,kWh,r,CONSUMED HP 2
3559,VD DHW TOTAL,x,x,,Power consumption HP 2,0,999,6,kWh,r,LOW CONSUMED HP 2
3560,VD DHW TOTAL,x,x,,Power consumption HP 2,0,65535,6,MWh,r,HI CONSUMED HP 2
3561,VD 1 HEATING,x,x,,Runtime HP 2,,,6,h,r,HP 2
3562,VD 2 HEATING,x,x,,Runtime HP 2,,,6,h,r,HP 2
3563,VD 1_2 HEATING,x,x,,Runtime HP 2,,,6,h,r,HP 2
3564,VD 1 DHW,x,x,,Runtime HP 2,,,6,h,r,HP 2
3565,VD 2 DHW,x,x,,Runtime HP 2,,,6,h,r,HP 2
3566,VD 1_2 DHW,x,x,,Runtime HP 2,,,6,h,r,HP 2
3567,VD COOLING,x,x,,Runtime HP 2,,,6,h,r,HP 2
3568,VD HEATING DAY,x,x,,Amount of heat HP 3,0,65535,6,kWh,r,HP 3
3569,VD HEATING TOTAL,x,x,,Amount of heat HP 3,0,999,6,kWh,r,LOW HP 3
3570,VD HEATING TOTAL,x,x,,Amount of heat HP 3,0,65535,6,MWh,r,HI HP 3
3571,VD DHW DAY,x,x,,Amount of heat HP 3,0,65535,6,kWh,r,HP 3
3572,VD DHW TOTAL,x,x,,Amount of heat HP 3,0,999,6,kWh,r,LOW HP 3
3573,VD DHW TOTAL,x,x,,Amount of heat HP 3,0,65535,6,MWh,r,HI HP 3
3574,VD HEATING DAY,x,x,,Power consumption HP 3,0,65535,6,kWh,r,CONSUMED HP 3
3575,VD HEATING TOTAL,x,x,,Power consumption HP 3,0,999,6,kWh,r,LOW CONSUMED HP 3
3576,VD HEATING TOTAL,x,x,,Power consumption HP 3,0,65535,6,MWh,r,HI CONSUMED HP 3
3577,VD DHW DAY,x,x,,Power consumption HP 3,0,65535,6,kWh,r,CONSUMED HP 3
3578,VD DHW TOTAL,x,x,,Power consumption HP 3,0,999,6,kWh,r,LOW CONSUMED HP 3
3579,VD DHW TOTAL,x,x,,Power consumption HP 3,0,65535,6,MWh,r,HI CONSUMED HP 3
3580,VD 1 HEATING,x,x,,Runtime HP 3,,,6,h,r,HP 3
3581,VD 2 HEATING,x,x,,Runtime HP 3,,,6,h,r,HP 3
3582,VD 1_2 HEATING,x,x,,Runtime HP 3,,,6,h,r,HP 3
3583,VD 1 DHW,x,x,,Runtime HP 3,,,6,h,r,HP 3
3584,VD 2 DHW,x,x,,Runtime HP 3,,,6,h,r,HP 3
3585,VD 1_2 DHW,x,x,,Runtime HP 3,,,6,h,r,HP 3
3586,VD COOLING,x,x,,Runtime HP 3,,,6,h,r,HP 3
python-stiebel-eltron-0.2.0/api/wpm_energy_management_settings.csv 0000664 0000000 0000000 00000000412 15036725112 0025535 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,WPMsystem,WPM 3,WPM 3i,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
4001,SWITCH SG READY ON AND OFF,x,x,x,,0,1,6,,r/w,
4002,SG READY INPUT 1,x,x,x,,0,1,6,,r/w,
4003,SG READY INPUT 2,x,x,x,,0,1,6,,r/w,
python-stiebel-eltron-0.2.0/api/wpm_energy_system_information.csv 0000664 0000000 0000000 00000000341 15036725112 0025433 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,WPMsystem,WPM 3,WPM 3i,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
5001,SG READY OPERATING STATE,x,x,x,,1,4,6,,r,
5002,CONTROLLER IDENTIFICATION,x,x,x,,,,6,,r,
python-stiebel-eltron-0.2.0/api/wpm_system_parameters.csv 0000664 0000000 0000000 00000003023 15036725112 0023700 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,WPMsystem,WPM 3,WPM 3i,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
1501,OPERATING MODE,x,x,x,,0,5,8,,r/w,
1502,COMFORT TEMPERATURE,x,x,x,Heating circuit 1,5,30,2,°C,r/w,HK 1
1503,ECO TEMPERATURE,x,x,x,Heating circuit 1,5,30,2,°C,r/w,HK 1
1504,HEATING CURVE RISE,x,x,x,Heating circuit 1,0,3,7,,r/w,HK 1
1505,COMFORT TEMPERATURE,x,x,x,Heating circuit 2,5,30,2,°C,r/w,HK 2
1506,ECO TEMPERATURE,x,x,x,Heating circuit 2,5,30,2,°C,r/w,HK 2
1507,HEATING CURVE RISE,x,x,x,Heating circuit 2,0,3,7,,r/w,HK 2
1508,FIXED VALUE OPERATION,x,x,x,,20,70,2,°C,r/w,
1509,DUAL MODE TEMP HZG,,x,x,Observe apllication limits,-40,40,2,°C,r/w,
1510,COMFORT TEMPERATURE,x,x,x,DHW,10,60,2,°C,r/w,
1511,ECO TEMPERATURE,x,x,x,DHW,10,60,2,°C,r/w,
1512,DHW STAGES,x,x,x,,0,6,8,,r/w,
1513,DUAL MODE TEMP WW,x,x,x,DHW temperatures,-40,40,2,°C,r/w,
1514,SET FLOW TEMPERATURE,x,x,x,Area cooling,7,25,2,°C,r/w,AREA
1515,FLOW TEMP HYSTERESIS,,x,x,Area cooling,1,5,2,K,r/w,AREA
1516,SET ROOM TEMPERATURE,x,x,x,Area cooling,20,30,2,°C,r/w,AREA
1517,SET FLOW TEMPERATURE,x,x,x,Fan cooling,7,25,2,°C,r/w,FAN
1518,FLOW TEMP HYSTERESIS,,x,x,Fan cooling,1,5,2,K,r/w,FAN
1519,SET ROOM TEMPERATURE,x,x,x,Fan cooling,20,30,2,°C,r/w,FAN
1520,RESET,x,x,x,,1,3,6,,r/w,
1521,RESTART ISG,x,x,x,,0,2,6,,r/w,
1550,COMFORT TEMPERATURE,x,x,x,Heating circuit 1,5,30,2,°C,r/w,HK 3
1551,ECO TEMPERATURE,x,x,x,Heating circuit 1,5,30,2,°C,r/w,HK 3
1552,HEATING CURVE RISE,x,x,x,Heating circuit 1,0,3,7,,r/w,HK 3
python-stiebel-eltron-0.2.0/api/wpm_system_state.csv 0000664 0000000 0000000 00000004504 15036725112 0022662 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,WPMsystem,WPM 3,WPM 3i,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
2501,OPERATING STATUS,x,x,x,bit-coded,,,6,,r,
2502,POWER OFF,x,x,x,,,,8,,r,
2503,OPERATING STATUS,,x,,bit-coded,,,6,,r,WPM 3
2504,FAULT STATUS,x,x,x,System fault,0,1,6,,r,
2505,BUS STATUS,x,x,x,,-4,0,6,,r,
2506,DEFROST INITIATED,x,x,,defrost initiated,0,1,6,,r,
2507,ACTIVE ERROR,x,x,x,Fault Number,0,65535,6,,r,
2508,MESSAGE NUMBER,x,,,Message number,0,65535,6,,r,
2509,HEATING CIRCUIT PUMP 1,x,,,WPM Status,0,1,6,,r,
2510,HEATING CIRCUIT PUMP 2,x,,,WPM Status,0,1,6,,r,
2511,HEATING CIRCUIT PUMP 3,x,,,WPM Status,0,1,6,,r,
2512,BUFFER CHARGING PUMP 1,x,,,WPM Status,0,1,6,,r,
2513,BUFFER CHARGING PUMP 2,x,,,WPM Status,0,1,6,,r,
2514,DHW CHARGING PUMP,x,,,WPM Status,0,1,6,,r,
2515,SOURCE PUMP,x,,,WPM Status,0,1,6,,r,
2516,FAULT OUTPUT,x,,,WPM Status,0,1,6,,r,
2517,DHW CIRCULATION PUMP,x,,,WPM Status,0,1,6,,r,
2518,WE 2 DHW,x,,,WPM Status,0,1,6,,r,
2519,WE 2 HEATING,x,,,WPM Status,0,1,6,,r,
2520,COOLING MODE,x,,,WPM Status,0,1,6,,r,
2521,MIXER OPEN HC2,x,,,WPM Status,0,1,6,,r,
2522,MIXER CLOSE HC2,x,,,WPM Status,0,1,6,,r,
2523,MIXER OPEN HC3,x,,,WPM Status,0,1,6,,r,
2524,MIXER CLOSE HC3,x,,,WPM Status,0,1,6,,r,
2525,NHZ 1 ,x,,,WPM Status,0,1,6,,r,
2526,NHZ 2,x,,,WPM Status,0,1,6,,r,
2527,NHZ 1 2,x,,,WPM Status,0,1,6,,r,
2528,HEATING CIRCUIT PUMP 4,x,,,WPM Status,0,1,6,,r,
2529,HEATING CIRCUIT PUMP 5,x,,,WPM Status,0,1,6,,r,
2530,BUFFER CHARGING PUMP 3,x,,,WPM Status,0,1,6,,r,
2531,BUFFER CHARGING PUMP 4,x,,,WPM Status,0,1,6,,r,
2532,BUFFER CHARGING PUMP 5,x,,,WPM Status,0,1,6,,r,
2533,BUFFER CHARGING PUMP 6,x,,,WPM Status,0,1,6,,r,
2534,DIFF CONTROLLER PUMP 1,x,,,WPM Status,0,1,6,,r,
2535,DIFF CONTROLLER PUMP 2,x,,,WPM Status,0,1,6,,r,
2536,POOL PUMP PRIMARY,x,,,WPM Status,0,1,6,,r,
2537,POOL PUMP SECONDARY,x,,,WPM Status,0,1,6,,r,
2538,MIXER OPEN HC4,x,,,WPM Status,0,1,6,,r,
2539,MIXER CLOSE HC4,x,,,WPM Status,0,1,6,,r,
2540,MIXER OPEN HC5,x,,,WPM Status,0,1,6,,r,
2541,MIXER CLOSE HC5,x,,,WPM Status,0,1,6,,r,
2542,COMPRESSOR 1,x,,,WPM Status,0,1,6,,r,
2543,COMPRESSOR 2,x,,,WPM Status,0,1,6,,r,
2544,COMPRESSOR 3,x,,,WPM Status,0,1,6,,r,
2545,COMPRESSOR 4,x,,,WPM Status,0,1,6,,r,
2546,COMPRESSOR 5,x,,,WPM Status,0,1,6,,r,
2547,COMPRESSOR 6,x,,,WPM Status,0,1,6,,r,
python-stiebel-eltron-0.2.0/api/wpm_system_values.csv 0000664 0000000 0000000 00000015054 15036725112 0023043 0 ustar 00root root 0000000 0000000 Modbus address,Object designation ,WPMsystem,WPM 3,WPM 3i,Comments,Min. value,Max. value,Data type,Unit,Write/ read (w/r),Suffix
501,ACTUAL TEMPERATURE FE7,x,x,x,,,,2,°C,r,
502,SET TEMPERATURE FE7,x,x,x,,,,2,°C,r,
503,ACTUAL TEMPERATURE FEK,,x,x,,,,2,°C,r,
504,SET TEMPERATURE FEK,,x,x,,,,2,°C,r,
505,RELATIVE HUMIDITY,,x,x,,,,2,%,r,
506,DEW POINT TEMPERATURE,,x,x,,-40,30,2,°C,r,
507,OUTSIDE TEMPERATURE,x,x,x,,-60,80,2,°C,r,
508,ACTUAL TEMPERATURE HK 1,x,x,x,,0,40,2,°C,r,
509,SET TEMPERATURE HK 1,,,x,,0,65,2,°C,r,WPM3I
510,SET TEMPERATURE HK 1,x,x,,,0,40,2,°C,r,
511,ACTUAL TEMPERATURE HK 2,x,x,x,,0,90,2,°C,r,
512,SET TEMPERATURE HK 2,x,x,x,,0,65,2,°C,r,
513,ACTUAL FLOW TEMPERATURE WP,x,x,x,"MFG, if available",,,2,°C,r,
514,ACTUAL FLOW TEMPERATURE NHZ,x,x,x,"MFG, if available",,,2,°C,r,
515,ACTUAL FLOW TEMPERATURE,x,x,x,,,,2,°C,r,
516,ACTUAL RETURN TEMPERATURE,x,x,x,,0,90,2,°C,r,
517,SET FIXED TEMPERATURE,x,x,x,,20,50,2,°C,r,
518,ACTUAL BUFFER TEMPERATURE,x,x,x,,0,90,2,°C,r,
519,SET BUFFER TEMPERATURE,x,x,x,,,,2,°C,r,
520,HEATING PRESSURE,x,x,x,,,,7,bar,r,
521,FLOW RATE,x,x,x,,,,7,l/min,r,
522,ACTUAL TEMPERATURE DHW,x,x,x,DHW,10,65,2,°C,r,
523,SET TEMPERATURE DHW,x,x,x,DHW,10,65,2,°C,r,
524,ACTUAL TEMPERATURE FAN,x,x,x,Cooling,,,2,K,r,
525,SET TEMPERATURE FAN,x,x,x,Cooling,7,25,2,K,r,
526,ACTUAL TEMPERATURE AREA,x,x,x,Cooling,,,2,K,r,
527,SET TEMPERATURE AREA,x,x,x,Cooling,,,2,K,r,
528,COLLECTOR TEMPERATURE,,x,,Solar thermal,0,90,2,°C,r,
529,CYLINDER TEMPERATURE,,x,,Solar thermal,0,90,2,°C,r,
530,RUNTIME,,x,,,,,6,h,r,
531,ACTUAL TEMPERATURE EXTERNAL,x,x,,External heat source,10,90,2,°C,r,
532,SET TEMPERATURE EXTERNAL,x,x,,External heat source,,,2,K,r,
533,APPLICATION LIMIT HZG,x,x,x,Lower heating limit,-40,40,2,°C,r,
534,APPLICATION LIMIT WW,x,x,x,Lower DHW limit,-40,40,2,°C,r,
535,RUNTIME,x,x,,External heat source,,,6,h,r,EHS
536,SOURCE TEMPERATURE,x,x,x,,,,2,°C,r,
537,MIN SOURCE TEMPERATURE,x,x,x,,-10,10,2,°C,r,
538,SOURCE PRESSURE,x,x,x,,,,7,bar,r,
539,HOT GAS TEMPERATURE,,,x,,,,2,°C,r,
540,HIGH PRESSURE,,,x,,,,2,bar,r,
541,LOW PRESSURE,,,x,,,,2,bar,r,
542,RETURN TEMPERATURE,x,x,,Heat pump 1,,,2,°C,r,HP1
543,FLOW TEMPERATURE,x,x,,Heat pump 1,,,2,°C,r,HP1
544,HOT GAS TEMPERATURE,x,x,,Heat pump 1,,,2,°C,r,HP1
545,LOW PRESSURE,x,x,,Heat pump 1,,,7,bar,r,HP1
546,MEAN PRESSURE,x,x,,Heat pump 1,,,7,bar,r,HP1
547,HIGH PRESSURE,x,x,,Heat pump 1,,,7,bar,r,HP1
548,WP WATER FLOW RATE,x,x,,Heat pump 1,,,2,l/min,r,HP1
549,RETURN TEMPERATURE,x,x,,Heat pump 2,,,2,°C,r,HP2
550,FLOW TEMPERATURE,x,x,,Heat pump 2,,,2,°C,r,HP2
551,HOT GAS TEMPERATURE,x,x,,Heat pump 2,,,2,°C,r,HP2
552,LOW PRESSURE,x,x,,Heat pump 2,,,7,bar,r,HP2
553,MEAN PRESSURE,x,x,,Heat pump 2,,,7,bar,r,HP2
554,HIGH PRESSURE,x,x,,Heat pump 2,,,7,bar,r,HP2
555,WP WATER FLOW RATE,x,x,,Heat pump 2,,,2,l/min,r,HP2
556,RETURN TEMPERATURE,x,x,,Heat pump 3,,,2,°C,r,HP3
557,FLOW TEMPERATURE,x,x,,Heat pump 3,,,2,°C,r,HP3
558,HOT GAS TEMPERATURE,x,x,,Heat pump 3,,,2,°C,r,HP3
559,LOW PRESSURE,x,x,,Heat pump 3,,,7,bar,r,HP3
560,MEAN PRESSURE,x,x,,Heat pump 3,,,7,bar,r,HP3
561,HIGH PRESSURE,x,x,,Heat pump 3,,,7,bar,r,HP3
562,WP WATER FLOW RATE,x,x,,Heat pump 3,,,2,l/min,r,HP3
563,RETURN TEMPERATURE,x,x,,Heat pump 4,,,2,°C,r,HP4
564,FLOW TEMPERATURE,x,x,,Heat pump 4,,,2,°C,r,HP4
565,HOT GAS TEMPERATURE,x,x,,Heat pump 4,,,2,°C,r,HP4
566,LOW PRESSURE,x,x,,Heat pump 4,,,7,bar,r,HP4
567,MEAN PRESSURE,x,x,,Heat pump 4,,,7,bar,r,HP4
568,HIGH PRESSURE,x,x,,Heat pump 4,,,7,bar,r,HP4
569,WP WATER FLOW RATE,x,x,,Heat pump 4,,,2,l/min,r,HP4
570,RETURN TEMPERATURE,x,x,,Heat pump 5,,,2,°C,r,HP5
571,FLOW TEMPERATURE,x,x,,Heat pump 5,,,2,°C,r,HP5
572,HOT GAS TEMPERATURE,x,x,,Heat pump 5,,,2,°C,r,HP5
573,LOW PRESSURE,x,x,,Heat pump 5,,,7,bar,r,HP5
574,MEAN PRESSURE,x,x,,Heat pump 5,,,7,bar,r,HP5
575,HIGH PRESSURE,x,x,,Heat pump 5,,,7,bar,r,HP5
576,WP WATER RATE,x,x,,Heat pump 5,,,2,l/min,r,HP5
577,RETURN TEMPERATURE,x,x,,Heat pump 6,,,2,°C,r,HP6
578,FLOW TEMPERATURE,x,x,,Heat pump 6,,,2,°C,r,HP6
579,HOT GAS,x,x,,Heat pump 6,,,2,°C,r,HP6
580,LOW PRESSURE,x,x,,Heat pump 6,,,7,bar,r,HP6
581,MEAN PRESSURE,x,x,,Heat pump 6,,,7,bar,r,HP6
582,HIGH PRESSURE,x,x,,Heat pump 6,,,7,bar,r,HP6
583,WP WATER FLOW RATE,x,x,,Heat pump 6,,,2,l/min,r,HP6
584,ACTUAL TEMPERATURE,x,,,"Room temperature, heating circuit 1",,,2,°C,r,ROOM TEMP HC1
585,SET TEMPERATURE,x,,,"Room temperature, heating circuit 1",,,2,°C,r,ROOM TEMP HC1
586,RELATIVE HUMIDITY,x,,,"Room temperature, heating circuit 1",,,2,%,r,ROOM TEMP HC1
587,DEW POINT TEMPERATURE,x,,,"Room temperature, heating circuit 1",,,2,°C,r,ROOM TEMP HC1
588,ACTUAL TEMPERATURE,x,,,"Room temperature, heating circuit 2",,,2,°C,r,ROOM TEMP HC2
589,SET TEMPERATURE,x,,,"Room temperature, heating circuit 2",,,2,°C,r,ROOM TEMP HC2
590,RELATIVE HUMIDITY,x,,,"Room temperature, heating circuit 2",,,2,%,r,ROOM TEMP HC2
591,DEW POINT TEMPERATURE,x,,,"Room temperature, heating circuit 2",,,2,°C,r,ROOM TEMP HC2
592,ACTUAL TEMPERATURE,x,,,"Room temperature, heating circuit 3",,,2,°C,r,ROOM TEMP HC3
593,SET TEMPERATURE,x,,,"Room temperature, heating circuit 3",,,2,°C,r,ROOM TEMP HC3
594,RELATIVE HUMIDITY,x,,,"Room temperature, heating circuit 3",,,2,%,r,ROOM TEMP HC3
595,DEW POINT TEMPERATURE,x,,,"Room temperature, heating circuit 3",,,2,°C,r,ROOM TEMP HC3
596,ACTUAL TEMPERATURE,x,,,"Room temperature, heating circuit 4",,,2,°C,r,ROOM TEMP HC4
597,SET TEMPERATURE,x,,,"Room temperature, heating circuit 4",,,2,°C,r,ROOM TEMP HC4
598,RELATIVE HUMIDITY,x,,,"Room temperature, heating circuit 4",,,2,%,r,ROOM TEMP HC4
599,DEW POINT TEMPERATURE,x,,,"Room temperature, heating circuit 4",,,2,°C,r,ROOM TEMP HC4
600,ACTUAL TEMPERATURE,x,,,"Room temperature, heating circuit 5",,,2,°C,r,ROOM TEMP HC5
601,SET TEMPERATURE,x,,,"Room temperature, heating circuit 5",,,2,°C,r,ROOM TEMP HC5
602,RELATIVE HUMIDITY,x,,,"Room temperature, heating circuit 5",,,2,%,r,ROOM TEMP HC5
603,DEW POINT TEMPERATURE,x,,,"Room temperature, heating circuit 5",,,2,°C,r,ROOM TEMP HC5
604,SET TEMPERATURE,x,,,"Room temperature, cooling circuit 1",,,2,°C,r,ROOM TEMP COOLING1
605,SET TEMPERATURE,x,,,"Room temperature, cooling circuit 2",,,2,°C,r,ROOM TEMP COOLING2
606,SET TEMPERATURE,x,,,"Room temperature, cooling circuit 3",,,2,°C,r,ROOM TEMP COOLING3
607,SET TEMPERATURE,x,,,"Room temperature, cooling circuit 4",,,2,°C,r,ROOM TEMP COOLING4
608,SET TEMPERATURE,x,,,"Room temperature, cooling circuit 5",,,2,°C,r,ROOM TEMP COOLING5
609,ACTUAL TEMPERATURE HK 3,x,,,,0,90,2,°C,r,
610,SET TEMPERATURE HK 3,x,,,,0,65,2,°C,r,
python-stiebel-eltron-0.2.0/example.py 0000775 0000000 0000000 00000003131 15036725112 0017770 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python3
import time
from pystiebeleltron import pystiebeleltron as pyse
from pymodbus.client import ModbusTcpClient as ModbusClient
host_ip = "192.168.1.20"
host_port = 502
slave = 1
def test_function(mod, fun):
"""Executes the given function on the Stiebel Heatpump and prints the result."""
result = getattr(mod, fun) # Executes function directly, instead of giving back the function reference
print("{}: {}".format(str(fun), str(result)))
def execute_tests(unit):
"""Execute the provided tests."""
test_function(unit, "get_current_temp")
test_function(unit, "get_current_humidity")
test_function(unit, "get_target_temp")
test_function(unit, "get_operation")
test_function(unit, "get_filter_alarm_status")
test_function(unit, "get_heating_status")
test_function(unit, "get_cooling_status")
# Test set_target_temp
print("Setting temperature to 20.0")
current_temp = unit.get_target_temp
unit.set_target_temp(20.0)
time.sleep(3)
unit.update()
mod_temp = unit.get_target_temp
if mod_temp != 20.0:
print("unit.set_target_temp failed!")
if mod_temp != current_temp:
unit.set_target_temp(current_temp)
time.sleep(3)
unit.update()
print("get_target_temp: {}".format(unit.get_target_temp))
def main():
client = ModbusClient(host=host_ip,
port=host_port,
timeout=2)
client.connect()
unit = pyse.StiebelEltronAPI(client, slave)
unit.update()
execute_tests(unit)
client.close()
if __name__ == "__main__":
main()
python-stiebel-eltron-0.2.0/pyproject.toml 0000664 0000000 0000000 00000002166 15036725112 0020703 0 ustar 00root root 0000000 0000000 [project]
name = "pystiebeleltron"
dynamic = ["version"]
description = "Python API for interacting with the Stiebel Eltron ISG web gateway via Modbus for controlling integral ventilation units and heat pumps."
readme = "README.md"
authors = [
{ name = "Manuel Stahl"},
{ name = "'Martin Fuchs"}
]
license = { file = "LICENSE" }
classifiers = [
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
]
requires-python = ">=3.10,<3.14"
dependencies = [
"pymodbus>=3.8.3",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[dependency-groups]
dev = [
"jinja2>=3.1.6",
"pytest>=8.3.5",
"pytest-asyncio>=0.26.0",
"pytest-mock>=3.14.0",
"ruff>=0.9.6",
]
[tool.hatch.build.targets.sdist]
packages = ["pystiebeleltron"]
[tool.hatch.build.targets.wheel]
packages = ["pystiebeleltron"]
[tool.hatch.version]
path = "pystiebeleltron/__init__.py"
[tool.ruff]
line-length = 200
[tool.pytest.ini_options]
pythonpath = [
".", "src"
]
testpaths = [
"test"
]
python-stiebel-eltron-0.2.0/pystiebeleltron/ 0000775 0000000 0000000 00000000000 15036725112 0021206 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/pystiebeleltron/__init__.py 0000664 0000000 0000000 00000026232 15036725112 0023324 0 ustar 00root root 0000000 0000000 import asyncio
import logging
from enum import Enum
from dataclasses import dataclass
from pymodbus.client import AsyncModbusTcpClient
__version__ = "0.2.0"
_LOGGER: logging.Logger = logging.getLogger(__package__)
ENERGY_DATA_BLOCK_NAME = "Energy Data"
VIRTUAL_REGISTER_OFFSET = 100000
VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET = 200000
class IsgRegisters(Enum):
"""ISG Register base class."""
class IsgRegistersNone(IsgRegisters):
"""Dummy registers."""
NONE = -1
class EnergyManagementSettingsRegisters(IsgRegisters):
"""Energy Management settings registers."""
SWITCH_SG_READY_ON_AND_OFF = 4001
SG_READY_INPUT_1 = 4002
SG_READY_INPUT_2 = 4003
class EnergySystemInformationRegisters(IsgRegisters):
"""Energy Management information registers."""
SG_READY_OPERATING_STATE = 5001
CONTROLLER_IDENTIFICATION = 5002
@dataclass
class ModbusRegister:
"""Register data class."""
address: int
name: str
unit: str
min: float | None
max: float | None
data_type: int
key: IsgRegisters
@property
def is_virtual_register(self) -> bool:
"""Registers with an address above"""
return self.address > VIRTUAL_REGISTER_OFFSET
class RegisterType(Enum):
"""Register type enum."""
INPUT_REGISTER = 1
HOLDING_REGISTER = 2
@dataclass
class ModbusRegisterBlock:
"""Register block data class."""
base_address: int
count: int
name: str
registers: dict
register_type: RegisterType
ENERGY_MANAGEMENT_SETTINGS_REGISTERS = {
EnergyManagementSettingsRegisters.SWITCH_SG_READY_ON_AND_OFF: ModbusRegister(
address=4001, name="SWITCH SG READY ON AND OFF", unit="", min=0.0, max=1.0, data_type=6, key=EnergyManagementSettingsRegisters.SWITCH_SG_READY_ON_AND_OFF
),
EnergyManagementSettingsRegisters.SG_READY_INPUT_1: ModbusRegister(
address=4002, name="SG READY INPUT 1", unit="", min=0.0, max=1.0, data_type=6, key=EnergyManagementSettingsRegisters.SG_READY_INPUT_1
),
EnergyManagementSettingsRegisters.SG_READY_INPUT_2: ModbusRegister(
address=4003, name="SG READY INPUT 2", unit="", min=0.0, max=1.0, data_type=6, key=EnergyManagementSettingsRegisters.SG_READY_INPUT_2
),
}
ENERGY_SYSTEM_INFORMATION_REGISTERS = {
EnergySystemInformationRegisters.SG_READY_OPERATING_STATE: ModbusRegister(
address=5001, name="SG READY OPERATING STATE", unit="", min=1.0, max=4.0, data_type=6, key=EnergySystemInformationRegisters.SG_READY_OPERATING_STATE
),
EnergySystemInformationRegisters.CONTROLLER_IDENTIFICATION: ModbusRegister(
address=5002, name="CONTROLLER IDENTIFICATION", unit="", min=None, max=None, data_type=6, key=EnergySystemInformationRegisters.CONTROLLER_IDENTIFICATION
),
}
def get_register_descriptor(descriptors: list[ModbusRegister], address: int) -> ModbusRegister | None:
"""Find the descriptor with a given address."""
for descriptor in descriptors:
if descriptor.address == address:
return descriptor
return None
class StiebelEltronModbusError(Exception):
"""Exception during modbus communication."""
def __init(self) -> None:
"""Initialize the error."""
super().__init__("Data error on the modbus")
class ControllerModel(Enum):
"""Controller model."""
LWZ = 103
LWZ_x04_SOL = 104
WPM_3 = 390
WPM_3i = 391
WPMsystem = 449
async def get_controller_model(host, port) -> ControllerModel:
"""Read the model of the controller.
LWA and LWZ controllers have model ids 103 and 104.
WPM controllers have 390, 391 or 449.
"""
client = AsyncModbusTcpClient(host=host, port=port)
try:
await client.connect()
inverter_data = await client.read_input_registers(
address=5001,
count=1,
slave=1,
)
if not inverter_data.isError():
value = client.convert_from_registers(inverter_data.registers, client.DATATYPE.UINT16)
if isinstance(value, int):
return ControllerModel(value)
raise StiebelEltronModbusError
finally:
client.close()
class StiebelEltronAPI:
"""Stiebel Eltron API."""
def __init__(
self,
register_blocks: list[ModbusRegisterBlock],
host: str,
port: int = 502,
slave: int = 1,
) -> None:
"""Initialize Stiebel Eltron communication."""
self._slave = slave
self._lock = asyncio.Lock()
self._host = host
self._client: AsyncModbusTcpClient = AsyncModbusTcpClient(host=host, port=port)
self._lock = asyncio.Lock()
self._register_blocks = register_blocks
self._data = {}
self._previous_data = {}
self._modbus_data = {} # store raw data from modbus for debug purpose
async def close(self) -> None:
"""Disconnect client."""
_LOGGER.debug("Closing connection to %s", self._host)
async with self._lock:
self._client.close()
async def connect(self) -> None:
"""Connect client."""
_LOGGER.debug("Connecting to %s", self._host)
async with self._lock:
await self._client.connect()
@property
def is_connected(self) -> bool:
"""Check modbus client connection status."""
if self._client is None:
return False
return self._client.connected
@property
def host(self) -> str:
"""Return the host address of the Stiebel Eltron ISG."""
return self._host
def get_register_descriptor(self, register: IsgRegisters) -> ModbusRegister | None:
"""Get the descriptor of a register."""
for registerblock in self._register_blocks:
descriptor = get_register_descriptor(
list(registerblock.registers.values()),
register.value,
)
if descriptor is not None:
return descriptor
return None
def get_register_value(self, register: IsgRegisters) -> float:
"""Get a value form the registers. The async_udpate needs to be called first."""
return self._data[register]
def has_register_value(self, register: IsgRegisters) -> bool:
"""Check if a value for the registers has been read. The async_udpate needs to be called first."""
return register in self._data and self._data[register] is not None
async def write_register_value(self, register: IsgRegisters, value: int | float) -> None:
"""Writes a modbus register."""
descriptor = self.get_register_descriptor(register)
if descriptor is not None:
async with self._lock:
await self._client.write_register(descriptor.address - 1, value=self.convert_value_to_modbus(value, descriptor), slave=1)
else:
raise ValueError("invalid register")
async def read_input_registers(self, slave, address, count):
"""Read input registers."""
_LOGGER.debug(f"Reading {count} input registers from {address} with slave {slave}")
async with self._lock:
return await self._client.read_input_registers(address, count=count, slave=slave)
async def read_holding_registers(self, slave, address, count):
"""Read holding registers."""
_LOGGER.debug(f"Reading {count} holding registers from {address} with slave {slave}")
async with self._lock:
return await self._client.read_holding_registers(address, count=count, slave=slave)
def convert_value_from_modbus(self, register, register_description: ModbusRegister) -> float | int | None:
"""Convert a modbus value to a python value."""
if register_description.data_type == 2:
value = self._client.convert_from_registers([register], self._client.DATATYPE.INT16)
if isinstance(value, int):
if value == -32768:
return None
return float(value) * 0.1
elif register_description.data_type == 6:
value = self._client.convert_from_registers([register], self._client.DATATYPE.UINT16)
if isinstance(value, int):
if value == 32768:
return None
return value
elif register_description.data_type == 7:
value = self._client.convert_from_registers([register], self._client.DATATYPE.INT16)
if isinstance(value, int):
if value == -32768:
return None
return value * 0.01
elif register_description.data_type == 8:
value = self._client.convert_from_registers([register], self._client.DATATYPE.UINT16)
if isinstance(value, int):
if value == 32768:
return None
return value
raise ValueError("invalid register.")
def convert_value_to_modbus(self, value: int | float, register_description: ModbusRegister) -> int:
"""Convert a modbus value to a python value."""
if register_description.data_type == 2:
register = self._client.convert_to_registers([int(value * 10)], self._client.DATATYPE.INT16)
return register[0]
elif register_description.data_type == 6:
register = self._client.convert_to_registers([int(value)], self._client.DATATYPE.UINT16)
return register[0]
elif register_description.data_type == 7:
register = self._client.convert_to_registers([int(value * 100)], self._client.DATATYPE.INT16)
return register[0]
elif register_description.data_type == 8:
register = self._client.convert_to_registers([int(value)], self._client.DATATYPE.UINT16)
return register[0]
else:
raise ValueError("invalid register type")
async def async_update(self):
"""Request current values from heat pump."""
result: dict = {}
for registerblock in self._register_blocks:
heat_pump_data = None
if registerblock.register_type == RegisterType.INPUT_REGISTER:
heat_pump_data = await self.read_input_registers(
slave=self._slave,
address=registerblock.base_address,
count=registerblock.count,
)
elif registerblock.register_type == RegisterType.HOLDING_REGISTER:
heat_pump_data = await self.read_holding_registers(
slave=self._slave,
address=registerblock.base_address,
count=registerblock.count,
)
if heat_pump_data is not None and not heat_pump_data.isError():
self._modbus_data[registerblock.name] = heat_pump_data
for i in range(0, registerblock.count):
descriptor = get_register_descriptor(
list(registerblock.registers.values()),
i + registerblock.base_address + 1,
)
if descriptor is not None:
result[descriptor.key] = self.convert_value_from_modbus(heat_pump_data.registers[i], descriptor)
else:
self._modbus_data[registerblock.name] = None
self._previous_data = self._data
self._data = result
python-stiebel-eltron-0.2.0/pystiebeleltron/lwz.py 0000664 0000000 0000000 00000073604 15036725112 0022406 0 ustar 00root root 0000000 0000000 """Modbus api for stiebel eltron heat pumps. This file is generated. Do not modify it manually."""
from enum import Enum
from . import (
ModbusRegister,
ModbusRegisterBlock,
StiebelEltronAPI,
IsgRegisters,
RegisterType,
ENERGY_DATA_BLOCK_NAME,
VIRTUAL_REGISTER_OFFSET,
VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET,
ENERGY_MANAGEMENT_SETTINGS_REGISTERS,
ENERGY_SYSTEM_INFORMATION_REGISTERS,
)
class LwzSystemValuesRegisters(IsgRegisters):
ACTUAL_ROOM_T_HC1 = 1
SET_ROOM_TEMPERATURE_HC1 = 2
RELATIVE_HUMIDITY_HC1 = 3
ACTUAL_ROOM_T_HC2 = 4
SET_ROOM_TEMPERATURE_HC2 = 5
RELATIVE_HUMIDITY_HC2 = 6
OUTSIDE_TEMPERATURE = 7
ACTUAL_VALUE_HC1 = 8
SET_VALUE_HC1 = 9
ACTUAL_VALUE_HC2 = 10
SET_VALUE_HC2 = 11
FLOW_TEMPERATURE = 12
RETURN_TEMPERATURE = 13
PRESSURE_HTG_CIRC = 14
FLOW_RATE = 15
ACTUAL_DHW_T = 16
DHW_SET_TEMPERATURE = 17
VENTILATION_AIR_ACTUAL_FAN_SPEED = 18
VENTILATION_AIR_SET_FLOW_RATE = 19
EXTRACT_AIR_ACTUAL_FAN_SPEED = 20
EXTRACT_AIR_SET_FLOW_RATE = 21
EXTRACT_AIR_HUMIDITY = 22
EXTRACT_AIR_TEMP = 23
EXTRACT_AIR_DEW_POINT = 24
DEW_POINT_TEMP_HC1 = 25
DEW_POINT_TEMP_HC2 = 26
COLLECTOR_TEMPERATURE = 27
HOT_GAS_TEMPERATURE = 28
HIGH_PRESSURE = 29
LOW_PRESSURE = 30
COMPRESSOR_STARTS_HI = 31
COMPRESSOR_SPEED = 32
MIXED_WATER_AMOUNT = 33
COMPRESSOR_STARTS_LOW = 34
COMPRESSOR_STARTS = 100032
class LwzSystemParametersRegisters(IsgRegisters):
OPERATING_MODE = 1001
ROOM_TEMPERATURE_DAY_HK1 = 1002
ROOM_TEMPERATURE_DAY_AND_TOTAL_HK1 = 201003
ROOM_TEMPERATURE_NIGHT_HK1 = 1003
MANUAL_HC_SET_HK1 = 1004
ROOM_TEMPERATURE_DAY_HK2 = 1005
ROOM_TEMPERATURE_DAY_AND_TOTAL_HK2 = 201006
ROOM_TEMPERATURE_NIGHT_HK2 = 1006
MANUAL_HC_SET_HK2 = 1007
GRADIENT_HK1 = 1008
LOW_END_HK1 = 1009
GRADIENT_HK2 = 1010
LOW_END_HK2 = 1011
DHW_SET_DAY = 1012
DHW_SET_DAY_AND_TOTAL = 201013
DHW_SET_NIGHT = 1013
DHW_SET_MANUAL = 1014
MWM_SET_DAY = 1015
MWM_SET_DAY_AND_TOTAL = 201016
MWM_SET_NIGHT = 1016
MWM_SET_MANUAL = 1017
DAY_STAGE = 1018
NIGHT_STAGE = 1019
PARTY_STAGE = 1020
MANUAL_STAGE = 1021
ROOM_TEMPERATURE_DAY_HK1_COOLING = 1022
ROOM_TEMPERATURE_DAY_AND_TOTAL_HK1_COOLING = 201023
ROOM_TEMPERATURE_NIGHT_HK1_COOLING = 1023
ROOM_TEMPERATURE_DAY_HK2_COOLING = 1024
ROOM_TEMPERATURE_DAY_AND_TOTAL_HK2_COOLING = 201025
ROOM_TEMPERATURE_NIGHT_HK2_COOLING = 1025
RESET = 1026
RESTART_ISG = 1027
class LwzSystemStateRegisters(IsgRegisters):
OPERATING_STATUS = 2001
FAULT_STATUS = 2002
BUS_STATUS = 2003
DEFROST_INITIATED = 2004
OPERATING_STATUS_2 = 2005
class LwzEnergyDataRegisters(IsgRegisters):
HEAT_METER_HTG_DAY = 3001
HEAT_METER_HTG_DAY_AND_TOTAL = 203002
HEAT_METER_HTG_TTL_LOW = 3002
HEAT_METER_HTG_TTL = 103002
HEAT_METER_HTG_TTL_HI = 3003
HEAT_METER_DHW_DAY = 3004
HEAT_METER_DHW_DAY_AND_TOTAL = 203005
HEAT_METER_DHW_TTL_LOW = 3005
HEAT_METER_DHW_TTL = 103005
HEAT_METER_DHW_TTL_HI = 3006
HEAT_M_BOOST_HTG_TTL_LOW = 3007
HEAT_M_BOOST_HTG_TTL = 103007
HEAT_M_BOOST_HTG_TTL_HI = 3008
HEAT_M_BOOST_DHW_TTL_LOW = 3009
HEAT_M_BOOST_DHW_TTL = 103009
HEAT_M_BOOST_DHW_HI = 3010
HEAT_M_RECOVERY_DAY = 3011
HEAT_M_RECOVERY_DAY_AND_TOTAL = 203012
HEAT_M_RECOVERY_TTL_LOW = 3012
HEAT_M_RECOVERY_TTL = 103012
HEAT_M_RECOVERY_TTL_HI = 3013
HM_SOLAR_HTG_DAY = 3014
HM_SOLAR_HTG_DAY_AND_TOTAL = 203015
HM_SOLAR_HTG_TOTAL_LOW = 3015
HM_SOLAR_HTG_TOTAL = 103015
HM_SOLAR_HTG_TOTAL_HI = 3016
HM_SOLAR_DHW_DAY = 3017
HM_SOLAR_DHW_DAY_AND_TOTAL = 203018
HM_SOLAR_DWH_TOTAL_LOW = 3018
HM_SOLAR_DWH_TOTAL = 103018
HM_SOLAR_DWH_TOTAL_HI = 3019
HM_COOLING_TOTAL_LOW = 3020
HM_COOLING_TOTAL = 103020
HM_COOLING_TOTAL_HI = 3021
PWR_CON_HTG_DAY = 3022
PWR_CON_HTG_DAY_AND_TOTAL = 203023
PWR_CON_HTG_TTL_LOW = 3023
PWR_CON_HTG_TTL = 103023
PWR_CON_HTG_TTL_HI = 3024
PWR_CON_DHW_DAY = 3025
PWR_CON_DHW_DAY_AND_TOTAL = 203026
PWR_CON_DHW_TTL_LOW = 3026
PWR_CON_DHW_TTL = 103026
PWR_CON_DHW_TTL_HI = 3027
COMPRESSOR_HEATING = 3028
COMPRESSOR_COOLING = 3029
COMPRESSOR_DHW = 3030
ELEC_BOOSTER_HEATING = 3031
ELEC_BOOSTER_DHW = 3032
LWZ_SYSTEM_VALUES_REGISTERS = {
LwzSystemValuesRegisters.ACTUAL_ROOM_T_HC1: ModbusRegister(address=1, name="ACTUAL ROOM T HC1", unit="°C", min=-20.0, max=60.0, data_type=2, key=LwzSystemValuesRegisters.ACTUAL_ROOM_T_HC1),
LwzSystemValuesRegisters.SET_ROOM_TEMPERATURE_HC1: ModbusRegister(
address=2, name="SET ROOM TEMPERATURE HC1", unit="°C", min=-20.0, max=60.0, data_type=2, key=LwzSystemValuesRegisters.SET_ROOM_TEMPERATURE_HC1
),
LwzSystemValuesRegisters.RELATIVE_HUMIDITY_HC1: ModbusRegister(
address=3, name="RELATIVE HUMIDITY HC1", unit="%", min=0.0, max=100.0, data_type=2, key=LwzSystemValuesRegisters.RELATIVE_HUMIDITY_HC1
),
LwzSystemValuesRegisters.ACTUAL_ROOM_T_HC2: ModbusRegister(address=4, name="ACTUAL ROOM T HC2", unit="°C", min=-20.0, max=60.0, data_type=2, key=LwzSystemValuesRegisters.ACTUAL_ROOM_T_HC2),
LwzSystemValuesRegisters.SET_ROOM_TEMPERATURE_HC2: ModbusRegister(
address=5, name="SET ROOM TEMPERATURE HC2", unit="°C", min=-20.0, max=60.0, data_type=2, key=LwzSystemValuesRegisters.SET_ROOM_TEMPERATURE_HC2
),
LwzSystemValuesRegisters.RELATIVE_HUMIDITY_HC2: ModbusRegister(
address=6, name="RELATIVE HUMIDITY HC2", unit="%", min=0.0, max=100.0, data_type=2, key=LwzSystemValuesRegisters.RELATIVE_HUMIDITY_HC2
),
LwzSystemValuesRegisters.OUTSIDE_TEMPERATURE: ModbusRegister(address=7, name="OUTSIDE TEMPERATURE", unit="°C", min=-60.0, max=80.0, data_type=2, key=LwzSystemValuesRegisters.OUTSIDE_TEMPERATURE),
LwzSystemValuesRegisters.ACTUAL_VALUE_HC1: ModbusRegister(address=8, name="ACTUAL VALUE HC1", unit="°C", min=0.0, max=90.0, data_type=2, key=LwzSystemValuesRegisters.ACTUAL_VALUE_HC1),
LwzSystemValuesRegisters.SET_VALUE_HC1: ModbusRegister(address=9, name="SET VALUE HC1", unit="°C", min=0.0, max=65.0, data_type=2, key=LwzSystemValuesRegisters.SET_VALUE_HC1),
LwzSystemValuesRegisters.ACTUAL_VALUE_HC2: ModbusRegister(address=10, name="ACTUAL VALUE HC2", unit="°C", min=0.0, max=90.0, data_type=2, key=LwzSystemValuesRegisters.ACTUAL_VALUE_HC2),
LwzSystemValuesRegisters.SET_VALUE_HC2: ModbusRegister(address=11, name="SET VALUE HC2", unit="°C", min=0.0, max=65.0, data_type=2, key=LwzSystemValuesRegisters.SET_VALUE_HC2),
LwzSystemValuesRegisters.FLOW_TEMPERATURE: ModbusRegister(address=12, name="FLOW TEMPERATURE", unit="°C", min=0.0, max=90.0, data_type=2, key=LwzSystemValuesRegisters.FLOW_TEMPERATURE),
LwzSystemValuesRegisters.RETURN_TEMPERATURE: ModbusRegister(address=13, name="RETURN TEMPERATURE", unit="°C", min=0.0, max=90.0, data_type=2, key=LwzSystemValuesRegisters.RETURN_TEMPERATURE),
LwzSystemValuesRegisters.PRESSURE_HTG_CIRC: ModbusRegister(address=14, name="PRESSURE HTG CIRC", unit="bar", min=0.0, max=6.0, data_type=2, key=LwzSystemValuesRegisters.PRESSURE_HTG_CIRC),
LwzSystemValuesRegisters.FLOW_RATE: ModbusRegister(address=15, name="FLOW RATE ", unit="l/min", min=None, max=None, data_type=2, key=LwzSystemValuesRegisters.FLOW_RATE),
LwzSystemValuesRegisters.ACTUAL_DHW_T: ModbusRegister(address=16, name="ACTUAL DHW T", unit="°C", min=10.0, max=65.0, data_type=2, key=LwzSystemValuesRegisters.ACTUAL_DHW_T),
LwzSystemValuesRegisters.DHW_SET_TEMPERATURE: ModbusRegister(address=17, name="DHW SET TEMPERATURE", unit="°C", min=10.0, max=65.0, data_type=2, key=LwzSystemValuesRegisters.DHW_SET_TEMPERATURE),
LwzSystemValuesRegisters.VENTILATION_AIR_ACTUAL_FAN_SPEED: ModbusRegister(
address=18, name="VENTILATION AIR ACTUAL FAN SPEED", unit="Hz", min=0.0, max=100.0, data_type=6, key=LwzSystemValuesRegisters.VENTILATION_AIR_ACTUAL_FAN_SPEED
),
LwzSystemValuesRegisters.VENTILATION_AIR_SET_FLOW_RATE: ModbusRegister(
address=19, name="VENTILATION AIR SET FLOW RATE", unit="m³/h", min=0.0, max=300.0, data_type=6, key=LwzSystemValuesRegisters.VENTILATION_AIR_SET_FLOW_RATE
),
LwzSystemValuesRegisters.EXTRACT_AIR_ACTUAL_FAN_SPEED: ModbusRegister(
address=20, name="EXTRACT AIR ACTUAL FAN SPEED", unit="Hz", min=0.0, max=100.0, data_type=6, key=LwzSystemValuesRegisters.EXTRACT_AIR_ACTUAL_FAN_SPEED
),
LwzSystemValuesRegisters.EXTRACT_AIR_SET_FLOW_RATE: ModbusRegister(
address=21, name="EXTRACT AIR SET FLOW RATE", unit="m³/h", min=0.0, max=300.0, data_type=6, key=LwzSystemValuesRegisters.EXTRACT_AIR_SET_FLOW_RATE
),
LwzSystemValuesRegisters.EXTRACT_AIR_HUMIDITY: ModbusRegister(
address=22, name="EXTRACT AIR HUMIDITY", unit="%", min=0.0, max=100.0, data_type=6, key=LwzSystemValuesRegisters.EXTRACT_AIR_HUMIDITY
),
LwzSystemValuesRegisters.EXTRACT_AIR_TEMP: ModbusRegister(address=23, name="EXTRACT AIR TEMP", unit="°C", min=0.0, max=65535.0, data_type=2, key=LwzSystemValuesRegisters.EXTRACT_AIR_TEMP),
LwzSystemValuesRegisters.EXTRACT_AIR_DEW_POINT: ModbusRegister(
address=24, name="EXTRACT AIR DEW POINT", unit="°C", min=0.0, max=65535.0, data_type=2, key=LwzSystemValuesRegisters.EXTRACT_AIR_DEW_POINT
),
LwzSystemValuesRegisters.DEW_POINT_TEMP_HC1: ModbusRegister(address=25, name="DEW POINT TEMP HC1", unit="°C", min=-40.0, max=30.0, data_type=2, key=LwzSystemValuesRegisters.DEW_POINT_TEMP_HC1),
LwzSystemValuesRegisters.DEW_POINT_TEMP_HC2: ModbusRegister(address=26, name="DEW POINT TEMP HC2", unit="°C", min=-40.0, max=30.0, data_type=2, key=LwzSystemValuesRegisters.DEW_POINT_TEMP_HC2),
LwzSystemValuesRegisters.COLLECTOR_TEMPERATURE: ModbusRegister(
address=27, name="COLLECTOR TEMPERATURE", unit="°C", min=-60.0, max=200.0, data_type=2, key=LwzSystemValuesRegisters.COLLECTOR_TEMPERATURE
),
LwzSystemValuesRegisters.HOT_GAS_TEMPERATURE: ModbusRegister(address=28, name="HOT GAS TEMPERATURE", unit="°C", min=0.0, max=140.0, data_type=2, key=LwzSystemValuesRegisters.HOT_GAS_TEMPERATURE),
LwzSystemValuesRegisters.HIGH_PRESSURE: ModbusRegister(address=29, name="HIGH PRESSURE", unit="bar", min=0.0, max=50.0, data_type=7, key=LwzSystemValuesRegisters.HIGH_PRESSURE),
LwzSystemValuesRegisters.LOW_PRESSURE: ModbusRegister(address=30, name="LOW PRESSURE", unit="bar", min=0.0, max=25.0, data_type=7, key=LwzSystemValuesRegisters.LOW_PRESSURE),
LwzSystemValuesRegisters.COMPRESSOR_STARTS_HI: ModbusRegister(address=31, name="COMPRESSOR STARTS", unit="", min=0.0, max=65535.0, data_type=6, key=LwzSystemValuesRegisters.COMPRESSOR_STARTS_HI),
LwzSystemValuesRegisters.COMPRESSOR_SPEED: ModbusRegister(address=32, name="COMPRESSOR SPEED", unit="Hz", min=0.0, max=240.0, data_type=2, key=LwzSystemValuesRegisters.COMPRESSOR_SPEED),
LwzSystemValuesRegisters.MIXED_WATER_AMOUNT: ModbusRegister(address=33, name="MIXED WATER AMOUNT", unit="l", min=0.0, max=65535.0, data_type=6, key=LwzSystemValuesRegisters.MIXED_WATER_AMOUNT),
LwzSystemValuesRegisters.COMPRESSOR_STARTS_LOW: ModbusRegister(
address=34, name="COMPRESSOR STARTS", unit="", min=0.0, max=65535.0, data_type=6, key=LwzSystemValuesRegisters.COMPRESSOR_STARTS_LOW
),
}
LWZ_SYSTEM_PARAMETERS_REGISTERS = {
LwzSystemParametersRegisters.OPERATING_MODE: ModbusRegister(address=1001, name="OPERATING MODE", unit="", min=0.0, max=14.0, data_type=8, key=LwzSystemParametersRegisters.OPERATING_MODE),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1: ModbusRegister(
address=1002, name="ROOM TEMPERATURE DAY", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1
),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK1: ModbusRegister(
address=1003, name="ROOM TEMPERATURE NIGHT", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK1
),
LwzSystemParametersRegisters.MANUAL_HC_SET_HK1: ModbusRegister(address=1004, name="MANUAL HC SET", unit="°C", min=10.0, max=65.0, data_type=2, key=LwzSystemParametersRegisters.MANUAL_HC_SET_HK1),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK2: ModbusRegister(
address=1005, name="ROOM TEMPERATURE DAY", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK2
),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK2: ModbusRegister(
address=1006, name="ROOM TEMPERATURE NIGHT", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK2
),
LwzSystemParametersRegisters.MANUAL_HC_SET_HK2: ModbusRegister(address=1007, name="MANUAL HC SET", unit="°C", min=10.0, max=65.0, data_type=2, key=LwzSystemParametersRegisters.MANUAL_HC_SET_HK2),
LwzSystemParametersRegisters.GRADIENT_HK1: ModbusRegister(address=1008, name="GRADIENT", unit="", min=0.0, max=5.0, data_type=7, key=LwzSystemParametersRegisters.GRADIENT_HK1),
LwzSystemParametersRegisters.LOW_END_HK1: ModbusRegister(address=1009, name="LOW END", unit="°C", min=0.0, max=20.0, data_type=2, key=LwzSystemParametersRegisters.LOW_END_HK1),
LwzSystemParametersRegisters.GRADIENT_HK2: ModbusRegister(address=1010, name="GRADIENT", unit="", min=0.0, max=5.0, data_type=7, key=LwzSystemParametersRegisters.GRADIENT_HK2),
LwzSystemParametersRegisters.LOW_END_HK2: ModbusRegister(address=1011, name="LOW END", unit="°C", min=0.0, max=20.0, data_type=2, key=LwzSystemParametersRegisters.LOW_END_HK2),
LwzSystemParametersRegisters.DHW_SET_DAY: ModbusRegister(address=1012, name="DHW SET DAY", unit="°C", min=10.0, max=55.0, data_type=2, key=LwzSystemParametersRegisters.DHW_SET_DAY),
LwzSystemParametersRegisters.DHW_SET_NIGHT: ModbusRegister(address=1013, name="DHW SET NIGHT", unit="°C", min=10.0, max=55.0, data_type=2, key=LwzSystemParametersRegisters.DHW_SET_NIGHT),
LwzSystemParametersRegisters.DHW_SET_MANUAL: ModbusRegister(address=1014, name="DHW SET MANUAL", unit="°C", min=10.0, max=65.0, data_type=2, key=LwzSystemParametersRegisters.DHW_SET_MANUAL),
LwzSystemParametersRegisters.MWM_SET_DAY: ModbusRegister(address=1015, name="MWM SET DAY", unit="l", min=50.0, max=288.0, data_type=6, key=LwzSystemParametersRegisters.MWM_SET_DAY),
LwzSystemParametersRegisters.MWM_SET_NIGHT: ModbusRegister(address=1016, name="MWM SET NIGHT", unit="l", min=50.0, max=288.0, data_type=6, key=LwzSystemParametersRegisters.MWM_SET_NIGHT),
LwzSystemParametersRegisters.MWM_SET_MANUAL: ModbusRegister(address=1017, name="MWM SET MANUAL", unit="l", min=50.0, max=288.0, data_type=6, key=LwzSystemParametersRegisters.MWM_SET_MANUAL),
LwzSystemParametersRegisters.DAY_STAGE: ModbusRegister(address=1018, name="DAY STAGE", unit="", min=0.0, max=3.0, data_type=6, key=LwzSystemParametersRegisters.DAY_STAGE),
LwzSystemParametersRegisters.NIGHT_STAGE: ModbusRegister(address=1019, name="NIGHT STAGE", unit="", min=0.0, max=3.0, data_type=6, key=LwzSystemParametersRegisters.NIGHT_STAGE),
LwzSystemParametersRegisters.PARTY_STAGE: ModbusRegister(address=1020, name="PARTY STAGE", unit="", min=0.0, max=3.0, data_type=6, key=LwzSystemParametersRegisters.PARTY_STAGE),
LwzSystemParametersRegisters.MANUAL_STAGE: ModbusRegister(address=1021, name="MANUAL STAGE", unit="", min=0.0, max=3.0, data_type=6, key=LwzSystemParametersRegisters.MANUAL_STAGE),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1_COOLING: ModbusRegister(
address=1022, name="ROOM TEMPERATURE DAY", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1_COOLING
),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK1_COOLING: ModbusRegister(
address=1023, name="ROOM TEMPERATURE NIGHT", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK1_COOLING
),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK2_COOLING: ModbusRegister(
address=1024, name="ROOM TEMPERATURE DAY", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK2_COOLING
),
LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK2_COOLING: ModbusRegister(
address=1025, name="ROOM TEMPERATURE NIGHT", unit="°C", min=10.0, max=30.0, data_type=2, key=LwzSystemParametersRegisters.ROOM_TEMPERATURE_NIGHT_HK2_COOLING
),
LwzSystemParametersRegisters.RESET: ModbusRegister(address=1026, name="RESET", unit="", min=0.0, max=1.0, data_type=6, key=LwzSystemParametersRegisters.RESET),
LwzSystemParametersRegisters.RESTART_ISG: ModbusRegister(address=1027, name="RESTART ISG", unit="", min=0.0, max=2.0, data_type=6, key=LwzSystemParametersRegisters.RESTART_ISG),
}
LWZ_SYSTEM_STATE_REGISTERS = {
LwzSystemStateRegisters.OPERATING_STATUS: ModbusRegister(address=2001, name="OPERATING STATUS", unit="", min=0.0, max=65535.0, data_type=6, key=LwzSystemStateRegisters.OPERATING_STATUS),
LwzSystemStateRegisters.FAULT_STATUS: ModbusRegister(address=2002, name="FAULT STATUS", unit="", min=0.0, max=1.0, data_type=6, key=LwzSystemStateRegisters.FAULT_STATUS),
LwzSystemStateRegisters.BUS_STATUS: ModbusRegister(address=2003, name="BUS STATUS", unit="", min=-4.0, max=0.0, data_type=6, key=LwzSystemStateRegisters.BUS_STATUS),
LwzSystemStateRegisters.DEFROST_INITIATED: ModbusRegister(address=2004, name="DEFROST INITIATED", unit="", min=0.0, max=1.0, data_type=6, key=LwzSystemStateRegisters.DEFROST_INITIATED),
LwzSystemStateRegisters.OPERATING_STATUS_2: ModbusRegister(address=2005, name="OPERATING STATUS 2", unit="", min=0.0, max=65535.0, data_type=6, key=LwzSystemStateRegisters.OPERATING_STATUS_2),
}
LWZ_ENERGY_DATA_REGISTERS = {
LwzEnergyDataRegisters.HEAT_METER_HTG_DAY: ModbusRegister(address=3001, name="HEAT METER HTG DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_METER_HTG_DAY),
LwzEnergyDataRegisters.HEAT_METER_HTG_TTL_LOW: ModbusRegister(
address=3002, name="HEAT METER HTG TTL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_METER_HTG_TTL_LOW
),
LwzEnergyDataRegisters.HEAT_METER_HTG_TTL_HI: ModbusRegister(
address=3003, name="HEAT METER HTG TTL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_METER_HTG_TTL_HI
),
LwzEnergyDataRegisters.HEAT_METER_DHW_DAY: ModbusRegister(address=3004, name="HEAT METER DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_METER_DHW_DAY),
LwzEnergyDataRegisters.HEAT_METER_DHW_TTL_LOW: ModbusRegister(
address=3005, name="HEAT METER DHW TTL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_METER_DHW_TTL_LOW
),
LwzEnergyDataRegisters.HEAT_METER_DHW_TTL_HI: ModbusRegister(
address=3006, name="HEAT METER DHW TTL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_METER_DHW_TTL_HI
),
LwzEnergyDataRegisters.HEAT_M_BOOST_HTG_TTL_LOW: ModbusRegister(
address=3007, name="HEAT M BOOST HTG TTL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_M_BOOST_HTG_TTL_LOW
),
LwzEnergyDataRegisters.HEAT_M_BOOST_HTG_TTL_HI: ModbusRegister(
address=3008, name="HEAT M BOOST HTG TTL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_M_BOOST_HTG_TTL_HI
),
LwzEnergyDataRegisters.HEAT_M_BOOST_DHW_TTL_LOW: ModbusRegister(
address=3009, name="HEAT M BOOST DHW TTL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_M_BOOST_DHW_TTL_LOW
),
LwzEnergyDataRegisters.HEAT_M_BOOST_DHW_HI: ModbusRegister(address=3010, name="HEAT M BOOST DHW", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_M_BOOST_DHW_HI),
LwzEnergyDataRegisters.HEAT_M_RECOVERY_DAY: ModbusRegister(address=3011, name="HEAT M RECOVERY DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_M_RECOVERY_DAY),
LwzEnergyDataRegisters.HEAT_M_RECOVERY_TTL_LOW: ModbusRegister(
address=3012, name="HEAT M RECOVERY TTL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_M_RECOVERY_TTL_LOW
),
LwzEnergyDataRegisters.HEAT_M_RECOVERY_TTL_HI: ModbusRegister(
address=3013, name="HEAT M RECOVERY TTL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HEAT_M_RECOVERY_TTL_HI
),
LwzEnergyDataRegisters.HM_SOLAR_HTG_DAY: ModbusRegister(address=3014, name="HM SOLAR HTG DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HM_SOLAR_HTG_DAY),
LwzEnergyDataRegisters.HM_SOLAR_HTG_TOTAL_LOW: ModbusRegister(
address=3015, name="HM SOLAR HTG TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HM_SOLAR_HTG_TOTAL_LOW
),
LwzEnergyDataRegisters.HM_SOLAR_HTG_TOTAL_HI: ModbusRegister(
address=3016, name="HM SOLAR HTG TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HM_SOLAR_HTG_TOTAL_HI
),
LwzEnergyDataRegisters.HM_SOLAR_DHW_DAY: ModbusRegister(address=3017, name="HM SOLAR DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HM_SOLAR_DHW_DAY),
LwzEnergyDataRegisters.HM_SOLAR_DWH_TOTAL_LOW: ModbusRegister(
address=3018, name="HM SOLAR DWH TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HM_SOLAR_DWH_TOTAL_LOW
),
LwzEnergyDataRegisters.HM_SOLAR_DWH_TOTAL_HI: ModbusRegister(
address=3019, name="HM SOLAR DWH TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HM_SOLAR_DWH_TOTAL_HI
),
LwzEnergyDataRegisters.HM_COOLING_TOTAL_LOW: ModbusRegister(address=3020, name="HM COOLING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.HM_COOLING_TOTAL_LOW),
LwzEnergyDataRegisters.HM_COOLING_TOTAL_HI: ModbusRegister(address=3021, name="HM COOLING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.HM_COOLING_TOTAL_HI),
LwzEnergyDataRegisters.PWR_CON_HTG_DAY: ModbusRegister(address=3022, name="PWR CON HTG DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.PWR_CON_HTG_DAY),
LwzEnergyDataRegisters.PWR_CON_HTG_TTL_LOW: ModbusRegister(address=3023, name="PWR CON HTG TTL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.PWR_CON_HTG_TTL_LOW),
LwzEnergyDataRegisters.PWR_CON_HTG_TTL_HI: ModbusRegister(address=3024, name="PWR CON HTG TTL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.PWR_CON_HTG_TTL_HI),
LwzEnergyDataRegisters.PWR_CON_DHW_DAY: ModbusRegister(address=3025, name="PWR CON DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.PWR_CON_DHW_DAY),
LwzEnergyDataRegisters.PWR_CON_DHW_TTL_LOW: ModbusRegister(address=3026, name="PWR CON DHW TTL", unit="kWh", min=0.0, max=999.0, data_type=6, key=LwzEnergyDataRegisters.PWR_CON_DHW_TTL_LOW),
LwzEnergyDataRegisters.PWR_CON_DHW_TTL_HI: ModbusRegister(address=3027, name="PWR CON DHW TTL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.PWR_CON_DHW_TTL_HI),
LwzEnergyDataRegisters.COMPRESSOR_HEATING: ModbusRegister(address=3028, name="COMPRESSOR HEATING", unit="h", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.COMPRESSOR_HEATING),
LwzEnergyDataRegisters.COMPRESSOR_COOLING: ModbusRegister(address=3029, name="COMPRESSOR COOLING", unit="h", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.COMPRESSOR_COOLING),
LwzEnergyDataRegisters.COMPRESSOR_DHW: ModbusRegister(address=3030, name="COMPRESSOR DHW", unit="h", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.COMPRESSOR_DHW),
LwzEnergyDataRegisters.ELEC_BOOSTER_HEATING: ModbusRegister(
address=3031, name="ELEC BOOSTER HEATING", unit="h", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.ELEC_BOOSTER_HEATING
),
LwzEnergyDataRegisters.ELEC_BOOSTER_DHW: ModbusRegister(address=3032, name="ELEC BOOSTER DHW", unit="h", min=0.0, max=65535.0, data_type=6, key=LwzEnergyDataRegisters.ELEC_BOOSTER_DHW),
}
class OperatingMode(Enum):
"""Enum for the operation mode of the heat pump."""
# AUTOMATIK
AUTOMATIC = 11
# BEREITSCHAFT
STANDBY = 1
# TAGBETRIEB
DAY_MODE = 3
# ABSENKBETRIEB
SETBACK_MODE = 4
# WARMWASSER
DHW = 5
# HANDBETRIEB
MANUAL_MODE = 14
# NOTBETRIEB
EMERGENCY_OPERATION = 0
class LwzStiebelEltronAPI(StiebelEltronAPI):
def __init__(self, host: str, port: int = 502, slave: int = 1) -> None:
super().__init__(
[
ModbusRegisterBlock(base_address=0, count=34, name="System Values", registers=LWZ_SYSTEM_VALUES_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
ModbusRegisterBlock(base_address=1000, count=27, name="System Parameters", registers=LWZ_SYSTEM_PARAMETERS_REGISTERS, register_type=RegisterType.HOLDING_REGISTER),
ModbusRegisterBlock(base_address=2000, count=5, name="System State", registers=LWZ_SYSTEM_STATE_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
ModbusRegisterBlock(base_address=3000, count=32, name="Energy Data", registers=LWZ_ENERGY_DATA_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
ModbusRegisterBlock(base_address=4000, count=3, name="Energy Management Settings", registers=ENERGY_MANAGEMENT_SETTINGS_REGISTERS, register_type=RegisterType.HOLDING_REGISTER),
ModbusRegisterBlock(base_address=5000, count=2, name="Energy System Information", registers=ENERGY_SYSTEM_INFORMATION_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
],
host,
port,
slave,
)
async def async_update(self):
"""Request current values from heat pump."""
await super().async_update()
for registerblock in self._register_blocks:
if registerblock.name == ENERGY_DATA_BLOCK_NAME:
registers = [r.value for r in LwzEnergyDataRegisters]
registers.sort()
for register in registers:
if register > VIRTUAL_REGISTER_OFFSET:
if register > VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET:
total_key = LwzEnergyDataRegisters(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET + VIRTUAL_REGISTER_OFFSET)
day_key = LwzEnergyDataRegisters(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET - 1)
total_value = self._data.get(total_key)
day_value = self._data.get(day_key)
if total_value is not None and day_value is not None:
prev_value = self._previous_data.get(LwzEnergyDataRegisters(register))
if prev_value is not None:
self._data[LwzEnergyDataRegisters(register)] = max(total_value + day_value, prev_value)
else:
self._data[LwzEnergyDataRegisters(register)] = total_value + day_value
else:
low_key = LwzEnergyDataRegisters(register - VIRTUAL_REGISTER_OFFSET)
high_key = LwzEnergyDataRegisters(register - VIRTUAL_REGISTER_OFFSET + 1)
high_value = self._data.get(high_key)
low_value = self._data.get(low_key)
if high_value is not None and low_value is not None:
self._data[LwzEnergyDataRegisters(register)] = high_value * 1000 + low_value
compressor_starts_high = self.get_register_value(LwzSystemValuesRegisters.COMPRESSOR_STARTS_HI)
if compressor_starts_high is None or compressor_starts_high == 32768:
self._data[LwzSystemValuesRegisters.COMPRESSOR_STARTS] = 32768
else:
compressor_starts_low = self.get_register_value(LwzSystemValuesRegisters.COMPRESSOR_STARTS_LOW)
if compressor_starts_low is None:
self._data[LwzSystemValuesRegisters.COMPRESSOR_STARTS] = compressor_starts_high * 1000
else:
self._data[LwzSystemValuesRegisters.COMPRESSOR_STARTS] = compressor_starts_high * 1000 + compressor_starts_low
def get_current_temp(self):
"""Get the current room temperature."""
return self.get_register_value(LwzSystemValuesRegisters.ACTUAL_ROOM_T_HC1)
def get_target_temp(self):
"""Get the target room temperature."""
return self.get_register_value(LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1)
async def set_target_temp(self, temp):
"""Set the target room temperature (day)(HC1)."""
await self.write_register_value(LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1, temp)
def get_current_humidity(self):
"""Get the current room humidity."""
return self.get_register_value(LwzSystemValuesRegisters.RELATIVE_HUMIDITY_HC1)
# Handle operation mode
def get_operation(self) -> OperatingMode:
"""Return the current mode of operation."""
op_mode = int(self.get_register_value(LwzSystemParametersRegisters.OPERATING_MODE))
return OperatingMode(op_mode)
async def set_operation(self, mode: OperatingMode):
"""Set the operation mode."""
await self.write_register_value(LwzSystemParametersRegisters.OPERATING_MODE, mode.value)
def get_heating_status(self) -> bool:
"""Return heater status."""
return bool(int(self.get_register_value(LwzSystemStateRegisters.OPERATING_STATUS)) & (1 << 2))
def get_cooling_status(self) -> bool:
"""Cooling status."""
return bool(int(self.get_register_value(LwzSystemStateRegisters.OPERATING_STATUS)) & (1 << 3))
def get_filter_alarm_status(self) -> bool:
"""Return filter alarm."""
filter_mask = (1 << 8) | (1 << 12) | (1 << 13)
return bool(int(self.get_register_value(LwzSystemStateRegisters.OPERATING_STATUS)) & filter_mask)
python-stiebel-eltron-0.2.0/pystiebeleltron/pystiebeleltron.py 0000664 0000000 0000000 00000031042 15036725112 0025004 0 ustar 00root root 0000000 0000000 """
Connection to a Stiebel Eltron ModBus API.
See API details:
https://www.stiebel-eltron.de/content/dam/ste/de/de/home/services/Downloadlisten/ISG%20Modbus_Stiebel_Bedienungsanleitung.pdf
Types of data:
Data | Value | Multiplier | Multiplier | Signed | Step | Step
type | range | for reading | for writing | | size 1 | size 5
-----|------------|-------------|-------------|--------|--------|-------
2 | -3276.8 to | 0.1 | 10 | Yes | 0.1 | 0.5
| 3276.7 | | | | |
6 | 0 to 65535 | 1 | 1 | No | 1 | 5
7 | -327.68 to | 0.01 | 100 | Yes | 0.01 | 0.05
| 327.67 | | | | |
8 | 0 to 255 | 1 | 1 | No | 1 | 5
"""
from pymodbus.client.mixin import ModbusClientMixin
# Error - sensor lead is missing or disconnected.
ERROR_NOTAVAILABLE = -60
# Error - short circuit of the sensor lead.
ERROR_SHORTCUT = -50
# Error - object unavailable.
ERROR_OBJ_UNAVAILBLE = 0x8000
UNAVAILABLE_OBJECT = 32768
# Block 1 System values (Read input register) - page 29
B1_START_ADDR = 0
B1_REGMAP_INPUT = {
# HC = Heating Circuit
'ACTUAL_ROOM_TEMPERATURE_HC1': {'addr': 0, 'type': 2, 'value': 0},
'SET_ROOM_TEMPERATURE_HC1': {'addr': 1, 'type': 2, 'value': 0},
'RELATIVE_HUMIDITY_HC1': {'addr': 2, 'type': 2, 'value': 0},
'ACTUAL_ROOM_TEMPERATURE_HC2': {'addr': 3, 'type': 2, 'value': 0},
'SET_ROOM_TEMPERATURE_HC2': {'addr': 4, 'type': 2, 'value': 0},
'RELATIVE_HUMIDITY_HC2': {'addr': 5, 'type': 2, 'value': 0},
'OUTSIDE_TEMPERATURE': {'addr': 6, 'type': 2, 'value': 0},
'ACTUAL_VALUE_HC1': {'addr': 7, 'type': 2, 'value': 0},
'SET_VALUE_HC1': {'addr': 8, 'type': 2, 'value': 0},
'ACTUAL_VALUE_HC2': {'addr': 9, 'type': 2, 'value': 0},
'SET_VALUE_HC2': {'addr': 10, 'type': 2, 'value': 0},
'FLOW_TEMPERATURE': {'addr': 11, 'type': 2, 'value': 0},
'RETURN_TEMPERATURE': {'addr': 12, 'type': 2, 'value': 0},
'PRESSURE_HEATING_CIRCUIT': {'addr': 13, 'type': 2, 'value': 0},
'FLOW_RATE': {'addr': 14, 'type': 2, 'value': 0},
'ACTUAL_DHW_TEMPERATURE': {'addr': 15, 'type': 2, 'value': 0},
'SET_DHW_TEMPERATURE': {'addr': 16, 'type': 2, 'value': 0},
'VENTILATION_AIR_ACTUAL_FAN_SPEED': {'addr': 17, 'type': 6, 'value': 0},
'VENTILATION_AIR_SET_FLOW_RATE': {'addr': 18, 'type': 6, 'value': 0},
'EXTRACT_AIR_ACTUAL_FAN_SPEED': {'addr': 19, 'type': 6, 'value': 0},
'EXTRACT_AIR_SET_FLOW_RATE': {'addr': 20, 'type': 6, 'value': 0},
'EXTRACT_AIR_HUMIDITY': {'addr': 21, 'type': 6, 'value': 0},
'EXTRACT_AIR_TEMPERATURE': {'addr': 22, 'type': 2, 'value': 0},
'EXTRACT_AIR_DEW_POINT': {'addr': 23, 'type': 2, 'value': 0},
'DEW_POINT_TEMPERATUR_HC1': {'addr': 24, 'type': 2, 'value': 0},
'DEW_POINT_TEMPERATUR_HC2': {'addr': 25, 'type': 2, 'value': 0},
'COLLECTOR_TEMPERATURE': {'addr': 26, 'type': 2, 'value': 0},
'HOT_GAS_TEMPERATURE': {'addr': 27, 'type': 2, 'value': 0},
'HIGH_PRESSURE': {'addr': 28, 'type': 7, 'value': 0},
'LOW_PRESSURE': {'addr': 29, 'type': 7, 'value': 0},
'COMPRESSOR_STARTS': {'addr': 30, 'type': 6, 'value': 0},
'COMPRESSOR_SPEED': {'addr': 31, 'type': 2, 'value': 0},
'MIXED_WATER_AMOUNT': {'addr': 32, 'type': 6, 'value': 0}
}
# Block 2 System parameters (Read/write holding register) - page 30
B2_START_ADDR = 1000
B2_REGMAP_HOLDING = {
'OPERATING_MODE': {'addr': 1000, 'type': 8, 'value': 0},
'ROOM_TEMP_HEAT_DAY_HC1': {'addr': 1001, 'type': 2, 'value': 0},
'ROOM_TEMP_HEAT_NIGHT_HC1': {'addr': 1002, 'type': 2, 'value': 0},
'MANUAL_SET_TEMP_HC1': {'addr': 1003, 'type': 2, 'value': 0},
'ROOM_TEMP_HEAT_DAY_HC2': {'addr': 1004, 'type': 2, 'value': 0},
'ROOM_TEMP_HEAT_NIGHT_HC2': {'addr': 1005, 'type': 2, 'value': 0},
'MANUAL_SET_TEAMP_HC2': {'addr': 1006, 'type': 2, 'value': 0},
'GRADIENT_HC1': {'addr': 1007, 'type': 7, 'value': 0},
'LOW_END_HC1': {'addr': 1008, 'type': 2, 'value': 0},
'GRADIENT_HC2': {'addr': 1009, 'type': 7, 'value': 0},
'LOW_END_HC2': {'addr': 1010, 'type': 2, 'value': 0},
'DHW_TEMP_SET_DAY': {'addr': 1011, 'type': 2, 'value': 0},
'DHW_TEMP_SET_NIGHT': {'addr': 1012, 'type': 2, 'value': 0},
'DHW_TEMP_SET_MANUAL': {'addr': 1013, 'type': 2, 'value': 0},
'MWM_SET_DAY': {'addr': 1014, 'type': 6, 'value': 0},
'MWM_SET_NIGHT': {'addr': 1015, 'type': 6, 'value': 0},
'MWM_SET_MANUAL': {'addr': 1016, 'type': 6, 'value': 0},
'DAY_STAGE': {'addr': 1017, 'type': 6, 'value': 0},
'NIGHT_STAGE': {'addr': 1018, 'type': 6, 'value': 0},
'PARTY_STAGE': {'addr': 1019, 'type': 6, 'value': 0},
'MANUAL_STAGE': {'addr': 1020, 'type': 6, 'value': 0},
'ROOM_TEMP_COOL_DAY_HC1': {'addr': 1021, 'type': 2, 'value': 0},
'ROOM_TEMP_COOL_NIGHT_HC1': {'addr': 1022, 'type': 2, 'value': 0},
'ROOM_TEMP_COOL_DAY_HC2': {'addr': 1023, 'type': 2, 'value': 0},
'ROOM_TEMP_COOL_NIGHT_HC2': {'addr': 1024, 'type': 2, 'value': 0},
'RESET': {'addr': 1025, 'type': 6, 'value': 0},
'RESTART_ISG': {'addr': 1026, 'type': 6, 'value': 0}
}
B2_OPERATING_MODE_READ = {
# AUTOMATIK
11: 'AUTOMATIC',
# BEREITSCHAFT
1: 'STANDBY',
# TAGBETRIEB
3: 'DAY MODE',
# ABSENKBETRIEB
4: 'SETBACK MODE',
# WARMWASSER
5: 'DHW',
# HANDBETRIEB
14: 'MANUAL MODE',
# NOTBETRIEB
0: 'EMERGENCY OPERATION'
}
B2_OPERATING_MODE_WRITE = {
value: key for key, value in B2_OPERATING_MODE_READ.items()
}
B2_RESET = {
'OFF': 0,
'ON': 1
}
B2_RESTART_ISG = {
'OFF': 0,
'RESET': 1,
'MENU': 2
}
# Block 3 System status (Read input register) - page 31
B3_START_ADDR = 2000
B3_REGMAP_INPUT = {
'OPERATING_STATUS': {'addr': 2000, 'type': 6, 'value': 0},
'FAULT_STATUS': {'addr': 2001, 'type': 6, 'value': 0},
'BUS_STATUS': {'addr': 2002, 'type': 6, 'value': 0}
}
B3_OPERATING_STATUS = {
'SWITCHING_PROGRAM_ENABLED': (1 << 0),
'COMPRESSOR': (1 << 1),
'HEATING': (1 << 2),
'COOLING': (1 << 3),
'DHW': (1 << 4),
'ELECTRIC_REHEATING': (1 << 5),
'SERVICE': (1 << 6),
'POWER-OFF': (1 << 7),
'FILTER': (1 << 8),
'VENTILATION': (1 << 9),
'HEATING_CIRCUIT_PUMP': (1 << 10),
'EVAPORATOR_DEFROST': (1 << 11),
'FILTER_EXTRACT_AIR': (1 << 12),
'FILTER_VENTILATION_AIR': (1 << 13),
'HEAT-UP_PROGRAM': (1 << 14)
}
B3_FAULT_STATUS = {
'NO_FAULT': 0,
'FAULT': 1
}
B3_BUS_STATUS = {
'STATUS OK': 0,
'STATUS ERROR': -1,
'ERROR-PASSIVE': -2,
'BUS-OFF': -3,
'PHYSICAL-ERROR': -4
}
class StiebelEltronAPI():
"""Stiebel Eltron API."""
def __init__(self, conn: ModbusClientMixin, slave=1, update_on_read=False):
"""Initialize Stiebel Eltron communication."""
self._conn = conn
self._block_1_input_regs = B1_REGMAP_INPUT
self._block_2_holding_regs = B2_REGMAP_HOLDING
self._block_3_input_regs = B3_REGMAP_INPUT
self._slave = slave
self._update_on_read = update_on_read
def update(self):
"""Request current values from heat pump."""
ret = True
try:
block_1_result_input = self._conn.read_input_registers(
slave=self._slave,
address=B1_START_ADDR,
count=len(self._block_1_input_regs)).registers
block_2_result_holding = self._conn.read_holding_registers(
slave=self._slave,
address=B2_START_ADDR,
count=len(self._block_2_holding_regs)).registers
block_3_result_input = self._conn.read_input_registers(
slave=self._slave,
address=B3_START_ADDR,
count=len(self._block_3_input_regs)).registers
except AttributeError:
# The unit does not reply reliably
ret = False
print("Modbus read failed")
else:
for v in self._block_1_input_regs.values():
v['value'] = block_1_result_input[v['addr'] - B1_START_ADDR]
for v in self._block_2_holding_regs.values():
v['value'] = block_2_result_holding[v['addr'] - B2_START_ADDR]
for v in self._block_3_input_regs.values():
v['value'] = block_3_result_input[v['addr'] - B3_START_ADDR]
return ret
def get_conv_val(self, name: str):
"""Read and convert value.
Args:
name: Name of value to be read.
Returns:
Actual value or None.
"""
value_entry = self._block_1_input_regs.get(name)
if value_entry is None:
value_entry = self._block_2_holding_regs.get(name)
if value_entry is None:
value_entry = self._block_3_input_regs.get(name)
if value_entry is None:
return None
if value_entry['type'] == 2:
return value_entry['value'] * 0.1
if value_entry['type'] == 7:
return value_entry['value'] * 0.01
return value_entry['value']
# def get_raw_input_register(self, name):
# """Get raw register value by name."""
# if self._update_on_read:
# self.update()
# return self._block_1_input_regs[name]
# def get_raw_holding_register(self, name):
# """Get raw register value by name."""
# if self._update_on_read:
# self.update()
# return self._block_2_holding_regs[name]
# def set_raw_holding_register(self, name, value):
# """Write to register by name."""
# self._conn.write_register(
# slave=self._slave,
# address=(self._holding_regs[name]['addr']),
# value=value)
# Handle room temperature & humidity
def get_current_temp(self):
"""Get the current room temperature."""
if self._update_on_read:
self.update()
return self.get_conv_val('ACTUAL_ROOM_TEMPERATURE_HC1')
def get_target_temp(self):
"""Get the target room temperature."""
if self._update_on_read:
self.update()
return self.get_conv_val('ROOM_TEMP_HEAT_DAY_HC1')
def set_target_temp(self, temp: float):
"""Set the target room temperature (day)(HC1)."""
self._conn.write_register(
slave=self._slave,
address=(
self._block_2_holding_regs['ROOM_TEMP_HEAT_DAY_HC1']['addr']),
value=round(temp * 10.0))
def get_current_humidity(self):
"""Get the current room humidity."""
if self._update_on_read:
self.update()
return self.get_conv_val('RELATIVE_HUMIDITY_HC1')
# Handle operation mode
def get_operation(self):
"""Return the current mode of operation."""
if self._update_on_read:
self.update()
op_mode = self.get_conv_val('OPERATING_MODE')
return B2_OPERATING_MODE_READ.get(op_mode, 'UNKNOWN')
def set_operation(self, mode: str):
"""Set the operation mode."""
self._conn.write_register(
slave=self._slave,
address=(self._block_2_holding_regs['OPERATING_MODE']['addr']),
value=B2_OPERATING_MODE_WRITE.get(mode))
# Handle device status
def get_heating_status(self):
"""Return heater status."""
if self._update_on_read:
self.update()
return bool(self.get_conv_val('OPERATING_STATUS') &
B3_OPERATING_STATUS['HEATING'])
def get_cooling_status(self):
"""Cooling status."""
if self._update_on_read:
self.update()
return bool(self.get_conv_val('OPERATING_STATUS') &
B3_OPERATING_STATUS['COOLING'])
def get_filter_alarm_status(self):
"""Return filter alarm."""
if self._update_on_read:
self.update()
filter_mask = (B3_OPERATING_STATUS['FILTER'] |
B3_OPERATING_STATUS['FILTER_EXTRACT_AIR'] |
B3_OPERATING_STATUS['FILTER_VENTILATION_AIR'])
return bool(self.get_conv_val('OPERATING_STATUS') & filter_mask)
python-stiebel-eltron-0.2.0/pystiebeleltron/wpm.py 0000664 0000000 0000000 00000206711 15036725112 0022372 0 ustar 00root root 0000000 0000000 """Modbus api for stiebel eltron heat pumps. This file is generated. Do not modify it manually."""
from . import (
ModbusRegister,
ModbusRegisterBlock,
StiebelEltronAPI,
IsgRegisters,
RegisterType,
ENERGY_DATA_BLOCK_NAME,
VIRTUAL_REGISTER_OFFSET,
ENERGY_MANAGEMENT_SETTINGS_REGISTERS,
ENERGY_SYSTEM_INFORMATION_REGISTERS,
VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET,
)
class WpmSystemValuesRegisters(IsgRegisters):
ACTUAL_TEMPERATURE_FE7 = 501
SET_TEMPERATURE_FE7 = 502
ACTUAL_TEMPERATURE_FEK = 503
SET_TEMPERATURE_FEK = 504
RELATIVE_HUMIDITY = 505
DEW_POINT_TEMPERATURE = 506
OUTSIDE_TEMPERATURE = 507
ACTUAL_TEMPERATURE_HK_1 = 508
SET_TEMPERATURE_HK_1_WPM3I = 509
SET_TEMPERATURE_HK_1 = 510
ACTUAL_TEMPERATURE_HK_2 = 511
SET_TEMPERATURE_HK_2 = 512
ACTUAL_FLOW_TEMPERATURE_WP = 513
ACTUAL_FLOW_TEMPERATURE_NHZ = 514
ACTUAL_FLOW_TEMPERATURE = 515
ACTUAL_RETURN_TEMPERATURE = 516
SET_FIXED_TEMPERATURE = 517
ACTUAL_BUFFER_TEMPERATURE = 518
SET_BUFFER_TEMPERATURE = 519
HEATING_PRESSURE = 520
FLOW_RATE = 521
ACTUAL_TEMPERATURE_DHW = 522
SET_TEMPERATURE_DHW = 523
ACTUAL_TEMPERATURE_FAN = 524
SET_TEMPERATURE_FAN = 525
ACTUAL_TEMPERATURE_AREA = 526
SET_TEMPERATURE_AREA = 527
COLLECTOR_TEMPERATURE = 528
CYLINDER_TEMPERATURE = 529
RUNTIME = 530
ACTUAL_TEMPERATURE_EXTERNAL = 531
SET_TEMPERATURE_EXTERNAL = 532
APPLICATION_LIMIT_HZG = 533
APPLICATION_LIMIT_WW = 534
RUNTIME_EHS = 535
SOURCE_TEMPERATURE = 536
MIN_SOURCE_TEMPERATURE = 537
SOURCE_PRESSURE = 538
HOT_GAS_TEMPERATURE = 539
HIGH_PRESSURE = 540
LOW_PRESSURE = 541
RETURN_TEMPERATURE_HP1 = 542
FLOW_TEMPERATURE_HP1 = 543
HOT_GAS_TEMPERATURE_HP1 = 544
LOW_PRESSURE_HP1 = 545
MEAN_PRESSURE_HP1 = 546
HIGH_PRESSURE_HP1 = 547
WP_WATER_FLOW_RATE_HP1 = 548
RETURN_TEMPERATURE_HP2 = 549
FLOW_TEMPERATURE_HP2 = 550
HOT_GAS_TEMPERATURE_HP2 = 551
LOW_PRESSURE_HP2 = 552
MEAN_PRESSURE_HP2 = 553
HIGH_PRESSURE_HP2 = 554
WP_WATER_FLOW_RATE_HP2 = 555
RETURN_TEMPERATURE_HP3 = 556
FLOW_TEMPERATURE_HP3 = 557
HOT_GAS_TEMPERATURE_HP3 = 558
LOW_PRESSURE_HP3 = 559
MEAN_PRESSURE_HP3 = 560
HIGH_PRESSURE_HP3 = 561
WP_WATER_FLOW_RATE_HP3 = 562
RETURN_TEMPERATURE_HP4 = 563
FLOW_TEMPERATURE_HP4 = 564
HOT_GAS_TEMPERATURE_HP4 = 565
LOW_PRESSURE_HP4 = 566
MEAN_PRESSURE_HP4 = 567
HIGH_PRESSURE_HP4 = 568
WP_WATER_FLOW_RATE_HP4 = 569
RETURN_TEMPERATURE_HP5 = 570
FLOW_TEMPERATURE_HP5 = 571
HOT_GAS_TEMPERATURE_HP5 = 572
LOW_PRESSURE_HP5 = 573
MEAN_PRESSURE_HP5 = 574
HIGH_PRESSURE_HP5 = 575
WP_WATER_RATE_HP5 = 576
RETURN_TEMPERATURE_HP6 = 577
FLOW_TEMPERATURE_HP6 = 578
HOT_GAS_HP6 = 579
LOW_PRESSURE_HP6 = 580
MEAN_PRESSURE_HP6 = 581
HIGH_PRESSURE_HP6 = 582
WP_WATER_FLOW_RATE_HP6 = 583
ACTUAL_TEMPERATURE_ROOM_TEMP_HC1 = 584
SET_TEMPERATURE_ROOM_TEMP_HC1 = 585
RELATIVE_HUMIDITY_ROOM_TEMP_HC1 = 586
DEW_POINT_TEMPERATURE_ROOM_TEMP_HC1 = 587
ACTUAL_TEMPERATURE_ROOM_TEMP_HC2 = 588
SET_TEMPERATURE_ROOM_TEMP_HC2 = 589
RELATIVE_HUMIDITY_ROOM_TEMP_HC2 = 590
DEW_POINT_TEMPERATURE_ROOM_TEMP_HC2 = 591
ACTUAL_TEMPERATURE_ROOM_TEMP_HC3 = 592
SET_TEMPERATURE_ROOM_TEMP_HC3 = 593
RELATIVE_HUMIDITY_ROOM_TEMP_HC3 = 594
DEW_POINT_TEMPERATURE_ROOM_TEMP_HC3 = 595
ACTUAL_TEMPERATURE_ROOM_TEMP_HC4 = 596
SET_TEMPERATURE_ROOM_TEMP_HC4 = 597
RELATIVE_HUMIDITY_ROOM_TEMP_HC4 = 598
DEW_POINT_TEMPERATURE_ROOM_TEMP_HC4 = 599
ACTUAL_TEMPERATURE_ROOM_TEMP_HC5 = 600
SET_TEMPERATURE_ROOM_TEMP_HC5 = 601
RELATIVE_HUMIDITY_ROOM_TEMP_HC5 = 602
DEW_POINT_TEMPERATURE_ROOM_TEMP_HC5 = 603
SET_TEMPERATURE_ROOM_TEMP_COOLING1 = 604
SET_TEMPERATURE_ROOM_TEMP_COOLING2 = 605
SET_TEMPERATURE_ROOM_TEMP_COOLING3 = 606
SET_TEMPERATURE_ROOM_TEMP_COOLING4 = 607
SET_TEMPERATURE_ROOM_TEMP_COOLING5 = 608
ACTUAL_TEMPERATURE_HK_3 = 609
SET_TEMPERATURE_HK_3 = 610
class WpmSystemParametersRegisters(IsgRegisters):
OPERATING_MODE = 1501
COMFORT_TEMPERATURE_HK_1 = 1502
ECO_TEMPERATURE_HK_1 = 1503
HEATING_CURVE_RISE_HK_1 = 1504
COMFORT_TEMPERATURE_HK_2 = 1505
ECO_TEMPERATURE_HK_2 = 1506
HEATING_CURVE_RISE_HK_2 = 1507
FIXED_VALUE_OPERATION = 1508
DUAL_MODE_TEMP_HZG = 1509
COMFORT_TEMPERATURE = 1510
ECO_TEMPERATURE = 1511
DHW_STAGES = 1512
DUAL_MODE_TEMP_WW = 1513
SET_FLOW_TEMPERATURE_AREA = 1514
FLOW_TEMP_HYSTERESIS_AREA = 1515
SET_ROOM_TEMPERATURE_AREA = 1516
SET_FLOW_TEMPERATURE_FAN = 1517
FLOW_TEMP_HYSTERESIS_FAN = 1518
SET_ROOM_TEMPERATURE_FAN = 1519
RESET = 1520
RESTART_ISG = 1521
COMFORT_TEMPERATURE_HK_3 = 1550
ECO_TEMPERATURE_HK_3 = 1551
HEATING_CURVE_RISE_HK_3 = 1552
class WpmSystemStateRegisters(IsgRegisters):
OPERATING_STATUS = 2501
POWER_OFF = 2502
OPERATING_STATUS_WPM_3 = 2503
FAULT_STATUS = 2504
BUS_STATUS = 2505
DEFROST_INITIATED = 2506
ACTIVE_ERROR = 2507
MESSAGE_NUMBER = 2508
HEATING_CIRCUIT_PUMP_1 = 2509
HEATING_CIRCUIT_PUMP_2 = 2510
HEATING_CIRCUIT_PUMP_3 = 2511
BUFFER_CHARGING_PUMP_1 = 2512
BUFFER_CHARGING_PUMP_2 = 2513
DHW_CHARGING_PUMP = 2514
SOURCE_PUMP = 2515
FAULT_OUTPUT = 2516
DHW_CIRCULATION_PUMP = 2517
WE_2_DHW = 2518
WE_2_HEATING = 2519
COOLING_MODE = 2520
MIXER_OPEN_HC2 = 2521
MIXER_CLOSE_HC2 = 2522
MIXER_OPEN_HC3 = 2523
MIXER_CLOSE_HC3 = 2524
NHZ_1 = 2525
NHZ_2 = 2526
NHZ_1_2 = 2527
HEATING_CIRCUIT_PUMP_4 = 2528
HEATING_CIRCUIT_PUMP_5 = 2529
BUFFER_CHARGING_PUMP_3 = 2530
BUFFER_CHARGING_PUMP_4 = 2531
BUFFER_CHARGING_PUMP_5 = 2532
BUFFER_CHARGING_PUMP_6 = 2533
DIFF_CONTROLLER_PUMP_1 = 2534
DIFF_CONTROLLER_PUMP_2 = 2535
POOL_PUMP_PRIMARY = 2536
POOL_PUMP_SECONDARY = 2537
MIXER_OPEN_HC4 = 2538
MIXER_CLOSE_HC4 = 2539
MIXER_OPEN_HC5 = 2540
MIXER_CLOSE_HC5 = 2541
COMPRESSOR_1 = 2542
COMPRESSOR_2 = 2543
COMPRESSOR_3 = 2544
COMPRESSOR_4 = 2545
COMPRESSOR_5 = 2546
COMPRESSOR_6 = 2547
class WpmEnergyDataRegisters(IsgRegisters):
VD_HEATING_DAY = 3501
VD_HEATING_DAY_AND_TOTAL = 203502
VD_HEATING_TOTAL_LOW = 3502
VD_HEATING_TOTAL = 103502
VD_HEATING_TOTAL_HI = 3503
VD_DHW_DAY = 3504
VD_DHW_DAY_AND_TOTAL = 203505
VD_DHW_TOTAL_LOW = 3505
VD_DHW_TOTAL = 103505
VD_DHW_TOTAL_HI = 3506
NHZ_HEATING_TOTAL_LOW = 3507
NHZ_HEATING_TOTAL = 103507
NHZ_HEATING_TOTAL_HI = 3508
NHZ_DHW_TOTAL_LOW = 3509
NHZ_DHW_TOTAL = 103509
NHZ_DHW_TOTAL_HI = 3510
VD_HEATING_DAY_CONSUMED = 3511
VD_HEATING_DAY_AND_TOTAL_CONSUMED = 203512
VD_HEATING_TOTAL_LOW_CONSUMED = 3512
VD_HEATING_TOTAL_CONSUMED = 103512
VD_HEATING_TOTAL_HI_CONSUMED = 3513
VD_DHW_DAY_CONSUMED = 3514
VD_DHW_DAY_AND_TOTAL_CONSUMED = 203515
VD_DHW_TOTAL_LOW_CONSUMED = 3515
VD_DHW_TOTAL_CONSUMED = 103515
VD_DHW_TOTAL_HI_CONSUMED = 3516
VD_HEATING = 3517
VD_DHW = 3518
VD_COOLING = 3519
NHZ_1 = 3520
NHZ_2 = 3521
NHZ_1_2 = 3522
VD_HEATING_DAY_HP_1 = 3523
VD_HEATING_DAY_AND_TOTAL_HP_1 = 203524
VD_HEATING_TOTAL_LOW_HP_1 = 3524
VD_HEATING_TOTAL_HP_1 = 103524
VD_HEATING_TOTAL_HI_HP_1 = 3525
VD_DHW_DAY_HP_1 = 3526
VD_DHW_DAY_AND_TOTAL_HP_1 = 203527
VD_DHW_TOTAL_LOW_HP_1 = 3527
VD_DHW_TOTAL_HP_1 = 103527
VD_DHW_TOTAL_HI_HP_1 = 3528
NHZ_HEATING_TOTAL_LOW_HP_1 = 3529
NHZ_HEATING_TOTAL_HP_1 = 103529
NHZ_HEATING_TOTAL_HI_HP_1 = 3530
NHZ_DHW_TOTAL_LOW_HP_1 = 3531
NHZ_DHW_TOTAL_HP_1 = 103531
NHZ_DHW_TOTAL_HI_HP_1 = 3532
VD_HEATING_DAY_CONSUMED_HP_1 = 3533
VD_HEATING_DAY_AND_TOTAL_CONSUMED_HP_1 = 203534
VD_HEATING_TOTAL_LOW_CONSUMED_HP_1 = 3534
VD_HEATING_TOTAL_CONSUMED_HP_1 = 103534
VD_HEATING_TOTAL_HI_CONSUMED_HP_1 = 3535
VD_DHW_DAY_CONSUMEDHP_1 = 3536
VD_DHW_DAY_AND_TOTAL_CONSUMEDHP_1 = 203537
VD_DHW_TOTAL_LOW_CONSUMED_HP_1 = 3537
VD_DHW_TOTAL_CONSUMED_HP_1 = 103537
VD_DHW_TOTAL_HI_CONSUMED_HP_1 = 3538
VD_1_HEATING_HP_1 = 3539
VD_2_HEATING_HP_1 = 3540
VD_1_2_HEATING_HP_1 = 3541
VD_1_DHW_HP_1 = 3542
VD_2_DHW_HP_1 = 3543
VD_1_2_DHW_HP_1 = 3544
VD_COOLING_x_HP_1 = 3545
NHZ_1_REHEATING = 3546
NHZ_2_REHEATING = 3547
NHZ_1_2_REHEATING = 3548
VD_HEATING_DAY_HP_2 = 3549
VD_HEATING_DAY_AND_TOTAL_HP_2 = 203550
VD_HEATING_TOTAL_LOW_HP_2 = 3550
VD_HEATING_TOTAL_HP_2 = 103550
VD_HEATING_TOTAL_HI_HP_2 = 3551
VD_DHW_DAY_HP_2 = 3552
VD_DHW_DAY_AND_TOTAL_HP_2 = 203553
VD_DHW_TOTAL_LOW_HP_2 = 3553
VD_DHW_TOTAL_HP_2 = 103553
VD_DHW_TOTAL_HI_HP_2 = 3554
VD_HEATING_DAY_CONSUMED_HP_2 = 3555
VD_HEATING_DAY_AND_TOTAL_CONSUMED_HP_2 = 203556
VD_HEATING_TOTAL_LOW_CONSUMED_HP_2 = 3556
VD_HEATING_TOTAL_CONSUMED_HP_2 = 103556
VD_HEATING_TOTAL_HI_CONSUMED_HP_2 = 3557
VD_DHW_DAY_CONSUMED_HP_2 = 3558
VD_DHW_DAY_AND_TOTAL_CONSUMED_HP_2 = 203559
VD_DHW_TOTAL_LOW_CONSUMED_HP_2 = 3559
VD_DHW_TOTAL_CONSUMED_HP_2 = 103559
VD_DHW_TOTAL_HI_CONSUMED_HP_2 = 3560
VD_1_HEATING_HP_2 = 3561
VD_2_HEATING_HP_2 = 3562
VD_1_2_HEATING_HP_2 = 3563
VD_1_DHW_HP_2 = 3564
VD_2_DHW_HP_2 = 3565
VD_1_2_DHW_HP_2 = 3566
VD_COOLING_HP_2 = 3567
VD_HEATING_DAY_HP_3 = 3568
VD_HEATING_DAY_AND_TOTAL_HP_3 = 203569
VD_HEATING_TOTAL_LOW_HP_3 = 3569
VD_HEATING_TOTAL_HP_3 = 103569
VD_HEATING_TOTAL_HI_HP_3 = 3570
VD_DHW_DAY_HP_3 = 3571
VD_DHW_DAY_AND_TOTAL_HP_3 = 203572
VD_DHW_TOTAL_LOW_HP_3 = 3572
VD_DHW_TOTAL_HP_3 = 103572
VD_DHW_TOTAL_HI_HP_3 = 3573
VD_HEATING_DAY_CONSUMED_HP_3 = 3574
VD_HEATING_DAY_AND_TOTAL_CONSUMED_HP_3 = 203575
VD_HEATING_TOTAL_LOW_CONSUMED_HP_3 = 3575
VD_HEATING_TOTAL_CONSUMED_HP_3 = 103575
VD_HEATING_TOTAL_HI_CONSUMED_HP_3 = 3576
VD_DHW_DAY_CONSUMED_HP_3 = 3577
VD_DHW_DAY_AND_TOTAL_CONSUMED_HP_3 = 203578
VD_DHW_TOTAL_LOW_CONSUMED_HP_3 = 3578
VD_DHW_TOTAL_CONSUMED_HP_3 = 103578
VD_DHW_TOTAL_HI_CONSUMED_HP_3 = 3579
VD_1_HEATING_HP_3 = 3580
VD_2_HEATING_HP_3 = 3581
VD_1_2_HEATING_HP_3 = 3582
VD_1_DHW_HP_3 = 3583
VD_2_DHW_HP_3 = 3584
VD_1_2_DHW_HP_3 = 3585
VD_COOLING_HP_3 = 3586
WPM_SYSTEM_VALUES_REGISTERS = {
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_FE7: ModbusRegister(
address=501, name="ACTUAL TEMPERATURE FE7", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_FE7
),
WpmSystemValuesRegisters.SET_TEMPERATURE_FE7: ModbusRegister(address=502, name="SET TEMPERATURE FE7", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_FE7),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_FEK: ModbusRegister(
address=503, name="ACTUAL TEMPERATURE FEK", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_FEK
),
WpmSystemValuesRegisters.SET_TEMPERATURE_FEK: ModbusRegister(address=504, name="SET TEMPERATURE FEK", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_FEK),
WpmSystemValuesRegisters.RELATIVE_HUMIDITY: ModbusRegister(address=505, name="RELATIVE HUMIDITY", unit="%", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RELATIVE_HUMIDITY),
WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE: ModbusRegister(
address=506, name="DEW POINT TEMPERATURE", unit="°C", min=-40.0, max=30.0, data_type=2, key=WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE
),
WpmSystemValuesRegisters.OUTSIDE_TEMPERATURE: ModbusRegister(
address=507, name="OUTSIDE TEMPERATURE", unit="°C", min=-60.0, max=80.0, data_type=2, key=WpmSystemValuesRegisters.OUTSIDE_TEMPERATURE
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_HK_1: ModbusRegister(
address=508, name="ACTUAL TEMPERATURE HK 1", unit="°C", min=0.0, max=40.0, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_HK_1
),
WpmSystemValuesRegisters.SET_TEMPERATURE_HK_1_WPM3I: ModbusRegister(
address=509, name="SET TEMPERATURE HK 1", unit="°C", min=0.0, max=65.0, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_HK_1_WPM3I
),
WpmSystemValuesRegisters.SET_TEMPERATURE_HK_1: ModbusRegister(
address=510, name="SET TEMPERATURE HK 1", unit="°C", min=0.0, max=40.0, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_HK_1
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_HK_2: ModbusRegister(
address=511, name="ACTUAL TEMPERATURE HK 2", unit="°C", min=0.0, max=90.0, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_HK_2
),
WpmSystemValuesRegisters.SET_TEMPERATURE_HK_2: ModbusRegister(
address=512, name="SET TEMPERATURE HK 2", unit="°C", min=0.0, max=65.0, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_HK_2
),
WpmSystemValuesRegisters.ACTUAL_FLOW_TEMPERATURE_WP: ModbusRegister(
address=513, name="ACTUAL FLOW TEMPERATURE WP", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_FLOW_TEMPERATURE_WP
),
WpmSystemValuesRegisters.ACTUAL_FLOW_TEMPERATURE_NHZ: ModbusRegister(
address=514, name="ACTUAL FLOW TEMPERATURE NHZ", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_FLOW_TEMPERATURE_NHZ
),
WpmSystemValuesRegisters.ACTUAL_FLOW_TEMPERATURE: ModbusRegister(
address=515, name="ACTUAL FLOW TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_FLOW_TEMPERATURE
),
WpmSystemValuesRegisters.ACTUAL_RETURN_TEMPERATURE: ModbusRegister(
address=516, name="ACTUAL RETURN TEMPERATURE", unit="°C", min=0.0, max=90.0, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_RETURN_TEMPERATURE
),
WpmSystemValuesRegisters.SET_FIXED_TEMPERATURE: ModbusRegister(
address=517, name="SET FIXED TEMPERATURE", unit="°C", min=20.0, max=50.0, data_type=2, key=WpmSystemValuesRegisters.SET_FIXED_TEMPERATURE
),
WpmSystemValuesRegisters.ACTUAL_BUFFER_TEMPERATURE: ModbusRegister(
address=518, name="ACTUAL BUFFER TEMPERATURE", unit="°C", min=0.0, max=90.0, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_BUFFER_TEMPERATURE
),
WpmSystemValuesRegisters.SET_BUFFER_TEMPERATURE: ModbusRegister(
address=519, name="SET BUFFER TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_BUFFER_TEMPERATURE
),
WpmSystemValuesRegisters.HEATING_PRESSURE: ModbusRegister(address=520, name="HEATING PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.HEATING_PRESSURE),
WpmSystemValuesRegisters.FLOW_RATE: ModbusRegister(address=521, name="FLOW RATE", unit="l/min", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.FLOW_RATE),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_DHW: ModbusRegister(
address=522, name="ACTUAL TEMPERATURE DHW", unit="°C", min=10.0, max=65.0, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_DHW
),
WpmSystemValuesRegisters.SET_TEMPERATURE_DHW: ModbusRegister(address=523, name="SET TEMPERATURE DHW", unit="°C", min=10.0, max=65.0, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_DHW),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_FAN: ModbusRegister(
address=524, name="ACTUAL TEMPERATURE FAN", unit="K", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_FAN
),
WpmSystemValuesRegisters.SET_TEMPERATURE_FAN: ModbusRegister(address=525, name="SET TEMPERATURE FAN", unit="K", min=7.0, max=25.0, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_FAN),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_AREA: ModbusRegister(
address=526, name="ACTUAL TEMPERATURE AREA", unit="K", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_AREA
),
WpmSystemValuesRegisters.SET_TEMPERATURE_AREA: ModbusRegister(
address=527, name="SET TEMPERATURE AREA", unit="K", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_AREA
),
WpmSystemValuesRegisters.COLLECTOR_TEMPERATURE: ModbusRegister(
address=528, name="COLLECTOR TEMPERATURE", unit="°C", min=0.0, max=90.0, data_type=2, key=WpmSystemValuesRegisters.COLLECTOR_TEMPERATURE
),
WpmSystemValuesRegisters.CYLINDER_TEMPERATURE: ModbusRegister(
address=529, name="CYLINDER TEMPERATURE", unit="°C", min=0.0, max=90.0, data_type=2, key=WpmSystemValuesRegisters.CYLINDER_TEMPERATURE
),
WpmSystemValuesRegisters.RUNTIME: ModbusRegister(address=530, name="RUNTIME", unit="h", min=None, max=None, data_type=6, key=WpmSystemValuesRegisters.RUNTIME),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_EXTERNAL: ModbusRegister(
address=531, name="ACTUAL TEMPERATURE EXTERNAL", unit="°C", min=10.0, max=90.0, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_EXTERNAL
),
WpmSystemValuesRegisters.SET_TEMPERATURE_EXTERNAL: ModbusRegister(
address=532, name="SET TEMPERATURE EXTERNAL", unit="K", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_EXTERNAL
),
WpmSystemValuesRegisters.APPLICATION_LIMIT_HZG: ModbusRegister(
address=533, name="APPLICATION LIMIT HZG", unit="°C", min=-40.0, max=40.0, data_type=2, key=WpmSystemValuesRegisters.APPLICATION_LIMIT_HZG
),
WpmSystemValuesRegisters.APPLICATION_LIMIT_WW: ModbusRegister(
address=534, name="APPLICATION LIMIT WW", unit="°C", min=-40.0, max=40.0, data_type=2, key=WpmSystemValuesRegisters.APPLICATION_LIMIT_WW
),
WpmSystemValuesRegisters.RUNTIME_EHS: ModbusRegister(address=535, name="RUNTIME", unit="h", min=None, max=None, data_type=6, key=WpmSystemValuesRegisters.RUNTIME_EHS),
WpmSystemValuesRegisters.SOURCE_TEMPERATURE: ModbusRegister(address=536, name="SOURCE TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SOURCE_TEMPERATURE),
WpmSystemValuesRegisters.MIN_SOURCE_TEMPERATURE: ModbusRegister(
address=537, name="MIN SOURCE TEMPERATURE", unit="°C", min=-10.0, max=10.0, data_type=2, key=WpmSystemValuesRegisters.MIN_SOURCE_TEMPERATURE
),
WpmSystemValuesRegisters.SOURCE_PRESSURE: ModbusRegister(address=538, name="SOURCE PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.SOURCE_PRESSURE),
WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE: ModbusRegister(address=539, name="HOT GAS TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE),
WpmSystemValuesRegisters.HIGH_PRESSURE: ModbusRegister(address=540, name="HIGH PRESSURE", unit="bar", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HIGH_PRESSURE),
WpmSystemValuesRegisters.LOW_PRESSURE: ModbusRegister(address=541, name="LOW PRESSURE", unit="bar", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.LOW_PRESSURE),
WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP1: ModbusRegister(
address=542, name="RETURN TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP1
),
WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP1: ModbusRegister(address=543, name="FLOW TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP1),
WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP1: ModbusRegister(
address=544, name="HOT GAS TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP1
),
WpmSystemValuesRegisters.LOW_PRESSURE_HP1: ModbusRegister(address=545, name="LOW PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.LOW_PRESSURE_HP1),
WpmSystemValuesRegisters.MEAN_PRESSURE_HP1: ModbusRegister(address=546, name="MEAN PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.MEAN_PRESSURE_HP1),
WpmSystemValuesRegisters.HIGH_PRESSURE_HP1: ModbusRegister(address=547, name="HIGH PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.HIGH_PRESSURE_HP1),
WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP1: ModbusRegister(
address=548, name="WP WATER FLOW RATE", unit="l/min", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP1
),
WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP2: ModbusRegister(
address=549, name="RETURN TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP2
),
WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP2: ModbusRegister(address=550, name="FLOW TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP2),
WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP2: ModbusRegister(
address=551, name="HOT GAS TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP2
),
WpmSystemValuesRegisters.LOW_PRESSURE_HP2: ModbusRegister(address=552, name="LOW PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.LOW_PRESSURE_HP2),
WpmSystemValuesRegisters.MEAN_PRESSURE_HP2: ModbusRegister(address=553, name="MEAN PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.MEAN_PRESSURE_HP2),
WpmSystemValuesRegisters.HIGH_PRESSURE_HP2: ModbusRegister(address=554, name="HIGH PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.HIGH_PRESSURE_HP2),
WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP2: ModbusRegister(
address=555, name="WP WATER FLOW RATE", unit="l/min", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP2
),
WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP3: ModbusRegister(
address=556, name="RETURN TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP3
),
WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP3: ModbusRegister(address=557, name="FLOW TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP3),
WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP3: ModbusRegister(
address=558, name="HOT GAS TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP3
),
WpmSystemValuesRegisters.LOW_PRESSURE_HP3: ModbusRegister(address=559, name="LOW PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.LOW_PRESSURE_HP3),
WpmSystemValuesRegisters.MEAN_PRESSURE_HP3: ModbusRegister(address=560, name="MEAN PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.MEAN_PRESSURE_HP3),
WpmSystemValuesRegisters.HIGH_PRESSURE_HP3: ModbusRegister(address=561, name="HIGH PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.HIGH_PRESSURE_HP3),
WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP3: ModbusRegister(
address=562, name="WP WATER FLOW RATE", unit="l/min", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP3
),
WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP4: ModbusRegister(
address=563, name="RETURN TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP4
),
WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP4: ModbusRegister(address=564, name="FLOW TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP4),
WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP4: ModbusRegister(
address=565, name="HOT GAS TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP4
),
WpmSystemValuesRegisters.LOW_PRESSURE_HP4: ModbusRegister(address=566, name="LOW PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.LOW_PRESSURE_HP4),
WpmSystemValuesRegisters.MEAN_PRESSURE_HP4: ModbusRegister(address=567, name="MEAN PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.MEAN_PRESSURE_HP4),
WpmSystemValuesRegisters.HIGH_PRESSURE_HP4: ModbusRegister(address=568, name="HIGH PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.HIGH_PRESSURE_HP4),
WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP4: ModbusRegister(
address=569, name="WP WATER FLOW RATE", unit="l/min", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP4
),
WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP5: ModbusRegister(
address=570, name="RETURN TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP5
),
WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP5: ModbusRegister(address=571, name="FLOW TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP5),
WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP5: ModbusRegister(
address=572, name="HOT GAS TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HOT_GAS_TEMPERATURE_HP5
),
WpmSystemValuesRegisters.LOW_PRESSURE_HP5: ModbusRegister(address=573, name="LOW PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.LOW_PRESSURE_HP5),
WpmSystemValuesRegisters.MEAN_PRESSURE_HP5: ModbusRegister(address=574, name="MEAN PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.MEAN_PRESSURE_HP5),
WpmSystemValuesRegisters.HIGH_PRESSURE_HP5: ModbusRegister(address=575, name="HIGH PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.HIGH_PRESSURE_HP5),
WpmSystemValuesRegisters.WP_WATER_RATE_HP5: ModbusRegister(address=576, name="WP WATER RATE", unit="l/min", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.WP_WATER_RATE_HP5),
WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP6: ModbusRegister(
address=577, name="RETURN TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RETURN_TEMPERATURE_HP6
),
WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP6: ModbusRegister(address=578, name="FLOW TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.FLOW_TEMPERATURE_HP6),
WpmSystemValuesRegisters.HOT_GAS_HP6: ModbusRegister(address=579, name="HOT GAS", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.HOT_GAS_HP6),
WpmSystemValuesRegisters.LOW_PRESSURE_HP6: ModbusRegister(address=580, name="LOW PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.LOW_PRESSURE_HP6),
WpmSystemValuesRegisters.MEAN_PRESSURE_HP6: ModbusRegister(address=581, name="MEAN PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.MEAN_PRESSURE_HP6),
WpmSystemValuesRegisters.HIGH_PRESSURE_HP6: ModbusRegister(address=582, name="HIGH PRESSURE", unit="bar", min=None, max=None, data_type=7, key=WpmSystemValuesRegisters.HIGH_PRESSURE_HP6),
WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP6: ModbusRegister(
address=583, name="WP WATER FLOW RATE", unit="l/min", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.WP_WATER_FLOW_RATE_HP6
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC1: ModbusRegister(
address=584, name="ACTUAL TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC1
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC1: ModbusRegister(
address=585, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC1
),
WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC1: ModbusRegister(
address=586, name="RELATIVE HUMIDITY", unit="%", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC1
),
WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC1: ModbusRegister(
address=587, name="DEW POINT TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC1
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC2: ModbusRegister(
address=588, name="ACTUAL TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC2
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC2: ModbusRegister(
address=589, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC2
),
WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC2: ModbusRegister(
address=590, name="RELATIVE HUMIDITY", unit="%", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC2
),
WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC2: ModbusRegister(
address=591, name="DEW POINT TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC2
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC3: ModbusRegister(
address=592, name="ACTUAL TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC3
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC3: ModbusRegister(
address=593, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC3
),
WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC3: ModbusRegister(
address=594, name="RELATIVE HUMIDITY", unit="%", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC3
),
WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC3: ModbusRegister(
address=595, name="DEW POINT TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC3
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC4: ModbusRegister(
address=596, name="ACTUAL TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC4
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC4: ModbusRegister(
address=597, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC4
),
WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC4: ModbusRegister(
address=598, name="RELATIVE HUMIDITY", unit="%", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC4
),
WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC4: ModbusRegister(
address=599, name="DEW POINT TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC4
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC5: ModbusRegister(
address=600, name="ACTUAL TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_ROOM_TEMP_HC5
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC5: ModbusRegister(
address=601, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_HC5
),
WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC5: ModbusRegister(
address=602, name="RELATIVE HUMIDITY", unit="%", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.RELATIVE_HUMIDITY_ROOM_TEMP_HC5
),
WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC5: ModbusRegister(
address=603, name="DEW POINT TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.DEW_POINT_TEMPERATURE_ROOM_TEMP_HC5
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING1: ModbusRegister(
address=604, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING1
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING2: ModbusRegister(
address=605, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING2
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING3: ModbusRegister(
address=606, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING3
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING4: ModbusRegister(
address=607, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING4
),
WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING5: ModbusRegister(
address=608, name="SET TEMPERATURE", unit="°C", min=None, max=None, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_ROOM_TEMP_COOLING5
),
WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_HK_3: ModbusRegister(
address=609, name="ACTUAL TEMPERATURE HK 3", unit="°C", min=0.0, max=90.0, data_type=2, key=WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_HK_3
),
WpmSystemValuesRegisters.SET_TEMPERATURE_HK_3: ModbusRegister(
address=610, name="SET TEMPERATURE HK 3", unit="°C", min=0.0, max=65.0, data_type=2, key=WpmSystemValuesRegisters.SET_TEMPERATURE_HK_3
),
}
WPM_SYSTEM_PARAMETERS_REGISTERS = {
WpmSystemParametersRegisters.OPERATING_MODE: ModbusRegister(address=1501, name="OPERATING MODE", unit="", min=0.0, max=5.0, data_type=8, key=WpmSystemParametersRegisters.OPERATING_MODE),
WpmSystemParametersRegisters.COMFORT_TEMPERATURE_HK_1: ModbusRegister(
address=1502, name="COMFORT TEMPERATURE", unit="°C", min=5.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.COMFORT_TEMPERATURE_HK_1
),
WpmSystemParametersRegisters.ECO_TEMPERATURE_HK_1: ModbusRegister(
address=1503, name="ECO TEMPERATURE", unit="°C", min=5.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.ECO_TEMPERATURE_HK_1
),
WpmSystemParametersRegisters.HEATING_CURVE_RISE_HK_1: ModbusRegister(
address=1504, name="HEATING CURVE RISE", unit="", min=0.0, max=3.0, data_type=7, key=WpmSystemParametersRegisters.HEATING_CURVE_RISE_HK_1
),
WpmSystemParametersRegisters.COMFORT_TEMPERATURE_HK_2: ModbusRegister(
address=1505, name="COMFORT TEMPERATURE", unit="°C", min=5.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.COMFORT_TEMPERATURE_HK_2
),
WpmSystemParametersRegisters.ECO_TEMPERATURE_HK_2: ModbusRegister(
address=1506, name="ECO TEMPERATURE", unit="°C", min=5.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.ECO_TEMPERATURE_HK_2
),
WpmSystemParametersRegisters.HEATING_CURVE_RISE_HK_2: ModbusRegister(
address=1507, name="HEATING CURVE RISE", unit="", min=0.0, max=3.0, data_type=7, key=WpmSystemParametersRegisters.HEATING_CURVE_RISE_HK_2
),
WpmSystemParametersRegisters.FIXED_VALUE_OPERATION: ModbusRegister(
address=1508, name="FIXED VALUE OPERATION", unit="°C", min=20.0, max=70.0, data_type=2, key=WpmSystemParametersRegisters.FIXED_VALUE_OPERATION
),
WpmSystemParametersRegisters.DUAL_MODE_TEMP_HZG: ModbusRegister(
address=1509, name="DUAL MODE TEMP HZG", unit="°C", min=-40.0, max=40.0, data_type=2, key=WpmSystemParametersRegisters.DUAL_MODE_TEMP_HZG
),
WpmSystemParametersRegisters.COMFORT_TEMPERATURE: ModbusRegister(
address=1510, name="COMFORT TEMPERATURE", unit="°C", min=10.0, max=60.0, data_type=2, key=WpmSystemParametersRegisters.COMFORT_TEMPERATURE
),
WpmSystemParametersRegisters.ECO_TEMPERATURE: ModbusRegister(address=1511, name="ECO TEMPERATURE", unit="°C", min=10.0, max=60.0, data_type=2, key=WpmSystemParametersRegisters.ECO_TEMPERATURE),
WpmSystemParametersRegisters.DHW_STAGES: ModbusRegister(address=1512, name="DHW STAGES", unit="", min=0.0, max=6.0, data_type=8, key=WpmSystemParametersRegisters.DHW_STAGES),
WpmSystemParametersRegisters.DUAL_MODE_TEMP_WW: ModbusRegister(
address=1513, name="DUAL MODE TEMP WW", unit="°C", min=-40.0, max=40.0, data_type=2, key=WpmSystemParametersRegisters.DUAL_MODE_TEMP_WW
),
WpmSystemParametersRegisters.SET_FLOW_TEMPERATURE_AREA: ModbusRegister(
address=1514, name="SET FLOW TEMPERATURE", unit="°C", min=7.0, max=25.0, data_type=2, key=WpmSystemParametersRegisters.SET_FLOW_TEMPERATURE_AREA
),
WpmSystemParametersRegisters.FLOW_TEMP_HYSTERESIS_AREA: ModbusRegister(
address=1515, name="FLOW TEMP HYSTERESIS", unit="K", min=1.0, max=5.0, data_type=2, key=WpmSystemParametersRegisters.FLOW_TEMP_HYSTERESIS_AREA
),
WpmSystemParametersRegisters.SET_ROOM_TEMPERATURE_AREA: ModbusRegister(
address=1516, name="SET ROOM TEMPERATURE", unit="°C", min=20.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.SET_ROOM_TEMPERATURE_AREA
),
WpmSystemParametersRegisters.SET_FLOW_TEMPERATURE_FAN: ModbusRegister(
address=1517, name="SET FLOW TEMPERATURE", unit="°C", min=7.0, max=25.0, data_type=2, key=WpmSystemParametersRegisters.SET_FLOW_TEMPERATURE_FAN
),
WpmSystemParametersRegisters.FLOW_TEMP_HYSTERESIS_FAN: ModbusRegister(
address=1518, name="FLOW TEMP HYSTERESIS", unit="K", min=1.0, max=5.0, data_type=2, key=WpmSystemParametersRegisters.FLOW_TEMP_HYSTERESIS_FAN
),
WpmSystemParametersRegisters.SET_ROOM_TEMPERATURE_FAN: ModbusRegister(
address=1519, name="SET ROOM TEMPERATURE", unit="°C", min=20.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.SET_ROOM_TEMPERATURE_FAN
),
WpmSystemParametersRegisters.RESET: ModbusRegister(address=1520, name="RESET", unit="", min=1.0, max=3.0, data_type=6, key=WpmSystemParametersRegisters.RESET),
WpmSystemParametersRegisters.RESTART_ISG: ModbusRegister(address=1521, name="RESTART ISG", unit="", min=0.0, max=2.0, data_type=6, key=WpmSystemParametersRegisters.RESTART_ISG),
WpmSystemParametersRegisters.COMFORT_TEMPERATURE_HK_3: ModbusRegister(
address=1550, name="COMFORT TEMPERATURE", unit="°C", min=5.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.COMFORT_TEMPERATURE_HK_3
),
WpmSystemParametersRegisters.ECO_TEMPERATURE_HK_3: ModbusRegister(
address=1551, name="ECO TEMPERATURE", unit="°C", min=5.0, max=30.0, data_type=2, key=WpmSystemParametersRegisters.ECO_TEMPERATURE_HK_3
),
WpmSystemParametersRegisters.HEATING_CURVE_RISE_HK_3: ModbusRegister(
address=1552, name="HEATING CURVE RISE", unit="", min=0.0, max=3.0, data_type=7, key=WpmSystemParametersRegisters.HEATING_CURVE_RISE_HK_3
),
}
WPM_SYSTEM_STATE_REGISTERS = {
WpmSystemStateRegisters.OPERATING_STATUS: ModbusRegister(address=2501, name="OPERATING STATUS", unit="", min=None, max=None, data_type=6, key=WpmSystemStateRegisters.OPERATING_STATUS),
WpmSystemStateRegisters.POWER_OFF: ModbusRegister(address=2502, name="POWER OFF", unit="", min=None, max=None, data_type=8, key=WpmSystemStateRegisters.POWER_OFF),
WpmSystemStateRegisters.OPERATING_STATUS_WPM_3: ModbusRegister(address=2503, name="OPERATING STATUS", unit="", min=None, max=None, data_type=6, key=WpmSystemStateRegisters.OPERATING_STATUS_WPM_3),
WpmSystemStateRegisters.FAULT_STATUS: ModbusRegister(address=2504, name="FAULT STATUS", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.FAULT_STATUS),
WpmSystemStateRegisters.BUS_STATUS: ModbusRegister(address=2505, name="BUS STATUS", unit="", min=-4.0, max=0.0, data_type=6, key=WpmSystemStateRegisters.BUS_STATUS),
WpmSystemStateRegisters.DEFROST_INITIATED: ModbusRegister(address=2506, name="DEFROST INITIATED", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.DEFROST_INITIATED),
WpmSystemStateRegisters.ACTIVE_ERROR: ModbusRegister(address=2507, name="ACTIVE ERROR", unit="", min=0.0, max=65535.0, data_type=6, key=WpmSystemStateRegisters.ACTIVE_ERROR),
WpmSystemStateRegisters.MESSAGE_NUMBER: ModbusRegister(address=2508, name="MESSAGE NUMBER", unit="", min=0.0, max=65535.0, data_type=6, key=WpmSystemStateRegisters.MESSAGE_NUMBER),
WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_1: ModbusRegister(
address=2509, name="HEATING CIRCUIT PUMP 1", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_1
),
WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_2: ModbusRegister(
address=2510, name="HEATING CIRCUIT PUMP 2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_2
),
WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_3: ModbusRegister(
address=2511, name="HEATING CIRCUIT PUMP 3", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_3
),
WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_1: ModbusRegister(
address=2512, name="BUFFER CHARGING PUMP 1", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_1
),
WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_2: ModbusRegister(
address=2513, name="BUFFER CHARGING PUMP 2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_2
),
WpmSystemStateRegisters.DHW_CHARGING_PUMP: ModbusRegister(address=2514, name="DHW CHARGING PUMP", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.DHW_CHARGING_PUMP),
WpmSystemStateRegisters.SOURCE_PUMP: ModbusRegister(address=2515, name="SOURCE PUMP", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.SOURCE_PUMP),
WpmSystemStateRegisters.FAULT_OUTPUT: ModbusRegister(address=2516, name="FAULT OUTPUT", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.FAULT_OUTPUT),
WpmSystemStateRegisters.DHW_CIRCULATION_PUMP: ModbusRegister(address=2517, name="DHW CIRCULATION PUMP", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.DHW_CIRCULATION_PUMP),
WpmSystemStateRegisters.WE_2_DHW: ModbusRegister(address=2518, name="WE 2 DHW", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.WE_2_DHW),
WpmSystemStateRegisters.WE_2_HEATING: ModbusRegister(address=2519, name="WE 2 HEATING", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.WE_2_HEATING),
WpmSystemStateRegisters.COOLING_MODE: ModbusRegister(address=2520, name="COOLING MODE", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.COOLING_MODE),
WpmSystemStateRegisters.MIXER_OPEN_HC2: ModbusRegister(address=2521, name="MIXER OPEN HC2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_OPEN_HC2),
WpmSystemStateRegisters.MIXER_CLOSE_HC2: ModbusRegister(address=2522, name="MIXER CLOSE HC2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_CLOSE_HC2),
WpmSystemStateRegisters.MIXER_OPEN_HC3: ModbusRegister(address=2523, name="MIXER OPEN HC3", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_OPEN_HC3),
WpmSystemStateRegisters.MIXER_CLOSE_HC3: ModbusRegister(address=2524, name="MIXER CLOSE HC3", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_CLOSE_HC3),
WpmSystemStateRegisters.NHZ_1: ModbusRegister(address=2525, name="NHZ 1 ", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.NHZ_1),
WpmSystemStateRegisters.NHZ_2: ModbusRegister(address=2526, name="NHZ 2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.NHZ_2),
WpmSystemStateRegisters.NHZ_1_2: ModbusRegister(address=2527, name="NHZ 1 2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.NHZ_1_2),
WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_4: ModbusRegister(
address=2528, name="HEATING CIRCUIT PUMP 4", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_4
),
WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_5: ModbusRegister(
address=2529, name="HEATING CIRCUIT PUMP 5", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.HEATING_CIRCUIT_PUMP_5
),
WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_3: ModbusRegister(
address=2530, name="BUFFER CHARGING PUMP 3", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_3
),
WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_4: ModbusRegister(
address=2531, name="BUFFER CHARGING PUMP 4", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_4
),
WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_5: ModbusRegister(
address=2532, name="BUFFER CHARGING PUMP 5", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_5
),
WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_6: ModbusRegister(
address=2533, name="BUFFER CHARGING PUMP 6", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.BUFFER_CHARGING_PUMP_6
),
WpmSystemStateRegisters.DIFF_CONTROLLER_PUMP_1: ModbusRegister(
address=2534, name="DIFF CONTROLLER PUMP 1", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.DIFF_CONTROLLER_PUMP_1
),
WpmSystemStateRegisters.DIFF_CONTROLLER_PUMP_2: ModbusRegister(
address=2535, name="DIFF CONTROLLER PUMP 2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.DIFF_CONTROLLER_PUMP_2
),
WpmSystemStateRegisters.POOL_PUMP_PRIMARY: ModbusRegister(address=2536, name="POOL PUMP PRIMARY", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.POOL_PUMP_PRIMARY),
WpmSystemStateRegisters.POOL_PUMP_SECONDARY: ModbusRegister(address=2537, name="POOL PUMP SECONDARY", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.POOL_PUMP_SECONDARY),
WpmSystemStateRegisters.MIXER_OPEN_HC4: ModbusRegister(address=2538, name="MIXER OPEN HC4", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_OPEN_HC4),
WpmSystemStateRegisters.MIXER_CLOSE_HC4: ModbusRegister(address=2539, name="MIXER CLOSE HC4", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_CLOSE_HC4),
WpmSystemStateRegisters.MIXER_OPEN_HC5: ModbusRegister(address=2540, name="MIXER OPEN HC5", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_OPEN_HC5),
WpmSystemStateRegisters.MIXER_CLOSE_HC5: ModbusRegister(address=2541, name="MIXER CLOSE HC5", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.MIXER_CLOSE_HC5),
WpmSystemStateRegisters.COMPRESSOR_1: ModbusRegister(address=2542, name="COMPRESSOR 1", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.COMPRESSOR_1),
WpmSystemStateRegisters.COMPRESSOR_2: ModbusRegister(address=2543, name="COMPRESSOR 2", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.COMPRESSOR_2),
WpmSystemStateRegisters.COMPRESSOR_3: ModbusRegister(address=2544, name="COMPRESSOR 3", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.COMPRESSOR_3),
WpmSystemStateRegisters.COMPRESSOR_4: ModbusRegister(address=2545, name="COMPRESSOR 4", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.COMPRESSOR_4),
WpmSystemStateRegisters.COMPRESSOR_5: ModbusRegister(address=2546, name="COMPRESSOR 5", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.COMPRESSOR_5),
WpmSystemStateRegisters.COMPRESSOR_6: ModbusRegister(address=2547, name="COMPRESSOR 6", unit="", min=0.0, max=1.0, data_type=6, key=WpmSystemStateRegisters.COMPRESSOR_6),
}
WPM_ENERGY_DATA_REGISTERS = {
WpmEnergyDataRegisters.VD_HEATING_DAY: ModbusRegister(address=3501, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW: ModbusRegister(address=3502, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI: ModbusRegister(address=3503, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI),
WpmEnergyDataRegisters.VD_DHW_DAY: ModbusRegister(address=3504, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW: ModbusRegister(address=3505, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI: ModbusRegister(address=3506, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI),
WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_LOW: ModbusRegister(address=3507, name="NHZ HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_LOW),
WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_HI: ModbusRegister(address=3508, name="NHZ HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_HI),
WpmEnergyDataRegisters.NHZ_DHW_TOTAL_LOW: ModbusRegister(address=3509, name="NHZ DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_DHW_TOTAL_LOW),
WpmEnergyDataRegisters.NHZ_DHW_TOTAL_HI: ModbusRegister(address=3510, name="NHZ DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_DHW_TOTAL_HI),
WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED: ModbusRegister(
address=3511, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED: ModbusRegister(
address=3512, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED: ModbusRegister(
address=3513, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED
),
WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMED: ModbusRegister(address=3514, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMED),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED: ModbusRegister(
address=3515, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED
),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED: ModbusRegister(
address=3516, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED
),
WpmEnergyDataRegisters.VD_HEATING: ModbusRegister(address=3517, name="VD HEATING", unit="h", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING),
WpmEnergyDataRegisters.VD_DHW: ModbusRegister(address=3518, name="VD DHW", unit="h", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW),
WpmEnergyDataRegisters.VD_COOLING: ModbusRegister(address=3519, name="VD COOLING", unit="h", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_COOLING),
WpmEnergyDataRegisters.NHZ_1: ModbusRegister(address=3520, name="NHZ 1", unit="h", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_1),
WpmEnergyDataRegisters.NHZ_2: ModbusRegister(address=3521, name="NHZ 2", unit="h", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_2),
WpmEnergyDataRegisters.NHZ_1_2: ModbusRegister(address=3522, name="NHZ 1_2", unit="h", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_1_2),
WpmEnergyDataRegisters.VD_HEATING_DAY_HP_1: ModbusRegister(address=3523, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY_HP_1),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_HP_1: ModbusRegister(
address=3524, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_HP_1
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_HP_1: ModbusRegister(
address=3525, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_HP_1
),
WpmEnergyDataRegisters.VD_DHW_DAY_HP_1: ModbusRegister(address=3526, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY_HP_1),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_HP_1: ModbusRegister(address=3527, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_HP_1),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_HP_1: ModbusRegister(address=3528, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_HP_1),
WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_LOW_HP_1: ModbusRegister(
address=3529, name="NHZ HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_LOW_HP_1
),
WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_HI_HP_1: ModbusRegister(
address=3530, name="NHZ HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_HEATING_TOTAL_HI_HP_1
),
WpmEnergyDataRegisters.NHZ_DHW_TOTAL_LOW_HP_1: ModbusRegister(address=3531, name="NHZ DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_DHW_TOTAL_LOW_HP_1),
WpmEnergyDataRegisters.NHZ_DHW_TOTAL_HI_HP_1: ModbusRegister(address=3532, name="NHZ DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.NHZ_DHW_TOTAL_HI_HP_1),
WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED_HP_1: ModbusRegister(
address=3533, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED_HP_1
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED_HP_1: ModbusRegister(
address=3534, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED_HP_1
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED_HP_1: ModbusRegister(
address=3535, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED_HP_1
),
WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMEDHP_1: ModbusRegister(address=3536, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMEDHP_1),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED_HP_1: ModbusRegister(
address=3537, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED_HP_1
),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED_HP_1: ModbusRegister(
address=3538, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED_HP_1
),
WpmEnergyDataRegisters.VD_1_HEATING_HP_1: ModbusRegister(address=3539, name="VD 1 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_HEATING_HP_1),
WpmEnergyDataRegisters.VD_2_HEATING_HP_1: ModbusRegister(address=3540, name="VD 2 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_2_HEATING_HP_1),
WpmEnergyDataRegisters.VD_1_2_HEATING_HP_1: ModbusRegister(address=3541, name="VD 1_2 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_2_HEATING_HP_1),
WpmEnergyDataRegisters.VD_1_DHW_HP_1: ModbusRegister(address=3542, name="VD 1 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_DHW_HP_1),
WpmEnergyDataRegisters.VD_2_DHW_HP_1: ModbusRegister(address=3543, name="VD 2 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_2_DHW_HP_1),
WpmEnergyDataRegisters.VD_1_2_DHW_HP_1: ModbusRegister(address=3544, name="VD 1_2 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_2_DHW_HP_1),
WpmEnergyDataRegisters.VD_COOLING_x_HP_1: ModbusRegister(address=3545, name="VD COOLING x", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_COOLING_x_HP_1),
WpmEnergyDataRegisters.NHZ_1_REHEATING: ModbusRegister(address=3546, name="NHZ 1", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.NHZ_1_REHEATING),
WpmEnergyDataRegisters.NHZ_2_REHEATING: ModbusRegister(address=3547, name="NHZ 2", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.NHZ_2_REHEATING),
WpmEnergyDataRegisters.NHZ_1_2_REHEATING: ModbusRegister(address=3548, name="NHZ 1_2", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.NHZ_1_2_REHEATING),
WpmEnergyDataRegisters.VD_HEATING_DAY_HP_2: ModbusRegister(address=3549, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY_HP_2),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_HP_2: ModbusRegister(
address=3550, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_HP_2
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_HP_2: ModbusRegister(
address=3551, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_HP_2
),
WpmEnergyDataRegisters.VD_DHW_DAY_HP_2: ModbusRegister(address=3552, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY_HP_2),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_HP_2: ModbusRegister(address=3553, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_HP_2),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_HP_2: ModbusRegister(address=3554, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_HP_2),
WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED_HP_2: ModbusRegister(
address=3555, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED_HP_2
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED_HP_2: ModbusRegister(
address=3556, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED_HP_2
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED_HP_2: ModbusRegister(
address=3557, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED_HP_2
),
WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMED_HP_2: ModbusRegister(
address=3558, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMED_HP_2
),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED_HP_2: ModbusRegister(
address=3559, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED_HP_2
),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED_HP_2: ModbusRegister(
address=3560, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED_HP_2
),
WpmEnergyDataRegisters.VD_1_HEATING_HP_2: ModbusRegister(address=3561, name="VD 1 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_HEATING_HP_2),
WpmEnergyDataRegisters.VD_2_HEATING_HP_2: ModbusRegister(address=3562, name="VD 2 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_2_HEATING_HP_2),
WpmEnergyDataRegisters.VD_1_2_HEATING_HP_2: ModbusRegister(address=3563, name="VD 1_2 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_2_HEATING_HP_2),
WpmEnergyDataRegisters.VD_1_DHW_HP_2: ModbusRegister(address=3564, name="VD 1 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_DHW_HP_2),
WpmEnergyDataRegisters.VD_2_DHW_HP_2: ModbusRegister(address=3565, name="VD 2 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_2_DHW_HP_2),
WpmEnergyDataRegisters.VD_1_2_DHW_HP_2: ModbusRegister(address=3566, name="VD 1_2 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_2_DHW_HP_2),
WpmEnergyDataRegisters.VD_COOLING_HP_2: ModbusRegister(address=3567, name="VD COOLING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_COOLING_HP_2),
WpmEnergyDataRegisters.VD_HEATING_DAY_HP_3: ModbusRegister(address=3568, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY_HP_3),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_HP_3: ModbusRegister(
address=3569, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_HP_3
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_HP_3: ModbusRegister(
address=3570, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_HP_3
),
WpmEnergyDataRegisters.VD_DHW_DAY_HP_3: ModbusRegister(address=3571, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY_HP_3),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_HP_3: ModbusRegister(address=3572, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_HP_3),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_HP_3: ModbusRegister(address=3573, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_HP_3),
WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED_HP_3: ModbusRegister(
address=3574, name="VD HEATING DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_DAY_CONSUMED_HP_3
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED_HP_3: ModbusRegister(
address=3575, name="VD HEATING TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_LOW_CONSUMED_HP_3
),
WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED_HP_3: ModbusRegister(
address=3576, name="VD HEATING TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_HEATING_TOTAL_HI_CONSUMED_HP_3
),
WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMED_HP_3: ModbusRegister(
address=3577, name="VD DHW DAY", unit="kWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_DAY_CONSUMED_HP_3
),
WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED_HP_3: ModbusRegister(
address=3578, name="VD DHW TOTAL", unit="kWh", min=0.0, max=999.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_LOW_CONSUMED_HP_3
),
WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED_HP_3: ModbusRegister(
address=3579, name="VD DHW TOTAL", unit="MWh", min=0.0, max=65535.0, data_type=6, key=WpmEnergyDataRegisters.VD_DHW_TOTAL_HI_CONSUMED_HP_3
),
WpmEnergyDataRegisters.VD_1_HEATING_HP_3: ModbusRegister(address=3580, name="VD 1 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_HEATING_HP_3),
WpmEnergyDataRegisters.VD_2_HEATING_HP_3: ModbusRegister(address=3581, name="VD 2 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_2_HEATING_HP_3),
WpmEnergyDataRegisters.VD_1_2_HEATING_HP_3: ModbusRegister(address=3582, name="VD 1_2 HEATING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_2_HEATING_HP_3),
WpmEnergyDataRegisters.VD_1_DHW_HP_3: ModbusRegister(address=3583, name="VD 1 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_DHW_HP_3),
WpmEnergyDataRegisters.VD_2_DHW_HP_3: ModbusRegister(address=3584, name="VD 2 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_2_DHW_HP_3),
WpmEnergyDataRegisters.VD_1_2_DHW_HP_3: ModbusRegister(address=3585, name="VD 1_2 DHW", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_1_2_DHW_HP_3),
WpmEnergyDataRegisters.VD_COOLING_HP_3: ModbusRegister(address=3586, name="VD COOLING", unit="h", min=None, max=None, data_type=6, key=WpmEnergyDataRegisters.VD_COOLING_HP_3),
}
class WpmStiebelEltronAPI(StiebelEltronAPI):
def __init__(self, host: str, port: int = 502, slave: int = 1) -> None:
super().__init__(
[
ModbusRegisterBlock(base_address=500, count=110, name="System Values", registers=WPM_SYSTEM_VALUES_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
ModbusRegisterBlock(base_address=1500, count=52, name="System Parameters", registers=WPM_SYSTEM_PARAMETERS_REGISTERS, register_type=RegisterType.HOLDING_REGISTER),
ModbusRegisterBlock(base_address=2500, count=47, name="System State", registers=WPM_SYSTEM_STATE_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
ModbusRegisterBlock(base_address=3500, count=86, name="Energy Data", registers=WPM_ENERGY_DATA_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
ModbusRegisterBlock(base_address=4000, count=3, name="Energy Management Settings", registers=ENERGY_MANAGEMENT_SETTINGS_REGISTERS, register_type=RegisterType.HOLDING_REGISTER),
ModbusRegisterBlock(base_address=5000, count=2, name="Energy System Information", registers=ENERGY_SYSTEM_INFORMATION_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
],
host,
port,
slave,
)
async def async_update(self):
"""Request current values from heat pump."""
await super().async_update()
for registerblock in self._register_blocks:
if registerblock.name == ENERGY_DATA_BLOCK_NAME:
registers = [r.value for r in WpmEnergyDataRegisters]
registers.sort()
for register in registers:
if register > VIRTUAL_REGISTER_OFFSET:
if register > VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET:
total_key = WpmEnergyDataRegisters(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET + VIRTUAL_REGISTER_OFFSET)
day_key = WpmEnergyDataRegisters(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET - 1)
total_value = self._data.get(total_key)
day_value = self._data.get(day_key)
if total_value is not None and day_value is not None:
prev_value = self._previous_data.get(WpmEnergyDataRegisters(register))
if prev_value is not None:
self._data[WpmEnergyDataRegisters(register)] = max(total_value + day_value, prev_value)
else:
self._data[WpmEnergyDataRegisters(register)] = total_value + day_value
else:
low_key = WpmEnergyDataRegisters(register - VIRTUAL_REGISTER_OFFSET)
high_key = WpmEnergyDataRegisters(register - VIRTUAL_REGISTER_OFFSET + 1)
high_value = self._data.get(high_key)
low_value = self._data.get(low_key)
if high_value is not None and low_value is not None:
self._data[WpmEnergyDataRegisters(register)] = high_value * 1000 + low_value
python-stiebel-eltron-0.2.0/scripts/ 0000775 0000000 0000000 00000000000 15036725112 0017451 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/scripts/gen.sh 0000775 0000000 0000000 00000000106 15036725112 0020556 0 ustar 00root root 0000000 0000000 #!/bin/sh
uv run scripts/generate.py
uvx ruff format pystiebeleltron
python-stiebel-eltron-0.2.0/scripts/generate.py 0000664 0000000 0000000 00000010773 15036725112 0021625 0 ustar 00root root 0000000 0000000 """Generate python files to access the stiebel eltron heat pumps."""
from pathlib import Path
import csv
from dataclasses import dataclass
from jinja2 import Environment, FileSystemLoader, Template, select_autoescape
from pystiebeleltron import RegisterType
ENERGY_DATA_BLOCK_NAME = "Energy Data"
@dataclass
class ModbusFile:
"""Register file class."""
name: str
path: Path
register_type: RegisterType
def python_name(name: str, suffix: str = "") -> str:
"""Generate a valid python variable name."""
if suffix == "":
result = name.strip()
else:
result = name + "_" + suffix.strip()
return result.replace(" ", "_")
def python_class_name(name: str) -> str:
"""Generate a valid python variable name."""
return name.replace(" ", "")
def float_or_none(value: str) -> float | None:
"""Calculate a float value or none."""
if value == "":
return None
return float(value)
def get_base_address(registers: list) -> int:
"""Get the base address from a register block."""
result = 35000
for register in registers:
result = min(result, int(register[0]))
return result - 1
def get_block_len(registers: list) -> int:
"""Get the base address from a register block."""
base = 35000
highest = 0
for register in registers:
base = min(base, int(register[0]))
highest = max(highest, int(register[0]))
return highest - base + 1
def generate_heatpump(
root_path: Path,
template: Template,
modbus_files: list[ModbusFile],
heatpump_type: str,
):
"""Generate the python file for a heat pump."""
register_blocks = []
for modbus_file in modbus_files:
with modbus_file.path.open("r") as f:
reader = csv.reader(f)
data = list(reader)
api_data = data[1:]
register_blocks.append(
{
"name": modbus_file.name,
"count": get_block_len(api_data),
"base_address": get_base_address(api_data),
"register_block": api_data,
"register_type": modbus_file.register_type,
}
)
generated_content = template.render(registers=register_blocks, heatpump_type=heatpump_type)
generated_path = root_path / f"pystiebeleltron/{heatpump_type.lower()}.py"
with generated_path.open("w") as f:
f.write(generated_content)
def main() -> None:
"""Generate the python files."""
root = Path.cwd()
scripts_path = Path(__file__).parent
env = Environment(
loader=FileSystemLoader(str(scripts_path / "templates")),
autoescape=select_autoescape(),
)
env.globals.update(python_name=python_name, python_class_name=python_class_name, float_or_none=float_or_none, ENERGY_DATA_BLOCK_NAME=ENERGY_DATA_BLOCK_NAME)
wpm_template = env.get_template("wpmtemplate.j2")
wpm_modbus_files = [
ModbusFile(
name="System Values",
path=root / "api/wpm_system_values.csv",
register_type=RegisterType.INPUT_REGISTER,
),
ModbusFile(
name="System Parameters",
path=root / "api/wpm_system_parameters.csv",
register_type=RegisterType.HOLDING_REGISTER,
),
ModbusFile(
name="System State",
path=root / "api/wpm_system_state.csv",
register_type=RegisterType.INPUT_REGISTER,
),
ModbusFile(
name="Energy Data",
path=root / "api/wpm_energy_data.csv",
register_type=RegisterType.INPUT_REGISTER,
),
]
generate_heatpump(root, wpm_template, wpm_modbus_files, "Wpm")
lwz_template = env.get_template("lwztemplate.j2")
lwz_modbus_files = [
ModbusFile(
name="System Values",
path=root / "api/lwz_system_values.csv",
register_type=RegisterType.INPUT_REGISTER,
),
ModbusFile(
name="System Parameters",
path=root / "api/lwz_system_parameters.csv",
register_type=RegisterType.HOLDING_REGISTER,
),
ModbusFile(
name="System State",
path=root / "api/lwz_system_state.csv",
register_type=RegisterType.INPUT_REGISTER,
),
ModbusFile(
name="Energy Data",
path=root / "api/lwz_energy_data.csv",
register_type=RegisterType.INPUT_REGISTER,
),
]
generate_heatpump(root, lwz_template, lwz_modbus_files, "Lwz")
if __name__ == "__main__":
main()
print("Done!")
python-stiebel-eltron-0.2.0/scripts/templates/ 0000775 0000000 0000000 00000000000 15036725112 0021447 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/scripts/templates/lwztemplate.j2 0000664 0000000 0000000 00000017241 15036725112 0024261 0 ustar 00root root 0000000 0000000 """Modbus api for stiebel eltron heat pumps. This file is generated. Do not modify it manually."""
from enum import Enum
from . import ModbusRegister, ModbusRegisterBlock, StiebelEltronAPI, IsgRegisters, RegisterType, ENERGY_DATA_BLOCK_NAME, VIRTUAL_REGISTER_OFFSET, VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET, ENERGY_MANAGEMENT_SETTINGS_REGISTERS, ENERGY_SYSTEM_INFORMATION_REGISTERS
{% for registerblock in registers %}
class {{heatpump_type}}{{python_class_name(registerblock["name"])}}Registers(IsgRegisters):
{% for register in registerblock["register_block"] %}
{{python_name(register[1], register[10])}} = {{register[0]}}{%if registerblock["name"]=="Energy Data" and register[10][:3]=="LOW" %}
{{python_name(register[1], register[10][3:].strip())}} = {{register[0] | int + 100000}} {% endif %}{%if register[1][-3:]=="DAY" %}
{{python_name(register[1]+"_AND_TOTAL", register[10].strip())}} = {{register[0] | int + 200001}} {% endif %} {% endfor %}
{%if registerblock["name"]=="System Values"%}COMPRESSOR_STARTS = 100032{% endif %}
{% endfor %}
{% for registerblock in registers %}
{{heatpump_type.upper()}}_{{python_name(registerblock["name"]).upper()}}_REGISTERS = {
{% for register in registerblock["register_block"] %}
{{heatpump_type}}{{python_class_name(registerblock["name"])}}Registers.{{python_name(register[1], register[10])}}: ModbusRegister(address={{register[0]}}, name="{{register[1]}}", unit="{{register[8]}}", min={{float_or_none(register[5])}}, max={{float_or_none(register[6])}}, data_type={{register[7]}}, key={{heatpump_type}}{{python_class_name(registerblock["name"])}}Registers.{{python_name(register[1], register[10])}}),{% endfor %}
}
{% endfor %}
class OperatingMode(Enum):
"""Enum for the operation mode of the heat pump."""
# AUTOMATIK
AUTOMATIC = 11
# BEREITSCHAFT
STANDBY = 1
# TAGBETRIEB
DAY_MODE = 3
# ABSENKBETRIEB
SETBACK_MODE = 4
# WARMWASSER
DHW = 5
# HANDBETRIEB
MANUAL_MODE = 14
# NOTBETRIEB
EMERGENCY_OPERATION = 0
class {{heatpump_type}}StiebelEltronAPI(StiebelEltronAPI):
def __init__(self, host: str, port: int = 502, slave: int = 1) -> None:
super().__init__([
{% for registerblock in registers %}
ModbusRegisterBlock(base_address={{registerblock["base_address"]}}, count={{registerblock["count"]}}, name="{{registerblock["name"]}}", registers={{heatpump_type.upper()}}_{{python_name(registerblock["name"]).upper()}}_REGISTERS, register_type={{registerblock["register_type"]}}),{% endfor %}
ModbusRegisterBlock(base_address=4000, count=3, name="Energy Management Settings", registers=ENERGY_MANAGEMENT_SETTINGS_REGISTERS, register_type=RegisterType.HOLDING_REGISTER),
ModbusRegisterBlock(base_address=5000, count=2, name="Energy System Information", registers=ENERGY_SYSTEM_INFORMATION_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
],
host, port, slave)
async def async_update(self):
"""Request current values from heat pump."""
await super().async_update()
for registerblock in self._register_blocks:
if registerblock.name == ENERGY_DATA_BLOCK_NAME:
registers = [r.value for r in {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers]
registers.sort()
for register in registers:
if register > VIRTUAL_REGISTER_OFFSET:
if register > VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET:
total_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET + VIRTUAL_REGISTER_OFFSET)
day_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET - 1)
total_value = self._data.get(total_key)
day_value = self._data.get(day_key)
if total_value is not None and day_value is not None:
prev_value = self._previous_data.get({{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register))
if prev_value is not None:
self._data[{{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register)] = max(total_value + day_value, prev_value)
else:
self._data[{{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register)] = total_value + day_value
else:
low_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_REGISTER_OFFSET)
high_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_REGISTER_OFFSET + 1)
high_value = self._data.get(high_key)
low_value = self._data.get(low_key)
if high_value is not None and low_value is not None:
self._data[{{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register)] = high_value * 1000 + low_value
compressor_starts_high = self.get_register_value(LwzSystemValuesRegisters.COMPRESSOR_STARTS_HI)
if compressor_starts_high is None or compressor_starts_high == 32768:
self._data[LwzSystemValuesRegisters.COMPRESSOR_STARTS] = 32768
else:
compressor_starts_low = self.get_register_value(LwzSystemValuesRegisters.COMPRESSOR_STARTS_LOW)
if compressor_starts_low is None:
self._data[LwzSystemValuesRegisters.COMPRESSOR_STARTS] = compressor_starts_high * 1000
else:
self._data[LwzSystemValuesRegisters.COMPRESSOR_STARTS] = compressor_starts_high * 1000 + compressor_starts_low
def get_current_temp(self):
"""Get the current room temperature."""
return self.get_register_value(LwzSystemValuesRegisters.ACTUAL_ROOM_T_HC1)
def get_target_temp(self):
"""Get the target room temperature."""
return self.get_register_value(LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1)
async def set_target_temp(self, temp):
"""Set the target room temperature (day)(HC1)."""
await self.write_register_value(LwzSystemParametersRegisters.ROOM_TEMPERATURE_DAY_HK1, temp)
def get_current_humidity(self):
"""Get the current room humidity."""
return self.get_register_value(LwzSystemValuesRegisters.RELATIVE_HUMIDITY_HC1)
# Handle operation mode
def get_operation(self) -> OperatingMode:
"""Return the current mode of operation."""
op_mode = int(self.get_register_value(LwzSystemParametersRegisters.OPERATING_MODE))
return OperatingMode(op_mode)
async def set_operation(self, mode: OperatingMode):
"""Set the operation mode."""
await self.write_register_value(LwzSystemParametersRegisters.OPERATING_MODE, mode.value)
def get_heating_status(self) -> bool:
"""Return heater status."""
return bool(int(self.get_register_value(LwzSystemStateRegisters.OPERATING_STATUS)) & (1 << 2))
def get_cooling_status(self) -> bool:
"""Cooling status."""
return bool(int(self.get_register_value(LwzSystemStateRegisters.OPERATING_STATUS)) & (1 << 3))
def get_filter_alarm_status(self) -> bool:
"""Return filter alarm."""
filter_mask = (1 << 8) | (1 << 12) | (1 << 13)
return bool(int(self.get_register_value(LwzSystemStateRegisters.OPERATING_STATUS)) & filter_mask)
python-stiebel-eltron-0.2.0/scripts/templates/wpmtemplate.j2 0000664 0000000 0000000 00000011526 15036725112 0024250 0 ustar 00root root 0000000 0000000 """Modbus api for stiebel eltron heat pumps. This file is generated. Do not modify it manually."""
from . import ModbusRegister, ModbusRegisterBlock, StiebelEltronAPI, IsgRegisters, RegisterType, ENERGY_DATA_BLOCK_NAME, VIRTUAL_REGISTER_OFFSET, ENERGY_MANAGEMENT_SETTINGS_REGISTERS, ENERGY_SYSTEM_INFORMATION_REGISTERS, VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET
{% for registerblock in registers %}
class {{heatpump_type}}{{python_class_name(registerblock["name"])}}Registers(IsgRegisters):
{% for register in registerblock["register_block"] %}
{{python_name(register[1], register[11])}} = {{register[0]}} {%if registerblock["name"]=="Energy Data" and register[11][:3]=="LOW" %}
{{python_name(register[1], register[11][3:].strip())}} = {{register[0] | int + 100000}}{% endif %} {%if register[1][-3:]=="DAY" %}
{{python_name(register[1]+"_AND_TOTAL", register[11].strip())}} = {{register[0] | int + 200001}} {% endif %} {% endfor %}
{% endfor %}
{% for registerblock in registers %}
{{heatpump_type.upper()}}_{{python_name(registerblock["name"]).upper()}}_REGISTERS = {
{% for register in registerblock["register_block"] %}
{{heatpump_type}}{{python_class_name(registerblock["name"])}}Registers.{{python_name(register[1], register[11])}}: ModbusRegister(address={{register[0]}}, name="{{register[1]}}", unit="{{register[9]}}", min={{float_or_none(register[6])}}, max={{float_or_none(register[7])}}, data_type={{register[8]}}, key={{heatpump_type}}{{python_class_name(registerblock["name"])}}Registers.{{python_name(register[1], register[11])}}),{% endfor %}
}
{% endfor %}
class {{heatpump_type}}StiebelEltronAPI(StiebelEltronAPI):
def __init__(self, host: str, port: int = 502, slave: int = 1) -> None:
super().__init__([
{% for registerblock in registers %}
ModbusRegisterBlock(base_address={{registerblock["base_address"]}}, count={{registerblock["count"]}}, name="{{registerblock["name"]}}", registers={{heatpump_type.upper()}}_{{python_name(registerblock["name"]).upper()}}_REGISTERS, register_type={{registerblock["register_type"]}}),{% endfor %}
ModbusRegisterBlock(base_address=4000, count=3, name="Energy Management Settings", registers=ENERGY_MANAGEMENT_SETTINGS_REGISTERS, register_type=RegisterType.HOLDING_REGISTER),
ModbusRegisterBlock(base_address=5000, count=2, name="Energy System Information", registers=ENERGY_SYSTEM_INFORMATION_REGISTERS, register_type=RegisterType.INPUT_REGISTER),
],
host, port, slave)
async def async_update(self):
"""Request current values from heat pump."""
await super().async_update()
for registerblock in self._register_blocks:
if registerblock.name == ENERGY_DATA_BLOCK_NAME:
registers = [r.value for r in {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers]
registers.sort()
for register in registers:
if register > VIRTUAL_REGISTER_OFFSET:
if register > VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET:
total_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET + VIRTUAL_REGISTER_OFFSET)
day_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_TOTAL_AND_DAY_REGISTER_OFFSET - 1)
total_value = self._data.get(total_key)
day_value = self._data.get(day_key)
if total_value is not None and day_value is not None:
prev_value = self._previous_data.get({{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register))
if prev_value is not None:
self._data[{{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register)] = max(total_value + day_value, prev_value)
else:
self._data[{{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register)] = total_value + day_value
else:
low_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_REGISTER_OFFSET)
high_key = {{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register - VIRTUAL_REGISTER_OFFSET + 1)
high_value = self._data.get(high_key)
low_value = self._data.get(low_key)
if high_value is not None and low_value is not None:
self._data[{{heatpump_type}}{{python_class_name(ENERGY_DATA_BLOCK_NAME)}}Registers(register)] = high_value * 1000 + low_value
python-stiebel-eltron-0.2.0/test/ 0000775 0000000 0000000 00000000000 15036725112 0016741 5 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/test/__init__.py 0000664 0000000 0000000 00000000000 15036725112 0021040 0 ustar 00root root 0000000 0000000 python-stiebel-eltron-0.2.0/test/mock_modbus_server.py 0000664 0000000 0000000 00000016132 15036725112 0023206 0 ustar 00root root 0000000 0000000 #!/bin/env python
"""
Pymodbus Asynchronous Server Example
--------------------------------------------------------------------------
The asynchronous server is a high performance implementation using the
twisted library as its backend. This allows it to scale to many thousands
of nodes which can be helpful for testing monitoring software.
"""
# --------------------------------------------------------------------------- #
# import the various server implementations
# --------------------------------------------------------------------------- #
from pymodbus.server import StartTcpServer, ServerStop
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
class MockModbusServer(object):
# --------------------------------------------------------------------------- #
# configure the service logging
# --------------------------------------------------------------------------- #
import logging
FORMAT = ('%(asctime)-15s %(threadName)-15s'
' %(levelname)-8s %(module)-15s:%(lineno)-8s %(message)s')
logging.basicConfig(format=FORMAT)
log = logging.getLogger()
log.setLevel(logging.DEBUG)
def run_async_server(self):
# ----------------------------------------------------------------------- #
# initialize your data store
# ----------------------------------------------------------------------- #
# The datastores only respond to the addresses that they are initialized to
# Therefore, if you initialize a DataBlock to addresses from 0x00 to 0xFF,
# a request to 0x100 will respond with an invalid address exception.
# This is because many devices exhibit this kind of behavior (but not all)
#
# block = ModbusSequentialDataBlock(0x00, [0]*0xff)
#
# Continuing, you can choose to use a sequential or a sparse DataBlock in
# your data context. The difference is that the sequential has no gaps in
# the data while the sparse can. Once again, there are devices that exhibit
# both forms of behavior::
#
# block = ModbusSparseDataBlock({0x00: 0, 0x05: 1})
# block = ModbusSequentialDataBlock(0x00, [0]*5)
#
# Alternately, you can use the factory methods to initialize the DataBlocks
# or simply do not pass them to have them initialized to 0x00 on the full
# address range::
#
# store = ModbusSlaveContext(di = ModbusSequentialDataBlock.create())
# store = ModbusSlaveContext()
#
# Finally, you are allowed to use the same DataBlock reference for every
# table or you you may use a seperate DataBlock for each table.
# This depends if you would like functions to be able to access and modify
# the same data or not::
#
# block = ModbusSequentialDataBlock(0x00, [0]*0xff)
# store = ModbusSlaveContext(di=block, co=block, hr=block, ir=block)
#
# The server then makes use of a server context that allows the server to
# respond with different slave contexts for different unit ids. By default
# it will return the same context for every unit id supplied (broadcast
# mode).
# However, this can be overloaded by setting the single flag to False
# and then supplying a dictionary of unit id to context mapping::
#
# slaves = {
# 0x01: ModbusSlaveContext(...),
# 0x02: ModbusSlaveContext(...),
# 0x03: ModbusSlaveContext(...),
# }
# context = ModbusServerContext(slaves=slaves, single=False)
#
# The slave context can also be initialized in zero_mode which means that a
# request to address(0-7) will map to the address (0-7). The default is
# False which is based on section 4.4 of the specification, so address(0-7)
# will map to (1-8)::
#
# store = ModbusSlaveContext(..., zero_mode=True)
# ----------------------------------------------------------------------- #
store = ModbusSlaveContext(
hr=ModbusSequentialDataBlock(0, [0]*3000),
ir=ModbusSequentialDataBlock(0, [0]*3000))
self.context = ModbusServerContext(slaves=store, single=True)
# ----------------------------------------------------------------------- #
# initialize the server information
# ----------------------------------------------------------------------- #
# If you don't set this or any fields, they are defaulted to empty strings.
# ----------------------------------------------------------------------- #
identity = ModbusDeviceIdentification()
identity.VendorName = 'Pymodbus'
identity.ProductCode = 'PM'
identity.VendorUrl = 'http://github.com/bashwork/pymodbus/'
identity.ProductName = 'Pymodbus Server'
identity.ModelName = 'Pymodbus Server'
identity.MajorMinorRevision = '1.5'
# ----------------------------------------------------------------------- #
# run the server you want
# ----------------------------------------------------------------------- #
# TCP Server
StartTcpServer(self.context, identity=identity, address=("localhost", 5020))
def stop_async_server(self):
ServerStop()
def update_context(self, register, address, values):
""" Update values of the active context. It should be noted
that there is a race condition for the update.
:param register: Type of register to update,
3: holding register
4: input register
:param address: The starting address of the value to be changed
:param values: List of values
"""
assert register == 3 or register == 4
slave_id = 0x00
old_values = self.context[slave_id].getValues(register,
address, count=1)
self.log.debug("Change value at address {} from {} to {}".format(
address, old_values, values))
self.context[slave_id].setValues(register, address, values)
def update_holding_register(self, address, value):
""" Update value of a holding register.
:param address: Address to update
:param value: Value to save
"""
self.log.debug("Update holding register: {}:{}".format(address,
int(value)))
self.update_context(3, address, [int(value)])
def update_input_register(self, address, value):
""" Update value of an input register.
:param address: Address to update
:param value: Value to save
"""
self.log.debug("Update input register: {}:{}".format(address,
int(value)))
self.update_context(4, address, [int(value)])
if __name__ == "__main__":
mms = MockModbusServer()
mms.run_async_server()
python-stiebel-eltron-0.2.0/test/test_pystiebeleltron.py 0000664 0000000 0000000 00000006574 15036725112 0023612 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python
import os
import time
import pytest
# Import modbus mockup server requirements
from threading import Thread
from test.mock_modbus_server import MockModbusServer as ModbusServer
# Import client requirementss
from pymodbus.client import ModbusTcpClient as ModbusClient
from pystiebeleltron import pystiebeleltron as pyse
# Modbus server connection details
host_ip = "127.0.0.1" #"192.168.1.20"
host_port = 5020 #502
slave = 1
class TestStiebelEltronApi:
#__slots__ = 'api'
@pytest.fixture(scope="module")
def pymb_s(self, request):
mb_s = ModbusServer()
# Cleanup after last test did run (will run as well, if something fails in setup).
def fin():
stop_thread = Thread(target=mb_s.stop_async_server,
name="StopReactor")
stop_thread.start()
if stop_thread.is_alive():
stop_thread.join()
if mms_thread.is_alive():
mms_thread.join()
request.addfinalizer(fin)
# Start Mock Modbus server
mms_thread = Thread(target=mb_s.run_async_server,
name="MockModbusServer")
mms_thread.start()
time.sleep(0.1)
return mb_s
@pytest.fixture(scope="module")
def pyse_api(self, request, pymb_s):
# parameter pymb_s leads to call of fixture
mb_c = ModbusClient(host=host_ip, port=host_port, timeout=2)
api = pyse.StiebelEltronAPI(mb_c, slave, update_on_read=True)
# Cleanup after last test (will run as well, if setup fails).
def fin():
mb_c.close()
time.sleep(0.5)
request.addfinalizer(fin)
# Connect Modbus client
connected = mb_c.connect()
assert connected
# Read values from device (server)
success = api.update()
assert success
return api
def test_temperature_read(self, pyse_api, pymb_s):
pymb_s.update_input_register(0, 21.5*10)
assert pyse_api.get_current_temp() == 21.5
pymb_s.update_holding_register(1001, 22.5*10)
assert pyse_api.get_target_temp() == 22.5
def test_temperature_write(self, pyse_api):
temperature = 22.5
pyse_api.set_target_temp(temperature)
time.sleep(3)
assert pyse_api.get_target_temp() == temperature
def test_operation(self, pyse_api):
operation = 'DHW'
pyse_api.set_operation(operation)
time.sleep(3)
assert pyse_api.get_operation() == operation
def test_humidity(self, pyse_api, pymb_s):
humidity = 49.5
pymb_s.update_input_register(2, humidity*10)
assert pyse_api.get_current_humidity() == humidity
def test_statuses(self, pyse_api, pymb_s):
pymb_s.update_input_register(2000, 0x0004)
assert pyse_api.get_heating_status() is True
assert pyse_api.get_cooling_status() is False
assert pyse_api.get_filter_alarm_status() is False
pymb_s.update_input_register(2000, 0x0008)
assert pyse_api.get_heating_status() is False
assert pyse_api.get_cooling_status() is True
assert pyse_api.get_filter_alarm_status() is False
pymb_s.update_input_register(2000, 0x2100)
assert pyse_api.get_heating_status() is False
assert pyse_api.get_cooling_status() is False
assert pyse_api.get_filter_alarm_status() is True
python-stiebel-eltron-0.2.0/test/test_stiebel_eltron.py 0000664 0000000 0000000 00000004633 15036725112 0023372 0 ustar 00root root 0000000 0000000 import pytest
from pystiebeleltron.lwz import LwzEnergyDataRegisters, LwzStiebelEltronAPI, LwzSystemValuesRegisters, OperatingMode
from pystiebeleltron.wpm import WpmEnergyDataRegisters, WpmStiebelEltronAPI, WpmSystemValuesRegisters
from pymodbus.pdu.register_message import (
ReadInputRegistersResponse,
)
async def read_registers(client, address: int, *, count: int = 1, slave: int = 0, no_response_expected: bool = False) -> ReadInputRegistersResponse:
"""Read a slice from the input register."""
return ReadInputRegistersResponse(address=address, count=count, registers=list(range(count)))
@pytest.mark.asyncio()
async def test_wpm(mocker):
api = WpmStiebelEltronAPI("localhost")
mock_connect = mocker.patch("pymodbus.client.AsyncModbusTcpClient.connect")
mock_close = mocker.patch("pymodbus.client.AsyncModbusTcpClient.close")
mocker.patch("pymodbus.client.AsyncModbusTcpClient.read_holding_registers", read_registers)
mocker.patch("pymodbus.client.AsyncModbusTcpClient.read_input_registers", read_registers)
await api.connect()
mock_connect.assert_called_once()
await api.async_update()
assert api.get_register_value(WpmSystemValuesRegisters.ACTUAL_TEMPERATURE_FEK) == 0.2
assert api.get_register_value(WpmEnergyDataRegisters.VD_HEATING_DAY_AND_TOTAL_CONSUMED) == 12021
await api.close()
mock_close.assert_called_once()
@pytest.mark.asyncio()
async def test_lwz(mocker):
api = LwzStiebelEltronAPI("localhost")
mock_connect = mocker.patch("pymodbus.client.AsyncModbusTcpClient.connect")
mock_close = mocker.patch("pymodbus.client.AsyncModbusTcpClient.close")
mocker.patch("pymodbus.client.AsyncModbusTcpClient.read_holding_registers", read_registers)
mocker.patch("pymodbus.client.AsyncModbusTcpClient.read_input_registers", read_registers)
await api.connect()
mock_connect.assert_called_once()
await api.async_update()
assert api.get_register_value(LwzSystemValuesRegisters.RELATIVE_HUMIDITY_HC1) == 0.2
assert api.get_register_value(LwzEnergyDataRegisters.HEAT_METER_HTG_DAY_AND_TOTAL) == 2001
assert api.get_current_humidity() == 0.2
assert api.get_current_temp() == 0.0
assert api.get_target_temp() == 0.1
assert api.get_operation() == OperatingMode.EMERGENCY_OPERATION
assert api.get_register_value(LwzSystemValuesRegisters.COMPRESSOR_STARTS) == 30033
await api.close()
mock_close.assert_called_once()
python-stiebel-eltron-0.2.0/uv.lock 0000664 0000000 0000000 00000117430 15036725112 0017274 0 ustar 00root root 0000000 0000000 version = 1
revision = 2
requires-python = ">=3.10, <3.14"
[[package]]
name = "colorama"
version = "0.4.6"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
[[package]]
name = "exceptiongroup"
version = "1.2.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883, upload-time = "2024-07-12T22:26:00.161Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453, upload-time = "2024-07-12T22:25:58.476Z" },
]
[[package]]
name = "iniconfig"
version = "2.1.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" },
]
[[package]]
name = "jinja2"
version = "3.1.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markupsafe" },
]
sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
]
[[package]]
name = "markupsafe"
version = "3.0.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357, upload-time = "2024-10-18T15:20:51.44Z" },
{ url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393, upload-time = "2024-10-18T15:20:52.426Z" },
{ url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732, upload-time = "2024-10-18T15:20:53.578Z" },
{ url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866, upload-time = "2024-10-18T15:20:55.06Z" },
{ url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964, upload-time = "2024-10-18T15:20:55.906Z" },
{ url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977, upload-time = "2024-10-18T15:20:57.189Z" },
{ url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366, upload-time = "2024-10-18T15:20:58.235Z" },
{ url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091, upload-time = "2024-10-18T15:20:59.235Z" },
{ url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065, upload-time = "2024-10-18T15:21:00.307Z" },
{ url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514, upload-time = "2024-10-18T15:21:01.122Z" },
{ url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" },
{ url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" },
{ url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" },
{ url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" },
{ url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" },
{ url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" },
{ url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" },
{ url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" },
{ url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" },
{ url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" },
{ url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" },
{ url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" },
{ url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" },
{ url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" },
{ url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" },
{ url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" },
{ url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" },
{ url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" },
{ url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" },
{ url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" },
{ url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" },
{ url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" },
{ url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" },
{ url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" },
{ url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" },
{ url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" },
{ url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" },
{ url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" },
{ url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" },
{ url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" },
{ url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" },
{ url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" },
{ url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" },
{ url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" },
{ url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" },
{ url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" },
{ url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" },
{ url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" },
{ url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" },
{ url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" },
]
[[package]]
name = "packaging"
version = "25.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
]
[[package]]
name = "pluggy"
version = "1.5.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955, upload-time = "2024-04-20T21:34:42.531Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556, upload-time = "2024-04-20T21:34:40.434Z" },
]
[[package]]
name = "pymodbus"
version = "3.9.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/9e/9f/434efbc3edd1445efca2c17d24877010746d65783ddbb937de753de6bec7/pymodbus-3.9.2.tar.gz", hash = "sha256:2d08ab7bf6d1abc55a87f4faa3a7b04f74d7310b8c9771c3d66ee5fccf2e25ac", size = 163040, upload-time = "2025-04-18T15:24:36.377Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/4c/7e/ae151f2750fb604247088774634fea321a178fb898cf8e961879825f9e41/pymodbus-3.9.2-py3-none-any.whl", hash = "sha256:292dcf859d6f232c30abc9753c1f0b7804771fd9c749641b32831de01b360b30", size = 165153, upload-time = "2025-04-18T15:24:34.428Z" },
]
[[package]]
name = "pystiebeleltron"
source = { editable = "." }
dependencies = [
{ name = "pymodbus" },
]
[package.dev-dependencies]
dev = [
{ name = "jinja2" },
{ name = "pytest" },
{ name = "pytest-asyncio" },
{ name = "pytest-mock" },
{ name = "ruff" },
]
[package.metadata]
requires-dist = [{ name = "pymodbus", specifier = ">=3.8.3" }]
[package.metadata.requires-dev]
dev = [
{ name = "jinja2", specifier = ">=3.1.6" },
{ name = "pytest", specifier = ">=8.3.5" },
{ name = "pytest-asyncio", specifier = ">=0.26.0" },
{ name = "pytest-mock", specifier = ">=3.14.0" },
{ name = "ruff", specifier = ">=0.9.6" },
]
[[package]]
name = "pytest"
version = "8.3.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
{ name = "exceptiongroup", marker = "python_full_version < '3.11'" },
{ name = "iniconfig" },
{ name = "packaging" },
{ name = "pluggy" },
{ name = "tomli", marker = "python_full_version < '3.11'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891, upload-time = "2025-03-02T12:54:54.503Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634, upload-time = "2025-03-02T12:54:52.069Z" },
]
[[package]]
name = "pytest-asyncio"
version = "0.26.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pytest" },
]
sdist = { url = "https://files.pythonhosted.org/packages/8e/c4/453c52c659521066969523e87d85d54139bbd17b78f09532fb8eb8cdb58e/pytest_asyncio-0.26.0.tar.gz", hash = "sha256:c4df2a697648241ff39e7f0e4a73050b03f123f760673956cf0d72a4990e312f", size = 54156, upload-time = "2025-03-25T06:22:28.883Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/20/7f/338843f449ace853647ace35870874f69a764d251872ed1b4de9f234822c/pytest_asyncio-0.26.0-py3-none-any.whl", hash = "sha256:7b51ed894f4fbea1340262bdae5135797ebbe21d8638978e35d31c6d19f72fb0", size = 19694, upload-time = "2025-03-25T06:22:27.807Z" },
]
[[package]]
name = "pytest-mock"
version = "3.14.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pytest" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c6/90/a955c3ab35ccd41ad4de556596fa86685bf4fc5ffcc62d22d856cfd4e29a/pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0", size = 32814, upload-time = "2024-03-21T22:14:04.964Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f2/3b/b26f90f74e2986a82df6e7ac7e319b8ea7ccece1caec9f8ab6104dc70603/pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f", size = 9863, upload-time = "2024-03-21T22:14:02.694Z" },
]
[[package]]
name = "ruff"
version = "0.11.9"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/f5/e7/e55dda1c92cdcf34b677ebef17486669800de01e887b7831a1b8fdf5cb08/ruff-0.11.9.tar.gz", hash = "sha256:ebd58d4f67a00afb3a30bf7d383e52d0e036e6195143c6db7019604a05335517", size = 4132134, upload-time = "2025-05-09T16:19:41.511Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/fb/71/75dfb7194fe6502708e547941d41162574d1f579c4676a8eb645bf1a6842/ruff-0.11.9-py3-none-linux_armv6l.whl", hash = "sha256:a31a1d143a5e6f499d1fb480f8e1e780b4dfdd580f86e05e87b835d22c5c6f8c", size = 10335453, upload-time = "2025-05-09T16:18:58.2Z" },
{ url = "https://files.pythonhosted.org/packages/74/fc/ad80c869b1732f53c4232bbf341f33c5075b2c0fb3e488983eb55964076a/ruff-0.11.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:66bc18ca783b97186a1f3100e91e492615767ae0a3be584e1266aa9051990722", size = 11072566, upload-time = "2025-05-09T16:19:01.432Z" },
{ url = "https://files.pythonhosted.org/packages/87/0d/0ccececef8a0671dae155cbf7a1f90ea2dd1dba61405da60228bbe731d35/ruff-0.11.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bd576cd06962825de8aece49f28707662ada6a1ff2db848d1348e12c580acbf1", size = 10435020, upload-time = "2025-05-09T16:19:03.897Z" },
{ url = "https://files.pythonhosted.org/packages/52/01/e249e1da6ad722278094e183cbf22379a9bbe5f21a3e46cef24ccab76e22/ruff-0.11.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b1d18b4be8182cc6fddf859ce432cc9631556e9f371ada52f3eaefc10d878de", size = 10593935, upload-time = "2025-05-09T16:19:06.455Z" },
{ url = "https://files.pythonhosted.org/packages/ed/9a/40cf91f61e3003fe7bd43f1761882740e954506c5a0f9097b1cff861f04c/ruff-0.11.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0f3f46f759ac623e94824b1e5a687a0df5cd7f5b00718ff9c24f0a894a683be7", size = 10172971, upload-time = "2025-05-09T16:19:10.261Z" },
{ url = "https://files.pythonhosted.org/packages/61/12/d395203de1e8717d7a2071b5a340422726d4736f44daf2290aad1085075f/ruff-0.11.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f34847eea11932d97b521450cf3e1d17863cfa5a94f21a056b93fb86f3f3dba2", size = 11748631, upload-time = "2025-05-09T16:19:12.307Z" },
{ url = "https://files.pythonhosted.org/packages/66/d6/ef4d5eba77677eab511644c37c55a3bb8dcac1cdeb331123fe342c9a16c9/ruff-0.11.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f33b15e00435773df97cddcd263578aa83af996b913721d86f47f4e0ee0ff271", size = 12409236, upload-time = "2025-05-09T16:19:15.006Z" },
{ url = "https://files.pythonhosted.org/packages/c5/8f/5a2c5fc6124dd925a5faf90e1089ee9036462118b619068e5b65f8ea03df/ruff-0.11.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b27613a683b086f2aca8996f63cb3dd7bc49e6eccf590563221f7b43ded3f65", size = 11881436, upload-time = "2025-05-09T16:19:17.063Z" },
{ url = "https://files.pythonhosted.org/packages/39/d1/9683f469ae0b99b95ef99a56cfe8c8373c14eba26bd5c622150959ce9f64/ruff-0.11.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e0d88756e63e8302e630cee3ce2ffb77859797cc84a830a24473939e6da3ca6", size = 13982759, upload-time = "2025-05-09T16:19:19.693Z" },
{ url = "https://files.pythonhosted.org/packages/4e/0b/c53a664f06e0faab596397867c6320c3816df479e888fe3af63bc3f89699/ruff-0.11.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:537c82c9829d7811e3aa680205f94c81a2958a122ac391c0eb60336ace741a70", size = 11541985, upload-time = "2025-05-09T16:19:21.831Z" },
{ url = "https://files.pythonhosted.org/packages/23/a0/156c4d7e685f6526a636a60986ee4a3c09c8c4e2a49b9a08c9913f46c139/ruff-0.11.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:440ac6a7029f3dee7d46ab7de6f54b19e34c2b090bb4f2480d0a2d635228f381", size = 10465775, upload-time = "2025-05-09T16:19:24.401Z" },
{ url = "https://files.pythonhosted.org/packages/43/d5/88b9a6534d9d4952c355e38eabc343df812f168a2c811dbce7d681aeb404/ruff-0.11.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:71c539bac63d0788a30227ed4d43b81353c89437d355fdc52e0cda4ce5651787", size = 10170957, upload-time = "2025-05-09T16:19:27.08Z" },
{ url = "https://files.pythonhosted.org/packages/f0/b8/2bd533bdaf469dc84b45815ab806784d561fab104d993a54e1852596d581/ruff-0.11.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c67117bc82457e4501473c5f5217d49d9222a360794bfb63968e09e70f340abd", size = 11143307, upload-time = "2025-05-09T16:19:29.462Z" },
{ url = "https://files.pythonhosted.org/packages/2f/d9/43cfba291788459b9bfd4e09a0479aa94d05ab5021d381a502d61a807ec1/ruff-0.11.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e4b78454f97aa454586e8a5557facb40d683e74246c97372af3c2d76901d697b", size = 11603026, upload-time = "2025-05-09T16:19:31.569Z" },
{ url = "https://files.pythonhosted.org/packages/22/e6/7ed70048e89b01d728ccc950557a17ecf8df4127b08a56944b9d0bae61bc/ruff-0.11.9-py3-none-win32.whl", hash = "sha256:7fe1bc950e7d7b42caaee2a8a3bc27410547cc032c9558ee2e0f6d3b209e845a", size = 10548627, upload-time = "2025-05-09T16:19:33.657Z" },
{ url = "https://files.pythonhosted.org/packages/90/36/1da5d566271682ed10f436f732e5f75f926c17255c9c75cefb77d4bf8f10/ruff-0.11.9-py3-none-win_amd64.whl", hash = "sha256:52edaa4a6d70f8180343a5b7f030c7edd36ad180c9f4d224959c2d689962d964", size = 11634340, upload-time = "2025-05-09T16:19:35.815Z" },
{ url = "https://files.pythonhosted.org/packages/40/f7/70aad26e5877c8f7ee5b161c4c9fa0100e63fc4c944dc6d97b9c7e871417/ruff-0.11.9-py3-none-win_arm64.whl", hash = "sha256:bcf42689c22f2e240f496d0c183ef2c6f7b35e809f12c1db58f75d9aa8d630ca", size = 10741080, upload-time = "2025-05-09T16:19:39.605Z" },
]
[[package]]
name = "tomli"
version = "2.2.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" },
{ url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" },
{ url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" },
{ url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" },
{ url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" },
{ url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" },
{ url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" },
{ url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" },
{ url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" },
{ url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" },
{ url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" },
{ url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" },
{ url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" },
{ url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" },
{ url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" },
{ url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" },
{ url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" },
{ url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" },
{ url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" },
{ url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" },
{ url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" },
{ url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" },
{ url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" },
{ url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" },
{ url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" },
{ url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" },
{ url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" },
{ url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" },
{ url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" },
{ url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" },
{ url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" },
]
python-stiebel-eltron-0.2.0/wpm-example.py 0000775 0000000 0000000 00000003051 15036725112 0020572 0 ustar 00root root 0000000 0000000 #!/usr/bin/env python3
import asyncio
from pystiebeleltron.wpm import WpmStiebelEltronAPI, WpmSystemParametersRegisters, WpmSystemValuesRegisters
host_ip = "192.168.1.20"
async def main():
api = WpmStiebelEltronAPI(host_ip, 502)
await api.connect()
await api.async_update()
for k, v in api._data.items():
if v is not None:
print(f"{k.name} ({k.value}): {v}")
outside_temp = api.get_register_value(WpmSystemValuesRegisters.OUTSIDE_TEMPERATURE)
print(f"The current outside temperature is {outside_temp} °C")
comfort_temp = api.get_register_value(WpmSystemParametersRegisters.COMFORT_TEMPERATURE)
print(f"The current water comfort temperature is {comfort_temp} °C")
# Test set_target_temp
print("Setting temperature to 50.0")
await api.write_register_value(WpmSystemParametersRegisters.COMFORT_TEMPERATURE, 50)
await asyncio.sleep(3)
await api.async_update()
mod_temp = api.get_register_value(WpmSystemParametersRegisters.COMFORT_TEMPERATURE)
if mod_temp != 50.0:
print("setting the water comfort temperature failed!")
if mod_temp != comfort_temp:
await api.write_register_value(WpmSystemParametersRegisters.COMFORT_TEMPERATURE, comfort_temp)
await asyncio.sleep(3)
await api.async_update()
print(f"get_target_temp: {api.get_register_value(WpmSystemParametersRegisters.COMFORT_TEMPERATURE)}")
await api.close()
if __name__ == "__main__":
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(main())