- Python 95.8%
- JavaScript 4.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .github/workflows | ||
| custom_components/comelit_intercom_local | ||
| tests | ||
| .coveragerc | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| hacs.json | ||
| LICENSE | ||
| protocol_reference_mnestrud_6701W.md | ||
| pyproject.toml | ||
| README.md | ||
⚠️ Maintenance Paused
Due to serious personal circumstances, I am stepping away from this repository for the foreseeable future.
What this means:
I will not be reviewing or merging Pull Requests.
I will not be responding to Issues or direct messages regarding the project.
The repository will remain open, but it is effectively unmaintained.
If you need to continue working with this code, you are welcome to fork the repository and proceed independently. I appreciate your understanding and support during this time.
Comelit Intercom Local
Home Assistant custom component for the Comelit 6701W WiFi video intercom. Communicates via the ICONA Bridge TCP protocol — no cloud required.
Features
- Remote door opening — open doors/gates from Home Assistant
- Live intercom video — view the door camera stream directly in HA dashboards via local RTSP
- Doorbell events — automations trigger on ring or missed call
- Custom Lovelace card — play-button UI auto-registered on startup; starts video on click, stops on navigation away
- 100% local — all communication stays on your LAN, no cloud required
Requirements
- Comelit 6701W (or compatible ICONA Bridge device)
- Device accessible on your local network
- Home Assistant 2026.1+
Installation
HACS (Recommended)
- Add this repository as a custom repository in HACS
- Install Comelit Intercom Local
- Restart Home Assistant
Manual
- Copy the
custom_components/comelit_intercom_local/folder to your HAconfig/custom_components/directory - Restart Home Assistant
Configuration
- Go to Settings → Devices & Services → Add Integration
- Search for Comelit Intercom Local
- Enter your device IP and either:
- Your device password (token will be extracted automatically), or
- A pre-extracted 32-character hex token
Notification settings
After setup, you can configure the integration via Settings → Integrations → Comelit Intercom Local → Configure:
| Option | Default | Description |
|---|---|---|
| Enable notifications | On | Receive doorbell ring and door events. Disable if you only need video and door control, or to troubleshoot the notification connection. |
| Verbose logging | Off | Enable detailed per-packet wire dump logs. When off, the chatty sub-loggers are pinned to INFO to keep the log clean under normal operation. |
Changing this setting reloads the integration automatically.
Entities
| Entity | Description |
|---|---|
button.comelit_intercom_<door_name> |
Press to open a door or gate (e.g., button.comelit_intercom_actuator) |
button.comelit_intercom_start_video_feed |
Manually start the intercom video call |
button.comelit_intercom_stop_video_feed |
Stop the active video call |
camera.comelit_intercom_live_feed |
Live video stream from the door panel via local RTSP |
camera.comelit_intercom_<name> |
RTSP stream from each additional configured camera |
event.comelit_intercom_doorbell |
Fires ring, missed_call, and door_opened events for automations |
binary_sensor.comelit_intercom_notification_service |
Diagnostic — on when the VIP event listener is active; unavailable when notifications are disabled |
button.comelit_intercom_restart_notifications |
Diagnostic — manually restart the VIP event listener without a full integration reload |
Lovelace Cards
Two custom cards are automatically registered on startup — both are optional.
Intercom camera card — snapshot with play button overlay; click to start video, stops on navigation away:
type: custom:comelit-intercom-card
camera_entity: camera.comelit_intercom_live_feed
start_entity: button.comelit_intercom_start_video_feed # optional
stop_entity: button.comelit_intercom_stop_video_feed
Doorbell notification card — shows a pulsing alert with Answer/Dismiss buttons when someone rings; auto-dismisses after dismiss_after seconds:
type: custom:comelit-doorbell-card
doorbell_entity: event.comelit_intercom_doorbell
camera_entity: camera.comelit_intercom_live_feed
start_entity: button.comelit_intercom_start_video_feed
stop_entity: button.comelit_intercom_stop_video_feed
dismiss_after: 30 # optional, default 30s
States: Idle (thumbnail + doorbell badge) → Ringing (pulsing icon + Answer/Dismiss) → Answered (live stream + stop button).
Doorbell Notifications
When someone rings the doorbell, event.comelit_intercom_doorbell fires a ring event. Video does not start automatically — you decide what happens via automations.
Event types fired on event.comelit_intercom_doorbell:
| Event type | Meaning |
|---|---|
ring |
Someone pressed the doorbell button |
missed_call |
The ring was not answered and the call timed out |
door_opened |
The entrance door was opened (e.g. by another resident) |
Basic notification:
alias: "Notify on doorbell ring"
mode: single
triggers:
- platform: state
entity_id: event.comelit_intercom_doorbell
to: "ring"
conditions: []
actions:
- action: notify.mobile_app_your_phone
data:
title: "Doorbell"
message: "Someone is at the door!"
Notification with action button to open the camera view:
alias: "Doorbell ring with camera shortcut"
mode: single
triggers:
- platform: state
entity_id: event.comelit_intercom_doorbell
to: "ring"
conditions: []
actions:
- action: notify.mobile_app_your_phone
data:
title: "Doorbell"
message: "Someone is at the door!"
data:
actions:
- action: URI
title: "Open Camera"
uri: /lovelace/intercom
Auto-start video on ring (opt-in):
If you want the video to start automatically when the doorbell rings:
alias: "Doorbell ring — notify and start video"
mode: single
triggers:
- platform: state
entity_id: event.comelit_intercom_doorbell
to: "ring"
conditions: []
actions:
- action: notify.mobile_app_your_phone
data:
title: "Doorbell"
message: "Someone is at the door!"
- action: button.press
target:
entity_id: button.comelit_intercom_start_video_feed
Protocol
The ICONA Bridge protocol runs over raw TCP on port 64100. Every message has an 8-byte header:
[0x00 0x06] [body_length LE16] [request_id LE16] [0x00 0x00]
Key operations:
- Authentication: Open UAUT channel → send JSON access request with token → expect code 200
- Configuration: Open UCFG channel → request config → parse doors, cameras, addresses
- VIP events: Persistent CTPP channel — binary messages for doorbell ring, door opened, renewal ACK; replaces FCM-based PUSH for reliable local event delivery
- Door open (video active): Single
0x1840/0x000Dmessage on the existing video CTPP channel — PCAP-verified from Android app local traffic capture - Door open (VIP listener active, no video): Reuse open CTPP, fire open+confirm directly — no init overhead (~30 ms)
- Door open (notifications disabled): Open transient CTPP channel → full init → 6-step binary sequence → close
- Push channel: Registers FCM token; also used as a 90s keepalive probe — device ACKs with JSON, preventing false reconnect cycles
Changelog
0.1.4.5
⚠ Breaking change — doorbell event type renamed
The VIP event type
doorbell_ringhas been renamed toring. Update any automations that trigger ondoorbell_ringto useringinstead.
- Fix: door open during video — trailing address field in the door-open payload now correctly uses the apartment address (
SB000006) instead of the entrance address; the earlier PCAP happened to have them equal, masking the bug - Fix: VIP ACK timestamps — corrected the timestamp increment for VIP channel ACKs; fixes notification reliability after doorbell events
- Fix: false reconnect failures — first reconnect failure now retries silently;
ECONNREFUSEDon wake-from-sleep retried up to 4 times before escalating missed_callevent —event.comelit_intercom_doorbellnow firesmissed_callwhen a ring goes unanswered- Restart notifications button — new diagnostic button to restart the VIP listener without a full integration reload
- VIP listener supervisor — auto-restarts the listener after transient errors instead of requiring a full coordinator reconnect
0.1.4.4
- Verbose logging option — new toggle in the integration options to enable detailed per-packet wire dump logs; chatty sub-loggers are pinned to INFO when off
- Notification service sensor — new diagnostic binary sensor reflecting whether the VIP event listener is active
- Fix: false-positive
door_openedevents — apartment-internal FSM transitions (0x1860/0x0003) no longer fire adoor_openedevent
0.1.4
⚠ Breaking change — entity IDs have changed
Entity IDs are now derived from the integration's title instead of the hardcoded string
"Comelit Intercom". If you added the integration before this version, your entity IDs may have changed (e.g. frombutton.comelit_intercom_actuatortobutton.comelit_192_168_1_111_actuatorif no custom name was set).Fix: remove and re-add the integration, giving it a friendly name (e.g.
Front Door) in the new Name field. Entities will then be stable going forward (e.g.button.front_door_actuator).
- Custom integration name — new optional "Name" field in the config flow sets the integration title and entity prefix; leave blank to use the host IP
- Options flow — enable or disable doorbell notifications after setup via Settings → Integrations → Configure without removing and re-adding the integration
- Reliable doorbell detection — replaced the FCM-based PUSH mechanism with a persistent CTPP channel listener (VIP events); actual call events are now received as binary messages on the device's local TCP channel, not via cloud FCM
- Doorbell notification card — new
comelit-doorbell-cardauto-registered on startup; shows ring alert with Answer/Dismiss buttons and transitions to live stream when answered - Door open during active video — pressing a door button while video is active sends a single message on the existing CTPP channel (PCAP-verified Android app behaviour); no second TCP connection
- Faster door open — when notifications are enabled, the CTPP channel is already open so door open skips the init handshake entirely (~30 ms vs ~2 s)
- Single shared TCP connection — video signaling, VIP event listening, and door control share the coordinator's TCP connection; eliminates conflicts when the device only accepts one client at a time
- Door auto-stop — pressing a door button while video is active automatically stops the video session 10 s later
- Faster time-to-first-frame — RTSP
PLAYresponse is gated until video RTP is flowing, preventing HA's stream worker from erroring on an empty stream; RTCP Sender Reports eliminate "no reference clock" delays in go2rtc, VLC, and browsers - Accurate camera state —
is_streamingproperty reflects the active session so the Lovelace card transitions correctly and go2rtc attaches via WebRTC on the first video session - TCP keepalive probe — push-info re-sent every 90 s keeps the connection alive during idle periods; prevents false reconnect cycles when the device is reachable but quiet
0.1.3
- Video renewal — inline re-establishment on CALL_END (~30s) without TCP reconnect; video is uninterrupted
- Custom Lovelace card — play-button UI auto-registered on HA startup; no manual resource configuration needed
- Concurrent session protection — a second video start while one is in progress is immediately rejected, preventing CTPP negotiation conflicts
- TCP video fallback — video works via TCP (RTPC2) when UDP is blocked by NAT/firewall
- Consistent entity naming — all entities use the
comelit_intercom_prefix (e.g.,button.comelit_intercom_actuator,camera.comelit_intercom_live_feed)
Acknowledgments
Protocol knowledge derived from community reverse-engineering efforts:
- ha-component-comelit-intercom by Nicolas Fricke
- comelit-client by Pierpaolo Follia
- Protocol analysis by grdw
License
Apache 2.0