Skip to main content

Commands

All of the commands listed below are case sensitive.

Tile Numbering and Identification

Tiles are assigned a number when the system is started. This occurs when the tiles are enumerated. Tiles can also be referenced by their Unique ID (tile.uid) or Ordinal ID (tile.id). TNLs will display (in most cases) in title case but when entering as arguments in lua commands, you should always use lowercase. For more details about how the numbers are set, refer to the Basic User Guide.

Namespace

A namespace is used to organise commands into groups of like commands. If you wish to view the list of commands within each namespace, use the command print(namespace) to generate the list. Each of the headings below includes the name of the Namespace, i.e. Utility Commands references the util Namespace so the command would be print(util).

The following namespaces are used in the Console:

  • [adapter](#adapter)
  • [global](#global)
  • [input](#input)
  • [limits](#limits)
  • [net](#net)
  • [proof](#proof)
  • [protocol](#protocol)
  • [renderer](#renderer)
  • [screen](#screen)
  • [section](#section)
  • [settings](#settings)
  • [thread](#thread)
  • [tile](#tile)
  • [util](#util)
  • [version](#version)

Path and filenames

The filepath in arguments can use / or \ but if you use \ you need to double them up.

Example:
"c:\\%local%\\media"
or
"c:/%local%/media"

Path variables can be inserted into any argument that requires a path and/or filename. See also Filename Path wildcards

Commands

Root

The Root commands do not require any prefix.

CommandResult
?Returns Screen Status information.
Example:
?
? isEnumerating()Checks if the system is currently performing a tile discovery process (enumerating).
Example:
? isEnumerating()
? isPlaying()Checks if the system is currently running and outputting video to tiles.
Example:
? isPlaying()
? isRunning()Checks if the system is currently running (either playing or enumerating).
Example:
? isRunning()
? isStopped()Checks system is stopped.
Example:
? isStopped()
? isUpdating()Checks if the system is undergoing a firmware update.
Example:
? isUpdating()
adapters()Displays the list of adapters (NICs - Network Interface Cards) on the host PC and details such as IP address and submask, tiles and sections.
Example:
adapters()
autoStart()Will enumerate, then start, and retry forever if enumeration fails. If the screen is running, it will stop the screen briefly while it enumerates.
Example:
autoStart()
enumerate()
enumerate(adapter)
Enumeration is the process of tile discovery. This shows the user which tiles are available. Nothing can occur on the screens until enumeration is complete. This process can identify communication errors with adapters, tiles and strands. Note that this command cannot be used while the screen is running. The adapter ID can be ordinal or uid.
Example:
enumerate() (whole screen)
enumerate(1) (single adapter)
errors()Prints the current list of the errors to the console.
Example:
errors()
help()Displays commands with parameters, namespaces and types.
Example:
help()
load()
load(filename)
Loads in a new settings file (restart of controller software (LEDnet) required for new settings to become active).
Example:
load()
load(filename) (specific file)
ping(tile start, tile end, amount, gap, timeout)Pings a range of tiles and reports results. You can’t ping if the screen is running. Tile identifier can be UID, ID, IP, MAC, ordinal, or TNL. Timeout and gap in ms.
Example:
ping(aa1, aa10, 4, 50, 1000)
print()Implementation of the lua print command. You can also use “?”
Example:
print(“Hello world”)
print(tile.name(1))
?”Hello World”
?tile.id
save()
save(filename)
Saves the existing settings to a new settings file.
Example:
save()
save(filename) (specific file)
screens()Dumps summary of screens to the console. Includes: Format, Gamma, Input, Sections (including wiring patterns and number of tiles).
Example:
screens()
sections()Displays information for each section. This includes tile type, tile range, the screen names as well as the Wiring configuration. It also includes details about pixel format, proofs and information about how the wire order is physically cabled.
Example:
sections()
snapConsole()Prints a (rough) screen dump to the console.
Example:
snapConsole()
snapshot()Save a snap of current screen to file, this may be useful in cases where there is a problem with the display.
Example:
snapshot()
start()Start the screen display.
Example:
start()
stats()Prints basic health stats to the console (this is the same as the ? command).
Example:
stats()
stop()Stop screen display.
Example:
stop()
tiles()Obtain a range of information about the tiles, including the sections they are grouped into and IP addresses. Each tile has a unique IP address which allows you to diagnose network errors.
Example:
tiles()
waffle(tile, int)Waffle pattern is a visible brightness shift around the edge LEDs of a tile. This command corrects this pattern in software. We reccommend correcting by 1% initally and gradually adjusting this until the issue is resolved. Takes a TNL and percentage of correction as an int.
Example:
waffle(A1, 99) or for i = 1, tile.count() do waffle( i, 99 ) end

Adapter

Adapter specific commands are contained in the namespace adapter. Most of these commands can be performed on a specific adapter - which can be specified by either

  • An integer representing the nth adapter in the system.
  • The ip address of the adapter
  • A string representing either its user or hardware name
  • An adapter id wrapper (see section Type Wrappers)

Adapters in the system are ordered firstly by whether Enumeration is turned on (Use Adapter setting), then by the standard windows ordering. See also: autoEnumerate().

A summary of all adapters in the system can be displayed by using the command adapters()

All of the commands below are prefixed with adapter. Most of the commands are to obtain information only but some of them can perform a set function. See the examples for more details.

CommandResult
assignAddresses()Asserts if LEDNet will assign IP addresses during enumeration. This should only be false if tiles are being assigned addresses via an explicitly set up DHCP server, though that is not recommended.
Example:
? adapter.assignAddresses()
autoEnumerate(adapter, boolean)If true then LEDNet will search for tiles on this adapter during enumeration.
Example:
To check if auto enumerate is turned on, use
? adapter.autoEnumerate
To turn autoEnumerate on, use
adapter.autoEnumerate(a, true)
broadcast(adapter)Returns the adapter IP broadcast address.
Example:
? adapter.broadcast(a)
classB(adapter)Asserts if this adapter has a ClassB address range. If true this adapter can have up to 65000 tiles attached.
Example:
To check if the adapter has a ClassB address, use
? adapter.classB(a)
count()Returns the number of adapters in the system.
Example:
To view the number of adapters, use
? adapter.count()
exists(adapter)Does the adapter currently physically exist in the system? Sometimes adapters may disappear on boot up due to driver crashes. The controller remembers that it was there previously so the settings don't disappear and this command allows you to check whether it still exists. You may need to enumerate again to see if it comes back, and if not then it could be a hardware issue.
Example:
To check if the adapter exists in the system, use
? adapter.exists(a)
findTile(adapter)Checks and reports if any tiles are attached to this adapter. See also findTiles() and hasTiles().
Example:
To find out if tiles are attached to the adapter, use
? adapter.findTile(a)
findTiles()Scan every adapter for tiles and then run hasTiles() to access the scan result.
Example:
To scan every adapter for tiles, use
? adapter.findTiles() and then run
? adapter.hasTiles()
friendly(adapter)Returns the user-friendly name for an adapter.
Example:
To check the friendly name for an adapter, use
? adapter.friendly(a)
gateway(adapter)Returns the IP gateway address for this adapter. This should be 0.0.0.0 for any adapters with tiles.
Example:
? adapter.gateway(a)
guid(adapter)Returns a unique identifier for an adapter.
Example:
To check the unique identifier for an adapter, use
? adapter.guid(a)
hasTiles(adapter)Asserts if an adapter has tiles. You first need to run findTiles() to scan the adapters. See also findTile().
Example:
To check if an adapter has tiles, use
? adapter.hasTiles(a) after you have already run
? adapter.findTiles()
highestOctet()The highest address submask which LEDNet will assign a tile IP address to. It is not recommended that you change these values unless the adapter is on a network with other devices that are getting their IP address from DHCP (though that is not recommended either).
Note highestOctet() - lowestOctet() must be greater than the number of tiles on the adapter.
Example:
To check highest octet, use
? adapter.highestOctet()
ip(adapter)Returns the IP address of the adapter.
Example:
To check the IP address, use
? adapter.ip(a)
last(adapter)Returns the status of the last tile on this adapter.
Example:
To check the status of the last tile, use
? adapter.last(a)
loading (adapter)Returns the current load of the specified adapter in terms of percent used. A higher reading means the adpater capacity is nearing maximum load (100).
Example:
To check the adapter load, use
? adapter.loading(1)
lowestOctet()The lowest address submask which LEDNet will assign a tile IP address to. It is not recommended that you change these values unless the adapter is on a network with other devices that are getting their IP address from DHCP (though that is not recommended either).
Note highestOctet() - lowestOctet() must be greater than the number of tiles on the adapter.
Example:
To check the lowest octet, use
? adapter.lowestOctet()
mac(adapter)The mac address of this adapter.
Example:
To check the mac address, use
? adapter.mac(a)
mask(adapter)The subnet mask for this adapter.
Example:
To check the subnet mask, use
? adapter.mask(a)
name(adapter)This returns the name of the adapter's manufacturer, e.g. “Intel Gigaport X”. It’s the name you would use when looking for device drivers.
Example:
To find the adapter manufacturer, use
? adapter.name(a)
resetStats(adapter)Reset the stats of all tiles on this adapter (or all adapters if no argument).
Example:
To reset the stats, use
adapter.resetStats() (for all adapters)
adapter.resetStats(a)(for a specific adapter)
resetTiles(adapter)Reset the tiles on this adapter (or all adapters if no argument).
Example:
To reset the tiles, use
adapter.resetTiles() (for all adapters)
adapter.resetTiles(a) (for a specific adapter)
section(section)Returns the name of that section on that adapter (e.g. Top Left).
Example:
To get the name of a section, use
? adapter.section(1,1)
sectionCount(adapter)Returns the number of sections in this adapter.
Example:
To check the number of sections, use
? adapter.sectionCount(a)
sections(adapter)Returns an array of sections attached to an adapter.
Example:
To check the array of sections, use
? adapter.sections(a)
static(adapter)Asserts if this adapter is not using DHCP.
Example:
To check if adapter is not using DHCP, use
? adapter.static(a)
tileCompatible(adapter)Is this adapter capable of running tiles?
Example:
To check if an adapter can run tiles, use
? adapter.tileCompatible(a)
tileCount(adapter)Returns the current number of tiles connected to this adapter.
Example:
To check the current number of tiles connected, use
? adapter.tileCount(a)
tiles(adapter)Displays current list of tiles to console.
Example:
To check the current list of tiles, use
? adapter.tiles(a)

Global

These commands map to LEDNet settings.

These commands are case sensitive.

All of the commands below are prefixed with global.

CommandResult
brightness()
brightness(ratio)
This is used to set or check the global brightness gain that is applied over all screens in system.
Example:
To check the global brightness, use
? global.brightness()
To set the global brightness to 60%, use
global.brightness(0.6)
cloud.controller(string)Gets or sets the name of the controller. Same as Settings: Cloud, Identifiers, Name.
Example:
? global.cloud.controller()
global.cloud.controller(“Townsville - Main Street South”)
cloud.latitude(float)Gets or sets the latitude of the controller. Used to determine sunrise / set times. Same as Settings: Cloud, Location, Latitude.
Example:
?global.cloud.latitude()
global.cloud.latitude(-37.8721)
cloud.longitude(float)Gets or sets the longitude of the controller. Used to determine sunrise / set times. Same as Settings: Cloud, Location, Longitude.
Example:
? global.cloud.longitude()
global.cloud.longitude(175.6829)
cloud.mq(int)Gets or sets which ON server to use. Int is an enum:
Production = 0
Staging = 1
Unless you’ve specifically been told otherwise, you should be using 0/Production. Same as Settings: Cloud, LEDNet ON, MQ server.
Example:
? global.cloud.mq()
global.cloud.mq(0)
cloud.org(string)Gets or sets the organisation ID. If you are an Admin in the ON Cloud Platform, you can get this number from the ON Cloud Platform. Same as Settings: Cloud, Identifiers, Organisation.
Example:
? global.cloud.org()
global.cloud.org(“01189998819991197253”)
cloud.uid(string)Gets or sets the controller ID. You can get this number from the ON Cloud Platform. Same as Settings: cloud, Controller ID.
Example:
? global.cloud.uid()
global.cloud.uid(“86753099021024601”)
cloud.use(boolean)Gets or sets the state of the ‘Connect to cloud’ setting. Same as Settings: Cloud, Connect to cloud.
Example:
? global.cloud.use()
global.cloud.use(true)
logging(boolean)Gets or sets the state of the ‘Logging’ setting. Same as Setttings: Behaviour, Logging.
Example:
global.logging(true)
logStats(boolean)Gets or sets the state of the ‘Log Tile Stats’ setting. Same as Settings:Behaviuor, Logging, Log Tile Stats.
Example:
? global.logStats()
global.logStats(true)
mediaFolder()
mediaFolder(directory&path)
This is the folder where the local media player finds the images to display.
Example:
To check which folder it's using, use
? global.mediaFolder()
To set a new folder for images, use
global.mediaFolder(%localappdata%/Link88/Link88 Controller/media)
or
global.mediaFolder(%local%/differentfolder)
onWebFolder()
onWebFolder(directory&path)
This is the folder where the web player finds the images to display.
Example:
To check which folder it's using, use
? global.onWebFolder()
To set a new folder for images, use
global.onWebFolder(%localappdata%/Link88/Link88 Controller/onweb_media)
or
global.mediaFolder(%local%/differentfolder)
proof.folder(string)This is where images are stored for the proof of play engine. It provides a set of images to match against to confirm which ones were played. Same as Settings: Proof, Match Proofs to Media.
Example:
To check which folder it's using, use
? global.proof.folder()
To set a new folder for images, use
global.proof.folder(C:/Users/admin/AppData/Local/Link88/Link88 Controller/onweb_media)
or
global.mediaFolder(%local%/differentfolder)
proof.log(boolean)Gets or sets the value of the “Log locally’ setting. If enabled, proofs will be logged locally as well as uploaded to the cloud. Same as Settings:Proof, Log locally.
Example:
? global.proof.log()
global.proof.log(true)
proof.match(boolean)Gets or sets the value of the ‘Match proofs to media’ setting. If enabled, all proofs will be checked against the media files to ensure that they are displaying correctly. Same as Settings: Proof, Match proofs to media.
Example:
? global.proof.match()
global.proof.match(true)
proof.saveUnknown(boolean)Gets or sets the value of the ‘Save unknown proofs’ setting. If enabled, proofs that are unable to be matched to existing media will be saved in a folder. Same as Settings: Proof, Save unknown proofs.
Example:
? global.proof.saveUnknown()
global.proof.saveUnknown(true)
proof.threshold(int)Gets or sets the proof threshold. This is how long an image has to be on screen before proof is uploaded to the server. Argument (int) is milliseconds. Same as Settings: Proof, Threshold.
Example:
? global.proof.threshold()
global.proof.threshold(2000)
proof.unknownFolder(string)Gets or sets the folder in which unknown proofs will be stored. Same as Settings: Proof, [unknown proofs folder setting].
Example:
? global.proof.unknownFolder()
global.proof.unknownfolder(“%localappdata%/unknown”)
or
global.mediaFolder(%local%/differentfolder)
proof.upload(boolean)Gets or sets the value of the ‘Upload to cloud’ setting. If enabled, proofs will be uploaded to the cloud. Same as Settings: Proof, Upload to cloud.
Example:
? global.proof.upload()
global.proof.upload(true)
proof.use(boolean)Gets or sets the value of the ‘Use Proof of Play’ setting. If you intend to use Proof of Play, you will need to enable this. Same as Settings: Proof, Use Proof of Play.
Example:
? global.proof.use()
global.proof.use(true)
proof.verbose(boolean)Gets or sets the value of the ‘Verbose Mode’ setting. Verbose mode will display all actions being taken by the proof engine in the console. This can result in a lot of info being dumped into console. It’s mostly used for testing and troubleshooting. You probably want to leave this turned off. Same as Settings: Proof, Verbose Mode.
Example:
? global.proof.verbose()
global.proof.verbose(false)
sensor()
sensor(value)
Reads or sets the last sensor measurement from a light sensor. The set method can be used to support arbitrary sensors, or to emulate a hardware sensor.
Example:
To check the last measurement returned by the light sensor (if any).
print( global.sensor() )
restartOnMissing(boolean)Gets or sets the state of the ‘Restart on missing tiles’ setting. Same as Settings: Behaviour, Error Handling, Restart on missing tiles.
Example:
? global.restartOnMissing()
global.restartOnMissing(true)
telnetPort()
telnetPort(port)
This allows you to set or check the telnet port in use.
Example:
To check the port, use
? global.telnetPort()
To set the port, use
global.telnetPort(port)
throttleNetwork(boolean)Gets or sets the state of the 'Throttle on network congestion' setting. Same as Settings: Behaviour, Error handling, Throttle on network congestion.
Example:
global.throttleNetwork(true)
timing()
timing(frame&rate)
This allows you to check or set the frame rate when timingMethod() is set to Cycle. The default is 60 frames per second (1/60 or 0.016666667535901).
Example:
To check the frame rate, use
? global.timing()
To set the frame rate, use
global.timing(0.016666667535901)
timingMethod()
timingMethod(method)
This checks or sets the global timing method. Possible values are 0 - cycle timing, 1 - monitor timing, 2 - capture. This should generally be set to cycle timing. Capture can be used if a capture device is present. Monitor gets the timing from an attached monitor - this is not as reliable as the other methods and is not recommended.
Example:
To check the method it's using, use
? global.timingMethod()
To set the method it's using, use
global.timingMethod(0)
unknownFolder()
unknownFolder(directory&path)
The folder which unknown media is saved. That is, media that has not been matched by the proof engine.
Example:
To check the folder it's using, use
? global.unknownFolder()
To set the folder, use
global.unknownFolder(C:/Users/admin/AppData/Local/Link88/Link88 Controller/unknown)
webSocketPort()
webSocketPort(port number)
The default web socket port to bind to (defaults to port 8002).
Example:
To check the default web socket, use
? global.webSocketPort()
To set the default web socket, use
global.webSocketPort(8002)

Input

These commands pertain to the capture device, the media player and video, the renderer and the scrape method.

A capture device can have several HDMI cables going in and it can also accommodate SDI input. A single capture device can be used for more than one screen. The size of the capture can be modified to only show part of it, to automatically resize it to the whole screen, or to show a fixed resize (the fixed size can be customised).

The built-in media player can be viewed in your browser by going to our ON Cloud Platform and selecting the "Live" menu.

The media player has two modes:

  • On the web (All of the media commands that have "On" as part of the command refer to the web mode).

  • Local (Local is usually used when a screen is not connected to the internet, which can be common with rentals or with mobile screens).

Not all of the media commands are available for both the web and local mode so be sure you know which mode you are using on the screen before inputting commands. For instance, transition type is only available for the web.

Commands such as contrast, brightness, and hue are for video only.

The renderer allows for custom-built apps to be used. This allows a user to broadcast something other than an image file or video file.

These commands are case sensitive.

All of the commands below are prefixed with input.

CommandResult
capture.available()Asserts whether the capture device is available.
Example:
To check if the capture device is available, use
? input.capture.available()
capture.deinterlaceMethod()
capture.deinterlaceMethod(method)
Selects the capture deinterlace algorithm to use. Adaptive is usually the best, and is the setting we recommend. For some bad signals (that swap fields for instance) discard may be better as it will not try to deinterlace, which may work on lower resolution screens. Blend will merge frames together. If you do not wish to use deinterlace, you can set it to none.
The methods are:
none = "0"
discard = "1"
blend = "2"
adaptive = "3"
You can find the list of methods by using the command:
? enum.deinterlace
Example:
To check the current deinterlace method, use
? input.capture.deinterlaceMethod()
To set the current deinterlace method, use one of the following
input.capture.deinterlaceMethod(0)
input.capture.deinterlaceMethod(1)
input.capture.deinterlaceMethod(2)
input.capture.deinterlaceMethod(3)
capture.format()
capture.format(format)
Returns the current broadcast standard detected on the card. Older cards may need to be explicitly set to the correct format to 'lock'.
Example:
To check the current format, use
? input.capture.format()
To set the format, you need to know the formats the capture card uses as different hardware supports different formats.
input.capture.format(format)
capture.input()
capture.input(input)
This displays the capture port in use, e.g. HDMI, SDI, Composite, etc. As the input varies between cards, and because some can have multiple HDMI inputs, there is no standard list of inputs.
Example:
To check the current input, use
? input.capture.input()
To set the current input, use
input.capture.input(input)
capture.offset(screen)Apply an offset (border) to the image capture. Non-HD signals sometimes have 'junk' present in the first few pixels so this can offset that. It's not often that the offset needs to be set. This returns a vec2 with x and y members, and can be set by passing both arguments explicitly.
Example:
To check the current offset, use
? input.capture.offset(1)
capture.previewWindow(boolean)Turn the preview window on or off.
Example:
To turn on the preview window, use
input.capture.previewWindow(true)
To turn off the preview window, use
input.capture.previewWindow(false)
capture.resizeMethod()
capture.resizeMethod(method)
Selects the resizing strategy: unsized, size to screen, or size to fixed value. Use with This is typically assigned at setup and does not usually change.
The following enum is used:
enum.resize = {
system = "3"
screen = "2"
none = "0"
fixed = "1"
}
Example:
To check the current resize method, use
? input.capture.resizeMethod()
To set the current resize method, use one of the following
input.capture.resizeMethod(0)
capture.size()
capture.size(x, y)
Retrieves the fixed capture size. This returns a vec2 with x and y members, and can be set by passing both arguments explicitly.
Example:
To check the fixed capture size, use
? input.capture.size()
To set the fixed capture size, use
input.capture.size(320, 200)
capture.use()
capture.use(boolean)
Use capture devices as a LEDNet input.
Example:
To check if the capture device is being used, use
? input.capture.use()
To turn on the capture device, use
input.capture.use(true)
To turn off the capture device, use
input.capture.use(false)
capture.useScreenGeometry()Will use the screen offset setting in capture as well as screen scrape. Usually you want capture to be seperate and ignore this setting, but occasionally you want offset in the capture canvas as well.
Example:
To ensure the screen offet is not being used, use
input.capture.useScreenGeometry(false)
media.aspect(int)Gets or sets the method used to deal with the aspect ratio of media.
Int is an enum:
Fill = 0
Keep = 1
Expand = 2
Keep will maintain aspect ratio and centre the image on the screen with black bars on the sides (or top and bottom).
Expand will maintain the aspect ratio but expand the image so there are no black bars, effectively cropping it (if needed).
Fill will ignore the aspect ratio to fill the screen. (For media that does not match the aspect ratio of the screen, this will result in distorted images.)
Example:
To check the method used for the aspect ratio, use
? input.media.aspect()
media.brightness()
media.brightness(brightness)
Adjusts the brightness of video played by the internal media player. The brightness is represented with a ratio from 0 to 100%. Same as player:settings, brightness.
Example:
To check the brightness setting, use
? input.media.brightness()
To set the brightness, use
input.media.brightness(0.7) (set to 70%)
media.contrast()
media.contrast(contrast)
Adjusts the contrast of video played by the internal media player. The contrast is represented with a value from -1 to 1. Same as player:settings, contrast.
Example:
To check the contrast setting, use
? input.media.contrast()
To set the contrast, use
input.media.contrast(0.6)
media.dwell(seconds)Adjusts the dwell time, which is how long a static image plays on the internal media player.
Example:
To check the dwell time, use
? input.media.dwell()
To set the dwell time, use
input.media.dwell(12)
media.hue()
media.hue(hue)
Adjusts the hue of video played by the internal media player. The hue is represented by a ratio from 0-100%. Same as player:settings, hue.
Example:
To check the hue, use
? input.media.hue()
To set the dwell time, use
input.media.hue(0.8) (set to 80%)
media.mode()
media.mode(mode)
This sets the playback mode for the media player app (renderer). Its three modes are File player, Folder player, or ON Web player.
The following enum is used:
enum.player = {
file = 0,
folder = 1,
onweb = 2
}
Example:
To check the current mode, use
? input.media.mode()
To set the mode to use the File player, use
input.media.mode(0)
To set the mode to use the Folder player, use
input.media.mode(1)
To set the mode to use the ON Web player, use
input.media.mode(2)
media.onDwell()Returns the dwell time set for ON Web player, which is how long a static image plays on the web media player.
Example:
To check the dwell time on the web player, use
? input.media.onDwell()
media.onPlaylist()Returns the current list of images the ON Web player is shifting through. It also returns image width and height.
You can right-click on any json output and click "view item" to see a pop up window with formatted json output. You can also use the json.decode command, see example.
Example:
To check the playlist, use
? input.media.onPlaylist()
The result will be an unformatted string. To see the files in a formatted list, use
? json.decode( input.media.onPlaylist() )
media.onTransition()Returns current ON Web transition time.
Example:
To check the transition time, use
? input.media.onTransition()
media.onTransitionType()Returns current ON Web transition type (currently only fade is supported).
Example:
To check the transition type, use
? input.media.onTransitionType()
media.playlist()Returns current local player list of images.
Example:
To check the playlist, use
? input.media.playlist()
media.saturation()
media.saturation(saturation)
Adjusts the saturation of video played by the internal media player. The saturation is represented by a ratio from 0-100%. Same as player:settings, saturation.
Example:
To check the saturation setting, use
? input.media.saturation()
To set the saturation to 40%, use
input.media.saturation(0.4)
media.transition()
media.transition(seconds)
This allows you to check or set the time for transitions. It is measured in seconds and is a float so can have decimals.
Example:
To check the transition time, use
? input.media.transition()
To set the transition time, use
input.media.transition(2.3)
renderer.height()Returns the height of the screen in pixels.
Example:
To check the height, use
? input.renderer.height()
renderer.internal()Asserts if the current applet is a built-in one (embedded in the exe - currently media player only), rather than one picked up from the applet (renderer) folder.
Example:
To check if the current applet is built-in, use
? input.renderer.internal()
renderer.renderer()
renderer.renderer(renderer)
Returns or sets the current 'renderer' or app, i.e. switch to the media player, or a custom app. The argument for renderer will depend on what apps you have installed. Use with caution, as passing the wrong argument may cause the controller to crash.
Example:
To check the renderer being used, use
? input.renderer.renderer()
To set the renderer, use
input.renderer.renderer("Media Player")
renderer.size()
renderer.size(x, y)
Current size of the renderer window if renderer.sizeMethod() is set to fixed. This returns a vec2 with x and y members, and can be set by passing both arguments explicitly.
Example:
To check the renderer being used, use
? input.renderer.size()
To set the renderer, use
input.renderer.size(40, 40)
renderer.sizeMethod()
renderer.sizeMethod(method)
Set how the media player app resizes its content to fit. The sizing methods available are fixed, screen and system or you can turn off resizing all together. If the resize method is fixed, then input.renderer.size is used. Otherwise, the size is dependent on the screen or system size.
The following enum is used:
enum.resize = {
none = 0,
fixed = 1,
screen = 2,
system = 3,
}
Example:
To check the renderer method being used, use
? input.renderer.sizeMethod()
To set the renderer size method to fixed, use
input.renderer.sizeMethod(1)
renderer.use()
renderer.use(screen, boolean)
Turns on and off the renderer.
Example:
To check if the renderer is on, use
? input.renderer.use()
To turn on renderer, use
input.renderer.use(1,true)
To turn off renderer, use
input.renderer.use(1,false)
renderer.width()Returns the width of the screen in pixels.
Example:
To check the width, use
? input.renderer.width()
scrape.captureSize()
scrape.captureSize(x, y)
Current screen scrape size. This returns a vec2 with x and y members, and can be set by passing both arguments explicitly.
Example:
To check the current screen scrape size, use
? input.scrape.captureSize()
To set the current screen scrape size, use
input.scrape.captureSize(40, 40)
scrape.destinationSize()
scrape.destinationSize(x, y)
Screen scrape resized value (if scrape resizing is on). This returns a vec2 with x and y members, and can be set by passing both arguments explicitly.
Example:
To check the destination screen scrape size, use
? input.scrape.destinationSize()
To set the destination screen scrape size, use
input.scrape.destinationSize(40, 40)
scrape.fixedCapture(boolean)This is a Boolean that turns on/off scrape resizing. Usually this will be turned off. If set, the renderer will use input.scrape.captureSize as input size and input.scrape.destinationSize as a destination size.
In other words, the scrape image will map the rectangle defined by input.scrape.captureSize onto the rectangle defined by input.scrape.destinationSize.
Example:
To check if scrape resizing is being used, use
? input.scrape.fixedCapture()
To turn on scrape resizing, use
input.scrape.fixedCapture(true)
To turn off scrape resizing, use
input.scrape.fixedCapture(false)
scrape.mouseDrag(screen, boolean)Turn off or on screen dragging with the mouse. This allows you to move sections to only display particular areas on the screen and it allows you to have gaps between what is displayed.
Typically, this feature is not used for most screens due to the nature of the images that will be displayed.
Example:
To turn on mouse drag, use
input.scrape.mouseDrag(1,true)
To turn off mouse drag, use
input.scrape.mouseDrag(1,false)
scrape.pos()
scrape.pos(x, y)
Screen scrape offset. This returns a vec2 with x and y members, and can be set by passing both arguments explicitly.
Example:
To check the screen scrape offset, use
? input.scrape.pos(1)
To set the scrape offset, use
input.scrape.pos(20, 20)
scrape.showRegions()Show section scrape layout on the controller display (fences that indicate which sections can be moved independently from each other).
Example:
To turn on regions, use
input.scrape.showRegions(true)
To turn off regions, use
input.scrape.showRegions(false)
window.windowClass(string)Gets or sets the class of window that’s been selected for capture.
Example:
? input.window.windowClass()
input.window.windowClass("Chrome")
window.windowExe(string)Gets or sets the name of the executable that has been selected as the capture window.
Example:
? input.window.windowExe()
input.window.windowExe("chrome.exe")
window.windowFound()Asserts whether the window selected for capture has been found.
Example:
? input.window.windowFound()
window.windowMatch(int)Gets or sets the value of the Match settting. Match specifies the method used to identifying the window to be captured. In most cases, Title or Exe will work.
Uses enums:
title = 0
titleOrClass = 1
titleOrExe = 2
Example:
? input.window.windowMatch()
input.window.windowMatch(2)
windowTitle(string)Gets or sets the Title of the window to capture.

Same as Input: Window, Title. (Set in the UI by choosing the window from the “Target Window” button.
Example:
? input.window.windowTitle()
input.window,windowTitle(“LEDNet Media Player”)
use(bool)Gets or sets the state of the Lock Input to Window setting.
If true, LEDNet will try to capture the display of the window selected.
Same as Input: Window, Lock Input to Window
Example:
? input.window.use()
input.window.use(true)

Json

These commands are case sensitive.

All of the commands below are prefixed with json.

CommandResult
decode(json string)Takes a json string and outputs it in a readable format.
encode(table)Converts the given into a json string.
Example:
? json.encode( { a = "b", c = 100 })

Limits

These commands set the warning and error thresholds for diagnostics reporting.

These commands are case sensitive.

All of the commands below are prefixed with limits.

CommandResult
cpuWarn()
cpuWarn(value)
This allows you to check or set the CPU loading threshold. The value is represented by a percentage.
Example:
To check the threshold, use
? limits.cpuWarn()
To set the threshold, use
limits.cpuWarn(80.0)
ledError()
ledError(value)
This allows you to check or set the LED board temperature error threshold.
Please note that the value is reported in degrees Celsius after it has been multiplied by 10.
Example:
To check the error threshold of the LED board temperature, use
? limits.ledError()
To set the error threshold of the LED board temperature, use
limits.ledError(900.0)
ledWarn()
ledWarn(value)
This allows you to check or set the LED board temperature warning threshold.
Please note that the value is reported in degrees Celsius after it has been multiplied by 10.
Example:
To check the warning threshold of the LED board temperature, use
? limits.ledWarn()
To check the warning threshold of the LED board temperature, use
limits.ledWarn(800.0)
localError()
localError(value)
This allows you to check or set the local board temperature error threshold.
Please note that the value is reported in degrees Celsius after it has been multiplied by 10.
Example:
To check the error threshold of the local board temperature, use
? limits.localError()
To set the error threshold of the local board temperature, use
limits.localError(1200.0)
localWarn()
localWarn(value)
This allows you to check or set the local board temperature warning threshold.
Please note that the value is reported in degrees Celsius after it has been multiplied by 10.
Example:
To check the warning threshold of the local board temperature, use
? limits.localWarn()
To check the warning threshold of the local board temperature, use
limits.localWarn(1000.0)
netWarn()
netWarn(value)
This allows you to check or set the network loading threshold. The value is represented as a percentage.
Example:
To check the network loading threshold, use
? limits.netWarn()
To set the network loading threshold, use
limits.netWarn(95.0)

Net

These commands pertain to the web socket connection which is used for the screen to communicate with third party programs. The mq refers to Amazon's back end and these commands allow us to talk to it over the web. Most of these commands are used to get information rather than set information.

These commands are case sensitive.

All of the commands below are prefixed with net.

CommandResult
clientCount()Count of number of web socket clients connected.
Example:
To check the client count, use
? net.clientCount()
mq.connected()Asserts if MQ connection is live (Amazon).
Example:
To check if the connection is live, use
? net.mq.connected()
mq.debug(boolean)Turns on MQ debugging, printing all traffic to console (logs).
Example:
To turn on debugging, use
net.mq.debug(true)
To turn off debugging, use
net.mq.debug(false)
mq.mute(boolean)Stops sending to MQ (but keeps connection alive).
Example:
To check if it's muted, use
? mq.mute()
To stop sending, use
net.mq.mute(true)
To turn off mute, use
net.mq.mute(false)
mq.reconnectCount()How many times has the connection dropped? This number should generally be zero.
Example:
? net.mq.reconnectCount()
mq.sendEvents()Toggles sending of an update of tile events to MQ as they happen (rather than waiting for the update that's automatically sent every 10 minutes). This allows you to force updates for testing.
Example:
net.mq.sendEvents(true)
mq.uptime()How long has MQ been connected?
Example:
? net.mq.uptime()
mq.upload( filename )Uploads the specified file to an Amazon S3 bucket. Used to send a file to the Candelic team for troubleshooting etc.
Example:
net.mq.upload(“settings_v5.json”)
mq.uploadLogs()Uploads the log files to an Amazon S3 bucket. Used to send a file to the Candelic team for troubleshooting etc.
Example:
net.mq.uploadLogs()
mq.uploadProof()Uploads the settings file to an Amazon S3 bucket. Used to send a file to the Candelic team for troubleshooting etc.
Example:
net.mq.uploadSettings()
mq.uploadSnap()Uploads the snapshot files to an Amazon S3 bucket. Used to send a file to the Candelic team for troubleshooting etc.
Example:
net.mq.uploadSnap()
mq.uploadStats()Uploads the stats files to an Amazon S3 bucket. Used to send a file to the Candelic team for troubleshooting etc.
Example:
net.mq.uploadStats()
telnetCount()How many telnet clients are connected. You can communicate using telnet as well as the web socket, especially in situations where you may not be able to connect to the web as telnet clients should always be available.
Example:
? net.telnetCount()

Proof

These commands relate to the Proof of Display engine which tracks the media that have actually been displayed on the screen.

These commands are case sensitive.

All of the commands below are prefixed with proof.

CommandResult
db.proofs(hash, start, stop)This will list all proof records for hash between start and stop time.
Start and Stop times follow the ISO 8601 date and time format and should use Coordinated Universal Time (UTC) as designated by the Z after the time, e.g. <date>T<time>Z.
Example:
To list proof records for hash 2342342 between 4:34pm Jan 9 2020 and 6:34pm Jan 9 2020, use
proof.db.proofs("2342342","20200109T163400Z","20200109T183459Z")
downloadfileS3(file, key, bucket)
downloadfileS3(file, key, bucket, credential, secret)
Download a file from Amazon S3.
Example:
To download 'image.jpg', use
proof.downloadfileS3("image.jpg","43453453","imag_4345.jpg")
filename(hash)Return a filename associated with a hash.
Example:
To find the related filename for a hash, use
? proof.filename("23428374283746")
generateHashes(folder)This generates hashes for all images in a folder, for matching with the proof engine.
Example:
To generate hashes for the Media folder, use
proof.generateHashes("%media%)
generateStats(folder)This allows you to generate and display statistical proof data for all images in a folder.
Example:
To generate proof data for the Media folder, use
proof.generateStats("%media%")
hashes()Dumps proof hashes. Output will be a list of hashes and the filename they refer to.

Example:
To dump the proof hashes, use
proof.hashes()
uploadHashes()Uploads all known hashes to ON Cloud Platform by scanning a whole folder to upload the proof data. Input the file path as the argument.
Example:
To send proof data from c:/media/folder/ to the ON Cloud Platform, use
proof.uploadHashes("c:/media/folder/")

Protocol

These commands get or set protocol information from adapters.

These commands are case sensitive.

All of the commands below are prefixed with protocol.

CommandResult
findTile(adapter)Asserts whether the specified adapter has any tiles. Returns a true or false value.
Example:
To look for tiles on the first adapter, use
? protocol.findTile(1)
findTiles()This command will check all adapters for tiles.
Example:
To check adapters for tiles, use
protocol.findTiles()
To view a formatted output, use
protocol.findTiles() for i = 1, adapter.count() do print(string.format("Adapter %s: %s", i, adapter.hasTiles(i) ) ) end
readMac(tnl)This will read the mac address from a tile.
Example:
To get the mac address for a1, use
? protocol.readMac(a1)

Renderer

These commands allow interacting with user defined renderers (or apps). Javascript functions defined in the renderer can be called from lua, properties can be read or set and signals can be sent.

These commands are case sensitive.

All of the commands below are prefixed with renderer.

CommandResult
call(function)
call(function,arg1)
call(function,arg1,arg2)
call(function,arg1,arg2,arg3)
Call a javascript function with up to 3 arguments. Results are routed to the renderer.
Example:
renderer.call("console.log", "Hello World")
property(name)
property(name,value)
Read or Set a defined property.
Example:
renderer.property("color","blue")
script()
script(name)
Sets or Gets the current renderer (app).
Example:
To check the current renderer, use
? renderer.script()
To set the current renderer, use
renderer.script(Media Player)
signal(name)
signal(name,arg1)
signal(name,arg1,arg2)
signal(name,arg1,arg2,arg3)
Invoke a signal in the current renderer with up to 3 arguments.
Example:
? renderer.signal("colourChanged")

Screen

These commands pertain to screen-specific data and actions.

These commands are case sensitive.

All of the commands below are prefixed with screen.

CommandResult
angle(screen)
angle(screen, angle)
Angle of patterns (grid, smpte).
Example:
To check the angle, use
? screen.angle(1)
To set the angle, use
screen.angle(1, 35)
blue(screen)
blue(screen, gain&component)
This is used to set or check the blue gain component used on the screen. The gain component is expressed as a ratio.
Example:
To check the blue gain component, use
? screen.blue(1)
To set the blue gain component to 50%, use
screen.blue(1, 0.5)
To set the blue gain component to 100%, use
screen.blue(1, 1)
brightness(screen)
brightness(screen, brightness)
This is used to set or check the brightness, from 0-100%. The brightness is expressed as a ratio.
Example:
To check the brightness, use
? screen.brightness(1)
To set the screen to 50% brightness, use
screen.brightness(1, 0.5)
To set the screen to 100%, use
screen.brightness(1, 1)
colourSpace(screen)
colourSpace(screen, standard)
Colour space standard to target, Rec601, Rec709 or Rec2020.
The following enum is used:
enum.colourSpace = {
rec601 = 0,
rec709 = 1,
rec2020 = 2,
auto = 3
}
Example:
To check the colour space, use
? screen.colourSpace(1)
To set the colour space, use
screen.colourSpace(1,3)
count()Number of screens in the system.
Example:
To check the number of screens, use
? screen.count()
currentTarget(screen)This is the target lumens the screen is currently running at. Refer to screen.target() for setting the target.
Example:
To check the target lumens that is currently being displayed, use
? screen.currentTarget(1)
dayTarget(screen)
dayTarget(screen, lumens)
Check or set the target lumens for daytime. This is relevant when Sunrise Tracking is used.
Example:
To check the day target, use
? screen.dayTarget(1)
To set the day target, use
screen.dayTarget(1, 3000)
dayTime(int)The time at which the screen will start transitioning from night target to day target. You can input an integer value equal to the number of minutes past midnight; or a time in hours, minutes and seconds using the time() type wrapper e.g.: time(04,00,00).
Example:
To set the time for the transition to start, use
? screen.dayTime(1, 360)
? screen.dayTime(1,time(05,30,00))
expectedTileCount()How many tiles we expect on this screen.
Example:
To check the number of tiles expected, use
? screen.expectedTileCount()
format(screen)
format(screen, format)
Which internal screen format is being used by the tiles where rgb16 and rgb8 are essentially lossless, and yuv422 & yuv420 are compressed.
The following enum is used:
enum.format = {
rgb16 = 0,
rgb8 = 1,
l16 = 2,
l8 = 3,
yuv422 = 4,
yuv420 = 5,
auto = 6
}
Example:
To check the format, use
? screen.format(1)
To set the format, use
screen.format(1, 6)
gamma(screen)
gamma(screen, gamma&curve)
Gamma curve to apply to the screen (2.2 is typical used for monitors, but in low light settings a little higher - say 3.0 tends to look a little better).
Example:
To check the gamma curve, use
? screen.gamma(1)
To set the gamma curve, use
screen.gamma(1, 3.0)
geoFallBack(screen)
geoFallBack(screen,boolean)
Use geo-based target calculation if light sensor is not working.
Example:
To check if geo fallback is being used, use
? screen.geoFallBack(1)
To turn on geo fallback, use
screen.geoFallBack(1, true)
To turn geo fallback off, use
screen.geoFallBack(1, false)
green(screen)
green(screen, gain component)
This is used to set or check the green gain component used on the screen. The gain component is expressed as a ratio.
Example:
To check the green gain component, use
? screen.green(1)
To set the green gain component to 50%, use
screen.green(1, 0.5)
To set the green gain component to 100%, use
screen.green(1, 1)
heat(boolean)This lets you check if pattern heat mode is on. This relates to the heat map settings if the input pattern is set to stats using screen.pattern(22).
Example:
To check if pattern heat mode is on, use
?screen.heat()
To turn pattern heat mode on, use
screen.heat(true)
To turn pattern heat mode off, use
screen.heat(false)
input(screen)
input(screen, input)
Set or get the current input for the screen. The options are pattern, screen, black magic, or xtreme.
The following enum is used:
enum.input = {
pattern = 1,
screen = 0,
black_magic = 2
window = 3
}
Example:
To check the current input, use
? screen.input
To set current input, use
screen.input(1, 3)
isExtra(screen)Is this screen an extra (i.e. not user-created)? This is used to hold orphan tiles.
Example:
To check if the screen is extra, use
screen.isExtra(1)
motion(screen)
motion(screen, percentage)
This allows you to check or set the Pattern motion. Arguments are a percentage i.e screen.motion(1,50) sets it to 50% motion. This only affects patterns that have some sort of motion such as ‘grid’.
Example:
To check the motion, use
? screen.motion(1)
To set the motion, use
screen.motion(1, 40)
name(screen)Returns the user-friendly name of screen.
Example:
To check the screen name, use
? screen.name(1)
nightTarget(screen)
nightTarget(screen, lumens)
This is used to check or set the target lumens for night time. This is relevant when Sunrise Tracking is used.
Example:
To check the night target, use
? screen.nightTarget(1)
To set the night target, use
screen.nightTarget(1, 3000)
nightTime(int)The time at which the screen will start transitioning from day target to night target. You can input an integer value equal to the number of minutes past midnight; or a time in hours, minutes and seconds using the time() type wrapper e.g.: time(04,00,00).
Example:
To set the time for the transition to start, use
? screen.nightTime(960)
? screen.nightTime(1,time(17,45,00))
offsetX(screen)Screen scrape offset x.
Example:
To check the offset, use
? screen.offsetX()
offsetY(screen)Screen scrape offset y.
Example:
To check the offset, use
? screen.offsetY()
pattern(screen)
pattern(screen, pattern)
Current active pattern. Change by using the screen.patternStat() command, see below.
The following enum is used:
enum.pattern = {
Solid colours:
red = "0"
green = "1"
blue = "2"
cyan = "3"
magenta = "4"
yellow = "5"
white = "6"
black = "8"
Multiple colours:
cycle = "9"
noise = "7"
smpte = "11"
Gradients:
grey_x = "12" (scrolls - set speed and angle with screen.motion() and screen.angle())
grey_y = "13" (scrolls - set speed and angle with screen.motion() and screen.angle())
grey_x_step = "14"
grey_y_step = "15"
Dots:
grid = "10"
pixel_crawl = "16"
vertical_strip = "17"
horizontal_strip = "18"
Information:
id = "19"
sections = "20"
info = "21" (scrolls through multiple options and you can set the speed with screen.motion().)
stats = "22" (use with patternStat command, see below.)
stats1 = "23"
stats2 = "24"
stats3 = "25"
stats4 = "26"
stats5 = "27"
}
Example:
To check the pattern, use
? screen.pattern(1)
To set the pattern, use
screen.pattern(1, 9)
patternStat(screen)
patternStat(screen,stat)
Current active stat to display if stat pattern is showing. This is used when the input is set to pattern and the pattern is set to stats.
The following enum is used:
enum.stat = {
vsync = 0,
packets = 1,
drops = 2,
incomplete = 3,
short_frame = 4,
long_frame = 5,
min_vsync = 6,
avg_vsync = 7,
max_vsync = 8,
min_phase = 9,
avg_phas = 10,
max_phase = 11,
led_test = 12,
chain_errors = 13,
firmware = 14,
local_temp = 15,
local_vref = 16,
led_firmware = 17,
led_temp = 18,
led_vdda = 19,
hts_humidity = 20,
hts_temp = 21,
link = 22,
stats_packet = 23,
status_packet = 24,
last_comms = 25,
serial = 26,
inventory = 27,
uptime = 28,
total_uptime = 29,
runtime = 30,
total_runtime = 31,
stack_headroom = 32
}
Example:
To check the stat pattern, use
? screen.patternStat(1)
To set the patternStat, use
screen.patternStat(1, 13)
red(screen)
red(screen, gain component)
This is used to set or check the red gain component for the screen. The gain component is expressed as a ratio.
Example:
To check the red gain component, use
? screen.red(1)
To set the red gain component to 50%, use
screen.red(1, 0.5)
To set the red gain component to 100%, use
screen.red(1, 1)
sectionCount(screen)This returns the number of sections in the screen.
Example:
To find the total number of sections, use
? screen.sectionCount(1)
sections(screen)List the names of all sections in the specified screen.
Example:
To show the sections, use
? screen.sections(1)
sensorMaxL(screen)This is the maximum setting for the expected luminance for the light sensor. The luminance values on a sensor are arbitrary so you need to map the settings to the target range you are using.
Example:
To check the maximum luminance setting, use
? screen.sensorMaxL(1)
To set the maximum luminance, use
screen.sensorMaxL(500)
sensorMinL(screen)This is the minimum setting for the expected luminance for the light sensor. The luminance values on a sensor are arbitrary so you need to map the settings to the target range you are using.
Example:
To check the minimum luminance setting, use
? screen.sensorMinL(1)
To set the minimum luminance, use
screen.sensorMinL(100)
sensorUrl(screen)
sensorUrl(screen, URL)
This is the URL for the sensor data.
Example:
To check the URL being used, use
? screen.sensorUrl()
To set the sensor URL, use
screen.sensorUrl(1, https://www.sensordata.com/123456)
sunrise()This returns the calculated sunrise time, it does not use any arguments.
Example:
To check the sunrise time, use
? screen.sunrise()
sunriseOffset(screen)
sunriseOffset(screen, minutes)
By default, the screen will begin to transition from nightTarget() to dayTarget() at the time specified by dayTime(). By setting the offset you can adjust it to start earlier or later. This can be a positive or negative number. The time is input in minutes up to +/- 1 hour. i.e. If the sunrise is at 6:00, offsetting it by 60 minutes will mean it won't start until 7:00. Same as Screens: Edit, Target, Sunrise offset.
Example:
To check the sunrise offset, use
? screen.sunriseOffset(1)
To set the sunrise offset, use
screen.sunriseOffset(1, 40)
sunset()This returns the calculated sunset time, it does not use any arguments.
Example:
To check the sunset time, use
? screen.sunset()
sunsetOffset()
sunsetOffset(screen, minutes)
By default, the screen will begin to transition from dayTarget() to nightTarget() at the time specified by nightTime(). By setting the offset you can adjust it to start earlier or later. This can be a positive or negative number. The time is input in minutes up to +/- 1 hour. i.e. If the sunset is at 18:00, offsetting it by 60 minutes will mean it won't start until 19:00. Same as Screens: Edit, Target, Sunset offset.
Example:
To check the sunset offset, use
? screen.sunsetOffset(1)
To set the sunset offset, use
screen.sunsetOffset(1, 45)
target(screen)
target(screen, lumens)
This is used to check or set the target lumens.
Example:
To check the target, use
? screen.target(1)
To set target use
screen.target(1, 200)
targetLocked(screen)
targetLocked(screen, method)
The target can be locked to a sensor, or to use sunrise/sunset times. The methods available are unlocked, geo (which will use the sunrise/sunset times) and sensor. This command allows you to check or set which method it's using.
The following enum is used:
enum.target = {
unlocked = 0,
geo = 1,
sensor = 2
}
Example:
To check the target method, use
? screen.targetLocked(1)
To set the target method to unlocked, use
screen.targetLocked(1, 2)
tileCount(screen)This returns the number of tiles in a screen.
Example:
To check the number of tiles, use
screen.tileCount(1)
tiles(screen)This returns a more detailed list of tiles on the screen, including the section, TNL, IP address, and mac address.
Example:
To view the tile details for a screen, use
? screen.tiles(1)
transitionTime(screen)
transitionTime(screen, minutes)
This is the length of time between the minimum and maximum value between the day target and the night target. It's usually set at 1-2 hour to allow for a gradual change.
Example:
To check the transition time, use
? screen.transitionTime(1)
To set the transition time, use
? screen.transitionTime(1, 60) where 60 is the number of minutes.
uid(screen)This returns the unique ID for the screen. It can also be found in the ON Cloud Platform.
Example:
To view the uid, use
? screen.uid(1)
useSunrise(screen)
useSunrise(screen, boolean)
Turns on or off sunrise tracking. This requires the screen number and either true (to turn on) or false (to turn off).
Example:
To check if sunrise tracking is turned on or off, use
? screen.useSunrise(1)
To turn on sunrise tracking use
screen.useSunrise(1,true)
To turn off sunrise tracking use
screen.useSunrise(1,false)

Section

These commands pertain to section-specific data and actions.

These commands are case sensitive.

All of the commands below are prefixed with section.

CommandResult
adapter(section)Returns the name of the adapter a specific section is attached to (e.g. LAN 1).
Example:
To see the adapter for a section, use
? section.adapter(1)
To get the IP address of the first section's adapter, use
print( adapter.ip(section.adapter(1)))
count()Returns a count of all sections in the system.
Example:
? section.count()
firstTile(section)Returns the first tile in the section. The output is in ordinal order (i.e. the third tile in the list will be tile 3). To find out the tnl or IP of the tile, use tiles().
Example:
? section.firstTile()
? tile.tnl(section.firstTile(1))
frameSkip(section)
frameSkip(section, skip)
Sets or gets the number of hardware vsyncs which are skipped for each displayed frame in this section. A value of 0 will update frames at full rate (as dictated by the hardware frame rate), a value of 1 will skip every second frame (resulting in half the frame rate), etc.
Example:
To half the refresh rate of a section
section.frameSkip(1,1)
generateProofs(section)
generateProofs(section,bool)
This command marks a section as a logo box. If it's set as a logo box, it will not be included as part of proof of play.
Example:
To check if section is a logo box, use
? section.generateProofs(1)
for i=1, section.count() do print(string.format("Section %i: %s", i, section.generateProofs(i))) end
id(section)Returns a stable type that always refers to the same section (even if sections are renumbered or renamed). If printed, will print the name of the section.
Example:
? section.id(1)
To print the id of all sections, use
for i=1, section.count() do print(string.format("Section %i: %s", i, section.name(i))) end
name(section)
name(section,string)
This allows you to check or set the user-friendly name for this section. To set the name, a user can input their preferred name for a tile.
Example:
To check the name, use
? section.name(1)
To set the name, use
section.name(1,"Left Section")
To print the name of all sections, use
for i=1, section.count() do print(string.format("Section %i: %s", i, section.id(i))) end
offsetX(section)
offsetX(section,offset)
This allows you to check or set the x offset (in pixels) of this section. This setting is used to position the sections in relation to each other. Same as Screens: Edit, Sections, Offset.
Example:
To check the x offset, use
? section.offsetX(1)
To set the x offset, use
section.offsetX(1, 0)
offsetY(section)
offsetY(section,offset)
This allows you to check or set the y offset (in pixels) of this section. This setting is used to position the sections in relation to each other. Same as Screens: Edit, Sections, Offset.
Example:
To check the y offset, use
? section.offsetY(1)
To set the y offset, use
section.offsetY(1)
saveMap(section, filename)Save the current set of tile positions to a map file.
Example:
To write a map file, use
section.saveMap(1, "s1.map")
screen(section)Returns a stable type that always refers to the same screen (even if screens are renumbered or renamed). If printed, will print the name of the screen.
Example:
Print the name of the screen
? section.screen(1)
To save a screen and then print it later:
s = section.screen(1)
? screen.name(s)
size(section)
size(section, width, height)
Returns or sets the size of the specified section (tiles wide and tiles high).
Example:
To print size of section to console
print( section.size(1) )
tile(section, tile)Returns the UID of a tile, searching only this section.
Example:
? section.tile(1,2)
? tile.id(section.tile(1,2))
The first command will return the UID: (0x003F800B, 0x4E535102, 0x20313030).
tileCount(section)Returns the total number of tiles on a section.
Example:
? section.tileCount(1)
tiles(section)Displays information on all tiles of a section.
Example:
To list all tiles of section to the console, use
section.tiles(1)
tileType(section)Returns the tile type of tiles on a section. Tile type is an enum:
showWall10 = 0
solo15 = 1
blade19 = 2
blade16 = 3
blade12 = 4
bladeII19 = 5
axion10 = 6
bladeII12 = 7
bladeII16 = 8
oceania10 = 9
sd10v2 = 10
bladeM = 11
cd10v3 = 12
av10_500 = 13
unknown = 14
Example:
To view the tile type, use
? section.tileType(1)
vsyncOnly(section)
vsyncOnly(section,boolean)
This allows you to set vsync only mode (no video).
Example:
To check if vsync only mode is enabled, use
? section.vsyncOnly(1)
To turn on vsync only mode, use
section.vsyncOnly(1, true)
To turn off vsync only mode, use
section.vsyncOnly(1, false)
wiring(section)
wiring(section,wiring)
This allows you to check or set the wiring of a section.
The following enum is used:
enum.wiring = {
snake_topleft_down = 0,
snake_topleft_across = 1,
snake_bottomleft_up = 2,
snake_bottomleft_across = 3,
snake_topright_down = 4,
snake_topright_across = 5,
snake_bottomright_up = 6,
snake_bottomright_across = 7,
auto = 8,
custom = 9
}
Example:
To check the wiring of the first section, use
? section.wiring(1)
To set the wiring of the 1st section
section.wiring(1, 3)

Settings

These commands allow you to find the settings folder and file as well as save to it or freeze the settings.

These commands are case sensitive.

All of the commands below are prefixed with settings.

CommandResult
filename()Returns the filename of the main settings file.
Example:
print(settings.filename())
folder()Returns the current folder where settings are saved.
Example:
print(settings.folder())
save()This will write all pending changes to the settings file.
Example:
To save pending changes, use
settings.save()

Tile

These commands pertain to tile-specific data and actions.

These commands are case sensitive.

All of the commands below are prefixed with tile. All tile commands can use tnl, ordinal, mac, UID or IP address as arguments.

CommandResult
adapter(tile identifier)Returns the name of the adapter to which the specified tile is attached. Tile identifier can be UID, ID, IP, MAC, ordinal, or TNL.
Example:
? tile.adapter(1)
? tile.adapter(tile.uid(1))
cableTest()Runs the internal tile cable test to tell you the length of the physical cable in metres. It also indicates the quality of the connection.
Example:
To run a cable test, use
tile.cableTest()
count()Returns the number of tiles in the system.
Example:
? tile.count()
errors()Dump list of errors to console.
Example:
To check for errors, use
tile.errors()
firmware(tnl)Returns tile firmware version.
Example:
To check the firmware version, use
? tile.firmware(a1)
height(tnl)Returns height of the tile in pixels.
Example:
To check the tile height, use
? tile.height(a1)
id(tnl)Returns the tile's ordinal value in the system.
Example:
To check the tile ID, use
? tile.id(b1)
inventory(tnl)
inventory(tnl,inventory)
Clients can add an inventory number to each tile for their own inventory purposes. This command gets and sets a tile's inventory string.
Example:
To check the inventory number, use
? tile.inventory(a1)
To set the inventory number, use
tile.inventory(a1,"tile 37")
ip(tnl)Gets the tile's ip address.
Example:
To check the tile IP, use
? tile.ip(a1)
ledErrorDetect(tnl)Runs the dead LED detection and returns the result.
Example:
To check for LED errors, use
? tile.ledErrorDetect(a1)
ledErrorSummary()Displays a grid showing all LEDs in a tile and highlighting any faults
localUid(tnl)This returns a unique ID for the tile based on the local board.
Example:
To check the local UID, use
tile.localUid()
mac(tnl)Returns the tile mac address.
Example:
To check the tile's mac address, use
? tile.mac(a1)
name(tile identifier)Returns the TNL of the specified tile. Tile identifier can be UID, ID, IP, MAC, ordinal, or TNL.
Example:
? tile.name(1)
? tile.name(tile.uid(1))
ordinal(tnl)Returns the tile's ordinal in the system.
Example:
To check the tile's ordinal, use
? tile.ordinal(a1)
pixels(tnl)Returns the pixel count in this tile.
Example:
To check the number of pixels in a tile, use
? tile.pixels(a1)
pixelX(tnl)Returns the tile's pixel x offset in the section.
Example:
To check the x offset, use
tile.pixelX(a1)
pixelY(tnl)Returns the tiles pixel y offset in the section.
Example:
To check the y offset, use
tile.pixelY(a1)
popThreshold(tnl)
popThreshold(tnl,ms)
Each time an image is shown on a tile for a minimum amount of time, a "fingerprint" (or proof of play) is created and sent back to the LED controller. This is displayed in milliseconds and stored for reporting purposes. This is generally set to be a minimum of 2 seconds before a fingerprint is created for an image. The threshold doesn't need to be changed, and is set to 2 seconds each time the tiles are enumerated.
Example:
To check the current threshold, use
? tile.popThreshold(a1)
registers()Dumps the registers of all tiles in the system to the console. This command does not use any arguments.
Example:
To get the tiles' registers, use
tile.registers()
reset(tnl)Resets the tile. This can be useful if you are seeing a black tile. By resetting it, you can then enumerate it again to see if it brings the tile back.
Example:
To reset a tile, use
tile.reset(a1)
resetStats(tnl)Resets (clears) a tile's internal stats.
Example:
To clear a tile's stats, use
tile.resetStats(a1)
screen(tile identifier)Returns the name of the screen that the specified tile is in. Tile identifier can be UID, ID, IP, MAC, ordinal, or TNL.
Example:
? tile.screen(1)
? tile.screen(tile.uid(1))
section(tile identifier)Returns the name of the section that the specified tile is in. Tile identifier can be UID, ID, IP, MAC, ordinal, or TNL.
Example:
? tile.section(1)
? tile.section(tile.uid(1))
sectionOrdinal(tile identifier)Returns the tile’s ordinal position within its section. (I.e. If the tile is the fifth tile in its section, it will return "5".) Tile identifier can be UID, ID, IP, MAC, ordinal, or TNL.
Example:
? tile.sectionOrdinal(1)
? tile.sectionOrdinal(tile.uid(1))
for i = 1, tile.count() do print(tile.sectionOrdinal(i)) end
stats(tnl)This command returns a grid view of data for each tile. To return a list of objects that can be queried or to manipulate data, modify the command to: ? (tile.stats(a1)) which will return additional information.
Example:
? tile.stats(aa1)
You can also dump stats to the console using:
tile.stats()
statsCount()Returns the count of tiles that have replied to a stats request.
Example:
To check the number of tiles that replied to a stats request, use
? tile.statsCount()
status(tnl)Return the tile's status structure which includes quite a bit of information about the tile such as IP and mac address, local and LED board UID's, width, height, neighbours, firmware version and many other pieces of information. You can see an example of this information below in the Tile Status section.
Example:
To display this information, use
? tile.status(a1)
tiles()Dump tile list to the console which is a simple list of all tiles on the screen and their IP and mac addresses as well as a couple other pieces of data. You can also use tiles() to obtain this information.
Example:
To display the tile list, use
tile.tiles()
tnlReturns the TNL of a tile. Tile identifier can be UID, ID, IP, MAC, ordinal, or TNL. Can't use: Local UID or serial.
Example:
?tile.tnl(1)
?tile.tnl(tile.uid(1))
uid(tnl)Returns the tile's LED board UID which is a unique identifier that does not change, even if the tile is reinstalled in another space on the screen.
Example:
To check the LED board UID, use
? tile.uid(a1)
warnings()Dumps warnings list to the console.
Example:
To check for warnings, use
tile.warnings()
width()Returns the width of the tile in pixels.
Example:
To display the width of the tile, use
? tile.width(a1)
x()Returns the tile x offset in section
Example:
To return the x offset use
? tile.x(a1)
y()Returns the tile y offset in section
Example:
To return the y offset, use
? tile.y(a1)

Util

These commands are case sensitive.

All of the commands below are prefixed with util.

CommandResult
bringToFront()Forces controller window to front. This is useful if the user is using media software that takes up the whole screen.
Example:
To bring the controller window to the front, use
util.bringToFront()
fromDaemon()This shows whether it was launched from the daemon. The daemon ensures that the controller is not crashed and that it's running. There are a few variables that it monitors and if any of them stop sending, it will restart. This prevents the software issue from impacting a customer.
Example:
To check if the session was launched from the daemon, use
? util.fromDaemon()
fromRestart()This shows whether it was launched from restart.
Example:
To check if the session was launched from restart, use
? util.fromRestart()
sunrise()Prints current local sunrise time. If the figure is incorrect, the PC's time zone is likely to be incorrect.
Example:
To display the local sunrise time, use
? util.sunrise()
sunset()Prints current local sunset time. If the figure is incorrect, the PC's time zone is likely to be incorrect.
Example:
To display the local sunset time, use
? util.sunset()
uptime()Return the number of seconds that the controller has been running. If there has been an unexpected restart, you will see that the uptime may be shorter than expected.
Example:
To check the current uptime, use
? util.uptime()

Version

These commands allow you to view different parts of the controller version number.

These commands are case sensitive.

All of the commands below are prefixed with version.

CommandResult
controller()Return the full controller version as a string.
Example:
version.controller()
major()Return the controller major version number.
Example:
version.major()
minor()Return the controller minor version number.
Example:
version.minor()
revision()Return the controller revision version number.
Example:
version.revision()

Lua Commands and Libraries

The following Lua commands and libraries are included for use in scripting. Refer to Lua documentation and tutorials online for more information.

Root

CommandResult
package.loadedUsed by require to control which modules are already loaded.
assert
class
co {} [empty table]
collectgarbage
dofile
errorThrows error to log. Not useful for anything.
getmetatable
ipairs
loadfile
next [table function?]
on {} [empty table]
pairs
pcall
print_raw
rawequal
rawget
rawlen
rawset
require (include?)
setmetatable
table_print
tonumber
to_string
tostring
type [returns type]
select
xpcall

Coroutine

Implements lua coroutine command. Coroutines are co-operative functions that can run concurrently.

The coroutine function allows you to create, run, pause, and restart coroutines. It allows for some more advanced scripting options.

The following Lua tables are available. Refer to Lua documentation for more details.

CommandResult
createcoroutine.create(script)
Creates a coroutine. (Replace everything after “function ( )” with script. insert coroutine.yield() at the point that you want the code to pause. [Note: 1 space between parentheses]
myCo = coroutine.create(function () for i=1, 10 do print("Hello World "..i) coroutine.yield() end end)
isyieldablecoroutine.isYieldable(thread)
Asserts whether a coroutine can be (is ready to be?) yielded
Example:
?coroutine.isYieldable(myCo)
resumecoroutine.resume(thread)
Resumes (or starts) a coroutine.
Example:
coroutine.resume(myCo)
runningcoroutine.running(thread)
Asserts whether a coroutine is running.
Example:
coroutine.running(myCo)
statuscoroutine.status(thread)
Returns status of coroutine: suspending, running etc.
Example:
?coroutine.status(myCo)
wrapcoroutine wrap(thread)
Different way to create a coroutine. Allows a coroutine to be run on its own without coroutine.resume().
Example:
myCo = coroutine.wrap(function () for i=1, 10 do print("Hello World "..i) coroutine.yield() end end))
myCo()
yieldcoroutine.yield()
When in a coroutine function, pauses execution and passes control back to the function that called it. Insert in the script wherever you want to pause the function or pass control back.
Example:
myCo = coroutine.create(function () for i=1, 10 do print("Hello World "..i) coroutine.yield() end end)
coroutine.resume(myCo)

Debug

Implements the lua debug commands. Offers some debugging tools for lua scripts.

CommandResult
debugdebug.debug()
gethookdebug.gethook()
getinfodebug.getinfo()
getlocaldebug.getlocal()
getmetatabledebug.getmetatable()
getregistrydebug.getregistry()
getupvaluedebug.getupvalue()
getuservaluedebug.getusevalue()
sethookdebug.sethook()
setlocaldebug.setlocal()
setupvaluedebug.setupvalue()
setmetatabledebug.setmetable()
setuservaluedebug.setusevalue()
tracebackdebug.traceback()
upvalueiddebug.upvalueid()
upvaluejoindebug.upvaluejoin()

Thread

These commands are case sensitive.

All of the commands below are prefixed with thread.

CommandResult
coroutine(co)Add a lua coroutine co to the list of coroutines that are executed every so often. See the Lua Website for more details.
Example:
Write "co" ten times spread over time
co = coroutine.create(function () for i=1,10 do print("co", i) coroutine.yield() end end) thread.coroutine(co)
lock()Lock the current script for exclusive access.
Example:
thread.lock()
unlock()Release exclusive access.
Example:
thread.unlock()
wait(ms)Pause script executions for 'n' milliseconds.
Example:
thread.wait(10)
waitEngine()Suspend script execution until the engine is running.
Example:
thread.waitEngine()
waitStart()Suspend script execution until system has started.
Example:
thread.waitStart()
waitStop()Suspend script execution until engine has stopped.
Example:
thread.waitStop()
yield()Suspend a long thread for a bit, allowing other processes such as the GUI to update.
Example:
thread.yield()

String

String
pack
reverse
rep
char
sub
lower
gmatch
gsub
packsize
upper
find
dump
format
byte
match
len
unpack

IO

IO
flush
input
read
popen
stderr
close
type
lines
tmpfile
stdin
open
output
write
stdout

Table

Table
move
insert
val_to_str
remove
key_to_str
tostring
concat
pack
sort
unpack

OS

OS
time
difftime
clock
exit
execute
tmpname
date
setlocale
remove
rename
getenv
math
floor
rad
max
ceil
tointeger
asin
ult
modf
atan
cos
pi
fmod
tan
acos
abs
mininteger
maxinteger
sin
exp
type
huge
sqrt
log
randomseed
random
deg
min

function setDischarge(tile)

function nightmode(tile)

Filename Path Wildcards

The following variables can be used instead of typing a full path when specifying a filename for a command.

VariablePath
%factory%Factory firmware folder.
Windows path: %localappdata%\Link88\Link88 Controller\factory
%iap%Iap firmware folder.
Windows path: %localappdata%\Link88\Link88 Controller\iap
%local%Root data folder.
Windows path: %localappdata%\Link88\Link88 Controller|
%media%Media folder.
Windows path: %localappdata%\Link88\Link88 Controller\media
%unknownmedia%Unknown media folder.
Windows: %localappdata%\Link88\Link88 Controller\media

Enums

If you wish to see a full list of the available enums, you can use ? enum to view them. An enum is a data type consisting of a set of named values called elements, members, enumeral, or enumerators of the type. The enumerator names are usually identifiers that behave as constants in the language.

Enum NameEnumsUsed for
colourSpaceauto = "3"
rec601 = "0"
rec709 = "1"
rec2020 = "2"
screen.colourSpace()
deinterlacenone = "0"
blend = "2"
discard = "1"
adaptive = "3"
input.capture.deinterlaceMethod()
formatrgb8 = "1"
rgb16 = "0"
auto = "6"
yuv422 = "4"
l16 = "2"
yuv420 = "5"
l8 = "3"
screen.format()
inputwindow = “3”
capture = "2"
pattern = "1"
display = "0"
screen.input()
patterninfo = "21"
white = "6"
cyan = "3"
debug3 = "25"
debug4 = "26"
pixel_crawl = "16"
red = "0"
stats = "22"
green = "1"
blue = "2"
noise = "7"
horizontal_strip = "18"
debug5 = "27"
black = "8"
magenta = "4"
sections = "20"
grey_x_step = "14"
debug1 = "23"
vertical_strip = "17"
debug2 = "24"
id = "19"
smpte = "11"
grid = "10"
cycle = "9"
grey_y_step = "15"
grey_y = "13"
yellow = "5"
grey_x = "12"
screen.pattern()
playeronweb = "2"
file = "0"
folder = "1"
resizenone = "0"
fixed = "1"
system = "3"
screen = "2"
input.capture.resize()
input.renderer.sizeMethod()
scrapegdi = "0"
direct3d = "1"
duplication = "2"
input.scrapeMethod()
statruntime = "30"
hts_temp = "21"
min_vsync = "6"
last_comms = "25"
firmware = "14"
serial = "26"
led_vdda = "19"
stats_packet = "23"
min_phase = "9"
led_test = "12"
max_vsync = "8"
led_firmware = "17"
avg_phas = "10"
hts_humidity = "20"
status_packet = "24"
avg_vsync = "7"
local_temp = "15"
led_temp = "18"
chain_errors = "13"
local_vref = "16"
total_runtime = "31"
long_frame = "5"
stack_headroom = "32"
packets = "1"
vsync = "0"
short_frame = "4"
uptime = "28"
total_uptime = "29"
inventory = "27"
link = "22"
max_phase = "11"
drops = "2"
incomplete = "3"
screen.patternStat()
targetunlocked = "0"
sensor = "2"
geo = "1"
screen.targetLocked()
tile_typebladeM = "11"
axion10 = "6"
unknown = "14"
av10_500 = "13"
cd10v3 = "12"
bladeII12 = "7"
blade19 = "2"
sd10v2 = "10"
bladeII19 = "5"
showWall10 = "0"
bladeII16 = "8"
blade16 = "3"
oceania10 = "9"
solo15 = "1"
blade12 = "4"
section.tileType()
wiringsnake_topright_down = "4"
snake_topleft_down = "0"
snake_bottomright_up = "6"
custom = "9"
snake_topleft_across = "1"
snake_bottomleft_up = "2"
snake_topright_across = "5"
auto = "8"
snake_bottomright_across = "7"
snake_bottomleft_across = "3"
section.wiring()
capture formatDepends on capture deviceinput.capture.format()
capture inputdepends on capture device input.capture.input()
aspectFill = 0
Keep = 1
Expand = 2
input.media.aspect()

Type Wrappers

These commands allow you to use pieces of data from other commands and to write queries that can find the data you are looking for (e.g. which tile has the lowest runtime so that you can determine which was most recently replaced).

This allows the user to search through values in the console rather than having to export the data and manipulate it in another program.

CommandResult
adapter_idStable object type that can be used to identify an adapter even if the adapter's details change (e.g. Name.)
aid()A type that represents an adapter. This can be used to hold a stable reference to an adapter.
For example
Use an aid type to hold a stable reference to an adapter. Changing the autoEnumerate flag of this adapter may cause a reordering of adapters. But the adapter held by the aid class will not change.
a = aid( 1 )
print( adapter.name( a ) )
adapter.autoEnumerate(1,false)
print( adapter.name( a )
extra_id()Returns a structure (aid (adapter_id)) which represents an adapter that is not present in the system but has screens attached. (E.g. a device that has been unplugged or lost power). The fake adapter is used to hold these screens until the adapter is restored.
Example:
? extra_id()
id()A type that represents a tile
Example:
t = id( 1 )
print( tile.status(t) )
ip()Represents an ip address
Members
invalid() -- asserts address is invalid
loopback() -- asserts address is the loopback address
multicast()
class_a()
class_b()
class_c()
Example:
i = tile.ip(aa1)
? i.loopback()
? i.invalid()
mac()Represents a mac address
Members
multicast() -- asserts if address has multicast bit set
unicast() -- asserts address is unicast
valid() -- asserts if address is valid
oldMac() -- returns the old tile equivalent mac address (legacy)
screen_id()A type that can be used to represent a screen
Example:
s = screen_id( "Screen 0" )
print( screen.tileCount( s ) )
section_idStable object type that can be used to identify a section even if the sections details change.
sid()A type that can be used to represent a screen section
Example:
s = sid( 1, 1 )
print( section.wiring(s) )
tile_idStable object type that can be used to refer to a tile even if the tile's details change
tile_status()Stable object type that can store a tile's status. This is what status returns.
time()A type that represents a time. Arguments are HH, MM, SS.
Example:
?time(17,30,00)
uid()A type that represents a 96bit unique tile identifier (board ids)
vec2()A type that represents two values.
Example:
pos = vec2( 1, 2 )
print( pos.x )
print( pos.y )
print( "area " .. pos.x * pos.y )

Tile Status

The command that returns Tile Status includes all of this information:

Name
ip192.168.0.10
mac3e:1f:2c:d0:73:ab
local_board_uid0x00570025574850012032324B
led_board_uid0x004A000B4853510620323533
result10x0001
link20x0002
width400x0028
height400x0028
supported_formats30x0003
preferred_format10x0001
horizontal_neighbour00x0000
vertical_neighbour00x0000
horizontal_ip0.0.0.0
vertical_ip0.0.0.0
firmware3010x012D
factory00x0000
local_board_temp5020x000001F6
local_board_vref40x00000004
led_board_firmware50x0005
led_board_temp3220x00000142
led_board_vdda32870x00000CD7
serial'SD10II#181202184'
hts221_humidity388
hts221_temp422
inventory'UNILED_INVENTORY_XXXXX'
pop threshold2000

Tile Stats

The command that returns Tile Stats includes all of this information:

Name
vsync_count00x00000000
packet_count00x00000000
dropped00x00000000
incomplete00x00000000
short00x00000000
long00x00000000
avg_vsync00x00000000
min_vsync21474836470x7FFFFFFF
max_vsync-21474836480x80000000
avg_phase00x00000000
min_phase21474836470x7FFFFFFF
max_phase-21474836480x80000000
oc_led00x00000000
led_chain00x00000000
uptime51810x0000143D
total uptime441250x0000AC5D
runtime00x00000000
total runtime188010x00004971
stack headroom1110x0000006F

Advanced Use

A user can assign shortcuts for a given command. By giving frequently repeated commands a shorthand name, it can be quicker to use. You might want to use a shorthand name for a tile's IP address or mac address, or you might want to name a tile you're working with so that it's easier to recall. The shortcuts are saved in the console until the next time the computer restarts.

For example, you can assign a command to a single letter:

m = tile.mac(a1)

Then you can query using that shortcut:

? m

b6:4d:7a:c8:30:11

Or:

t = tile.stats( a1 )

Then:

? t

You can also use the shortcut to find out additional information:

? m.multicast

false

Or:

? tile.stats(1).runtime > tile.stats(a2).runtime

false