Simple component to connect to the Givenergy EVC which doesn't rely on an Addon
- ✅ Centralized polling via ModbusCoordinator
- ✅ UI-based config flow (host + scan interval)
- ✅ JSON-driven entity definitions
- ✅ Float and signed integer decoding
- ✅ Byte order control (ABCD, DCBA, etc.)
- ✅ Select entities with lookup tables
- ✅ Modular architecture for easy extension
- Copy this repository into your Home Assistant
custom_componentsfolder:
custom_components/
└── modbus_block/
├── __init__.py
├── config_flow.py
├── coordinator.py
├── helpers.py
├── manifest.json
├── const.py
├── sensor.py
├── number.py
├── switch.py
├── select.py
└── register_map.json
- Restart Home Assistant.
- Go to Settings → Devices & Services → Add Integration → Search for “Modbus Block”.
- Enter your Modbus device’s IP address and desired scan interval.
To install via HACS:
- Go to HACS → Integrations → Custom Repositories
- Add this repo URL:
https://github.com/yourusername/modbus-block - Set category to
Integration - Install and restart Home Assistant
Define your entities in register_map.json:
[
{
"name": "Temperature",
"type": "sensor",
"register": 10,
"float": true,
"scale": 0.1,
"unit": "°C"
},
{
"name": "Setpoint",
"type": "number",
"register": 12,
"float": true,
"scale": 1.0,
"unit": "°C",
"min": 0,
"max": 100,
"step": 0.5
},
{
"name": "Pump",
"type": "switch",
"register": 14
},
{
"name": "Fan Mode",
"type": "select",
"register": 15,
"lookup": {
"0": "Off",
"1": "Low",
"2": "Medium",
"3": "High"
}
}
]| Type | Description |
|---|---|
| sensor | Read-only value from a register |
| number | Writable numeric value |
| switch | On/off control via register |
| select | Mapped value using lookup dictionary |
- Byte order control:
ABCD,DCBA,BADC,CDAB - Float decoding: IEEE 754 32-bit
- Signed integer support: 16-bit and 32-bit
- External lookup files for select entities
Maintained by @yourusername
Let me know if you’d like a badge section, screenshots, or a changelog template added.