Skip to main content

rdc-proxy

Transparent TCP proxy for the Kohler RDC2 (Blue Board) generator controller. Decodes the plaintext TLV wire protocol in real time, survives Kohler/Rehlko cloud outages by replaying a captured handshake, and serves a local-only dashboard.

What it does

  • Sits as a Linux L2 bridge between the RDC and your LAN — zero config on the RDC side, no cloud account required after initial pairing.
  • In PROXY mode it relays RDC ↔ Kohler cloud transparently while tapping the stream to decode telemetry.
  • In LOCAL mode (no internet) it replays a captured cloud handshake so the RDC keeps streaming to the Pi instead of faulting.
  • Serves a dashboard at http://<pi>/ with engine state, voltages, frequency, runtime hours, utility loss events, and interface counters. Every value has a per-field "No Data" indicator (red X + badge) so zero readings can't be confused with "haven't heard yet" — see PI-SETUP §10d for why some fields (RPM, generator voltage) show "No Data" in standby.

⚠️ Use at your own risk

This is an unofficial, community project — not made, endorsed, or supported by Kohler or Rehlko. It runs on your hardware, on your network, near your expensive generator. You are responsible for your install. The proxy is designed to be passive and read-only on the wire, and has done no harm in testing on the developer's generator, but we can't guarantee nothing odd will happen on yours. If you're not comfortable tinkering near a generator, don't.

Nothing leaves your Pi. No telemetry, no analytics, no phone-home. The only outbound network traffic is (a) the generator's existing connection to Kohler's cloud — which is unchanged — and (b) package downloads from apt and PyPI the first time you install. All decoding, storage, and the dashboard stay on the Pi.

The source is open; read it before running it. MIT-licensed, all three packages on GitHub (rdc-proxy, rdc-proxy-unifi, rdc-correlate). The installer is a ~200-line bash script. If you'd rather not curl | sudo bash, clone the repo, read it, run it yourself.

No warranty. Per the MIT license, the software is provided "AS IS," without warranty of any kind, express or implied — including merchantability, fitness for a particular purpose, and non-infringement. The authors are not liable for any claim, damages, or other liability arising from use of this software. If Kohler changes their wire protocol, this project could break, and there is no guarantee it will be updated.

Observing traffic on your own network is your right. rdc-proxy is a passive bridge on your LAN between two pieces of hardware you own. Kohler has no legal standing over packets on your wire. US copyright law (DMCA §1201(f)) explicitly permits reverse engineering for interoperability with equipment you own. rdc-proxy does not use Kohler's cloud API, does not access the service in an automated way, and does not share account access — it just watches packets fly by on your network. If you plan to go further and automate calls to Kohler's cloud API on top of this, that's a separate question — see rdc-correlate for that discussion.

The full "please read before starting" block is also at the top of docs/PI-SETUP.md.

Quick start (fresh Raspberry Pi)

See docs/PI-SETUP.md for the full flash-to-running walkthrough. The short version once you're SSH'd into the Pi:

curl -fsSL https://raw.githubusercontent.com/andrewroydshayes/rdc-proxy/main/install/install.sh \
  | sudo RDC_IP=10.0.0.50 bash

Architecture

See docs/ARCHITECTURE.md for module layout, the plugin contract, and the TPROXY-on-bridge gotchas.

Plugins

External integrations live in separate packages that register under the rdc_proxy.plugins entry-point group. Install a plugin with pip after rdc-proxy is up — it's picked up automatically on next service restart.

Development

# Run tests
pip install -e ".[dev]"
pytest

# Run locally (without systemd)
python -m rdc_proxy

Status

Runs in production on a Raspberry Pi 4 monitoring a Kohler 20 kW RDC2 generator. See the rdc-protocol-research repo for handshake reverse-engineering notes and the parameter-mapping registry.

License

MIT. Provided "AS IS," without warranty. See the full disclaimer in the Use at your own risk section above.

Metadata

Release files for rdc-proxy 0.4.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rdc-proxy 0.4.4
File Size Uploaded
rdc_proxy-0.4.4.tar.gz 115.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rdc-proxy 0.4.4
File Interpreter ABI Platform
rdc_proxy-0.4.4-py3-none-any.whl Python 3 none any Details

Total release size: 224.9 kB

Release files / rdc_proxy-0.4.4.tar.gz

Download URL rdc_proxy-0.4.4.tar.gz
Size 115.4 kB
Tags Source
SHA-256 checksum
How to use checksums
fdaa46a1310293a9937d8af5c53a06d45cf3a08d1c2be88e0765656776e19efa
BLAKE2b-256 checksum
How to use checksums
868aa231cc0cfa83745bfd0e237276abc9bae394b8ba0673d4426720fdfc2d6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 25, 2026.

Transparency log

Release files / rdc_proxy-0.4.4-py3-none-any.whl

Download URL rdc_proxy-0.4.4-py3-none-any.whl
Size 109.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4fd45182d877b7458ce0d0823d7d7ba08b54811377708f5382d759dd9978b7f5
BLAKE2b-256 checksum
How to use checksums
eef06f805503408e4182e25514513887a59f440cf0ab917c7ee061584a3356b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.4 This release

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release 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