[RELEASE] HD+ - Android Dashboard

Unfortunately the new version is not yet available in the Play store. Any chance I can download the APK directly?

I keep having an issue where HD+ will update the presence sensor for presence tracking with a location about 1.5 miles away, which triggers a depart, but immediately (less than a second) sends another location event saying it entered the geofence.

It’s happening randomly on both my phone (Pixel 7) and my GF’s phone (Samsung Galaxy S24). It happens while we’re at home and not even using the phone.

I assume the app just gets the location from the OS, but I’m not sure if there is a way to see location changes at a system level. I can look in Google Maps and see my timeline, and it shows me taking my kids to and from school today from 7:08 - 7:47 but then says I have been home ever since.

HD+ has this in the log for 10:57:

I do have it set in permissions so that HD+ can see location all the time and to use precise location, and the physical activity.

Just wondering if anyone else has this issue or if there is something I can do to prevent this.

I don’t see that option on the driver capabilities Driver Capability List | Hubitat Documentation

Guessing it’s Nest only. Can you send me the device details as seen via MakerAPI? Also, how do you detect and enter into ECO mode? Driver Capability List | Hubitat Documentation

I wonder if newer Hub versions log this now.. can’t say I’ve seen it before. Also, it’s good to know the exact cloud limit (128k).. don’t remember if that was documented anywhere.

How many devices do you have configured? I’ve got 118 devices and it looks like that API results in 68k. I’ve got 73 devices added to MakerAPI.

Of course some devices return a LOT more data than others.. look at this blink camera:

    {
        "name" : "Camera-88951",
        "label" : "Porch Camera",
        "type" : "BlinkChild-Camera",
        "id" : "544",
        "date" : "2026-05-26T18:59:34+0000",
        "model" : null,
        "manufacturer" : null,
        "room" : null,
        "roomId" : null,
        "capabilities" : 
        [
            "MotionSensor",
            "ImageCapture",
            "Actuator",
            "Battery",
            "TemperatureMeasurement",
            "Switch",
            "Sensor"
        ],
        "attributes" : 
        {
            "First Boot" : null,
            "dataType" : "STRING",
            "values" : null,
            "Serial" : null,
            "Temp Alert Status" : null,
            "Motion Regions Compatible" : null,
            "Account ID" : "XXXXX",
            "Early Termination" : null,
            "temperature" : "79",
            "Siren Volume" : null,
            "Snapshot Enabled" : null,
            "Flip Video" : null,
            "Temp Alarm Enable" : null,
            "LFR 108 Wakeups" : null,
            "Battery Alert Status" : "false",
            "Battery Signal" : null,
            "Dev 2" : null,
            "Early Termination Supported" : null,
            "Early Notification Compatible" : null,
            "Feature Plan ID" : null,
            "Local Connection Certificate ID" : null,
            "Video Recording Optional" : null,
            "WiFi Signal" : null,
            "Battery Status" : "ok",
            "Time DHCP Lease" : null,
            "Alert Repeat" : null,
            "Thumbnail Image" : null,
            "Firmware Version" : null,
            "MFG Mez Range" : null,
            "Alert Tone Volume" : null,
            "MFG Main Range" : null,
            "Motion Sensitivity" : null,
            "Light Sensor CH0" : null,
            "Video Recording Enable" : null,
            "Clip Bitrate" : null,
            "Flip Video Compatible" : null,
            "Unit Number" : null,
            "LiveView Rate" : null,
            "Light Sensor Data Valid" : null,
            "Battery Voltage Hysteresis" : null,
            "Last Temp Alert" : null,
            "Time DNS Resolve" : null,
            "Last Snapshot Event" : null,
            "Battery Alert Count" : null,
            "Alert Tone Enable" : null,
            "Battery Number" : null,
            "MFG Main Type" : null,
            "Snapshot Period Minutes Options" : null,
            "Last Command ID" : null,
            "Media ID" : null,
            "Options" : null,
            "Temp Adjust" : null,
            "Total TB Wakeups" : null,
            "LFR TB Wakeups" : null,
            "Network ID" : "XXXXX",
            "Dev 3" : null,
            "switch" : "on",
            "LiveView Seconds" : null,
            "Light Sensor Data New" : null,
            "Temperature Alert Count" : null,
            "Battery Check Time" : null,
            "Local Storage Enabled" : null,
            "Retry Count" : null,
            "Socket Failure Count" : null,
            "Camera Key" : null,
            "Continue Warning" : null,
            "Battery Alert Account" : null,
            "Usage Rate" : null,
            "Enabled" : null,
            "Light Sensor CH1" : null,
            "New Command" : null,
            "Night Vision Exposure" : null,
            "Snapshot Compatible" : null,
            "Record Audio" : null,
            "Alert Interval" : null,
            "Battery Voltage Threshold" : null,
            "Record Audio Enable" : null,
            "LFR Strength" : null,
            "Deleted" : null,
            "motion" : "inactive",
            "Illuminator Enable" : null,
            "LiveView Continue Interval" : null,
            "Snapshot Period Minutes" : null,
            "Camera ID" : null,
            "DriverVersion" : null,
            "Motion Regions" : null,
            "Local Storage Compatible" : null,
            "Time WLAN Connect" : null,
            "image" : "<img src=\"http://192.168.0.200/local/Camera-88951_Image.jpg\">",
            "LiveView Enabled" : null,
            "Auto Test" : null,
            "Issues" : "[]",
            "Usage" : null,
            "LFR Sync Interval" : null,
            "Privacy Zones Compatible" : null,
            "Invert Image" : null,
            "LFR Alert Count" : null,
            "Thumbnail File" : "/api/v3/media/accounts/XXXXX/networks/XXXXX/xt2/XXXXX/thumbnail/thumbnail.jpg?ts=1779216623&ext=",
            "Time 108 Boot" : null,
            "Armed" : "false",
            "Illuminator Intensity" : null,
            "Max Resolution" : null,
            "Video Length" : null,
            "WiFi Strength" : null,
            "WiFi Connect Failure Count" : null,
            "LiveView Duration" : null,
            "Type" : "xt2",
            "MAC Address" : null,
            "Temp Interval" : null,
            "Trigger Source" : null,
            "IPv" : null,
            "Lifetime Count" : null,
            "Temp Hysteresis" : null,
            "DriverName" : null,
            "Camera Seq" : null,
            "Lifetime Duration" : null,
            "Temp Alert State" : null,
            "Temp Min" : null,
            "Clip Max Length" : null,
            "Battery Voltage" : "170",
            "Error Codes" : null,
            "Clip Seconds" : null,
            "Flip Image" : null,
            "Local Storage Status" : null,
            "Early PIR Compatible" : null,
            "Name" : "Porch Camera",
            "Status" : "done",
            "Arm String" : "Armed",
            "Last LFR Alert" : null,
            "Dev 1" : null,
            "WiFi Timeout" : null,
            "Siren Enable" : null,
            "MFG Mez Type" : null,
            "Temp Max" : null,
            "Illuminator Duration" : null,
            "Trigger ID" : null,
            "Video hz" : null,
            "Liveview Bitrate" : null,
            "Join Available" : null,
            "LFR Signal" : null,
            "Created" : null,
            "Thumbnail" : "<img height=\"25%\" width=\"25%\" src=\"http://192.168.0.200/local/Camera-88951_Image.jpg\">",
            "FW Git Hash" : null,
            "Join State" : null,
            "DHCP Failure Count" : null,
            "Trigger Time" : null,
            "Time First Video" : null,
            "Battery Alarm Enable" : null,
            "Updated" : "Tue May 19 14:50:26 EDT 2026",
            "DriverStatus" : null,
            "Motion Detection Enabled" : "true",
            "Submit Logs" : null,
            "LiveView RTSP" : null,
            "Total 108 Wakeups" : null,
            "BatteryValue" : "ok",
            "battery" : "75",
            "Battery Voltage Interval" : null,
            "Account" : null,
            "Last Battery Alert" : null,
            "Clip Rate" : null,
            "Video Quality" : null,
            "PIR Rejections" : null,
            "Early Notification" : null,
            "ID" : "88951",
            "Clip Warning Threshold" : null,
            "Tile" : null,
            "AC Power" : null,
            "Ring Device ID" : null,
            "Night Vision Exposure Compatible" : null,
            "Buzzer On" : null
        },
        "commands" : 
        [
            {
                "command" : "GetCameraInfo"
            },
            {
                "command" : "GetCameraLiveView"
            },
            {
                "command" : "GetNewVideo"
            },
            {
                "command" : "GetThumbnail"
            },
            {
                "command" : "MotionDetectionDisable"
            },
            {
                "command" : "MotionDetectionEnable"
            },
            {
                "command" : "SystemArm"
            },
            {
                "command" : "SystemDisarm"
            },
            {
                "command" : "off"
            },
            {
                "command" : "off"
            },
            {
                "command" : "on"
            },
            {
                "command" : "on"
            },
            {
                "command" : "take"
            }
        ]
    },

If I can detect or ā€˜guess’ when there’s too many devices to be returned via cloud mode I could break up the /devices/all request to a single /devices request and then fetch individual devices’ attributes.

There’s a link in the first post - apk download - You can tell you’re on this version if you see a check for updates option in about menu

I’ve did a lot of testing when I first implemented this and what I’d do is drive around and then go through the device logs looking for events like what you shared.. it used to take some time to go line by line but when working on the iOS version I did the same thing and this time asked AI to look at the logs and it reduced the process down quite a bit..

All to say that if you’re willing to send the logs I should be able to track down the issue. You’d first have to put the app into debug mode and then just wait until you see the issue happen again. I think there’s enough geofence logging in debug mode to really narrow down what happened. Anyway, if you send them just let me know here or via DM and I’ll look.

Perfect! This version solves the issue. I am now up and running again with a new token. Thanks :slight_smile:

I just sent you the logs from today.

1 Like

version 1.0.2813 (beta)

  • better geofencing logic
  • save/restore last image picker source
  • remove The Noun Project image source
  • added Iconify image source

Geofencing should now verify spurious OS events that aren’t very accurate. I also made some image picker changes to match the newer version of HD+ – adding Iconify as an image source.

Hello - Pretty new to Hubitat and am trying to make use of your app but am also getting blocked at the first step of just trying to detect the hubitat with an ā€œInvalid Access Tokenā€ error.

I have tried installing the Maker API app in multiple ways (I am still not sure exactly what settings I should use for the install). Fully updated the package manager and my Hubitat OS. I have also tried manually entering the settings. My Hubitat may have had another IP Address in the past, but I am not sure how I could check that or whether that is actually an issue. Pretty stuck at this point and any help would be appreciated!

I presume that you are doing all of this…

@jpage4500 Have you considered open-sourcing HD+? I think it could unlock a lot of AI-powered enhancements from the community.

@jpage4500 Unfirtunately I deleted a device within HD+ after pusihing it by Maker API instead of hiding it. Now I would like to ā€œre-addā€ it to HD+ again. Any ideas how to do this?
I tried to clear HD+ cache, but without kuck. I also tried to reset and set the device again in Maker API, but without any luck. It’s neither shown in the dashboard, nor in the hidden device folder.
The device is shown on a different HD+ dashboard, which states everything is working fine and it’s a locally issue with my Pixel 10 Pro.

Thanks for any help with this.

Hmm.. you shouldn't be able to delete a device that's returned by MakerAPI - the app should have just hidden it. If it doesn't show up under More Options -> View Hidden Devices the only other place you could check is if it's in a folder.. Is that possible?

I just checked the other folders but did not find it anywhere. The menu with hidden devices shows just a couple of devices but I can't say if that’s correct because I use the dashboard for a quite long time.

That's a bit strange

My apologies, I found the device in a sub-sub-folder……..

Sorry for any confusion.

Have a nice weekend

@jpage4500 I’m still very interested in having the folder icons reflect the state of its content items, including color.

Mine do.

That’s the new multi-platform version of this app. I’m referring to the original.

Do you mean like this? (android version)