Danimal4326/comelit-man

Custom component for HA that allows to use the comelit intercom in the local network

★ 0Forks 0PythonGitHub ↗Compare

README

Comelit Man

Home Assistant custom component for the Comelit 6701W WiFi video intercom. Communicates via the ICONA Bridge TCP protocol — no cloud required.

Fork of mnestrud/comelit-man with fixes for Home Assistant's built-in go2rtc, door opening when Home Assistant's intercom sub-address differs from the relay output, and camera-driven intercom calls.

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 + WebRTC
  • Two-way audio — hear the entrance and talk back from the doorbell card (mic requires an HTTPS origin — see below)
  • Doorbell events — automations trigger on ring, missed call, or door opened; passive inbound video starts on ring without answering (other stations keep ringing until you do)
  • Answer-station card — built-in WebRTC player using HA's native signaling; works on the local URL and remotely via Nabu Casa TURN
  • Last-ring snapshot — image entity holding a JPEG captured as each ring's video starts
  • 100% local — all call handling stays on your LAN; the cloud is only involved when you view remotely

Requirements

  • Comelit 6701W (or compatible ICONA Bridge device)
  • Device accessible on your local network
  • Home Assistant 2026.2.3+

Supported devices

Tested and confirmed working:

Device Firmware Notes
Comelit 6701W 2.x All features — door open, video, doorbell events

Likely compatible (same ICONA Bridge protocol):

  • Other Comelit WiFi video door panels using the ICONA Bridge protocol on port 64100
  • Compatibility is not guaranteed for devices with different firmware lines

The integration communicates via the ICONA Bridge TCP protocol on port 64100. If your device accepts TCP connections on that port and responds to UAUT/UCFG/CTPP messages, it is likely compatible.

Installation

HACS (Recommended)

  1. Add https://github.com/Danimal4326/comelit-man as a custom repository (type: Integration) in HACS
  2. Install Comelit Man
  3. Restart Home Assistant

Manual

  1. Copy the custom_components/comelit_man/ folder to your HA config/custom_components/ directory
  2. Restart Home Assistant

Configuration

  1. Go to Settings → Devices & Services → Add Integration
  2. Search for Comelit Man
  3. Enter your device IP and either:
    • Your device password (token will be extracted automatically), or
    • A pre-extracted 32-character hex token

Create a dedicated user (recommended). Tick Create a dedicated user on the device and Home Assistant will provision its own account on the intercom and mint its own token, instead of reusing one that already belongs to a phone. This matters: the intercom allows only one listener per identity, so sharing a token with the Comelit app makes the two kick each other off. Requires a free user slot on the device (the wall monitor's slot is never touched).

Notification settings

After setup, you can configure the integration via Settings → Integrations → Comelit Man → 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.

Changing this setting reloads the integration automatically.

Known limitations

  • Single concurrent video session — only one video stream can be active at a time. Starting a second session stops the first.
  • WiFi sleep — the 6701W disconnects from WiFi when idle (no active call). Wake it physically (ring the bell, or press a button) before testing network connectivity. The integration reconnects automatically once the device wakes.
  • No cloud — requires direct LAN access to the device. Remote access via VPN or a reverse proxy is your responsibility.
  • Fixed RTSP port — the integration uses a fixed RTSP port (8557). If another process is using that port at HA startup, the video feed will not work. Change the port in HA configuration or free up 8557.
  • Door open timing — when video is active, pressing a door button opens the door then stops video after 10 seconds. This matches the Android app's behavior.

Removing the integration

  1. Go to Settings → Devices & Services
  2. Find Comelit Man and open it
  3. Click the three-dot menu → Delete
  4. Confirm deletion
  5. Restart Home Assistant

The integration does not persist any state outside the config entry, so no manual cleanup is needed. The device's push-channel registration will lapse naturally once the keepalive probes stop.

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
button.comelit_intercom_answer_doorbell Start two-way audio on an active inbound call
image.comelit_intercom_last_ring_snapshot JPEG captured from video as the last ring arrived
lock.comelit_intercom_<door_name> Same relay as the door button, with lock semantics for HomeKit/voice
binary_sensor.comelit_intercom_ringing On for 30 s after a ring
binary_sensor.comelit_intercom_connectivity Diagnostic — connection health
sensor.comelit_intercom_last_ring Timestamp of the most recent ring (survives restarts)
sensor.comelit_intercom_ring_count Cumulative ring count (survives restarts)

Systems with more than one call origin also get a doorbell event entity per origin, created the first time that origin rings (a floor door appears as "Floor call"). Doors are exposed both as buttons and as locks — the buttons carry the stop-video-after-open behaviour and existing automations; the locks exist for HomeKit, voice assistants, and the lock card.

missed_call fires when a ring's passive video session ends without the Answer button being pressed (~2 minutes after the ring), or immediately if inbound video fails to start.

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 answer-station card — a complete answer surface with a built-in WebRTC player. Video and entrance audio play through HA's native WebRTC signaling (camera/webrtc/* over the authenticated websocket), so it works identically on your local URL and remotely — ICE configuration, including Nabu Casa TURN when subscribed, comes from HA:

type: custom:comelit-doorbell-card
doorbell_entity: event.comelit_intercom_doorbell
camera_entity: camera.comelit_intercom_live_feed
answer_entity: button.comelit_intercom_answer_doorbell
stop_entity: button.comelit_intercom_stop_video_feed
door_entity: button.comelit_intercom_entrance_lock  # optional — a button or lock entity
dismiss_after: 30  # optional, default 30s

States: Idle (thumbnail + doorbell badge) → Ringing (live video muted + Answer / Open Door / Dismiss) → Answered (video + entrance audio, mic chip, hang-up).

Two-way audio / microphone: browsers only allow microphone capture on a secure (HTTPS) origin — this is a Chromium rule with no workaround, and it applies inside the companion app too. In practice:

Connection See + hear Talk back
Local http:// URL ✅ ❌ — the card shows "mic needs HTTPS"
HTTPS (Nabu Casa remote, or local TLS) ✅ ✅ — tap the mic chip after Answer

Pressing Answer unmutes entrance audio, tells the device to open its audio channel, and (on HTTPS) starts transmitting your mic. Latency for talk-back is bounded to well under a second.

Doorbell Notifications

When someone rings the doorbell, event.comelit_intercom_doorbell fires a ring event. Video starts automatically as a passive viewer — the call is not answered and other intercom stations keep ringing until you press Answer. Video sessions end on their own when nobody is watching. Use automations to send notifications, open the door, or take snapshots.

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

Data update mechanism

The integration uses a push-first, poll-for-health model:

Mechanism What it does Frequency
VIP event listener Receives doorbell ring, missed call, and door-opened events as binary messages on the CTPP channel Instant (device pushes)
FCM keepalive probe Re-sends push-info registration every 90 s; device ACKs, keeping the idle TCP connection alive Every 90 s
Health-check poll Verifies the TCP connection is still alive; triggers reconnect if not Every 30 s
TCP disconnect callback Schedules an immediate health-check when the client detects a TCP drop Instant (on drop)

Entity availability mirrors coordinator connectivity: all entities become unavailable if the device is unreachable and recover automatically on reconnect.

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/0x000D message 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

Full wire-format reference — framing, channels, CTPP events, call sequences, media transport, audio, and the Home Assistant WebRTC path — is in docs/PROTOCOL.md.

Troubleshooting

Enable debug logging

Add to configuration.yaml:

logger:
  default: info
  logs:
    custom_components.comelit_man: debug

Then restart HA. Debug logs include TCP connection events, channel opens, keepalive probes, VIP events, and video session lifecycle.

Common problems

"Cannot connect" during setup

  • Confirm the device is awake (ping it, or physically interact with it)
  • Verify the IP address and that port 64100 is reachable (telnet <ip> 64100)
  • Check your router's firewall isn't blocking local LAN traffic

Authentication failed

  • If using a password, confirm it matches the device web interface password (default: comelit)
  • Re-extract the token via the web interface: http://<device-ip>:8080
  • After a firmware update, the token may change — delete and re-add the integration

Video doesn't start

  • Ensure no other app is using the ICONA Bridge (the device accepts only one TCP client at a time)
  • Check HA logs for CTPP negotiation errors
  • Port 8557 conflict: check if another process is using it (netstat -an | grep 8557)

Doorbell events not firing

  • Enable notifications in Settings → Integrations → Comelit Man → Configure
  • The VIP listener requires an active CTPP channel; check logs for "Failed to start VIP event listener"

Entities show as unavailable

  • The integration is reconnecting to the device; wait 30–60 s
  • If it stays unavailable, check the device is on the network and debug logs for reconnect errors

Changelog

Full history: CHANGELOG.md. Recent highlights:

1.5.0

  • Dedicated device user — opt-in during setup: the integration creates its own account on the intercom and mints its own token, so Home Assistant and the Comelit app no longer kick each other off a shared identity
  • Lock entities, ring sensors, per-caller doorbell entities — doors are also locks (HomeKit/voice), last-ring + ring-count sensors restore across restarts, and each call origin gets its own event entity
  • Broader device support — apartment-block numeric addresses, kit-mode dropped prefixes, floor-call origin tag
  • Fixed token auto-extraction — the backup scan matched facerecognitionusers.cfg instead of users.cfg, breaking setup with a blank token field

1.4.0

  • Two-way audio validated end-to-end — talk-back from the doorbell card to the entrance speaker, with transport-matched mic TX, 20 ms re-chunking, and PCMU→PCMA conversion
  • Doorbell card is a full answer station — built-in WebRTC player over HA's native signaling; works locally and remotely (Nabu Casa TURN); mic on HTTPS origins
  • Rings during an active call fire events; real missed-call detection; video ends when nobody is watching

1.2.0 and earlier

  • 1.2.0 — inbound video auto-starts on ring; audio sender wired to the answer flow
  • 1.1.x — inbound call answer, ring standard event type, go2rtc backchannel groundwork
  • 1.0.x — first stable release; quality-scale hardening, strict typing, coverage
  • 0.1.4 — breaking: entity IDs derive from the integration title (see CHANGELOG.md if upgrading from pre-1.0)

Acknowledgments

Protocol knowledge derived from community reverse-engineering efforts:

License

Apache 2.0

Contributors

mnestrudantoiba86Danimal4326

Issues