Camera System Bindings: Viewing, and downloading videos to user's network

Hello all,

I have been maintaining the Blink Binding, 2026 for just a short time, and have been considering how to allow videos stored by the retail cloud system, onto the user’s local home network.

Conceptually, other camera-based systems may have already implemented something like this, and I’d like advice and inspiration. Perhaps my thoughts may inspire other Binding authors to follow my lead, if it doesn’t suck too much.

I came across a discussion about the Ring Binding, where @Paul_Smedley mentioned preparing to allow for download of videos and images, in this post: Ring Binding [3.2.0;4.9.0) - #167 by Paul_Smedley

Ideally, we would find someone in the audience who has both Ring and Blink devices and could facilitate the conversation.

I went searching the forums because I’m thinking about how to implement automatic video download by the binding itself (and stored on disk on the server where OH runs); rather than manually initiated by the user via the web browser (and stored on the desktop/laptop where the user sits). There are certainly use cases for both download functionalities.

What I have done so far:

  1. Create a channel for each camera, presenting the “latest thumbnail” as the content. A thumbnail is a static image which the retail Blink phone app shows to the user in the “Home Screen”, or main menu of cameras. The Blink Binding periodically (based on user configuration) polls the retail Blink API and downloads the latest thumbnails (if new).
  2. (This feature predated my involvement): Provided a Thing Channel which is Triggered when motion is detected (this is not real time, unfortunately–the period polling mentioned above detects the motion so it is seconds-to-minutes delayed, which is a major deficiency).
  3. Each camera has a On/Off channel so that the user can (view, and / or) control whether motion detection is enabled. For blink, motion detection events result in a video file being generated on the retail Blink cloud, or if the user has a thumb drive installed locally, the video may be stored on said thumb drive instead of on the Blink cloud (but these videos are accessible to the retail Blink phone app regardless of where they are stored).
  4. Created a servlet-web page (running in the OH JVM) which allows the user to visually see all video files stored by the retail Blink cloud, on a timeline view, with a separate swim lane for each camera. There is a small timeline at the bottom showing every video stored by the cloud (they limit it to 500 videos or 60 days unless you pay for a subscription), and a larger timeline above that, showing a zoomed-in view. The user can zoom in and out and pan the zoom window forward and backward in time to see historical recordings. Hovering on a video clip shows the thumbnail, and clicking on it allows the user to play the video in this web page using the browser’s built-in video playback controls. Here is a screenshot showing a video being played back. The selected video is an animated (pulsating) rectangle on the “CB-Driveway” swim lane.

This is a work in progress, missing a legend (blue is viewed, green is new), and proper memory management (I’m caching too much stuff without limit), and keyboard navigation, so it’s not really ready for prime time. But I wanted to put this out there in case:

  1. I’m going overboard
  2. I’m implementing something verboten in conventional OH behaviors
  3. Obviously, the servlet web page isn’t a very OH-like view since it doesn’t provide channels for all of this data, and so it probably doesn’t translate well to the openhab cloud connector, for example. I’m not really sure how I would do that.

Things I am thinking about doing–stop me or point me in a useful direction, if you have advice:

  1. Should video(s) be exposed via a channel? Which videos? Maybe just the latest video for each camera (as a channel of the camera itself).
  2. Provide a way to watch multiple videos back-to-back. The Blink cameras only record for a duration of 60 seconds max, and if they retrigger due to continued movement lasting minutes long, it would be nice to watch them all without having to click them individually.
  3. Provide a way to watch a certain time window, with multiple cameras tiled onscreen. For example, when I drive home, I may trigger 3 or 4 cameras with overlapping time periods, as I come down the driveway, into the garage, and so on. If I wanted to play back a 5 minute period of time, there could be 4 different cameras, with videos which are staggered and overlapping in time, and it would be interesting to have the 4 cameras tiled on the page, with playback synchronized (i.e. each subsequent camera playback delayed in accordance with its video start timestamp).
  4. Provide a way to automatically download videos and possibly delete them from the retail Blink cloud, to minimize the duration in which a corporation has access to my content (I acknowledge that it’s probable that they secretly retain all of my recordings forever, even if I delete them). But nonetheless, I want every recording I ever made downloaded to my local filesystem and stored indefinitely. (I’m actually doing this already using a python script I wrote around the blinkpy library, running as a daily cron job, but it would be nice to have this natively in OH). There would be lots of filesystem access and size management issues to consider here.
  5. Provide a way for my Blink Binding servlet view to look not only at the retail Blink cloud for recordings, but also on the local filesystem (assuming I’ve implemented the previous bullet point) for a seamless viewing of historical videos.
  6. I don’t own any Ring cameras, or other brand surveillance cameras, but if I did, I’d probably want the aforementioned historical video viewing page to show all recordings from all of these systems
  7. If I were to migrate from a retail US-corporate cloud solution, into something standalone and self-managed (e.g. Reolink, which Hands-On-Katie recommends, FWIW), then I’d want these clips integrated into the viewer. But then it really isn’t a “blink binding” viewer anymore, so from a scope perspective, I’m way out of bounds here, and looking for advice.

So here I am, and wondering if what they say is true: the internet is filled with people willing to give their opinion on what I should do. Don’t let me down! :rofl: Also if you feel so inclined, buy me a coffee–there is a ko-fi link in my profile!

Note: I plan to link to this post from the Ring Binding discussion and the Blink Binding 2026 discussion, to draw both crowds here for their perspectives.

Thank you for reading to the end, those of you who haven’t yet fallen asleep.

1 Like

I really like this idea and would be very useful and increase the usability of the Blink cameras.

  1. Would love video to be exposed as a channel, the latest one would probably be enough?
  2. Agree, but this could be ‘hidden’ i.e. the ‘latest’ video (point 1) could be any from that camera that have triggered within the maximum retrigger time stitched into one view.
  3. This really would be a fantastic addition. Maybe consider a phased approach and leave this to a later phase as it relies on having the videos stitched together etc??
  4. Agree
  5. Agree - although ‘local’ could also include any downloaded to the OpenHAB system (as mentioned) not just those available to the Blink App. This way clips that are older than the maximum automatic delete time could also be retained and viewed as stored locally.
  6. Not sure if this is necessary. My assumption would be that people are in one or the other eco systems. But only my assumption.
  7. Think this is possibly scope creep and it should be contained to a specific eco system and, to the best of my knowledge, those other types of systems you have mentioned are all IP cameras and therefore are already accessible via the IP Camera Binding (al be it without the additional functionality you are talking about). Although if point 5 was implemented then possibly that covers other systems as long as they can be saved and viewed by the OpenHAB system?

Just my initial thoughts, but I have to say that I am loving the thought process that you are going through and keep the ideas and solutions coming. It’s great.

1 Like