[RELEASE] HD+ Hubitat Dashboard for iOS, Android, Mac, Windows & Linux

Can you test video playback in the latest version, 1.0.1175? I want to see how it works with your setup. If you don't mind - enable debug mode so extra logs can be captured which really helps later on

I pushed another small update, 1.0.1184, with a couple of changes – the About menu was broken in the last one so you couldn’t check for updates (really only useful if you have the android sideloaded version)

This version adds a ‘use Celsius’ setting in menu → Hub → Hub Details which will affect things like temp gradient background color

I also noticed that the hidden devices menu item is really “hidden” . I did see it pop up once in the organize devices menu but i can seem to locate it

Another item is that with every new upload, most of my device icons default back to 1x1 tiles

Just loaded the latest version to test dashboards on Mac and iPhone to try the media selector tile changes (auto rotate).

The 'no crop' option is working great :+1:

Everything working well on Mac for the media tile and auto rotate. However on iPhone I've a few issues:

  • auto rotate seems to be hit and miss and I'm getting connection errors that I don't get when using the cameras in a normal video tile.
  • It all goes a bit haywire if I rotate the iPhone, especially if I do so after clicking the tile. I can no longer scroll the screen to get things in view. It doesn't matter as I would be unlikely to ever do that.
  • If I rotate the screen first then click on the media selector tile, it zooms the image in massively and I can't get back to anything without closing/reopening the app.

The above are only issues on the iPhone - I don't see it on the Mac.

I notice with the media selector I can simply swipe between the images rather than using the buttons. I wonder if there could be an option to hide the buttons so that you need to swipe? That would allow the video to fill the tile rather than losing roughly 20% of the width on the right for the buttons. Its be especially useful if you weren't using the auto-rotate function and were only using a couple of cameras.

Is this just for the media selector tile or other things like dialogs? I haven’t been testing on an iPhone in a while so I’ll try to pull it back out and test.

AI did figure out an issue with iOS and rotating the screen – a device log would probably show it for sure but even so I have something I can go on there.

There’s just some overall weirdness on the iPhone that I probably wouldn’t see once configured.

My media selector tile is currently for two video tiles
and for now those two tiles are not hiddden. On opening the app, the media selector and one of the two video tiles display, the other is stuck on connecting. If I use the two buttons on the selector tile, I can switch between both cameras but while I do that, the video tile that corresponds to the active view in the selector goes solid white; when I switch to the other camera, the previous video tile appears and the newly selected one goes solid white.

When I rotate the phone the tiles all reconnect the video after a few seconds. Scrolling down the screen selector tile is in view but as soon as I scroll it goes white while the screen updates the two video tiles that just beneath. When I rotate back to normal portrait orientation the cameras and selector tile get stuck on connecting and I need to close reopen the app to resolve.

As mentioned I wouldn’t see that in use nevise I would have the video tiles hidden and I only use the phone in portrait.

I tested and am seeing the same issues with the delay, had debug enabled and uploaded the logs Monday. Starting to wonder if the client is unable to keep up with 30fps, which would be weird since the original app is rock solid with the same streams.

I enabled debug in the original app and uploaded the logs for comparison.

that might be the key. iOS video tiles use a native view (UIKitView) per video url – so basically when you view a video fullscreen the app doesn’t have to create a new native view - it just re-uses it. But, that does mean that the same video url can’t be displayed in multiple places at the same time.

I’ll try to handle this and try to test once I can get my test iPhone running. Logs will really help though - AI is very good at analyzing these to find issues and video playback is an area which is harder to reproduce

It's really no issue as they will be hidden. It would be pointless for me to have both the selector AND original video tile on the dashboard.

Yeah, I just meant I’d look into any other weirdness or reconnection errors that happen on rotation. I’ve been testing with 3 video streams myself so I have some logs to look at to start.

I like the idea of maximizing the image/video on the tile and just using horizontal swiping to change between them (or use the auto-next timer). I also added a ‘show title’ option which shows the selected camera name.

Here’s the default view and fullscreen along with the nav buttons hidden

That looks great :+1:t2:

version 1.0.1207

  • iOS improve video streaming performance
  • add hide buttons option to media selector
  • add show title to media selector
  • activity history - show month/day when > 7 days
  • show condensed calendar view on 1x1 tile
  • dim device icons when device state is stale (30+ mins old)
  • fix displaying humidity if float value (ie: 55.0)
  • add haptic feedback for sending Hub commands
  • delay network requests like HSM/mode/refresh image/calendar until after the fetch devices is done
  • show progress icon when hub command is being sent from device like button which didn’t have this previously

iOS improve video streaming performance

I’ll need help testing this one once it’s released (should be a day or 2 for TestFlight). But, I was able to reproduce several iOS specific video issues and verified they’re working well on my test iPhone 13.

dim device icons when device state is stale (30+ mins old)

The Android only app did this too.. if you open the app and the device state is 30+ minutes out of date (ie: app is connecting to the Hub but displaying old cached device state) - the icons will dim. Once the app is able to get the latest status they’ll go back to normal

add hide buttons option to media selector & add show title to media selector


NOTE: I’m only updating desktop, Android side-load and iOS builds.. I’m not sure why but Google Play is taking AGES to review the app and every time I push a new build I reset the review. So, for now I’m just going to wait until it’s complete before trying to update any Google Play build. So, if you’re an Android user, right now the only way to get updates is via side-load. I’ll let you know as soon as that’s done and will submit the latest version.

1.0.1207 iOS

The hide buttons on media selector is working and is a great addition but I’ve got a liitle issue…

I can’t hide the video tiles, there’s no option. I’ve not tried but I guess if I delete/re-add the media selector and choose the option to hide the video tiles when I re-add I might be able to hide them that way.

Edit: So I can hide them by deleting and adding the media selector again as above. The issue is if I unhide the video tiles to edit anything (crop, speed etc) I can’t rehide them (without the workaround described unless I’ve missed something)

Another weird one. If I keep the video tiles displayed, swiping to change between cameras on the media selector is instant. As soon as I hide them I’ve a 5 second ‘connecting’ black screen.

I see.. yeah that sounds like an issue. If these devices are virtual (added by the app instead of the Hub) then the hide option isn't there. I'll have to think about this.. it's certainly possible to fix though so I'll figure something out.

In the meantime, just something I've done with all of my camera feeds is to create them on the Hub. I did that so every client will have the same tiles and they don't have to be re-created on the device.. also just easier than typing a URL on a phone. I use this Hubitat driver to create images/video tiles. This one works too.

Another workaround might be to put the original video devices in a folder. That way you can still access them but they're not being displayed at the same time

Somewhat related to the media selector tile I made some changes to it as well in the next version..

  • Fit (no crop) option - determines if the image/video should be cropped to fit the entire tile or not. It was there previously but hard to change
  • Allow ordering devices
  • when full screen, show same actions as a normal image/video tile
    • image -> refresh (if this image can be updated)
    • video -> mute/screenshot/record

Thanks @jpage4500 - I'll take a look at adding them to Hubitat with the driver you've linked.

version 1.0.1226

  • connection changes to help make the app start faster
  • when filtering the dashboard and returning, return to the original scroll position
  • media selector changes: full screen actions; re-order device list; crop option
  • room device: allow rooms to be re-ordered

Mostly some minor changes.. Again, no Google Play Store builds. My last submission/review has going on 2 weeks now (and longer if you don't count the fact that every submission before that reset the counter)

I described the re-ordering changes in the above post. The connection changes is an attempt by me to get that initial refresh to be as fast as possible.

This seems to be a CPU issue, the new app consumes almost double the CPU than the old app.

For reference, the old app with 5 video tiles averages around 50% CPU utilization with no video issues.

  • New app with 5 video tiles averages around 95% CPU utilization, video delays up to 30 seconds.
  • New app with 2 video tiles averages around 80% CPU utilization, video delays sporadic but no more than 1-2 seconds.

This is total CPU utilization, not per core with only this app running.

I can try to debug if you send logs running a new build. Ideally enable debug mode and let the streams play for a while first so there's enough in there to look at.

I remember from old logs the app was only using software decoding - which would naturally use way too much CPU (I'm surprised you're even able to view 5 streams at once)

  His 5 UniFi cameras are all falling back to software decode. In his log (0717, v1.0.1128), every one of the 5 streams logs:

  h264_mediacodec failed (avcodec_open2() error -22 …); falling back to software

  The Android player only ever tries the H.264 hardware decoder (FFmpegPlayer.kt:295). His UniFi streams are H.265/HEVC, so forcing the
  H.264 MediaCodec onto them fails (error -22 = codec rejected), and all 5 tiles drop to CPU software decode. Five concurrent software
  HEVC decodes can't keep up with real-time, so — because RTSP-over-TCP never drops packets — each tile falls further and further behind
  live every second (your "delay gets worse over time", up to 30s). Eventually the 3s socket timeout trips, the stream stalls, and it
  reconnects.

EDIT: definitely send me device logs with debug enabled (running the latest version). I've already done some digging into this and it all comes down to how optimized the old app RTSP library is. AI is pretty confident there's a lot more optimizations that can be done but I'll need help refining it.

After one of the updates hardware decode started working on all 5 HEVC (H.265) streams per the logs. These are the same 5 streams the old app is consuming without a problem. Uploaded logs, started with 5 video tiles and then removed 3 tiles.