Eufy Security Integration

I think my problem is your first image, you have devices listed on your WebRTC. I don’t have any. I don’t see in your steps or any of the other guides anything about how to connect WebRTC to the devices. Thought maybe it was automatic since I didn’t see a step but if it is, it didn’t work for me.

Couldnt get it working yet. Believe the integration was not initializing properly. Reverted to snapshot and will try when i have more time later this week.

1 Like

It’s automatic and a consequence of invoking the camera entity in a webrtc custom card.

1 Like

I’m having issues with the 2k wired doorbell. I’ve had it working before, but it broke recently. Tried following the steps above, integration updated to v8.0.0, and using the webRTC fork (GitHub - fuatakgun/WebRTC: Home Assistant custom component for real-time viewing of almost any camera stream using WebRTC and other technologies.), but getting the unsupported scheme error. http://192.168.0.36:1984/ shows go2rtc version 1.8.4. Quality set to low, but still appears to be using h265.

OK thanks, I didn’t do the custom card part. I’ll give that a shot and see what happens!

I reinstalled everything from scratch a few times and it works :slight_smile:

I love these kind of solutions:-)

Joke aside, with go2rtc, both codecs are usable (h264 and h265)

1 Like

@RT1080 , Thank you!
I will try to improve my search skills…

1 Like

Now the doorbell works again, i’m trying to make something like this:

There are a couple of caviats here: p

  • im not sure about the url for the picture if it works
  • im not sure of the uri for the eufy app?

There is still something wrong in my code

alias: Deurbel activatie
  description: "Deurbel notificatie"
  trigger:
    - entity_id: binary_sensor.deurbel_ringing
      platform: state
      to: 'on'
  condition: []
  action:
    - service: notify.mobile_app_smartphone_me
      data:
        message: Er staat iemand aan de voordeur!
        title: Deurbel geactiveerd!
        data:
        image: http://x.x.X.x:8123/api/image_proxy/image.deurbel_event_image?token=f6143dcff7156456213153153435435135a2da946d727&state=unknown"
        priority: high
        ttl: 0
        actions:
          - action: URI
            title: Open Eufy App
            uri: fb1675493782511558://

Quick question, when using the service “generate image” - what happens behind the scenes? Does this activate streaming or is it required to first activate streaming and then trigger the “generate image” service? And secondly, is the image stored anywhere or is this “simply” updating the static image of the camera entity?

Also - is there a way to force update the Event Image? According to bropat’s scheme this should be possible (unless I misunderstood)

An example exists on readme

When streaming is happening, generate image saves a capture of the ongoing stream and store it as camera thumbnail.

This normally happens every 10 seconds when it is streaming but if you want to use the latest one from streaming for your notifications, you should first generate it to let home assistant store the latest one and use it on notification.

There is no way to force cameras to get a fresh image without an event, share with me what you found

Superb thx! Gonna look and do some testing !

Thanks - indeed not possible to force an event, but should be possible to force update the integration to show the last event.

At the moment the Event Image never updates unless the add on is restarted - even an update of the integration doesn’t trigger this - conversely, when the integration is updated the Snapshot of the camera entity reverts back to the image of the “event image”

In my case, last image on doorbell is dated 29 December 3pm; this is not in line with the eufy app. The moment I restart the add-on the image is updated to the last event image in the eufy app. This suggests that the functionality is included in the addon but not invoked by the integration - same discussion on GitHub - I cannot find this last event image sensor you refer to.

Perhaps my automations are useful. First takes a snapshot in case of person motion event or doorbell press and saves to JPEG.

Second triggers notification, both on the Google speakers (home office, time bound) and on the phone - I hope that the person motion picks it up timely for the picture to be refreshed by the time the doorbell is pressed. Ca 75% of time this works…

alias: Doorbell snapshot
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.doorbell_person_detected
    to: "on"
  - type: running
    platform: device
    device_id: 0370086aa9fa1726253cd745957e53fe
    entity_id: binary_sensor.doorbell_ringing
    domain: binary_sensor
condition: []
action:
  - if:
      - condition: state
        entity_id: sensor.doorbell_stream_status
        state: StreamStatus.IDLE
    then:
      - service: eufy_security.start_p2p_livestream
        data: {}
        target:
          entity_id:
            - camera.doorbell
      - delay:
          hours: 0
          minutes: 0
          seconds: 0
          milliseconds: 750
      - service: camera.snapshot
        data:
          filename: /config/www/doorbell_snapshot.jpg
        target:
          entity_id: camera.doorbell
      - service: eufy_security.stop_p2p_livestream
        data: {}
        target:
          entity_id: camera.doorbell
    else:
      - delay:
          hours: 0
          minutes: 0
          seconds: 0
          milliseconds: 250
      - service: camera.snapshot
        target:
          entity_id: camera.doorbell
        data:
          filename: /config/www/doorbell_snapshot.jpg
mode: parallel
max: 3

Below includes an actionable notification, eg i can trigger an open door action on Nuki. Please ignore for your use case.

alias: Doorbell pressed
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.doorbell_ringing
    to: "on"
condition: []
action:
  - parallel:
      - service: notify.mobile_app_nokia_7_2
        data:
          message: Someone at the door
          data:
            image: local/doorbell_snapshot.jpg
            actions:
              - action: Open_door
                authenticationRequired: null
                title: Open the front door
      - if:
          - condition: time
            after: "08:00"
            before: "19:00"
            weekday:
              - mon
              - tue
              - wed
              - thu
              - fri
        then:
          - service: media_player.play_media
            data:
              media_content_id: http://local-ha-ipaddress:8123/local/doorbell.mp3
              media_content_type: audio/mp3
            target:
              entity_id:
                - media_player.attic_back_speaker
                - media_player.attic_front_speaker
            enabled: true
mode: single

I would enable debug on add-on and integration and share findings. Integration is actively listening changes coming from add-on and presenting them in home assistant.

Your image might be in a different format than integration is expecting or add-on might be failing to pass it to integration.

Yes, will do that. Do you know how to log the add on for an extended period of time and get access to the full log? For some reason i can only see what’s on screen (which is not much).

Looking at the amount of people who indicate/refer to this there are ample with the same issue I think.

If you have portainer, you can access any container logs from the ui.

If not, you need to access system logs to read them all.

Not sure, if supervisor allows you to access container (add-on) logs without a limitation.

1 Like

On a different note, curious to hear if anyone else experiences the same. I use the poster feature in web-rtc to generate the still image. However when for some reason the camera entity does not contain a valid picture (and this happens a few times per day) It throws up a rather nasty error ultimately resulting in a login fail in turn culminating in a ban.

Anyone else experiencing the same? Wonder if it’s my reverse proxy or webrtc causing this.

Login attempt or request with invalid authentication from Pixel-6.iot (my-ip). Requested URL: '/api/webrtc/ws?authSig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIwN2EzMjU4OTM3YzU0N2QzODY5ZGQyYjk5NGEwOTk5NyIsInBhdGgiOiIvYXBpL3dlYnJ0Yy93cyIsInBhcmFtcyI6W10sImlhdCI6MTcwNDAwOTU5MiwiZXhwIjoxNzA0MDA5NjIyfQ.hmFR9LEzfa1wz3XGdnyYZVVO_ODCz7LeSxxNRBW-zwI&poster=image.front_yard_front_event_image'. 
(Mozilla/5.0 (Linux; Android 14; Pixel 6 Build/UQ1A.231205.015; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.144 Mobile Safari/537.36 Home Assistant/2023.12.4-11898 (Android 14; Pixel 6))
Logger: aiohttp.server
Source: /usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py:421
First occurred: 29 December 2023 at 16:00:50 (78 occurrences)
Last logged: 09:04:15

Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 452, in _handle_request
    resp = await request_handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py", line 543, in _handle
    resp = await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 114, in impl
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 227, in forwarded_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 233, in auth_middleware
    return await handler(request)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/headers.py", line 31, in headers_middleware
    response = await handler(request)
               ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 149, in handle
    result = await handler(request, **request.match_info)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/webrtc/__init__.py", line 253, in get
    return await ws_poster(hass, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/webrtc/__init__.py", line 199, in ws_poster
    image = await camera_get_image(hass, poster)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/camera/__init__.py", line 210, in async_get_image
    return await _async_get_image(camera, timeout, width, height)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/camera/__init__.py", line 194, in _async_get_image
    raise HomeAssistantError("Unable to get image")
homeassistant.exceptions.HomeAssistantError: Unable to get image

Not facing this issue