Skip to main content

proxon-modbus

Gerätebibliothek für Proxon FWT 2.0 (Lüftungs-Wärmepumpe) und T300 (Warmwasser-Wärmepumpe) über Modbus RTU.

Die Bibliothek besitzt den Transport nicht. Anwendungen reichen eine modbus_connection.ModbusUnit herein — Backend tmodbus oder pymodbus — und bekommen dafür das Registerwissen der Anlage. Damit lässt sich sie ohne Hardware testen und teilt sich eine Verbindung mit anderen Verbrauchern desselben RS485-Strangs.

from modbus_connection import ModbusTcpParams
from modbus_connection.tmodbus import ModbusConnection
from proxon_modbus import ProxonDevice

conn = ModbusConnection(
    ModbusTcpParams(host="192.0.2.10", port=502, framer="rtu"),
    message_spacing=0.15,   # Pause zwischen Blöcken
    connect_delay=0.30,     # Wartezeit nach Verbindungsaufbau
)
device = ProxonDevice(conn.for_unit(41))
await device.async_update()

print(device.t300_input.t21_behaelter_mitte)      # 57.5
print(device.fwt_holding.bypass_min_frischluft)   # 8.0
print([d.temperatur for d in device.nbe_temperatures.devices])

Warum eigene Feldtypen

Zwei Eigenheiten der Anlage kann modbus_connection nicht von sich aus:

Skalierung und Offset sind anders gemeint. Proxon rechnet (roh + offset) / scale, die Bibliothek roh * scale + offset; Proxons scale ist ein Divisor, ihrer ein Multiplikator. proxon_number() nimmt die Proxon-Zahlen entgegen und rechnet um — Registerzeilen lassen sich also 1:1 aus der Anlagendokumentation übernehmen. Ohne diese Umrechnung liest der Behälterfühler T21 statt 57,5 °C ganze −842,5 °C.

Fremde Frames müssen verworfen werden. Die USR-RS485-Bridge spiegelt den gesamten Busverkehr in die TCP-Verbindung; einzelne Register enthalten dadurch Werte anderer Geräte (klassisch: 128 °C Warmwasser). 46 der 94 Register tragen deshalb einen gültigen Rohbereich. nan= der Bibliothek trifft nur einzelne Werte, nicht Bereiche — RangedNumberField prüft min_raw/max_raw auf dem vorzeichenbehafteten Rohwert und liefert sonst None.

Dazu kommt Latin1StringField: die Raumnamen liegen als zwei Latin-1-Bytes je Register, das StringField der Bibliothek ist ASCII — „Küche" käme kaputt an.

Aufbau

Baugruppe Register
FwtInput Input 0–51, 154–265
FwtHolding Holding 16–22, 41–143, 187, 438, 460, 467–469, 613–619
T300Input / T300Holding Input 811–900, Holding 2000–2025
NbeTemperatures Input 590 + n·3, sieben Geräte
NbeSettingsBank Holding 213/233/253 + n
RoomNames Holding 620 + n·10, acht Slots

Namens-Slot 0 ist die HBDE und hat kein NBE-Gerät; Slot 1–7 gehören zu den Geräten 0–6 (physical_index()).

Freischaltung

Register 438 = 55555 schaltet die vollen Modbus-Rechte frei. Ohne das antworten 460 und 467–469 nicht und Schreibzugriffe werden abgelehnt. ProxonDevice erledigt das einmal je Verbindung — es ist ein Flash-Write im Gerät, gehört also nicht in jeden Zyklus — und setzt es nach einem Verbindungsabriss neu.

Teilausfall

Einzelne Blöcke scheitern im Normalbetrieb, ohne dass die Anlage weg wäre. async_update() gibt die Namen der gescheiterten Baugruppen zurück und lässt deren zuletzt gelesene Werte stehen; ProxonUnreachable fliegt erst, wenn keine Baugruppe gelesen werden konnte.

Tests

Vollständig ohne Hardware, über den Mock aus modbus_connection:

pip install -e ".[tmodbus,test]"
pytest

Die Testdaten sind echte Registerwerte, am 2026-09-02 von der Anlage gelesen.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proxon_modbus-0.1.2.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

proxon_modbus-0.1.2-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file proxon_modbus-0.1.2.tar.gz.

File metadata

  • Download URL: proxon_modbus-0.1.2.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for proxon_modbus-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d0830a4cffc1019196b617559e6b3113c3a7ac8be9621ed91da04b5ac337ac5c
MD5 38d1107a9ffac5d593358794d09b13ac
BLAKE2b-256 c95d96b13df3198d8abe5d8e753c2b2b84e13e79489e331aafbd5fc669640525

See more details on using hashes here.

File details

Details for the file proxon_modbus-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: proxon_modbus-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.5

File hashes

Hashes for proxon_modbus-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ecf238c947761391ab7c9a0b51ed1a93e5f043a339f53564d5f2a42cda129f9c
MD5 7fb46ab328dc3eaf34fec2872986f3a7
BLAKE2b-256 deac1d15e44fc2a981165a0a1b9e8fadc33584767e3e5548a7d53c6cbd16e23b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page