Digital inputs & outputs
The prebuilt HCP PCBs (v2 and v3.x) have four extra screw terminals: In1, In2, Out1 and Out2. They are disabled by default and enabled per channel under I/O Configuration.
HCP_Giffordv3 firmware but has no In/Out terminals – leave the channels disabled there.Electrical limits – read first
Inputs In1 / In2
| Type | ≈5 V voltage input through a fixed divider (1.2 kΩ series, 2.2 kΩ to GND) – not a dry contact |
|---|---|
| HIGH | ≈ 3.9 … 5.1 V at the terminal against board GND |
| Idle | LOW – the on-board 2.2 kΩ pulls the input down |
| Maximum | ≈ 5.1 V. Never apply 12 V or 24 V – that destroys the GPIO. |
| Pull mode | Keep none (external) – the internal pull-up cannot work against the on-board 2.2 kΩ. |
| Debounce | 50 ms |
A push button must therefore switch about 5 V onto the terminal; a potential-free contact across the terminals does nothing. A 3.3 V signal is not detected reliably.
Outputs Out1 / Out2
| Type | High-side switch – optocoupler-driven N-channel MOSFET (source follower) |
|---|---|
| ON | Sources the rail selected by the 5V | – | 3V jumper, minus about one MOSFET threshold (≈ 0.7–1.5 V) |
| OFF | High impedance (floating) |
| Suitable for | PLC inputs, active-HIGH relay module inputs, logic inputs |
| Not suitable for | Driving relays, lamps, motors or mains loads directly |
| Isolation | None – both sides of the optocoupler share the board GND |
Prefer the 5 V jumper position: with 3 V selected the output only reaches about 2.3 V.
Pins
| Terminal | HCP PCB v2 | HCP PCB v3.x | Other boards |
|---|---|---|---|
| In1 | GPIO12 | GPIO12 | any free GPIO |
| In2 | GPIO14 | GPIO14 | any free GPIO |
| Out1 | GPIO37 | GPIO25 | any free GPIO |
| Out2 | GPIO35 | GPIO22 | any free GPIO |
The firmware rejects unusable pins and disables the channel, reporting it as io_error in the debug topic: 0 (not configured), the SPI flash pins (ESP32: 6–11, ESP32-S3: 26–32) and, as outputs, the input-only GPIO34–39 of the classic ESP32.
Settings
| Setting | Inputs | Outputs |
|---|---|---|
| Enable | Activates the channel and its Home Assistant entity. | |
| Name | Entity name in Home Assistant. | |
| GPIO | Pin number (see above). | |
| Pull resistor | none (external) on the HCP PCBs; pull-up/-down only on self-built boards without divider | – |
| Active low | Only for a button to GND with pull-up on self-built boards | Only if ON/OFF end up swapped |
| Local action | Action executed by the bridge itself on the activating edge – works without Wi-Fi/MQTT | – |
| Restore after reboot | – | Off (default) = always off after a restart; on = last state is restored |
Local actions
| Value | Action |
|---|---|
| 0 | none – only publish the input state |
| 1 | impulse / toggle door (open if not fully open, otherwise close) |
| 2 / 3 / 4 | open / close / stop door |
| 5 | toggle the operator light |
| 6 / 7 | ventilation / half-open position |
| 8 / 9 | toggle Out1 / Out2 |
Examples
Wall button toggles the light
+5V ────o/ o──── In1 (button, bridge GND shared)
I/O Configuration → Input 1: enable, GPIO 12, pull none (external), active low off, local action toggle light. The button now switches the light directly on the bus, and the press is also available as binary_sensor in Home Assistant.
Out1 drives a relay module
Relay module IN → Out1, module GND → bridge GND, module VCC → its own 5 V supply, jumper on 5 V. The module must be active HIGH; common active-LOW boards need an extra inverting stage. Output 1: enable, GPIO 25 (v3), active low off, restore off.
MQTT and HTTP
# state (retained, only enabled channels)
hormann/<id>/io {"in1":"true","in2":"false","out1":"false","out2":"true"}
# switch outputs: true | false | anything else toggles
hormann/<id>/command/out1 true
hormann/<id>/command/out2 toggle
# HTTP: on | off | toggle (404 if the output is not enabled)
curl "http://<device-ip>/io?output=1&state=on"
Inputs become binary_sensor, outputs switch entities in Home Assistant.
Wiring diagrams, the complete electrical analysis and ESPHome snippets: inputs_outputs.md.