Custom Home Assistant integration for the Eaton Environmental Monitoring Probe Gen 2 (EMPDT1H1C2) using Modbus RTU over USB.
- Real-time Temperature sensor (0–70 °C) with optional °F display
- Real-time Relative Humidity sensor (0-90 %RH)
- Two Dry Contact binary sensors (door switches, alarms, etc.) with custom names and optional inversion
- Full UI configuration — no YAML required
- Configurable polling interval (5–300 seconds)
- Support for multiple daisy-chained probes
- Read-only (safe for monitoring only)
- Eaton Environmental Monitoring Probe Gen 2 (EMPDT1H1C2)
- Any clone/compatible probe using the same Modbus register map
The Eaton Environmental Monitoring Probe Gen 2 is officially designed to work with Eaton UPS systems, PDUs, and Network Management Cards.
This integration was created through reverse engineering and allows you to connect the probe directly to any computer running Home Assistant using the supplied USB cable — no Eaton UPS or PDU is required for basic monitoring.
Please note:
- This integration is read-only — it can only read sensor values. It cannot write, configure, or update the probe.
- For firmware updates, calibration, or any advanced configuration you will need an official Eaton UPS, PDU, or Network Management Card.
Use at your own risk!
There is no official warranty or support from Eaton when used directly with Home Assistant.
Important: Make sure you are using the original Eaton USB cable that came with the probe. This cable contains the built-in USB-to-serial converter (FT232R) needed to communicate with the first probe in the chain.
- Go to Settings → Devices & Services → Hardware (click the All Hardware tab)
- In the search box, type
ttyUSBorFT232 - Find the device whose Model or Description contains
FT232R_USB_UART - Click on it and copy the full path in the Attributes section that starts with:
/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_...
Why use the /dev/serial/by-id/... path instead of /dev/ttyUSB0?
The simple /dev/ttyUSB0 name can change after a reboot, when you unplug/replug devices, or when other USB devices are connected. The by-id path is permanent and always points to the exact same physical probe using its unique hardware ID. This is especially important when you have multiple probes or other USB devices on your system.
Note: Only the first probe in the chain is connected via this USB cable. All other probes connect via standard RJ45 patch cables.
- Go to Settings → Devices & Services → Add Integration
- Search for Eaton Environmental Monitoring Probe
- Enter:
- Serial Port: the full
/dev/serial/by-id/...path (strongly recommended) - Slave ID:
1(default — set via DIP switches on each probe)
- Click Submit
After setup, click Options on the integration card to customize name, dry contact names, inversion, temperature unit, and polling interval.
The Eaton EMP uses RS-485 daisy-chaining via standard RJ45 patch cords:
- Only one USB cable is plugged into your Home Assistant machine (connected to the first probe).
- Additional probes are connected to each other with RJ45 cables.
- Each probe must have a unique Slave ID (configured via its DIP switches).
In Home Assistant you simply add multiple instances of the integration:
- All instances use the same serial port (
/dev/serial/by-id/...) - Each instance uses a different Slave ID
| Entity ID | Type | Description |
|---|---|---|
sensor.eaton_emp_temperature |
Sensor | Ambient temperature (°C or °F) |
sensor.eaton_emp_humidity |
Sensor | Relative humidity (%RH) |
binary_sensor.eaton_emp_dry_contact_1 |
Binary Sensor | Dry contact input 1 |
binary_sensor.eaton_emp_dry_contact_2 |
Binary Sensor | Dry contact input 2 |
- Integration doesn't appear: Restart HA twice after placing files
- "Cannot connect": Use the full
/dev/serial/by-id/...path. Make sure the original Eaton USB cable is connected securely and that you are not using a USB extender that is too long. - No values / wrong values: Confirm each probe’s Slave ID with a Modbus tool
- Dry contacts wrong state: Go to integration → Options → toggle “Invert Dry Contact Logic”
- Want custom names or °F: Go to integration → Options
- Check logs:
Settings → System → Logsand filter foreaton_emp
- Built with assistance from Grok (xAI). I really, really hate python!
- Uses
pymodbusfor reliable Modbus RTU communication
Pull requests are welcome and greatly appreciated!
- One change at a time — Please keep pull requests small and focused on a single feature or fix. Large PRs that modify many files at once are much harder to review.
- AI-assisted code — If you used any AI tool (Grok, ChatGPT, Claude, Copilot, etc.) to help write or generate code, please clearly mention it in the PR description.
Also, please wait until any existing PRs are reviewed/merged before opening new ones — I’m only one human with limited time. - Read-only only — Do not add any write features (coils, holding registers, configuration writes, etc.).
This integration is intentionally read-only. The probe was designed to work with Eaton UPS/PDUs, and writing values could potentially cause problems or bring unwanted attention to the project.
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-awesome-change) - Make your changes
- Test them with real hardware if possible
- Open a Pull Request with a clear description
Feel free to open an Issue first if you want to discuss a bigger idea or need guidance.
Thank you for helping make this integration better!
This project is licensed under the MIT License.
You are free to use, modify, and distribute it as you wish.
Full license text: LICENSE
Made with ❤️ for the Home Assistant community.