[RELEASE] Tile Master - Display multiple devices that can be Controlled from the tile!

Also, each dashboard (ie. kitchen, living room, etc..) have their own address too.

Just installed tile master -- many thanks!

Some minor suggestions:

  1. Clarify that the parent app must be installed before the child.
  2. In the "Instructions" section of the parent app, include detail on creating the virtual device before choosing "Add a new 'Tile Master' child"
  3. In the "Instructions" section of the child app, include detail on adding the tile to a dashboard -- specifically that there is no "template" for TileMaster or for the virtual device, but that the template should be "attribute" with the value being "tile01".

One question: Can a line in the TileMaster tile be active, or is it just text? For example, if a line is a switch device, in addition to displaying the switch status, is there a way to change the switch value (on/off) by clicking on that line in the TileMaster tile?

You might want to take a look at my Docs folder. :sunglasses:

Sorry, not possible.

Hi
Is there a best practice to reduce the number of characters. for example I want two display data from to sensors like

And I already have to many characters. for example 241 for header.
So is anyway to reduce it?

Thanks
Larry

Not that I can find. All characters, including the HTML used to create the table are included in that count.

Newbie question or clarification. Does each tile require its own virtual device and child instance?

Sure does

Thanks

Love the Tile Master, but quickly ran into the 1024 limit.

Looking at output, I could see style definition that was put into every

of the table. Since most of my tables were repetitive for font size and color, I tweaked your code for the "Tile Master Child App" to leave out "Left" justified items (default) and move the style information to the of the table so it would inherit across the cells. This signifigantly reduced the size for my table from 1270 to 1019.

Would you like my updates to evaluate to fold back into your code? If so, I am not sure how to do that except send you a file.

My tile:

image

2 Likes

Thanks and Welcome to Hubitat!

Tile Master is broken up into 15 sections (5 lines, 3 sections each line). Each section has the same options, making it very versatile. Basically, each section is a tile by itself.
Removing the options from the sections and making them just for each line takes away what this app is all about. Ability to put anything, anywhere. I wish there wasn't that 1024 limit but it is what it is.

Rather than lose options, I would remove the title line (158 characters saved) and make the word bedroom into BR (18 characters saved) for a total of about 176 characters saved! Always another way to do things!

Thankfully we all have the option to change/modify the code to suit our own needs.

Options are good! :wink:

I agree, the change I made kept all of your existing options.

What it does is eliminate duplicates across the row. So if I have 3 cells across the row that are the same alignment, font, color, etc..., the definition is done once. If the any cell has different attributes, that specific cell will have it's own definition, but the other two cells will inherit from the row.

I can send you the code if you want to take a look.

sure, if you could just show me an example with line numbers that would be great!

The code I modified was in your 5 tile handler routines that built each table. Basically I moved the First TD's definition into the TR and then removed duplicate references for the 2nd and 3rd TD:

def tileHandler01(){
	if(logEnable) log.debug "In tileHandler01 (${state.version})"
	if(state.style01 == null) state.style01 = ""
	if(state.style01a == null) state.style01a = ""
	if(state.style01b == null) state.style01b = ""
	if(words01 == null) words01 = ""
	if(words01a == null) words01a = ""
	if(words01b == null) words01b = ""
	if(nSections01 >= "1") {
		if(device01) {
			state.deviceStatus01 = device01.currentValue("${deviceAtts01}")
            if(state.deviceStatus01 == null || state.deviceStatus01 == "") state.deviceStatus01 = "No Data"
            if(useColors01) {
                deviceStatus01 = state.deviceStatus01
                getStatusColors(deviceStatus01, deviceAtts01)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler01 - Received: ${deviceStatus1}"
                state.deviceStatus01 = deviceStatus1
            }
        } else state.deviceStatus01 = ""
	}
	if(nSections01 >= "2") {
		if(device01a) {
			state.deviceStatus01a = device01a.currentValue("${deviceAtts01a}")
			if(state.deviceStatus01a == null || state.deviceStatus01a == "") state.deviceStatus01a = "No Data"
            if(useColors01a) {
                deviceStatus01a = state.deviceStatus01a
                getStatusColors(deviceStatus01a, deviceAtts01a)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler01a - Received: ${deviceStatus1}"
                state.deviceStatus01a = deviceStatus1
            }
		} else state.deviceStatus01a = ""
	}
	if(nSections01 == "3") {
		if(device01b) {
			state.deviceStatus01b = device01b.currentValue("${deviceAtts01b}")
			if(state.deviceStatus01b == null || state.deviceStatus01b == "") state.deviceStatus01b = "No Data"
            if(useColors01b) {
                deviceStatus01b = state.deviceStatus01b
                getStatusColors(deviceStatus01b, deviceAtts01b)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler01b - Received: ${deviceStatus1}"
                state.deviceStatus01b = deviceStatus1
            }
		} else state.deviceStatus01b = ""
	}
	
// ***** Make the table for line 1	*****

    state.theTile01 = ""

    if(nSections01 >= "1") {
        state.theTile01 = "<table style='width:100%'><tr style='text-align:${align01};color:${color01};font-size:${fontSize01}px'><td style='"
        state.theTile01 += "width:${secWidth01}%'>"
        if(wordsBEF01) makeTileLine(1,wordsBEF01,linkBEF01)
        if(wordsBEF01) state.theTile01 += "${newWords2}"
		if(deviceAtts01) state.theTile01 += "${state.deviceStatus01}"
		if(wordsAFT01) makeTileLine(1,wordsAFT01,linkAFT01)
        if(wordsAFT01) state.theTile01 += "${newWords2}"
	} 
    if(nSections01 >= "2") {
		state.theTile01 += "<td style='"
        if (align01a != align01) state.theTile01 += "text-align:${align01a};"
        if (color01a != color01) state.theTile01 += "color:${color01a};"
        if (fontSize01a != fontSize01) state.theTile01 += "font-size:${fontSize01a}px;"
        state.theTile01 += "width:${secWidth01a}%'>"
		if(wordsBEF01a) makeTileLine("1a",wordsBEF01a,linkBEF01a)
        if(wordsBEF01a) state.theTile01 += "${newWords2}"
		if(deviceAtts01a) state.theTile01 += "${state.deviceStatus01a}"
		if(wordsAFT01a) makeTileLine("1a",wordsAFT01a,linkAFT01a)
        if(wordsAFT01a) state.theTile01 += "${newWords2}"
	}
    if(nSections01 == "3") {
		state.theTile01 += "<td style='"
        if (align01b != align01) {state.theTile01 += "text-align:${align01b};"}
        if (color01b != color01) {state.theTile01 += "color:${color01b};"}
        if (fontSize01b != fontSize01) {state.theTile01 += "font-size:${fontSize01b}px;"}
        state.theTile01 += "width:${secWidth01b}%'>"
		if(wordsBEF01b) makeTileLine("1b",wordsBEF01b,linkBEF01b)
        if(wordsBEF01b) state.theTile01 += "${newWords2}"
		if(deviceAtts01b) state.theTile01 += "${state.deviceStatus01b}"
		if(wordsAFT01b) makeTileLine("1b",wordsAFT01b,linkAFT01b)
        if(wordsAFT01b) state.theTile01 += "${newWords2}"
	}
    if(nSections01 >= "1") {
    	state.theTile01 += "</table>"
    }
    state.theTileLength01 = state.theTile01.length()
    
	if(logEnable) log.debug "In tileHandler01 - state.theTile01: ${state.theTile01}"
	if(state.theTileLength01 == null) state.theTileLength01 = 0
}

def tileHandler02(){
	if(logEnable) log.debug "In tileHandler02 (${state.version})"
	if(state.style02 == null) state.style02 = ""
	if(state.style02a == null) state.style02a = ""
	if(state.style02b == null) state.style02b = ""
	if(words02 == null) words02 = ""
	if(words02a == null) words02a = ""
	if(words02b == null) words02b = ""
	if(nSections02 >= "1") {
		if(device02) {
			state.deviceStatus02 = device02.currentValue("${deviceAtts02}")
			if(state.deviceStatus02 == null) state.deviceStatus02 = "No Data"
            if(useColors02) {
                deviceStatus02 = state.deviceStatus02
                getStatusColors(deviceStatus02, deviceAtts02)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler02 - Received: ${deviceStatus1}"
                state.deviceStatus02 = deviceStatus1
            }
		} else state.deviceStatus02 = ""
	}
	if(nSections02 >= "2") {
		if(device02a) {
			state.deviceStatus02a = device02a.currentValue("${deviceAtts02a}")
			if(state.deviceStatus02a == null) state.deviceStatus02a = "No Data"
            if(useColors02a) {
                deviceStatus02a = state.deviceStatus02a
                getStatusColors(deviceStatus02a, deviceAtts02a)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler02a - Received: ${deviceStatus1}"
                state.deviceStatus02a = deviceStatus1
            }
		} else state.deviceStatus02a = ""
	}
	if(nSections02 == "3") {
		if(device02b) {
			state.deviceStatus02b = device02b.currentValue("${deviceAtts02b}")
			if(state.deviceStatus02b == null) state.deviceStatus02b = "No Data"
            if(useColors02b) {
                deviceStatus02b = state.deviceStatus02b
                getStatusColors(deviceStatus02b, deviceAtts02b)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler02b - Received: ${deviceStatus1}"
                state.deviceStatus02b = deviceStatus1
            }
		} else state.deviceStatus02b = ""
	}
	
// ***** Make the table for line 2	*****
	
    state.theTile02 = ""

    if(nSections02 >= "1") {
        state.theTile02 = "<table style='width:100%'><tr style='text-align:${align02};color:${color02};font-size:${fontSize02}px'><td style='"
        state.theTile02 += "width:${secWidth02}%'>"
        if(wordsBEF02) makeTileLine(2,wordsBEF02,linkBEF02)
        if(wordsBEF02) state.theTile02 += "${newWords2}"
		if(deviceAtts02) state.theTile02 += "${state.deviceStatus02}"
		if(wordsAFT02) makeTileLine(2,wordsAFT02,linkAFT02)
        if(wordsAFT02) state.theTile02 += "${newWords2}"
	} 
    if(nSections02 >= "2") {
		state.theTile02 += "<td style='"
        if (align02a != align02) state.theTile02 += "text-align:${align02a};"
        if (color02a != color02) state.theTile02 += "color:${color02a};"
        if (fontSize02a != fontSize02) state.theTile02 += "font-size:${fontSize02a}px;"
        state.theTile02 += "width:${secWidth02a}%'>"
		if(wordsBEF02a) makeTileLine("2a",wordsBEF02a,linkBEF02a)
        if(wordsBEF02a) state.theTile02 += "${newWords2}"
		if(deviceAtts02a) state.theTile02 += "${state.deviceStatus02a}"
		if(wordsAFT02a) makeTileLine("2a",wordsAFT02a,linkAFT02a)
        if(wordsAFT02a) state.theTile02 += "${newWords2}"
	}
    if(nSections02 == "3") {
		state.theTile02 += "<td style='"
        if (align02b != align02) {state.theTile02 += "text-align:${align02b};"}
        if (color02b != color02) {state.theTile02 += "color:${color02b};"}
        if (fontSize02b != fontSize02) {state.theTile02 += "font-size:${fontSize02b}px;"}
        state.theTile02 += "width:${secWidth02b}%'>"
		if(wordsBEF02b) makeTileLine("2b",wordsBEF02b,linkBEF02b)
        if(wordsBEF02b) state.theTile02 += "${newWords2}"
		if(deviceAtts02b) state.theTile02 += "${state.deviceStatus02b}"
		if(wordsAFT02b) makeTileLine("2b",wordsAFT02b,linkAFT02b)
        if(wordsAFT02b) state.theTile02 += "${newWords2}"
	}
    if(nSections02 >= "1") {
    	state.theTile02 += "</table>"
    }
    state.theTileLength02 = state.theTile02.length()
    
	if(logEnable) log.debug "In tileHandler02 - state.theTile02: ${state.theTile02}"
	if(state.theTileLength02 == null) state.theTileLength02 = 0
}

def tileHandler03(){
	if(logEnable) log.debug "In tileHandler03 (${state.version})"
	if(state.style03 == null) state.style03 = ""
	if(state.style03a == null) state.style03a = ""
	if(state.style03b == null) state.style03b = ""
	if(words03 == null) words03 = ""
	if(words03a == null) words03a = ""
	if(words03b == null) words03b = ""
	if(nSections03 >= "1") {
		if(device03) {
			state.deviceStatus03 = device03.currentValue("${deviceAtts03}")
			if(state.deviceStatus03 == null) state.deviceStatus03 = "No Data"
            if(useColors03) {
                deviceStatus03 = state.deviceStatus03
                getStatusColors(deviceStatus03, deviceAtts03)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler03 - Received: ${deviceStatus1}"
                state.deviceStatus03 = deviceStatus1
            }
		} else state.deviceStatus03 = ""
	}
	if(nSections03 >= "2") {
		if(device03a) {
			state.deviceStatus03a = device03a.currentValue("${deviceAtts03a}")
			if(state.deviceStatus03a == null) state.deviceStatus03a = "No Data"
            if(useColors03a) {
                deviceStatus03a = state.deviceStatus03a
                getStatusColors(deviceStatus03a, deviceAtts03a)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler03a - Received: ${deviceStatus1}"
                state.deviceStatus03a = deviceStatus1
            }
		} else state.deviceStatus03a = ""
	}
	if(nSections03 == "3") {
		if(device03b) {
			state.deviceStatus03b = device03b.currentValue("${deviceAtts03b}")
			if(state.deviceStatus03b == null) state.deviceStatus03b = "No Data"
            if(useColors03b) {
                deviceStatus03b = state.deviceStatus03b
                getStatusColors(deviceStatus03b, deviceAtts03b)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler03b - Received: ${deviceStatus1}"
                state.deviceStatus03b = deviceStatus1
            }
		} else state.deviceStatus03b = ""
	}
	
// ***** Make the table for line 3	*****
	
    state.theTile03 = ""

    if(nSections03 >= "1") {
        state.theTile03 = "<table style='width:100%'><tr style='text-align:${align03};color:${color03};font-size:${fontSize03}px'><td style='"
        state.theTile03 += "width:${secWidth03}%'>"
        if(wordsBEF03) makeTileLine(3,wordsBEF03,linkBEF03)
        if(wordsBEF03) state.theTile03 += "${newWords2}"
		if(deviceAtts03) state.theTile03 += "${state.deviceStatus03}"
		if(wordsAFT03) makeTileLine(3,wordsAFT03,linkAFT03)
        if(wordsAFT03) state.theTile03 += "${newWords2}"
	} 
    if(nSections03 >= "2") {
		state.theTile03 += "<td style='"
        if (align03a != align03) state.theTile03 += "text-align:${align03a};"
        if (color03a != color03) state.theTile03 += "color:${color03a};"
        if (fontSize03a != fontSize03) state.theTile03 += "font-size:${fontSize03a}px;"
        state.theTile03 += "width:${secWidth03a}%'>"
		if(wordsBEF03a) makeTileLine("3a",wordsBEF03a,linkBEF03a)
        if(wordsBEF03a) state.theTile03 += "${newWords2}"
		if(deviceAtts03a) state.theTile03 += "${state.deviceStatus03a}"
		if(wordsAFT03a) makeTileLine("3a",wordsAFT03a,linkAFT03a)
        if(wordsAFT03a) state.theTile03 += "${newWords2}"
	}
    if(nSections03 == "3") {
		state.theTile03 += "<td style='"
        if (align03b != align03) {state.theTile03 += "text-align:${align03b};"}
        if (color03b != color03) {state.theTile03 += "color:${color03b};"}
        if (fontSize03b != fontSize03) {state.theTile03 += "font-size:${fontSize03b}px;"}
        state.theTile03 += "width:${secWidth03b}%'>"
		if(wordsBEF03b) makeTileLine("3b",wordsBEF03b,linkBEF03b)
        if(wordsBEF03b) state.theTile03 += "${newWords2}"
		if(deviceAtts03b) state.theTile03 += "${state.deviceStatus03b}"
		if(wordsAFT03b) makeTileLine("3b",wordsAFT03b,linkAFT03b)
        if(wordsAFT03b) state.theTile03 += "${newWords2}"
	}
    if(nSections03 >= "1") {
    	state.theTile03 += "</table>"
    }
    state.theTileLength03 = state.theTile03.length()
    
	if(logEnable) log.debug "In tileHandler03 - state.theTile03: ${state.theTile03}"
	if(state.theTileLength03 == null) state.theTileLength03 = 0
}

def tileHandler04(){
	if(logEnable) log.debug "In tileHandler04 (${state.version})"
	if(state.style04 == null) state.style04 = ""
	if(state.style04a == null) state.style04a = ""
	if(state.style04b == null) state.style04b = ""
	if(words04 == null) words04 = ""
	if(words04a == null) words04a = ""
	if(words04b == null) words04b = ""
	if(nSections04 >= "1") {
		if(device04) {
			state.deviceStatus04 = device04.currentValue("${deviceAtts04}")
			if(state.deviceStatus04 == null) state.deviceStatus04 = "No Data"
            if(useColors04) {
                deviceStatus04 = state.deviceStatus04
                getStatusColors(deviceStatus04, deviceAtts04)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler04 - Received: ${deviceStatus1}"
                state.deviceStatus04 = deviceStatus1
            }
		} else state.deviceStatus04 = ""
	}
	if(nSections04 >= "2") {
		if(device04a) {
			state.deviceStatus04a = device04a.currentValue("${deviceAtts04a}")
			if(state.deviceStatus04a == null) state.deviceStatus04a = "No Data"
            if(useColors04a) {
                deviceStatus04a = state.deviceStatus04a
                getStatusColors(deviceStatus04a, deviceAtts04a)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler04a - Received: ${deviceStatus1}"
                state.deviceStatus04a = deviceStatus1
            }
		} else state.deviceStatus04a = ""
	}
	if(nSections04 == "3") {
		if(device04b) {
			state.deviceStatus04b = device04b.currentValue("${deviceAtts04b}")
			if(state.deviceStatus04b == null) state.deviceStatus04b = "No Data"
            if(useColors04b) {
                deviceStatus04b = state.deviceStatus04b
                getStatusColors(deviceStatus04b, deviceAtts04b)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler04b - Received: ${deviceStatus1}"
                state.deviceStatus04b = deviceStatus1
            }
		} else state.deviceStatus04b = ""
	}
	
// ***** Make the table for line 4	*****
	
    state.theTile04 = ""

    if(nSections04 >= "1") {
        state.theTile04 = "<table style='width:100%'><tr style='text-align:${align04};color:${color04};font-size:${fontSize04}px'><td style='"
        state.theTile04 += "width:${secWidth04}%'>"
        if(wordsBEF04) makeTileLine(4,wordsBEF04,linkBEF04)
        if(wordsBEF04) state.theTile04 += "${newWords2}"
		if(deviceAtts04) state.theTile04 += "${state.deviceStatus04}"
		if(wordsAFT04) makeTileLine(4,wordsAFT04,linkAFT04)
        if(wordsAFT04) state.theTile04 += "${newWords2}"
	} 
    if(nSections04 >= "2") {
		state.theTile04 += "<td style='"
        if (align04a != align04) state.theTile04 += "text-align:${align04a};"
        if (color04a != color04) state.theTile04 += "color:${color04a};"
        if (fontSize04a != fontSize04) state.theTile04 += "font-size:${fontSize04a}px;"
        state.theTile04 += "width:${secWidth04a}%'>"
		if(wordsBEF04a) makeTileLine("4a",wordsBEF04a,linkBEF04a)
        if(wordsBEF04a) state.theTile04 += "${newWords2}"
		if(deviceAtts04a) state.theTile04 += "${state.deviceStatus04a}"
		if(wordsAFT04a) makeTileLine("4a",wordsAFT04a,linkAFT04a)
        if(wordsAFT04a) state.theTile04 += "${newWords2}"
	}
    if(nSections04 == "3") {
		state.theTile04 += "<td style='"
        if (align04b != align04) {state.theTile04 += "text-align:${align04b};"}
        if (color04b != color04) {state.theTile04 += "color:${color04b};"}
        if (fontSize04b != fontSize04) {state.theTile04 += "font-size:${fontSize04b}px;"}
        state.theTile04 += "width:${secWidth04b}%'>"
		if(wordsBEF04b) makeTileLine("4b",wordsBEF04b,linkBEF04b)
        if(wordsBEF04b) state.theTile04 += "${newWords2}"
		if(deviceAtts04b) state.theTile04 += "${state.deviceStatus04b}"
		if(wordsAFT04b) makeTileLine("4b",wordsAFT04b,linkAFT04b)
        if(wordsAFT04b) state.theTile04 += "${newWords2}"
	}
    if(nSections04 >= "1") {
    	state.theTile04 += "</table>"
    }
    state.theTileLength04 = state.theTile04.length()
    
	if(logEnable) log.debug "In tileHandler04 - state.theTile04: ${state.theTile04}"
	if(state.theTileLength04 == null) state.theTileLength04 = 0
}

def tileHandler05(){
	if(logEnable) log.debug "In tileHandler05 (${state.version})"
	if(state.style05 == null) state.style05 = ""
	if(state.style05a == null) state.style05a = ""
	if(state.style05b == null) state.style05b = ""
	if(words05 == null) words05 = ""
	if(words05a == null) words05a = ""
	if(words05b == null) words05b = ""
	if(nSections05 >= "1") {
		if(device05) {
			state.deviceStatus05 = device05.currentValue("${deviceAtts05}")
			if(state.deviceStatus05 == null) state.deviceStatus05 = "No Data"
            if(useColors05) {
                deviceStatus05 = state.deviceStatus05
                getStatusColors(deviceStatus05, deviceAtts05)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler05 - Received: ${deviceStatus1}"
                state.deviceStatus05 = deviceStatus1
            }
		} else state.deviceStatus05 = ""
	}
	if(nSections05 >= "2") {
		if(device05a) {
			state.deviceStatus05a = device05a.currentValue("${deviceAtts05a}")
			if(state.deviceStatus05a == null) state.deviceStatus05a = "No Data"
            if(useColors05a) {
                deviceStatus05a = state.deviceStatus05a
                getStatusColors(deviceStatus05a, deviceAtts05a)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler05a - Received: ${deviceStatus1}"
                state.deviceStatus05a = deviceStatus1
            }
		} else state.deviceStatus05a = ""
	}
	if(nSections05 == "3") {
		if(device05b) {
			state.deviceStatus05b = device05b.currentValue("${deviceAtts05b}")
			if(state.deviceStatus05b == null) state.deviceStatus05b = "No Data"
            if(useColors05b) {
                deviceStatus05b = state.deviceStatus05b
                getStatusColors(deviceStatus05b, deviceAtts05b)
                pauseExecution(500)
                if(logEnable) log.debug "In tileHandler05b - Received: ${deviceStatus1}"
                state.deviceStatus05b = deviceStatus1
            }
		} else state.deviceStatus05b = ""
	}
	
// ***** Make the table for line 5	*****
	
    state.theTile05 = ""

    if(nSections05 >= "1") {
        state.theTile05 = "<table style='width:100%'><tr style='text-align:${align05};color:${color05};font-size:${fontSize05}px'><td style='"
        state.theTile05 += "width:${secWidth05}%'>"
        if(wordsBEF05) makeTileLine(5,wordsBEF05,linkBEF05)
        if(wordsBEF05) state.theTile05 += "${newWords2}"
		if(deviceAtts05) state.theTile05 += "${state.deviceStatus05}"
		if(wordsAFT05) makeTileLine(5,wordsAFT05,linkAFT05)
        if(wordsAFT05) state.theTile05 += "${newWords2}"
	} 
    if(nSections05 >= "2") {
		state.theTile05 += "<td style='"
        if (align05a != align05) state.theTile05 += "text-align:${align05a};"
        if (color05a != color05) state.theTile05 += "color:${color05a};"
        if (fontSize05a != fontSize05) state.theTile05 += "font-size:${fontSize05a}px;"
        state.theTile05 += "width:${secWidth05a}%'>"
		if(wordsBEF05a) makeTileLine("5a",wordsBEF05a,linkBEF05a)
        if(wordsBEF05a) state.theTile05 += "${newWords2}"
		if(deviceAtts05a) state.theTile05 += "${state.deviceStatus05a}"
		if(wordsAFT05a) makeTileLine("5a",wordsAFT05a,linkAFT05a)
        if(wordsAFT05a) state.theTile05 += "${newWords2}"
	}
    if(nSections05 == "3") {
		state.theTile05 += "<td style='"
        if (align05b != align05) {state.theTile05 += "text-align:${align05b};"}
        if (color05b != color05) {state.theTile05 += "color:${color05b};"}
        if (fontSize05b != fontSize05) {state.theTile05 += "font-size:${fontSize05b}px;"}
        state.theTile05 += "width:${secWidth05b}%'>"
		if(wordsBEF05b) makeTileLine("5b",wordsBEF05b,linkBEF05b)
        if(wordsBEF05b) state.theTile05 += "${newWords2}"
		if(deviceAtts05b) state.theTile05 += "${state.deviceStatus05b}"
		if(wordsAFT05b) makeTileLine("5b",wordsAFT05b,linkAFT05b)
        if(wordsAFT05b) state.theTile05 += "${newWords2}"
	}
    if(nSections05 >= "1") {
    	state.theTile05 += "</table>"
    }
    state.theTileLength05 = state.theTile05.length()
    
	if(logEnable) log.debug "In tileHandler05 - state.theTile05: ${state.theTile05}"
	if(state.theTileLength05 == null) state.theTileLength05 = 0
}

If all of the cells are using similar formatting, it saves quite a bit. If each cell has a different format, then it ends up being the same size.

I hope this is a useful concept, thanks for taking a look!

2 Likes

For what it is worth, I like @jerry.molenaar 's concept. While it is nice to know that I can format each cell differently, I have yet to use this app to do so. I only have created two tile master tiles so far, but all the ones I am planning on creating will likely have one format per row. Anything to relieve the pressure on the 1024 limit is likely a good thing. Having the option to format is good and would prefer to not give it up but these tiles are all about information presentation, the more the better.

LJ

@bptworld

I am experiencing the following warnings in Hubitat Dashboard app and the only reason I am writing you is that it only happens on dashboards that display one of my Tile master tiles. It is strange because the tile works fine. The tile itself says I have used 815 characters. I have done all I can do to drop the character count and i am still getting this series of warnings and the tile is working. This warning doesn't appear in the tile debug, or the Tile Master app.

How do i identify what "attribute list1" is? I tested this with a fresh dashboard and only put this Tile Master tile on it. I don't see anything excluded on the tile display as the warning seems to suggest.

Any help would be welcome.

LJ

This has been covered in great detail in other posts. Basically the dashboard is pulling all attributes from a device instead of just the ones you select. So if any attribute has a value over the 1024 limit, you will see that warning. There is no need to do anything and it's not hurting anything. It's just annoying.

Looks good, go ahead and do a pull request on GitHub to get this added into the code.

Thanks!

Sorry, I thought I looked for such discussion and didn't find it. Thanks for responding and forgive the repeat.

LJ

I think I have done it correctly. I have never done a Pull Request before!

New version on GitHub...

Child:
V2.1.1 - 11/01/19 - Updated Table build logic to minimize formatting (jerry.molenaar)

Thank you, Jerry!