Abode security cameras

As promised, here’s the first release of a Home Assistant add-on to enable live streaming from Abode security cameras.

NOTE: this version includes a fix for the streams timing out after a few minutes!

This builds on the excellent work by @AlexxIT and his incredible go2rtsp add-on.

Installation:

  1. Install the existing Abode integration. Make sure it detects your cameras and adds entities for them.
  2. Install HACS and the WebRTC Camera component.
  3. Go to Settings > Add-ons > Add-on Store > Repositories and add https://github.com/tradel/hassio-addons as a repository.
  4. Install the “Abode Camera Streamer” addon.

Then you can create custom Lovelace dashboards to display your live views. Add a card with the “Custom: WebRTC Camera” component, and paste this into the YAML:

type: custom:webrtc-camera
streams:
  - type: webrtc
    url: kitchen_cam

More complete docs, and the open-source code, can be found here:

hassio-addons/abode2rtc at main · tradel/hassio-addons (github.com)

Looking forward to everyone’s feedback! Happy streaming.

Wow! Amazing work! I am so excited to try this out to test. I’m working on the installation but I am getting an error when trying to install your abode add-on. I am getting a “Failed to Install add-on” error. Here is the error message:

Can’t install ghcr.io/tradel/aarch64-addon-abode2rtc:1.1.1: 500 Server Error for http+docker://localhost/v1.43/images/create?tag=1.1.1&fromImage=ghcr.io%2Ftradel%2Faarch64-addon-abode2rtc&platform=linux%2Farm64: Internal Server Error (“Head “https://ghcr.io/v2/tradel/aarch64-addon-abode2rtc/manifests/1.1.1”: unauthorized”)

Any ideas why this may be? Am I doing something incorrect? Thank you again for all of your hard work!

Easy fix. The releases were marked private by default and I forgot to make them public. Give me 10 minutes.

1 Like

I have them up and running! Looking forward to future updates regarding the streams/bad handshakes. If there is anything I can do to help, please let me know. Question, if/when they are stable streams, is there any way to add these streams to HomeKit by using the HomeKit bridge integration?

Maybe? I have no idea. Haven’t done much work with HomeKit.

I’m working on some ideas for keeping the streams alive. Will post here when I have something working.

1 Like

Good news! I have done a major rewrite/refactor of the code, and the streams shouldn’t time out anymore. I now grab the KVS endpoints from Abode right before the stream starts, so as long as the stream is playing, it should be fine. I haven’t had time to test what happens if you leave a stream paused for a while.

@laplacacm let me know if you have a chance to update to 1.2.2 and test it out.

Awesome! I will work on it tonight and let you know. Thank you!

is there a way to install this manually or via docker? looking forward to testing it out!

It should be possible now, but I haven’t written up instructions yet. Once I get time to write it up, I’d be excited to have you try it.

1 Like

First, thank you for your work on this!

I am not quite sure what I might be missing, but I am unable to get this to work. So far, I’ve done the following:

  • HA was already up and running, already with Abode integrated and I have my cameras showing (though no pictures or video, as expected)

  • HACS was already installed and working

  • Added the WebRTC Camera component, configured, seems OK

  • Added the abode2rtc repository and added the Abode Camera Streaming add on to HA

The first issue I ran into was that I had 2FA enabled, which I see is not yet supported, so I removed that (definitely don’t want to do that, but hopefully that will be supported in the future). Once I did that, the Abode Camera Streaming add on starts fine (seems to be exactly the same as what I see under go2rtc)

I see no streams listed under that add-on. Perhaps that’s normal?

I then tried to add two of the cameras to an existing dashboard using “Custom: WebRTC Camera”, entering the code as:

type: custom:webrtc-camera
streams:

  • type: webrtc
    url: kitchen_cam ← replacing this with the entity name of my camera

When I save and try to view the streams, I just see this:

If I check the CONFIG under the Abode Camera Streaming add on (or the go2rtc add on), it shows only:

streams:

Am I missing something? I don’t see where it’s putting the actual Amazon Kenisis URL into the config, but I’m also not sure that’s exposed to me. The example you give seems only for reference I assume.

Thanks!

Can you turn on debug and paste the abode2rtc logs here?

Don’t mean to be paranoid but the debug logs seem to contain a good bit of personal / specific information I’d rather not post online. Is there a specific section or strings I can look for and post? Thanks again.

Here is everything other than the long lines beginning with “Response from Home Assistant”, which seem to have all of the more sensitive info. Hopefully this will be useful. I had to replace http with h-t-t-p in the URLs since it won’t let me post more than two.

2023-12-03 14:09:12,249 abode2rtc [DEBUG] Got HA supervisor token:
2023-12-03 14:09:12,250 abode2rtc [INFO] Calling Home Assistant API: GET /addons/self/info
2023-12-03 14:09:12,250 abode2rtc [DEBUG] Full URL: h-t-t-p://supervisor/addons/self/info
2023-12-03 14:09:12,251 abode2rtc [DEBUG] Headers: {‘User-Agent’: ‘python-requests/2.31.0’, ‘Accept-Encoding’: ‘gzip, deflate’, ‘Accept’: ‘application/json’, ‘Connection’: ‘keep-alive’, ‘Authorization’: ‘Bearer **********’, ‘Content-Type’: ‘application/json; charset=utf-8’}
2023-12-03 14:09:12,252 abode2rtc [DEBUG] Data: None
2023-12-03 14:09:12,262 abode2rtc [INFO] Checking Home Assistant configuration
2023-12-03 14:09:12,263 abode2rtc [INFO] Calling Home Assistant API: GET /core/api/config
2023-12-03 14:09:12,264 abode2rtc [DEBUG] Full URL: h-t-t-p://supervisor/core/api/config
2023-12-03 14:09:12,265 abode2rtc [DEBUG] Headers: {‘User-Agent’: ‘python-requests/2.31.0’, ‘Accept-Encoding’: ‘gzip, deflate’, ‘Accept’: ‘application/json’, ‘Connection’: ‘keep-alive’, ‘Authorization’: ‘Bearer **********’, ‘Content-Type’: ‘application/json; charset=utf-8’}
2023-12-03 14:09:12,265 abode2rtc [DEBUG] Data: None
2023-12-03 14:09:12,289 abode2rtc [DEBUG] Installed components: [‘switch.adguard’, ‘cloud’, ‘my’, ‘schedule’, ‘binary_sensor.abode’, ‘alarm_control_panel.mqtt’, ‘light.ring’, ‘ipp’, ‘input_select’, ‘switch’, ‘water_heater’, ‘sensor.schlage’, ‘switch.sensibo’, ‘climate.smartthinq_sensors’, ‘water_heater.smartthinq_sensors’, ‘sensor.sonos’, ‘sensor.litterrobot’, ‘repairs’, ‘binary_sensor.upnp’, ‘homeassistant’, ‘device_automation’, ‘update.hassio’, ‘update.sensibo’, ‘cast’, ‘button’, ‘sensor.lyric’, ‘humidifier’, ‘hue’, ‘image’, ‘select’, ‘light.bond’, ‘sensor.hacs’, ‘analytics’, ‘bluetooth’, ‘button.sensibo’, ‘vesync’, ‘cover.abode’, ‘fan.smartthinq_sensors’, ‘event.hue’, ‘humidifier.smartthinq_sensors’, ‘switch.abode’, ‘sensor.ipp’, ‘siren.ring’, ‘binary_sensor’, ‘blueprint’, ‘climate’, ‘api’, ‘media_player’, ‘sensor.mobile_app’, ‘camera’, ‘sensor.smartthinq_sensors’, ‘smartthinq_sensors’, ‘sensor.ring’, ‘camera.ring’, ‘tplink’, ‘energy’, ‘homekit_controller’, ‘switch.mqtt’, ‘switch.hue’, ‘sensor.ibeacon’, ‘light.hue’, ‘light.zha’, ‘mqtt’, ‘stt’, ‘binary_sensor.hassio’, ‘persistent_notification’, ‘network’, ‘vacuum.litterrobot’, ‘lawn_mower’, ‘lyric’, ‘fan.mqtt’, ‘binary_sensor.hue’, ‘sensor.flo’, ‘media_source’, ‘tag’, ‘media_player.cast’, ‘otbr’, ‘update’, ‘text.mqtt’, ‘input_button’, ‘water_heater.mqtt’, ‘binary_sensor.mqtt’, ‘image.mqtt’, ‘sun’, ‘light.abode’, ‘notify.mobile_app’, ‘switch.flo’, ‘binary_sensor.rpi_power’, ‘button.litterrobot’, ‘sensor.zha’, ‘person’, ‘template’, ‘fan’, ‘sensor.vesync’, ‘siren’, ‘light.mqtt’, ‘lawn_mower.mqtt’, ‘binary_sensor.ring’, ‘climate.zha’, ‘number.zha’, ‘siren.zha’, ‘auth’, ‘dhcp’, ‘script’, ‘rachio’, ‘sensor.template’, ‘binary_sensor.zha’, ‘binary_sensor.litterrobot’, ‘lock.schlage’, ‘adguard’, ‘number.mqtt’, ‘number.sonos’, ‘switch.smartthinq_sensors’, ‘homeassistant_sky_connect’, ‘sensibo’, ‘sensor.adguard’, ‘time’, ‘switch.ring’, ‘binary_sensor.smartthinq_sensors’, ‘onboarding’, ‘hassio’, ‘radio_browser’, ‘upnp’, ‘diagnostics’, ‘trace’, ‘logger’, ‘search’, ‘light’, ‘logbook’, ‘fan.vesync’, ‘device_tracker.mqtt’, ‘select.sensibo’, ‘application_credentials’, ‘select.litterrobot’, ‘timer’, ‘binary_sensor.flo’, ‘alexa’, ‘button.bond’, ‘hacs’, ‘switch.litterrobot’, ‘binary_sensor.mobile_app’, ‘sensor.hassio’, ‘climate.sensibo’, ‘websocket_api’, ‘scene’, ‘homekit’, ‘number’, ‘select.mqtt’, ‘device_tracker.ibeacon’, ‘schlage’, ‘system_health’, ‘input_boolean’, ‘climate.lyric’, ‘wake_word’, ‘lovelace’, ‘vacuum’, ‘button.mqtt’, ‘counter’, ‘button.smartthinq_sensors’, ‘button.zha’, ‘lock.zha’, ‘homeassistant_hardware’, ‘switch.sonos’, ‘abode’, ‘scene.hue’, ‘tts.google_translate’, ‘hardware’, ‘webhook’, ‘assist_pipeline’, ‘input_text’, ‘wemo’, ‘binary_sensor.rachio’, ‘sensor.hue’, ‘sonos’, ‘bluetooth_adapters’, ‘camera.mqtt’, ‘switch.rachio’, ‘humidifier.mqtt’, ‘button.homekit_controller’, ‘cover.bond’, ‘media_player.sonos’, ‘sensor’, ‘camera.abode’, ‘mobile_app’, ‘cover’, ‘thread’, ‘sensor.sensibo’, ‘raspberry_pi’, ‘media_player.androidtv_remote’, ‘automation’, ‘input_datetime’, ‘binary_sensor.sensibo’, ‘notify’, ‘number.sensibo’, ‘cover.mqtt’, ‘lock’, ‘remote’, ‘alarm_control_panel.abode’, ‘select.zha’, ‘image_upload’, ‘binary_sensor.homekit_controller’, ‘tts.cloud’, ‘input_number’, ‘device_tracker.mobile_app’, ‘cover.zha’, ‘config’, ‘media_player.apple_tv’, ‘sensor.mqtt’, ‘text’, ‘ibeacon’, ‘scene.mqtt’, ‘event’, ‘siren.mqtt’, ‘usb’, ‘alarm_control_panel.zha’, ‘device_tracker’, ‘zeroconf’, ‘device_tracker.zha’, ‘ffmpeg’, ‘sensor.sun’, ‘switch.tplink’, ‘zone’, ‘binary_sensor.schlage’, ‘stream’, ‘binary_sensor.sonos’, ‘event.mqtt’, ‘update.mqtt’, ‘conversation’, ‘sensor.abode’, ‘default_config’, ‘light.tplink’, ‘homeassistant_alerts’, ‘sensor.upnp’, ‘androidtv_remote’, ‘lock.abode’, ‘remote.androidtv_remote’, ‘switch.bond’, ‘map’, ‘zha’, ‘alarm_control_panel’, ‘ring’, ‘scene.homeassistant’, ‘recorder’, ‘history’, ‘file_upload’, ‘flo’, ‘time.litterrobot’, ‘http’, ‘switch.zha’, ‘lock.mqtt’, ‘sensor.tplink’, ‘sensor.energy’, ‘binary_sensor.cloud’, ‘bond’, ‘google_assistant’, ‘system_log’, ‘sensor.homekit_controller’, ‘ssdp’, ‘climate.mqtt’, ‘rpi_power’, ‘litterrobot’, ‘vacuum.mqtt’, ‘fan.zha’, ‘switch.schlage’, ‘apple_tv’, ‘tts’, ‘frontend’, ‘remote.apple_tv’, ‘fan.bond’, ‘webrtc’]
2023-12-03 14:09:12,290 abode2rtc [INFO] Home Assistant has the Abode integration installed
2023-12-03 14:09:12,290 abode2rtc [INFO] Getting current state of entities
2023-12-03 14:09:12,291 abode2rtc [INFO] Calling Home Assistant API: GET /core/api/states
2023-12-03 14:09:12,291 abode2rtc [DEBUG] Full URL: h-t-t-p://supervisor/core/api/states
2023-12-03 14:09:12,292 abode2rtc [DEBUG] Headers: {‘User-Agent’: ‘python-requests/2.31.0’, ‘Accept-Encoding’: ‘gzip, deflate’, ‘Accept’: ‘application/json’, ‘Connection’: ‘keep-alive’, ‘Authorization’: ‘Bearer **********’, ‘Content-Type’: ‘application/json; charset=utf-8’}
2023-12-03 14:09:12,293 abode2rtc [DEBUG] Data: None
2023-12-03 14:09:12,370 abode2rtc [INFO] Found 4 Abode cameras in Home Assistant
2023-12-03 14:09:12,371 abode2rtc [DEBUG] Looking for a camera in Home Assistant that matches id XF:b0c5ca34a594
2023-12-03 14:09:12,372 abode2rtc [DEBUG] Comparing XF:b0c5ca34a594 to XF:b0c5ca34a594
2023-12-03 14:09:12,372 abode2rtc [DEBUG] Found camera in Home Assistant, go2rtc slug will be back_patio_camera
2023-12-03 14:09:12,373 abode2rtc [DEBUG] Looking for a camera in Home Assistant that matches id XF:b0c5ca3c6471
2023-12-03 14:09:12,373 abode2rtc [DEBUG] Comparing XF:b0c5ca3c6471 to XF:b0c5ca34a594
2023-12-03 14:09:12,374 abode2rtc [DEBUG] Comparing XF:b0c5ca3c6471 to XF:b0c5ca3c6471
2023-12-03 14:09:12,374 abode2rtc [DEBUG] Found camera in Home Assistant, go2rtc slug will be roastery
2023-12-03 14:09:12,375 abode2rtc [DEBUG] Looking for a camera in Home Assistant that matches id XF:b0c5ca3bf3ac
2023-12-03 14:09:12,375 abode2rtc [DEBUG] Comparing XF:b0c5ca3bf3ac to XF:b0c5ca34a594
2023-12-03 14:09:12,376 abode2rtc [DEBUG] Comparing XF:b0c5ca3bf3ac to XF:b0c5ca3c6471
2023-12-03 14:09:12,377 abode2rtc [DEBUG] Comparing XF:b0c5ca3bf3ac to XF:b0c5ca3bf3ac
2023-12-03 14:09:12,377 abode2rtc [DEBUG] Found camera in Home Assistant, go2rtc slug will be front_patio_camera
2023-12-03 14:09:12,378 abode2rtc [DEBUG] Looking for a camera in Home Assistant that matches id XF:b0c5ca3c3bf8
2023-12-03 14:09:12,378 abode2rtc [DEBUG] Comparing XF:b0c5ca3c3bf8 to XF:b0c5ca34a594
2023-12-03 14:09:12,379 abode2rtc [DEBUG] Comparing XF:b0c5ca3c3bf8 to XF:b0c5ca3c6471
2023-12-03 14:09:12,379 abode2rtc [DEBUG] Comparing XF:b0c5ca3c3bf8 to XF:b0c5ca3bf3ac
2023-12-03 14:09:12,380 abode2rtc [DEBUG] Comparing XF:b0c5ca3c3bf8 to XF:b0c5ca3c3bf8
2023-12-03 14:09:12,380 abode2rtc [DEBUG] Found camera in Home Assistant, go2rtc slug will be back_yard_camera
2023-12-03 14:09:12,397 abode2rtc [INFO] Writing go2rtc configuration to /tmp/go2rtc.yaml
2023-12-03 14:09:12,398 abode2rtc [INFO] Searching for go2rtc binary in system path
2023-12-03 14:09:12,399 abode2rtc [DEBUG] Searching for go2rtc in [‘/app’, ‘/usr/local/lib/python311.zip’, ‘/usr/local/lib/python3.11’, ‘/usr/local/lib/python3.11/lib-dynload’, ‘/usr/local/lib/python3.11/site-packages’]
2023-12-03 14:09:12,400 abode2rtc [INFO] Found go2rtc in /usr/local/bin/go2rtc
2023-12-03 14:09:12,400 abode2rtc [INFO] Starting go2rtc…
2023-12-03 14:09:12,412 go2rtc [INFO] go2rtc version 1.8.4 linux/arm64
2023-12-03 14:09:12,412 go2rtc [ERROR] [rtsp] listen error=“listen tcp :8554: bind: address already in use”
2023-12-03 14:09:12,416 go2rtc [ERROR] [api] listen error=“listen tcp :1984: bind: address already in use”

Looks like something else is already listening on ports 1984 and 8554. Try changing the port settings, or stop the other addon that’s causing the conflict.

The issue seems to be that go2rtc was running also. I assumed this required, but once I stopped it, then restarted abode2rtc, my cameras showed up automatically, and I can view the streams.

EDIT:

It’s also worth mentioning that the camera name I have to use for the Lovelace dashboard needs to match what is listed in abode2rtc, not the full HA entity name (which in my case is the same, minus the “camera.” prefix). Probably my misunderstanding but it tripped me up a bit.

Thanks for your help!

EDIT 2 (new user limit)

I was able to take the RTSP stream URL and use it within Scrypted to expose it to Homekit. I assume the same can be done within HA (or via some other stream type), but I use Scrypted anyway, so this made it easy!

Thanks!

Like some other addons, I embed a copy of go2rtc and run it to handle the streams.

If only go2rtc supported remote configuration and hot reloads. Then we could have one go2rtc container and have various other addons just feed into it.

A naive question, how can I specify custom ports? The installer only prompts for 1984, assuming it’s as simple as choosing another port (e.g. 1986), how do I change 8554?

I have Reolink camera integration in addition to Abode, I believe it’s already using 1984/8554 ports

Check the configuration page for the addon. It should look like this:

(still doesn’t work, different error)

Thank you, I’ve changed ports there and restarted the Add-on, now it says

2023-12-06 12:07:36,441 go2rtc [INFO] go2rtc version 1.8.4 linux/arm64
2023-12-06 12:07:36,442 go2rtc [INFO] [rtsp] listen addr=:8557
2023-12-06 12:07:36,448 go2rtc [INFO] [api] listen addr=:1986

One thing that is confusing when I install webRTC integration, it still prompts me to have public endpoints mapped to original 1984/8555 ports.

The WebRTC integration shows no cameras, may be that’s expected. The custom WebRTC card is still blank, with an “error” word in the upper-right corner. While clicking on it, a message appears “No video with supported format and MIME type found” for a split second, sorry I can’t get a screenshot

I’ve fixed it by using url as

rtsp://192.168.XXX.XXX:8557/entrance_camera

not just entrance_camera
Is there any way to simplify the url?