[RELEASE] HD+ - Android Dashboard

I just managed to get the Android Subsystem running on my Windows 11 PC.

I don't think I will ever be using the official dashboard again.

5 Likes

Just started playing with this app last night. Really like how clean it is. (Playing with it on a Fire tablet 8 gen 10 and hope to see it on IOS soon!) So far, the only issue I've seen is a Garage door button. I use a zen-16 for the garage door but only switch is available for it. I think it would be more intuitive if it could be classified as an up/down garage door. (Though to be fair I may have overlooked something obvious)

I'm using a zen relay for my garage as well but I have a virtual garage controller set up for it. I have the virtual controller exposed to dashboard, not the relay itself. Works as expected.

2 Likes

I use the Zen16 as well. I have three garage doors. I have a virtual switch to open/close each door. I have a tilt sensor on each door that tells me if the door is open or closed.

2 Likes

This is what I do, but I think I need to do it @zerosum74 's way to get the opener icons. Is there also a way to nest pages?

The app is looking for the GarageDoorControl capability to use the garage door device type by default (or let you change to it). I get that from the MyQ garage door Hubitat driver I'm using.

I might be able to handle the zen-16 driver you're using if there's something I can look for in the device details. If you're able to send me a device log or even just the JSON text that the app would see from MakerAPI details on this device I can try to support it out of the box. I put together a page on how to get device details info if you want to do that too

2 Likes

Sorry this has taken so long.. besides being slammed with work, I also lost my wifi router due to a power outage and have been spending much of my free time just getting everything back to how it was before.. anyway, that's just to say I haven't tried out my new RTSP camera really at all since I verified it worked well in the sample app.

The app does handle URL's a little differently - the sample app separates the username and password. Not sure why he did that but I'm just pulling this out of the URL from that user:pwd@ip:port format.

I have some ideas why the video feed stops working in the app.. Today each app 'tile' is responsible for it's own content - which is good/fast for most cases. But, with a video feed I need to be careful not to open/close the connection too much or I think it can lead to these stops. Anyway, it'll take some work but at least if the video is working in the sample app I should be able to get it working in the dashboard too

You could use the Zooz Garage Door driver. I have been using it for some time with the same setup you have.

1 Like

Why do I keep getting this Hub Update icon and how can I turn that off permanently?

1 Like

Yes, I feel stupid. Thanks :slightly_smiling_face:

1 Like

Do I have to set that switch on ALL pads in my house? The above switch did not work on one of my pads after setting it.

Yes you will need to update each interface or backup one to hub and restore the others. The problem is a lot of people have different layouts on different devices so they would have to manually update each device unless in your case leave the update reminder on one device to remind you to update.

1 Like

I thought this had been asked but could not find it......can we edit the CSS of the tiles?

piping in here - as I've done a crazy amount of mods to tiles specific to Android Dash - @jpage4500 created a method for us 'HTML'. If the driver provides a wrapper - we can put whatever we want inside of it, obviously including inline css.
That said I did run into the HE 1024 char length. So you can't really go crazy. I banged my head on that after rewriting GameTime times specific for my dashes... c'est la vie.
so specifically 'can we edit the css of the tiles" - I'm very attentitive to all that the author puts out and I've not seen him implement that - I think it's a big ask TBH but we can hope someday!

But as to feeding the tile, you can 'customize' it by implementing an html (or Div) variable (which of course may force you to customize the app or driver itself). I ran into a problem where the icon's provided by the team had a strange HxW ratio that broke the tile format. I wrote a fix for it (and straightened a few other things)... As you can see there is a wrapper. This lets us use

To produce:
image

EG;

   def gameTile = "<div style='overflow:auto;height:90%'></div>"
    def isClearWhenInactiveConfig = getClearWhenInactiveSetting()
    if (!isClearWhenInactiveConfig || (isClearWhenInactiveConfig && !isInactive())) {
        def textColor = getTextColorSetting()
        def fontSize = getFontSizeSetting()
        def colorStyle = ""
        if (textColor != "#000000") colorStyle = "color:" + textColor
        if (game != null) {
            def detailStr = null
            def gameFinished = (game.status == "Scheduled" || game.status == "InProgress") ? false : true
            if (game.status == "InProgress") detailStr = game.progress
            else if (gameFinished) detailStr = game.status
            else detailStr = game.gameTimeStr

            gameTile = "<div style='overflow:auto;height:92%;'><table style='font-size:${fontSize}%;${colorStyle};width:100%;'>"
            gameTile += "<tr><td style='background:url(${game.awayTeam.logo}) no-repeat center;background-size:contain;'><img src='https://bit.ly/3cdOAo3' width='100%'></td>"
            gameTile += "<td width='10%' align=center>at</td>"
            gameTile += "<td style='background:url(${game.homeTeam.logo})no-repeat center;background-size:contain;'><img src='https://bit.ly/3cdOAo3' width='100%'></td></tr>"
            if (parent.showTeamName) {
                gameTile += "<tr style='padding-bottom: 0em'><td width='40%' align=center>${game.awayTeam.name}</td>"
                gameTile += "<td width='10%' align=center></td>"
                gameTile += "<td width='40%' align=center>${game.homeTeam.name}</td></tr>"
            }
            if (parent.showTeamRecord && !getHideGameResultSetting()) {
                def awayTeamRecordSuffix = ""
                if (league == "NHL") awayTeamRecordSuffix = "-" + game.awayTeam.overtimeLosses
                else if (league == "NFL") awayTeamRecordSuffix = "-" + game.awayTeam.ties
                def homeTeamRecordSuffix = ""
                if (league == "NHL") homeTeamRecordSuffix = "-" + game.homeTeam.overtimeLosses
                else if (league == "NFL") homeTeamRecordSuffix = "-" + game.homeTeam.ties
                gameTile += "<tr><td width='40%' align=center style='font-size:${fontSize*0.75}%'>${'(' + game.awayTeam.wins + '-' + game.awayTeam.losses + awayTeamRecordSuffix + ')'}</td>"
                gameTile += "<td width='10%' align=center></td>"
                gameTile += "<td width='40%' align=center style='font-size:${fontSize*0.75}%'>${'(' + game.homeTeam.wins + '-' + game.homeTeam.losses + homeTeamRecordSuffix + ')'}</td></tr>"
            }
            gameTile += "<tr style='padding-bottom: 0em;'><td width='100%' align=center colspan=3>${detailStr}</td></tr>"
            if (parent.showChannel && game.channel != "null" && game.channel != null && !gameFinished) gameTile += "<tr><td width='100%' align=center colspan=3 style='font-size:${fontSize*0.75}%'>${game.channel}</td></tr>"
            gameTile += "</table></div>"

That looks awesome. Sadly, I have never learned know how to write HTML. :slightly_frowning_face:

is it a one-off or are you looking to do lots of mods? maybe I can help?

I appreciate the offer. I want to modify several tiles and I just don't want to annoy you with that. :slight_smile:

I am having a terrible time with Manage Hidden Devices. Every time I use it, I create trouble. It always adds devices that I did not select and not add devices that I did select. It seems to affect the same devices every time. I have repeated the process over and over, same result (definition of insanity).

In all honesty, i also have experienced the managed hidden devices problem myself. You'll need help from @jpage4500 on that one as although mine settled over time, I don't know what caused it or what affected it... surely he will!