Home Assistant custom integration for Control iD FaceID and Access devices with:
- Config Flow setup from the UI
- Automatic device monitor configuration through
set_configuration.fcgi - Live webhook handling for
/daoand/secbox - Direct door-state read on startup with webhook fallback
- Door state binary sensor
- Last access sensor with event mapping and friendly user-name mapping
- Last authorized user sensor
- Registered users count sensor
- Gate open button using
execute_actions.fcgi - Sync Users button to import names directly from the device
- Automatic session re-login when the device expires the current session
This integration creates:
- A
buttonentity to open the gate - A
buttonentity to sync users from the device - A
binary_sensorentity for door state - A
sensorentity for the latest access event - A
sensorentity for the latest authorized user - A
sensorentity for total registered users on the device
The access sensor maps:
7->Authorized11->Door Opened
You can also configure a user_map in the integration options to map device user_id values to friendly names like:
{
"1000009": "Irlan",
"1000010": "Maria"
}- Copy this repository's
custom_components/controlidfolder into your Home Assistantcustom_componentsdirectory. - Restart Home Assistant.
- Go to
Settings->Devices & Services->Add Integration. - Search for
Control iD FaceID. - Enter:
- Device IP
- Username
- Password
- Optional
SecBox ID
You can add this repository to HACS as a custom repository:
- Open HACS.
- Go to the top-right menu and choose
Custom repositories. - Add
https://github.com/devprbtt/home-assistant-controlid-faceidas typeIntegration. - Install
Control iD FaceID. - Restart Home Assistant.
- Home Assistant must have an
Internal URLorExternal URLconfigured. - The Control iD device must be able to reach your Home Assistant webhook URL over the network.
- The device must allow API access with the configured credentials.
Control iD appends suffixes to the configured monitor path:
/daofor access log events/secboxfor relay and door-state events
This integration handles both:
/api/webhook/<id>/dao/api/webhook/<id>/secbox
It also accepts the base webhook path and auto-detects payload type when possible.
Depending on firmware or product family, the integration also accepts door-style payloads for door-state updates.
After setup, open the integration options to configure:
user_map: a JSON or Python-style dictionary mappinguser_idto friendly name
Example:
{"1000009": "Irlan", "1000010": "Maria"}On startup, the integration attempts to populate current state immediately so entities do not remain unknown waiting for the next webhook.
It will:
- Load registered users count from the device
- Load the latest access log for
Last Access - Load the latest authorized access log (
event = 7) forLast Access User - Read the current door state directly from
door_state.fcgiwhen supported - Fall back to the latest door/secbox event if direct door-state reading is not available
The Sync Users button imports registered users from the device using load_objects.fcgi and stores them in the integration user_map.
After syncing:
Last Access Userwill show the friendly name when availableLast Accessattributes will includeuser_nameanduser_displayRegistered Userswill show the total number of users loaded from the device
Last Access User tracks the latest authorized access only. It does not switch to user_id = 0 on later Door Opened events.
If you are inside Home Assistant's custom_components folder, update the integration with:
rm -rf controlid && git clone --depth 1 https://github.com/devprbtt/home-assistant-controlid-faceid.git temp-controlid && mv temp-controlid/custom_components/controlid ./controlid && rm -rf temp-controlidThen restart Home Assistant.
- The default
SecBox IDis65793. - Gate opening uses the action payload
reason=3. - Authenticated requests automatically retry once if the device reports session expiration.
custom_components/
controlid/
__init__.py
manifest.json
config_flow.py
button.py
binary_sensor.py
sensor.py