[RELEASE] HD+ - Android Dashboard

Hey Folks! I'm trying to get this up and running to replace two years of really nice Hubitat-native dashboards on Fully... those have been rock solid, but the lack of RTSP/H.264 camera support finally ended up being a deal breaker.

I've got great dashboards built with HD+, but have two challenges left before I can put this in front of the family...

  1. Launching this on tablet startup - any tips on how to do that with Fire HD's?

  2. Notification sounds/TTS. I use TTS in my current fully implementation to speak things like "Armed Night", "Disarmed", "Alarm, Basement Door" and do entry/exit chimes and such. Echo Speaks looked like a plausible replacement - but oh, the drama and complexity around that cookie server. Anybody got a solution that you like?

Thanks all!

I use Fully on my tablets. Fully launches when the tablet starts, and the start url in Fully is the app intent for HD+. I use Fully’s idle timers, so that if I launch another app from a HD+ tile, it automatically returns to the dashboard after 30 seconds (unless I’m actively clicking in that app or there’s audio coming from the tablet speaker). So I can launch my Sonos app from a tile, get what I want playing then leave it and it will return to the dashboard (no need to use the Fire Hd navigation bar) Likewise if I launch Hik-Connect to view the main stream of a camera or playback, the Audi from the camera will stop it returning to the dashboard until I stop the stream.

Edit: just noticed you’re already using fully so you should be able to auto launch it.

I also use Fully to auto-launch my HD+. I use webcore to do all of the notifications and that includes using Echo Speaks. I pay the $5 a month for the Heroku service. All of that may be overkill for you, but I am please with the setup.

OK - I hadn't thought of using Fully to launch HD+ before... that might actually kill two birds with one stone. Will need to test it, but maybe I'll get to keep my TTS announcements in that arrangement!

Thanks for the assist!

If you don't mind, what's your intent URL? I'm using the below and getting "App not found for intent"...
intent:#Intent;launchFlags=0x10000000;component=com.jpage4500.hubitat/com.jpage4500.hubitat.ui.activities.MainActivity;end

@jeff_laughter I'm using:

intent:#Intent;launchFlags=0x10000000;component=com.jpage4500.hubitat/com.jpage4500.hubitat.ui.activities.MainActivity;end?kiosk=true

I can't see that the ?kiosk=true would make a difference. I used to use that in SharpTools to hide the menu. Is there something else that needs to be enabled in your settings perhaps?

I use Fully Single App Kiosk and just tell it to run HD+

Yep, that's perfect. I ended up using the setting in the new version of Fully "Application to Run on Start in Foreground (Plus)" and didn't need the intent URL at all. It launches at boot, the sounds and speech work perfectly, and I'm in business.

I did run into the issue reported somewhere above where restored settings didn't pull in the display number of columns correctly... easy to fix, but happened on three separate tablets when restoring from hub. Just an FYI, super minor.

Thanks all!

1 Like

I tested this again and it worked for me -- I used a switch and not a motion sensor so I could turn it on with another device. I also tested the device motion detection which I know isn't what you're asking about but I figured I'd test it also.

The only thing I can think of is that the app thinks it's not running and stops listening to events. That's what happens when you turn the screen off manually. It's a little hard to check but if you first enable debug mode in HD+ and then reproduce the issue (ie: let the screensaver kick in and then activate the motion sensor a few times). Make a note of when you activated the motion sensor.

Now if you send device logs or even try to view them in the app you should see 2 entries like this:

startScreensaver: START SCREENSAVER! 60000
onCreate: wakeOnMotion:true, sen:20, bright:1000, closeOnMotion:true, idList:["66"]
  • this shows the screensaver kicking in after a timeout period (60000 ms = 1 min)
  • it also shows that it's looking at the motion sensor and waiting for activity from device ID: 66 (in my case this is an outlet)

Next, look for an entry somewhere below that says this:

 disconnectWebsocket: 
  • this is the important one.. it shows HD+ stopping listening to the event stream

If you see that disconnect event before you activated your motion sensor - that would be an issue

You called it!

08/01 18:35:03	D	MainActivity	startScreensaver: START SCREENSAVER! 300000
08/01 18:35:03	D	ScreenSaverActivity	onCreate: wakeOnMotion:false, sen:3, bright:13, closeOnMotion:true, idList:["2029"]
08/01 18:35:03	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/01 18:35:04	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 910ms: updated:0, devices:112
08/01 18:36:50	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/01 18:36:50	D	DeviceView	scheduleRefresh: Date / Time: rate:1m, delay:none
08/01 18:36:51	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 1025ms: updated:2, devices:112
08/01 18:37:06	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/01 18:37:07	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 937ms: updated:0, devices:112
08/01 18:37:59	D	FileUtils	copyFile: /data/data/com.jpage4500.hubitat/files/event-log-internal.txt (len:4896) -> /data/data/com.jpage4500.hubitat/files/event-log.txt
08/01 18:37:59	D	FileUtils	shareFile: /data/data/com.jpage4500.hubitat/files/event-log.txt
08/01 18:38:04	D	HubitatManager	disconnectWebsocket: 
08/01 18:38:04	D	HubitatManager	connectWebSocketInternal:onFailure: 2d:17h:51m:2s, #msgs:152603, isRunning:false, reason:Socket closed
08/01 18:38:29	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/01 18:38:29	D	HubitatManager	connectWebSocketInternal:onOpen: 30ms, http://192.168.5.4/eventsocket
08/01 18:38:30	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 1025ms: updated:2, devices:112

I have done this in the past but I don't believe it was in the time since either 2094(production) was installed via auto update or since I changed back to the beta stream.

08/01 18:35:03	D	MainActivity	startScreensaver:...
...
08/01 18:38:04	D	HubitatManager	disconnectWebsocket

There's 3 minutes between the screensaver starting and this disconnectWebsocket event. Did you activate the motion sensor during this time? If so, I don't have enough info in the logs to really help.

I am adding extra logging to say when the screensaver exits because of an event but that's not really going to help figure this one out.

Any ideas how I can reproduce this one? I do have a motion sensor and I can test with that though I think it'll work the same as the switch I'm using.

Yes.

Here I made sure to activate the motion sensor both before the screensaver started and after:

08/02 15:25:21	I	Utils	setDebugMode: true
08/02 15:25:33	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 1359ms: updated:0, devices:112
08/02 15:27:42	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/02 15:27:42	D	HubitatManager	syncDevices: full refresh: last:20m:32s
08/02 15:27:42	D	HubitatManager	fetchAllDevices: DONE: 407ms: LOCAL: updated:2, devices:92
08/02 15:28:36	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/02 15:28:36	D	DeviceView	scheduleRefresh: Date / Time: rate:1m, delay:none
08/02 15:28:37	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 1005ms: updated:0, devices:112
08/02 15:30:27	D	HubitatUtils	click: Master Closet, showPrompt:false
08/02 15:30:27	D	DialogHelper	showTogglePrompt: no toggle action: {"attributes":{"motion":"inactive","temperature":"69.37","customName":"Master Closet","battery":"100"},"capabilities":["MotionSensor","Configuration","Refresh","Battery","TemperatureMeasurement","Sensor"],"commands":["configure","refresh"],"id":"2340","label":"Master Closet Motion","name":"Generic Zigbee Motion Sensor","type":"Generic Zigbee Motion Sensor","lastUpdateTime":1690936324535}
08/02 15:30:27	D	DialogHelper	showDeviceOptions: TYPE_SENSOR_MOTION, {"attributes":{"motion":"inactive","temperature":"69.37","customName":"Master Closet","battery":"100"},"capabilities":["MotionSensor","Configuration","Refresh","Battery","TemperatureMeasurement","Sensor"],"commands":["configure","refresh"],"id":"2340","label":"Master Closet Motion","name":"Generic Zigbee Motion Sensor","type":"Generic Zigbee Motion Sensor","lastUpdateTime":1690936324535}
08/02 15:30:36	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/02 15:30:37	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 1042ms: updated:0, devices:112
08/02 15:31:01	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/02 15:31:02	D	DeviceView	scheduleRefresh: Date / Time: rate:1m, delay:none
08/02 15:31:02	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 965ms: updated:0, devices:112
08/02 15:33:01	D	MainActivity	startScreensaver: START SCREENSAVER! 120000
08/02 15:33:01	D	ScreenSaverActivity	onCreate: wakeOnMotion:false, sen:3, bright:13, closeOnMotion:true, idList:["2029"]
08/02 15:33:01	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/02 15:33:02	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 983ms: updated:0, devices:112
08/02 15:33:33	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/02 15:33:33	D	DeviceView	scheduleRefresh: Date / Time: rate:1m, delay:none
08/02 15:33:34	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 910ms: updated:0, devices:112
08/02 15:33:43	D	HubitatManager	checkCloudMode: NO_CHANGE: LOCAL, mode:MODE_OFF, hasPermission:true, SSID:null, TOKEN:false
08/02 15:33:44	D	HubitatManager	checkIfAllResponsesReceived: DONE: LOCAL: 962ms: updated:0, devices:112

No disconnectWebsocket this time and the screensaver remained active.

Sorry, I don't because I have no idea how I produced it!

I can't see how that would matter but what do I know?

Does anyone else see this. The times seem so random i dont know exacty what it is populating from.

Morning all - I'm still looking for a bit of direction on Tile Titles. Firstly, is it just me? anyone else not able to turn off the title of some tiles?
Anyone see a pattern? It looks like it's an option only on HTML types - can anyone confirm?

I only added the "hide title" setting to a few select device types, namely HTML

You can hide all titles under settings->display->name text size and drag the slider all the way to the left

1 Like

It's the last time the device location changed - the lastUpdated attribute
image

Would it be possible to have this time be the time they arrived at the current location (assuming the device is in one of the defined locations?

The other timestamp that's available is since which I think is what you're looking for.
image

I'm not sure how since gets updated when the user is on the move - I'd have to look into that. But, it seems like a reasonable request.

I personally like using the 'last updated' time because it tells me the device is checking in.. sometimes devices will stop reporting location so I like to know the location is accurate

No worries either way. I can see people preferring one over the other based on individual needs. I appreciate the response.

Your app provided such quick and easy access to most everything needed. The added advantage of the android auto support is icing in the tank. I love being able to have this status view of devices in my home while on the move. One of those things i didnt think i would really use and found i love it.

Any chance you would consider adding wear os support?

Thank you again for the time and effort.

Possible bug found.
Am doing some testing and there is a new but undefined option

Previously it said 'No arguments' and 'Enter Arguments'. The 3rd option I'm not aware of
This is in all the tiles I checked under 'details' then Refresh. (something I use occassionally).
Also, Refresh with Arguments but no argument given generates an error now. I don't remember it used too!

@jpage4500 I'm integrating Tile Builder to your glorious app. Tile builder uses a single storage device and allows me to select prebuilt tiles that are all inside the single storage source. To access them HTML can't work, since I have to override and select which Tile I'm going to display.
While it is still HTML, your options and defaults for HTML are lost once I select 'custom attributes' - a necessity.

If only there was a Tile Builder specific tile I could add! I think any 'Tile Builder' tile would use the HTML features while still letting me select the custom attribute. In this way I'd get the best of all worlds!
If you can add a Tile Builder tile type to the list - I'll buy multiple coffees!
Shu