Name Version Release Date Size MD5
Tasker v11.0 Feb 09 2023 2.9 MB a70599f2d48dbb91823b034aeeed0da7

[*] fixed where schedules in multiple workspaces were not working

[+] adding toggle relay action

Tasker 10.0 Release February 18, 2022

[+] creating a modbustag.update trigger

Tasker 9.0 Release December 20, 2021

Name Version Release Date Size MD5
Tasker v9.0 Dec 20 2021 2.9 MB b77374655a8d64ae9caf54183382a473

[+] now allowing you to compare the value of a string agains other primative types like numbers or booleans. \"false\" == false

[+] time zone offset from GMT now available in the date format. date(\"HH:mm Z\") will equate to \"16:30 -0500\" for Eastern DST

[+] checking the state of din and rout no loner need to be compared to 0 or 1. A simple din[#].state or !din[#].state is sufficient

[+] added to get the current millis

[+] added din.lasteventtime() to get the millis of the last input event

[+] added rout.lasteventtime() to get the millis of the last output event

[+] added iolog.lasteventtime() to get the millis of the latedt input or output event

[+] added task description to getTaskDevices

Tasker 8.1 July 29, 2021

Name Version Release Date Size MD5
Tasker v8.1 Jul 29 2021 2.9 MB 48f35fa8f1bd4fe285857cd55df99f49

[!] fixed addressing more than one LED modules

[+] added 10v Fade for percentage and voltage

[!] fixed an issue where new signals were not available until the page was reloaded

[~] new objects have a default name provided

[+] now indicating the Latitude and Longitude format

[!] fixed the user alert action

[!] fixed where object could be added twice quickly

[+] added a delay to the tool tips to prevent them from flashing

[+] email profile names can now be specified in a variable

Tasker 8.0 July 8, 2021

Name Version Release Date Size MD5
Tasker v8.0 Jul 12 2021 2.9 MB ada6b724f74b802fb5d880c1124209b8

New Help System! Take a look and give us your feedback!

[+] created a Workspace page to manage multiple Workspaces

[+] created a Workspace Pane on the right of the Tasker Page when a Workspace is open

[+] added a Registry Write Action

[+] added a Serial Send Action

[+] added a prompt for user when leaving the Tasker web page when Changes are in progress.

[+] new help system

[+] added notes for Workspaces

[+] added the ability to clone Workspaces and tasks

[+] added the ability to initialize variables via json task.execute handler

[~] all disabled objects now contain red font and a gray background

Lots of small UI tweaks for a better user experience

Go to the Tasker Application page for more information

Tasker 7.0 May 10, 2021

Name Version Release Date Size MD5
Tasker v7.0 May 10 2021 2.2 MB 796406e49d98e58119d9f39b94886b14
  • [!] corrected the Log Null On Boot checkbox.  It was showing unchecked though it should be checked by default.
  • [!] corrected an issue where a deleted workspace does not unload from tasker
  • [+] can now easily enable / disable an entire workspace via the File menu
  • [+] disabled workspaces will have a red banner and footer alerting the user that they are disabled
  • [+] added the ability to trigger on any input or any output
  • [+] added the ability to reorder the tasks in the Web App
  • [+] added a warning message when navigating away from the Web App to alert the user of unsaved changes.
  • [~] redesigned the "Add Action" dialog to be less busy
  • [+] previously selected Task will be reselected on page reload
  • [+] added Grapher to the Tasker install

Go to the Tasker Application page for more information

Tasker 6.1 April 30, 2021

  • [!] Fixed an issue where a blank DateFormat field in a Log Profile would cause the timestamp to not get logged
  • [+] added the ability to trigger on either high or low signals for digital inputs or relay outputs
  • [+] added a variable to task scope for the object that caused a task to execute. the variable can be referenced as task.caller
  • [+] adding get task devices web handler
  • [!] fixed issue where devices weren't found when loading tasks because tasks were being loaded before devices
  • [+] log what is being sent from an Ethernet device to tasker_devices.log
  • [!] corrected issue with the log profile file retention method. We were not correctly identifying the files matching the fileformat.
  • [!] corrected issue where getDoubleParam was expecting a variable to start with $. This is no longer a requirement.
  • [+] implemented Clear Input Latch action
  • [+] added the ability to trigger on ANY control panel switch
  • [*] Updated the status message that it is sent any time a task is executed with the name of the calling object

Tasker 6.0 March 18, 2021

Name Version Release Date Size MD5
Tasker v6.0 Mar 18 2021 1.3 MB dc9fd5f96047b8e946e67cfcab9d79cb

Warning: The Triggers tab functionality was reworked!  Any Triggers that are currently defined will need to be reconfigured.

  • [*] reworking triggers
  • [*] adding single switch control panel trigger
  • [*] adding multi-switch control panel trigger
  • [*] adding delayed reset
  • [+] added WebServerPort registry key Default -1 or meaning disabled
  • [+] adding ExecuteTask web request handler /executetask name=TASK_NAME
  • [+] adding GetLoadedTasks web request handler /getloadedtasks
  • [+] automatic upgrading of old trigger configuration

Go to the Tasker Application page for more information. The Cinema Knowledge-base has helpful information on how to use the features in Cinema.jar.

Tasker 5.0 May 5, 2021

  • [+] adding action to kill, cancel or abort a task
  • [+] adding HTTP request action
  • [+] adding MQTT publish action

Tasker 4.0 December 18, 2020

Name Version Release Date Size MD5
Tasker v4.0 Dec 18 2020 1.2 MB e0b99c9f4ffdb2294dab5596c9d9613f

4.0, 10 dec 2020

  • [+] variables that start with $$ are global variables.  These are global WITHIN the workspace.
  • [+] added Control Panel Switch implementation
  • [+] added a tasks.get WebSocket handler
  • [+] added a task.list WebSocket handler
  • [+] added http post functionality
  • [!] scheduling changes take effect immediately when a workspace is reloaded
  • [+] validation on task names, device names, logger names, signal names, trigger names, and schedule names to prevent spaces and bad characters.  Names can only be alphanumeric and can include underscores.

3.9, 18 nov 2020

  • [!] fix error where parameters used to have to be named starting with $.

3.8, 07 oct 2020

  • [!] fix error for only handling 8 output triggers.
  • [!] fix error where a temp probe couldnt be assigned to a variable.
  • [+] added http post functionality.

3.7, 02 oct 2020

  • [+] Added tracking the parent workspace name so that all of the tasks can be removed from the collection that belong to a workspace that is updated or removed.


  • [+] Added a tasks.get handler.
  • [+] Added a tasks.list message.


  • [+] Added a user.alert message.


  • [+] removed the requirement for the schedule start day.
  • [+] fixed the schedule reloading so that the new schedule takes effect and does not require a reboot.

Go to the Tasker Application page for more information. The Cinema Knowledge-base has helpful information on how to use the features in Cinema.jar.

Tasker 3.3 July 29, 2020

Name Version Release Date Size MD5
Tasker v3.3 Jul 30 2020 1.0 MB 5783b3bda071222b48775e5ffb9e4b3d
  • [+] adding duplicate instance check
  • [+] variables that start with :: shall be global
  • [+] add TCP Recv
  • [+] add TCP Close
  • [+] new execute script action
  • [+] uses new scripting engine
  • [!] fixed issue where dst timezone was not being logged
  • [+] adding action to prepend to file
  • [+] adding retry logic to external identifier objects. included creating external identifier parent class
  • [+] adding action to copy file
  • [+] adding action to move file
  • [+] add ascii tcp and serial servers for tasker control
  • [~] now preventing spaces in workspace names. current workspace files with spaces will be renamed with an UNDERSCORE

Go to the Tasker Application page for more information. The Tasker Knowledge-base has helpful information on how to use the features in Tasker.

Tasker 3.2 June 18, 2020

Name Version Release Date Size MD5
Tasker v3.2 Jun 18 2020 958.1 KB 953712536000b330ad267047b7ee274d
  • + added 4-20ma modules
  • + added 10v modules
  • + added email send attachment option

Go to the Tasker Application page for more information. The Tasker Knowledge-base has helpful information on how to use the features in Tasker.

Tasker 3.1 May 1, 2020

Name Version Release Date Size MD5
Tasker v3.1 May 05 2020 942.1 KB 47e03374e8a8791ec0a922f38e62f174
  • Added If / Else Block Task Action
  • Added While Loop Task Action
  • Added SNMP Trap Task Action - Tutorial
  • Help pages are in progress
  • Upload and download workspaces
  • Delete a workspace (Workspace is backed up)

Go to the Tasker Application page for more information. The Tasker Knowledge-base has helpful information on how to use the features in Tasker.

Tasker 3.0 April 20, 2020

It has been a while since Tasker was released. Tasker was a quick attempt at making a replacement for the Task Manager application that has been around for more than a decade, starting on the Series 3.

Ample time has now been taken to create a fully capable application that will be every bit as functional as Task Manager but offer the benefits of a rewrite, using configuration files and the latest web technology.

Some of the changes and new features are as follows:

  • Faster– The tasks are executed much faster and the triggers and schedule are monitored in real-time instead of once every 5 – 10 seconds.
  • Workspaces - Separate configuration logic into multiple workspaces. Then multiple workspaces can be loaded on the JNIOR at the same time.
  • Tasks are now separate from triggers. In Task Manager a Task was created and a Trigger was configured to get the Task to execute. In Tasker 3.0 Tasks are a separate entity that can be executed several different way including manual execution from the configuration page and being requested via an ASCII TCP connection.
  • Tasks can now send data via an Ethernet connection. To do this, a Device must be created so that the action can specify which device to send the data to. Multiple devices can be configured.
  • New Actions – We implemented actions that were previously available in Task Manager but are introducing many new actions like external module control, TCP communication and control structures.
  • Drag n Drop – Drag and Drop functionality makes it easier to design your Task logic.
  • Signals are now created to assign a specific property of a I/O point or sensor a name. The name can then be used in Tasks, Triggers or Loggers.
  • Loggers can be created to define the file name and schema or what data should be logged to that file. Each line in a Logger will be prepended with a timestamp followed by a comma. Loggers also allow you to define the number of files that should be kept with the given naming pattern. Name patterns can include date patterns. This will help you create a file per day for example.
  • Schedule – The schedule has additional options.
  • JSON Configuration files are used now instead of registry keys. Registry keys were limiting in size. The Series 3 could only store 255 characters in a registry key. It is much easier to upload configuration files to other JNIORs to replicate setups.
  • User Interface – The User Interface is now a native HTML application that uses the latest web technology. The latest web technology uses native HTML controls and Web-sockets to communicate with the JNIOR from your browser. This will allow accessibility over remote connections as long as port 80 is available. This is now consistent with the communication method used by the DCP. Task Manager had always used Java Applets. The Java Applets have not been able to launch in browsers for several years as they became frowned upon as security vulnerabilities.

This was just a short list of changes and new features. The documentation for Tasker should explain these topics as well as many others. If there is anything you don't understand please reach out to us for help. Additionally, if you have any suggestions or need the JNIOR to do something specific for you, please let us know.

For more information go to the Tasker Page

The release fixed an issue with the Ethernet becoming “locked up”. The JNIOR could become unresponsive while servicing the network on busy networks.

Build 1.0

  • Corrected memory issue with KILL and message loop use
  • Corrected garbage collection issue with static classes in the JVM
  • Corrected memory issue with serial port buffer resizing
  • Delayed Java Thread startup to insure completion of initialization
  • Added KILL -A feature to terminate all applications


Initial (January 25 2023)

  • Initialized the Working Directory for command line scripting
  • Increased network frame buffers to improve throughput
  • Increased number of available application watchdogs from 8 to 16
  • Added WDT_SILENT so watchdogs can be used to schedule programs and not logged as triggered
  • Updated PS process listings to display pending watchdogs as scheduled execution
  • Improved PING statistics
  • Eliminated assertion in loading classes using InvokeDynamic
  • Eliminated memory leak in JVM class caching
  • Corrected IO signature performance with IO changes
  • Corrected TAB auto-complete issue with second parameter
  • PHP Registry lists now sorted by name
  • Eliminated chance of socket deadlock that would require a hard reboot
  • Added check for network during boot logging to avoid reboot loop

JANOS 2.2 Release June 28, 2022

This release was issued to support manufacturing and component changes forced by supply chain issues. Because of this, an update to the OS was required to handle this change. Units made June 22nd, 2022 or later will NOT be able to roll back to earlier version of JANOS.

  • Corrected bug in creating multidimensional arrays
  • Improved DEFLATE compression performance with binary files
  • Corrected issue with '%' sign when logging to the syslog
  • Fixed dropped serial character when port is closed
  • Added experimental debugging tools

JANOS 2.1.1 Release December 15, 2021

  • This release was issued to support manufacturing and component changes forced by supply chain issues and COVID

JANOS 2.1 Release August 10, 2021

All New Help system. Use the [Help Search] link in the lower right on the JNIOR Web UI.

  • Eliminated external SYSLOG Server related memory leak
  • Corrected Regex issue with the OR operation
  • Corrected PHP ereg() and eregi() functions
  • Implemented a greatly expanded Help System
  • Added PDF MIME type to the WebServer and Email systems
  • Corrected JRMON latched input [R]eset command, no longer affects relays
  • PHP read file access expanded to include ZIP virtual folders
  • Corrected PHP issues with JSON arrays
  • Corrected Order of Precedence issue with PHP mathematical expressions
  • Corrected the operation of Regex '*' and '+' quantifiers when used following a group
  • Corrected RENAME behavior when attempting to alter case of a filename
  • Enabled PHP logical string comparisons ==, !=, <, <=, >, and >=
  • Enhanced security for JANOS-Session-Id cookies
  • Corrected JANOS-Session-Id handling when multiple cookies are present
  • Improved non-volatile aspect of command line history
  • Corrected issue with network capture completion
  • Fixed issue introduced in v2.0 with IpConfig/Allow
  • Corrected issue with using EXIT in the Console tab of the WebUI
  • Added SHA256 (SHA2) to the MANIFEST database
  • Fixed issue resulting in blank Registry keys being displayed
  • Introduced new expanded Help System

JANOS 2.0 Release March 4, 2021

  • Improved serial diagnostics during boot
  • Added DST rules for New Zealand timezones
  • Added File Sharing. Disabled by default
  • Logs prior Registry key values along with changes
  • Enabled NetBIOS name resolution and disabled LLMNR
  • Allow product "Birthname" such as jr817120068 to be always valid in name resolution
  • Corrected Websockets login issue
  • Fixed issue with HTML Email content
  • Added SHA384 and SHA512
  • Added text form of IP address to certificate to appease Microsoft IE
  • Enhanced Registry key settings to inform as to reboot requirements
  • Improved Email error reporting
  • Added Galois/Counter Mode (GCM) to TLS security suites
  • Removed legacy Registry editor
  • JANOS renews its own self-signed certificates
  • Added JSON support to PHP
  • Added Command Line text editor
  • Added Elliptic Curve TLS suites
  • Added BAT file enhancements and scripting support
  • Added the ability to retrieve files from remote servers to JRUPDATE
  • IP address filtering overridden by SAFE MODE
  • Add capture filter information to pcapng capture file
  • PHP scandir() changed to return absolute file path
  • Issue with /etc folder content in scandir() corrected
  • Corrected issue with nested PHP foreach loops
  • Added PHP date and time formatting function date()
  • Console command line history search and selection enhancements
  • Added PING Flood Mode and addressing validation option
  • Corrected issue with ZIP/JAR decompression failing with some large binary files
  • Added support for the standard loopback address range
  • Default WebServer/Path is now /flash/www/config allowing relocation of the default configuration pages
  • Corrected Registry issue with of Type 10 temperature sensors
  • Batch parameter %0 now returns the command from the command line
  • Corrected runtime issue with PHP replacing existing array content
  • Addressed differences in Linux based terminal sessions
  • Extended the ECHO command for use in scripting
  • Added JMP Protocol port for use in defining capture filters
  • Added JMP port and BuildTag to Beacon protocol
  • Corrected PHP @strrpos()@ and syntax shortcomings
  • Enhanced ARC/ZIP/JAR command
  • Improved compatibility with Linux terminal emulators

JANOS 1.9 Release February 3, 2020

Release Notes

We have released JANOS v1.9 which has several changes and bug fixes. Most notably with TCP packet generation. While it is not wrong to send data in multiple TCP packets, many devices incorrectly implement TCP clients and fail when this case arises. This version adjusted the release of socket data to reduce the chances that a message might be split across separate TCP packets. This had been a recent issue with some MODBUS client devices.

  • Added support for Reverse LLMNR allowing network scanners to label IP addresses with hostnames
  • Adjusted the release of socket data to reduce the chances that a message might be split across separate TCP packets
  • Corrected Sockets race condition that caused occasional reception delays and blocking
  • Fixed the incorrect signed display of large input counter values in JRMON and JMP Protocol
  • Adds a BEACON announcement in the event of an IP conflict
  • Improved NONCE management eliminating possible issues in the presence of port scanners
  • Eliminated chance of buffer overrun occurring in FTP transfer
  • Beacon REBOOT now works in all cases
  • Eliminated potential difficulty in obtaining network capture file

JANOS 1.8 Released June 17, 2019

Release Notes

We have released JANOS v1.8 which adds the JMP Protocol. The JANOS Management Protocol (JMP) is essentially the JSON message interface utilized by JANOS Websockets. The JMP Protocol has been exposed on its own TCP/IP port. This encloses the JSON messaging in a JSON array along with the JSON Object length making reception of the messages easy. The JMP Protocol will be used by the QSC Q-SYS JNIOR component.

  • Implements the JANOS Management Protocol JMP
  • Adds "Block" command to JSON interfaces
  • Web Server limits the effects of extremely slow connections.

JANOS 1.7.1 Released December 3, 2018

Release Notes

  • Watchdog no longer causes reboot from foreground execution
  • REGEX Alternation '|' has been corrected to properly work in Group
  • Corrected NULL Pointer write issue when a Group which employs alternation appears at the start of a REGEX expression
  • Resolved message pump memory issue relating to process termination
  • Expand the channel range for setOutputRelay() from 0-11 to 0-15
  • Corrected network capture filtering when an IP address is to be excluded
  • Supports networks using Jumbo Frames
  • Eliminated assertion associated with improper use of '%n' in System.out.printf.

JANOS 1.7 Released July 26, 2018

Release Notes

  • Added ability to load single CA Certificate to be supplied on TLS connection
  • Support TLS Client Certificate Verification on outgoing connections
  • Added legacy PKCS1 support for externally generated certificates
  • Corrected array issue with processing of deferred email transmissions
  • Corrected memory issue with TAB use on the Command Line

JANOS 1.6.5 Released May 22, 2018

  • Corrected FTP listing issue created by the v1.6.4 release
  • Corrected getRegistryList method memory leak
  • Corrected 412DMX light Flickering
  • Corrected 412DMX NAND Flash processing issue
  • Corrected FTP transfer restart issue
Name Version Release Date Size MD5
Series 4 All-In-One Update Project v2.3 Feb 03 2023 1.8 MB 9308e8af6b59c480a3a75ff43158ab40
    • JANOS updated to 2.3
    • Serial Control 7.2
    • Serial-to-Ethernet 6.2
    • SNMP 3.1
    • Modbus Server 1.9
    • Slaving 3.1
    • WebUI Pages 3.2.1

Series 4 All-In-One 2.2 Release June 28, 2022

Name Version Release Date Size MD5
Series 4 All-In-One Update Project v2.2 Nov 28 2022 1.8 MB b7a5a516026b226736f97539113528c1
    • JANOS updated to 2.2
    • Serial Control updated to 7.2
    • Serial-to-Ethernet updated to 6.2
    • SNMP 3.1
    • Modbus Server updated to 1.9
    • Slaving updated to 3.1
    • New Bundled Web Pages Install
    • WebUI Pages updated to 3.2.1

Series 4 All-In-One 2.1.1 Release December 15, 2021

  • JANOS updated to 2.1.1
  • Serial Control 7.0
  • Serial-to-Ethernet 6.1
  • SNMP 3.1
  • Modbus Server 1.7
  • Slaving 2.0
  • WebUI Pages 3.1.0
  • This release was issued to support manufacturing and component changes forced by supply chain issues and COVID

Series 4 All-In-One 2.1 Release August 10, 2021

  • JANOS updated to 2.1
  • Serial Control 7.0
  • Serial-to-Ethernet updated to 6.1
  • SNMP 3.1
  • Modbus Server 1.7
  • Slaving 2.0
  • WebUI Pages updated to 3.1.0
  • New Web Page Manual Install

Series 4 All-In-One 2.0 Release March 8, 2021

  • JANOS updated to 2.0
  • New Tasker 6.0 install
  • Serial Control updated to 7.0
  • Serial-to-Ethernet 6.0
  • SNMP updated to 3.1
  • Modbus Server 1.7
  • Slaving updated to 2.0
  • WebUI Pages (was called Dynamic Configuration Web Pages) updated 3.0.1. WebUI Pages now uses flash/www/ file instead of flash/ which has been renamed to flash/

Series 4 All-In-One 1.9 Release May 1, 2020

  • JANOS updated to 1.9
  • Serial Control 5.0
  • Serial-to-Ethernet 6.0
  • SNMP updated to 2.6
  • Modbus Server 1.7
  • Slaving 1.5
  • WebUI Pages (was called Dynamic Configuration Web Pages) updated to 2.4

Series 4 All-In-One 1.8 Release June 18, 2019

  • JANOS updated to 1.8
  • Serial Control 5.0
  • Serial-to-Ethernet updated to 6.0
  • SNMP 2.4
  • Modbus Server 1.7
  • Slaving 1.5
  • WebUI Pages (was called Dynamic Configuration Web Pages) updated to 2.3

String Converter is an application that works as a middle man between two devices trying to communicate with each other, converting the commands between them so they can understand one another. This post aims to explain how this application is setup to work after installing it on your JNIOR.

To configure StringConverter, you’ll first open a web browser and enter the in the URL your JNIOR’s IP address followed by “stringconverter”. For example, if your JNIOR’s IP address is, StringConverter’s URL in the web browser will be “”. 

After accessing StringConverter’s Web Page, the first thing you’ll need to do is setup the connection settings at the top of the page. There are two connections you are setting up: one for the device sending to the JNIOR (Server Settings), and one for device the JNIOR is sending to (Client Settings). This communication can go from Client, to JNIOR, to Server as well though.

String Converter handles the connection scheme of Server -> JNIOR -> Client AND Client -> JNIOR -> Server

Ethernet and Serial Connections

When settings up the connections for String Converter, you can either have a Serial connection or an Ethernet connection for the Server and Client. Serial and Ethernet connections will require different settings to connect, but will always have a field for the Termination String. So before explaining the settings of each type of connection we’ll go over the Termination String. The Termination String is used to determine when the end of a command has been reached. Termination Strings are not required, but if not entered String Converter will wait for a timeout. This means after a device has sent to a command to the String Converter application, it will wait for small amount of time and if nothing else was sent it assumes the command has been fully sent.

Ethernet Settings

For the Ethernet settings, for the Server Settings only the port number value is listed, because the IP will always be the JNIOR’s IP. The port value should be set to listen for the device sending to it. (If the device is sending on port 9222, the set the server port number value to 9222) For the Client, the IP field will be there and requires the IP and port number of the device the JNIOR is sending to.

Serial Settings

For both Server and Client Serial Settings, you only have to declare if the Serial connection is going to the AUX or COM (RS-232) port of the JNIOR. 

As the note says in the picture, both the Server and Client can’t be set to the same Serial port. StringConverter will not save if this happens.

If the device connecting to the JNIOR has specific Serial settings, you’ll need to set the JNIOR to match them. This is set on the JNIOR Web Page in the Serial I/O section under the Configuration Tab.

Lastly, when entering the connection settings for the Server and Client, fields other then the termination string can’t be left empty. This is true for both Serial AND Ethernet connections of the Server and Client, meaning if you are using a Serial connection for the Server or Client, the Ethernet settings for them cannot be left blank even while hidden. String Converter’s web page will not let you save if a field (other then the Termination String) in the Server or Client’s connections settings is left blank. Dummy data can be entered to get around this.


Once the connection settings have been entered, the next section to setup is the Conversions. In this section there are conversions from the Server to the Client, and conversions from the Client to the Server. 

The arrows between the conversions indicate what the command is being converted to. For example if under Server to Client Conversions you have “test  >>>  testing”, that means that if the Server sends “test” to the String Converter application, it will convert it to “testing” and pass that command over to the Client. 

NOTE: When making conversions, make sure a command doesn’t have multiple conversions. An example would be having one conversion be “test  >>>  testing” and another conversion be “test  >>>  tester”. StringConverter wouldn’t know which conversion to use for test because it has more then one defined, and will not save if you do this.


Hex can be entered in conversions regardless if its being sent from the Server or Client. Hex values should be formatted as \x00 for each hex value with no spaces between them.


Regex or Regular Expression, is a sequence of characters that represents a search pattern in text. Regex can be used to represent certain parts of text without specifically entering them. A good example of how this is useful is if you are trying to make conversions in StringConverter for commands that set the volume of device. If the devices range of volume is 1 – 100, and you want conversions to handle each volume level, you’d have to make one hundred conversions! To avoid that, you can use a regex pattern to represent the digit of the volume, while specifying the rest of the command that would be used to set the volume. When implementing Regex for each grouping of values, they can each be substituted in for by order. In the order they are defined in the conversion from left to right, the first grouping is represented by %1, the second by %2, the third by %3, etc. is a good place to try out testing and understanding regular expressions if you are unfamiliar with them.


After you have defined your connection settings and conversions correctly. You’ll want to save your settings for StringConverter. Either at the bottom right or top right of the page should have a Save button. Select this, and if there are no errors in your configuration it will save. If it doesn’t save, then that means you need to look back through and make sure you have everything filled out, that no commands have multiple conversions for themselves, and that the Serial setting aren’t set to the same Serial port. After saving, the last step is to restart the StringConverter application. The easiest way to do this is by rebooting the JNIOR. This is needed to make sure the JNIOR is listening and connecting on the right connection settings. Now StringConverter should be ready to convert commands between your two devices!

We have given the knowledge-bases a new look and feel. This is intended to make finding information easier. Once within the knowledge-base, a new vertical navigation menu on the left hand side will help you find similar posts while staying within that knowledge-base section. For every post, headers distinguish different sections on the right hand side of the page, allowing readers to jump to ones that they are interested in. Topics in each section focus on specific features that each Knowledge base highlights. There are 5 different Knowledge Bases that were created based off the amount of content on our site pertaining to an application or use for the JNIOR. Here is a brief overview of each knowledge base.

General Knowledge Base

The General Knowledge Base focuses on providing posts that explain configuring and using the JNIOR Web UI and Support Tool, the hardware capabilities of the JNIOR, and steps that can be taken to troubleshoot when things don’t work. This Knowledge Base is where general questions about the JNIOR can be solved.

Tasker Knowledge Base

The Tasker Knowledge Base contains posts going over specific features of the Tasker application. It explains creating and managing workspaces, setting up connections to different devices through Tasker, and setting up Triggers and Schedules to activate tasks in Tasker.

Cinema Knowledge Base

The Cinema Knowledge Based contains posts over specific features of the Cinema application. It can explain how to create and execute macros, setup the Preshow and Cinema Server Clients, and how to troubleshoot connections made to the Cinema application.

DMX Knowledge Base

The DMX Knowledge Based contains posts over specific features of the DMX application. It can explain how to create triggers, scripts, and fixtures, how to potentially use a JNIOR 410 as a DMX controller, and how to use the JNIOR as a DMX fixture itself.

Embedded Programming Knowledge Base

The Embedded Programming Knowledge Base contains a wide variety of coding examples to create applications that run on the JNIOR. Here the JANOS runtime library can be downloaded and used in projects. Each section contains examples of short applications that can show how to do certain functionality on the JNIOR.

What is the tail command?

The tail command is used to display the last n lines of a specified file.  By default the tail command displays the last 10 lines of a file.  This can be changed by using the -n argument and specifying a new value.  If the specified file does not contain at least n lines then a the .bak version of the file will be prepended, if it exists.

Another powerful feature of the tail command is its ability to monitor and display file changes in real-time.  The specified file in monitored for changes once a second and only the changed portion of the file is displayed.

How to Install tail

Below is an update project you can apply to your JNIOR to get the tail application.

Name Version Release Date Size MD5
Tail Command v1.0 Feb 20 2023 3.5 KB e0ce27e20c337000d8fd403c76b7ce80


tail [OPTION]... [FILE]...
Short OptionsLong OptionOption ValueDescription
-n–linesNUMBERThe number of lines that should be displayed from the end of the file
-f–followMonitor the file in real-time

Default Usage

The default usage will show the last 10 lines of the specified file.

Specify number of lines to show

We can use the -n or --lines option to specify 20 lines.

Update the file in real-time

Use -f or --follow to follow the file in real-time.  New entries will be displayed.  This command will not return to the prompt until ANY key is pressed.

The JNIOR 410 is capable of handling RS-485. To do this you need to wire it correctly.

While RS-485 is commonly referred to as 2 wire, it really should include a third wire for ground. You can get away with 2 wires as long as there is a common ground between all devices. This is hard to guarantee, especially on long runs. Including the third wire is always a good idea.

RS-485 should also include termination resistors at the end of the bus. This helps prevent reflection on the wire from corrupting the communications.

Here is an article from TI on Ten Ways to Bulletproof RS-485 Interfaces.

2 wire

Again, while referred to as 2 wire, a ground wire is good practice.  In this wiring scenario D- will be landed on pin 3 and a small jumper wire will be used to connect pin 3 to pin 2.  D+ will be landed on pin 7 or pin 8 and a small jumper wire will be used to connect pin 7 to pin 8.

        Signal         DB-9
--------------------  ------
Signal Ground (GND)      5
Data (D-)                2, 3
Data (D+)                7, 8

4 wire

While referred to as 4 wire, a ground wire is good practice.

        Signal         DB-9
--------------------  ------
Signal Ground (GND)      5
RS485 TX-                2
RS485 RX-                3
RS485 RX+                7
RS485 TX+                8

DB9 Breakout Connector

You can make wiring of the DB9 connector easier by obtaining a breakout board like this one from Amazon.

Here is an example of wires landing on pins 7 and 8 with a small jumper wire.

RS485 to RS232 converter

Use an RS485 to RS232 converter and let the JNIOR handle the RS232 data.  This will enable 412 and 414 JNIORs to handle RS485.

The Support Tool has a macros tab for creating macros that are used in the Cinema application. Creating macros is a great way to get more functionality from issuing commands to the JNIOR. This post will explain how to create and upload macros to your JNIOR.

To create macros you need to have the support tool download, which you can get here. Once the support tool is downloaded, you’ll open it and go to the macro tab. In the macro tab is where you can create and upload macros to your JNIOR. To add a new macro, you’ll select the ‘add’ button at the bottom left of the update tab and select ‘macro’. With the new macro added, you can click on the new macro to edit its name.

After adding and naming the macro, you can then add actions to the macro. The actions are on the right side of the update tab and you can add new actions at the bottom of the action view, or edit existing ones by selecting them and editing the values in their columns. By selecting the macro and then the action you can select the arrow button between them to add the action to the macro.

Once you finish adding your macros and actions, you’ll then need to save and publish your macro file to your JNIOR by selecting the ‘publish to JNIOR’ button. This will prompt you to save your macro file. After you save, you can then select your JNIOR to publish to. With that you’ll have created and published your macro file to a JNIOR. Now when the JNIOR receives a command to execute a macro you created, it will go through and execute each action inside the macro in order.

This is the JNIOR Knowledge-base.  Here you will find a collection of articles that will help you learn or trouble shoot the JNIOR.

If you find there is information we should add then please get in touch with us.

Name Version Release Date Size MD5
JANOS - UPD v2.4.1 Sep 05 2023 960.1 KB 585e5b27dcebe8e376d5c08dd13facf7
Series 4 All-In-One Update Project v2.4.1 Sep 05 2023 1.8 MB f0e09a9af731be0477df13e707b38c30
Core JANOS Update Project v2.4.1 Sep 05 2023 1.3 MB 921c9867931b4f36234527e597b14d46
JANOS Release Notes v2.4.1 Sep 05 2023 478.2 KB b266d38b1a93d643f2e692e919b23786


JNIOR, a Network I/O Resource utilizing the JAVA™ platform, is a cost effective automation controller that communicates over a network using TCP/IP via an Ethernet Port or via its serial port. The JNIOR is a general-purpose automation controller and I/O device that is easily configurable for controlling and monitoring your equipment or process via the built-in web pages, by enabling the built-in software applications, interaction with an application running on another computer, or by adding your own applications.

Currently there are 4 different Models of the Series 4 JNIOR, each very similar to one another with a few differences.

JNIOR Model Catalog Number I/O Serial/DMX Ports
410  JNR-100-004B 8 inputs 8 outputs 1 AUX Port, 1 COM Port
(COM Port RS-485/RS-232 compatible)
412  JNR-200-004B 4 inputs 12 outputs 1 AUX Port, 1 COM Port
(COM Port RS-232 compatible)
414  JNR-300-004B 12 inputs 4 outputs 1 AUX Port, 1 COM Port
(COM Port RS-232 compatible)
412DMX  JNR-200-004D 4 inputs 12 outputs 1 DMX 5-pin Output Port (allows DMX control)
1 COM Port (COM Port RS-232 compatible)
Each JNIOR Model links to their web page, where more detailed information can be found for them (like their data sheets)

Powering Your JNIOR

The JNIOR uses a 2-piece terminal connector system for all power and I/O wiring connections allowing for easy installation and/or removal of the JNIOR.  Additional installation information and drawings are provided on our website.

The JNIOR can be powered with 12 to 24 volts AC or DC. An optional, wall transformer (AC power converter) for North American outlets is available from INTEG that can be used for converting 120/240 VAC to 12 VDC @ 1 amp. International models are also available as Euro and UK plugs.

The Power Connector is located along the upper left edge of the JNIOR. Note that this is a 4-pin connector. If numbered from one (1) through four (4) from left to right power is always connected to positions 2 and 3 (middle two connectors). The polarity is irrelevant although it is recommended that the positive (+) lead be connected to position 2.

The left two positions (1 & 2) are internally connected together, as are the right two positions (3 & 4). This is to facilitate the interconnection of the supplied power to other devices and circuits such as input or output devices. If you power the I/O circuits with your JNIOR power supply, please make sure the power supply is sized appropriately.

WARNING: Do not connect the transformer leads both to Positions 1 & 2 or both to positions 3 & 4. This will short the transformer and possibly damage it and/or the JNIOR. Always use a fused/protected power source.

When a proper power source is connected and turned on the leftmost LED adjacent to the power connector will glow BLUE continuously. The LED to the right may glow ORANGE for several seconds. This orange STATUS LED remains on through most of the JNIOR boot sequence. Later it will flash whenever an external connection is made to the JNIOR via the Ethernet port.

Wiring JNIOR I/O

JNIOR Inputs

The JNIOR is equipped with optically isolated digital inputs. Each digital input can accept AC or DC voltage sources in the 0 – 30 V range. An LED associated with each digital input displays the current electrical status of the input (off or on). Isolation of each digital input allows you to connect input signals to different voltage sources without the addition of isolation devices. The input voltage must be greater than 2 VDC for the input to register as “on” and then less than 1 VDC to register as “off”. A typical connection would be as follows:

JNIOR Outputs

The JNIOR is equipped with Relay Outputs with most of them being a Form A SPST relay (1 Normally Open Contact) and two of them being a Form C SPST relay (1 Normally Open Contact and 1 Normally Closed Contact – jumper selectable as to which one is available on the JNIOR terminals by removing the lid and changing the jumper setting. Normally Open is the default.) Each relay output is independent and isolated from the other relay output. Each relay contact rating is 1A @ 24VDC and the voltage source must be in the range of 5 – 30V AC or DC. A typical connection would be configured as follows:

Setting the JNIOR’s IP

Starting with JANOS 2.0, the JNIOR is shipped with DHCP enabled for dynamic setting of the JNIOR IP address by a network server. More information is here on finding your JNIOR’s IP address.

If DHCP does not work on your network, then there are two ways to configure your JNIOR IP settings:

  • By using the JNIOR Support Tool (Beacon tab) provided on our website at the following link: You can use JNIOR Support Tool to configure the JNIOR’s IP by right clicking the JNIOR, and selecting Configure -> IP Configuration. A dialog will appear to edit the JNIOR’s IP after that.



  • Via the RS232 Serial Port and a command line window available via the JNIOR Support Tool: You can use this command line to set the IP by doing the ipconfig -a IP -m MASK command, replacing ‘IP’ with the IP you want for the JNIOR, and ‘MASK’ with the subnet you want for the JNIOR. For example, on a private network the IP address may be something like A common mask would be The command would then look as follows:


ipconfig -a -m

JNIOR Web Pages

The JNIOR Series 4 contains the JNIOR web page which is a web page used for a variety of functions including monitoring and manually controlling the I/O, changing various configuration items, opening a Telnet/Console session and several other functions. The JNIOR web page works with Microsoft Internet Explorer, Google Chrome, Fire Fox and other browsers.

PLEASE NOTE: The dynamic web page requires a ‘modern web browser’ which is defined as Internet Explorer 10 or greater, Google Chrome or Firefox.

You can launch the JNIOR web page from the Beacon tab in the JNIOR Support Tool by right-clicking on your JNIOR and going to Tools – Open web page or by manually entering the JNIOR IP address in your browser address line. To manually launch the JNIOR web page, open your browser and in the address line of the browser type your JNIOR IP address or serial number, for example: or jr616010235

After the JNIOR web page is loaded, the user is asked to login with a valid username and password. You can use the default username (jnior) and default password (jnior).

The JNIOR web page will be launched in your browser as shown below.

DMX requires RS485 communication at 500K baud.  The JNIOR 412 DMX handles this inherently.  The JNIOR 410 has the ability to handle RS485.  An additional application must be loaded to get the DMX data to be streamed out the AUX port.  You can read about using the JNIOR 410 and a 412 DMX Alternative.  The downside of this is that there is additional overhead on the JNIOR and that the AUX port is not properly isolated.  In most cases the lack of isolation is not an issue but it could be given certain circumstances.

At the time of writing this article, in 2022, we have found it hard to acquire the components needed to build the 412DMX unit due to supply chain issues and chip shortages.

While using the 410 as a DMX alternative would work, some people like the IO mix on the 412.  So we decided to look at what it would take to use the 412 as a DMX alternative.  It turns out that an RS232 to RS485 adapter with a NULL modem will do the trick.  Here are links to the components that we tested an commanded DMX fixtures with here in the office.

DTECH RS232 to RS485 / RS422 Serial Communication Data Converter Adapter Mini-Size

DB9 Null Modem Adapter Male to Male

View on GitHub

The PowerEventLog application uses an immutable array to keep track of when the JNIOR turns on and off. It takes the values in an immutable array and stores them in a log file called powereventlog.

The application starts by checking if another instance of  itself is already running. If there is one already running, the instance of it trying to launch terminates itself. After checking that, it then gets the time that the application started on the JNIOR. The Immutable block is then returned (or created if it doesn’t exist yet.) to hold/retrieve the values of when the JNIOR last turned off and when it booted up again. The stop and start times of the JNIOR are re-formatted as date strings to be more readable. The log files being created are then checked to see if a backup needs to be created. Lastly, the stop and start times of the JNIOR are written to the log file, and then the times are updated for the next time the JNIOR turns off.

View on GitHub

JBakup is an application that is running on the JNIOR to help extend the life of your log files.  It does this by monitoring the filesystem for the creating of a .log.bak file.  This logic runs just once every 15 minutes.  When a .log.bak file is found that has NOT been previously processed then it is added to the .zip of the same name in the flash/baks directory.

The JAVA application doesnt take care of the zipping of the backup file data but rather creates a script that the OS executes using the ARC command.

The code is small and should be easy to follow.

After configuring the JNIOR properly, a way to send an email from it is to use the MailComposer class. This function has the user define the email being sent by building different parts of the email (Email address being sent to, Attachments to add, anyone that needs CC’d, subject, message, etc). Once these are all defined, you can use the MailComposer’s send() function to submit the email.

package emailexample;

import com.integpg.system.JANOS;
import com.integpg.system.MailComposer;

public class EmailExample {

    public static MailComposer mail = new MailComposer();
    public static void main(String[] args) {
        mail.setToAddress("YOUR EMAIL HERE");
        mail.setSubject("MailComposer Test");
        mail.setMessage("This was built and sent using the MailComposer Class.");

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. After it has successfully run, I check my email and have received one from the MailComposer example.

After configuring the JNIOR properly, a way to send an email from it is to use theJANOS.sendmail() function. The .sendmail() function needs the name of a mail-profile on the JNIOR that you defined earlier, the subject of the email, and the email’s message.

package emailexample;

import com.integpg.system.JANOS;
import com.integpg.system.MailComposer;

public class EmailExample {

    public static MailComposer mail = new MailComposer();
    public static void main(String[] args) {
        JANOS.sendMail("YOUR EMAIL-PROFILE HERE", "EmailExample", "This was built and sent from the JANOS class.");


I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. After it has successfully run, I check my email and have received one from the JANOS.sendmail() example.

The 410 has 8 inputs and 8 outputs, the 412 and 412DMX have 4 inputs and 12 outputs, and the 414 has 12 inputs and 4 outputs. Each digital input can accept AC or DC voltage sources in the 0 – 30 V range. The input voltage must be greater than 2 VDC for the input to register as “on” and then less than 1 VDC to register as “off”. The JNIOR uses a 2-piece terminal connector system for all power and I/O wiring connections allowing for easy installation and/or removal of the JNIOR. Digital Inputs are Optically Isolated.  

Controlling Digital Inputs

When controlling the JNIOR’s I/O, the JANOS class can be used to get/manipulate their statuses. In the following example the JANOS class is used to invert an input and print the input state mask, manipulate an input counter, and check an input’s usage meter.

View on GitHub

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. As you can see it displays different data about the inputs at the time of the application running.

Getting Inputs from the IO Log

Another way to interact with the I/O on the JNIOR is via the Iolog Monitor. The Iolog Monitor is an object that can be checked for I/O events that have occurred on the JNIOR. There is the IoEvent class and Iolog class. An IoEvent is when an input or output state changed on the JNIOR, and the Iolog is an object that contains all the IoEvents from a certain timestamp. The example below inverts an input, and then shows how the Iolog has recorded that input pulse as an IoEvent.

View on GitHub

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. As you can see it recorded the input change where input 1 turned on and again when it turned back off.

When creating an application, being able to send emails from it may be something a User wants to do. JNIORs have email blocks in their configuration that can be setup to send emails.

Setting Up JNIOR Email

To properly setup an email for the JNIOR to use, you’ll want to use the JNIOR’s Web UI and navigate to the Email Account section under Configuration. Here you’ll want to include the Mail Server, From Address, and SMTP Username your JNIOR will use to send the email. These are required in order to send emails from the JNIOR.

Next, in the Network section you’ll want to make sure you have a DNS Address declared. For our examples we use, which is Google’s.

Lastly, we’ll want to make sure we give the address we are sending to to the Mail-Profiles section. Only a ToAddress is needed, but additional information can be entered to be used as a default. This is used for the JANOS.sendmail() class.

Now that this is setup, we can now create an application that can use these settings to send an email. The following example shows two different ways that an email can be sent from an application. The first way uses the JANOS class, and the other uses the MailComposer class.

View on GitHub

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. Once its run an email should be sent to the address, subject, and message you declared.

Series 4 JNIOR’s have a file directory that can be interacted with via a command line connection or from the Web UI. Being able to interact with the file directory and read/write files to it can be a useful tool when creating applications, from recording versioning numbers to writing data to reference later. Below is a small example below that writes and then reads to a file.

Directories and File Interaction

To start a file object is declared with the directory of the temp folder and the name of the file we are creating which is “test.log”. We also create another file object called directory and we are going to use this to display all the files located under the flash directory in the JNIOR by. We get the files in the flash directory by assigning the value ‘/flash’ to it, and then using the .list() function we can return a string array of all the files under that directory. We declare a local string array called files and populate it with the file names we just got. Then we go through and print out the name of each one. After this we declare a BufferedWriter to create a FileWriter. The FileWriter is then used to write a string to the test.log file we just declared. Next a BufferedReader is declared to create a FileReader. The FileReader is used to the read whatever data is on the file as a string, and since we just wrote to it, it will print out what we’ve writer to the file.

View on GitHub

Filing Example

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. As you can see it, application runs and prints out the text that was written to the file. You can also see the test.log file is created in the temp folder.

You can easily pulse an output using Tasker.  From an open Workspace you will click + Add Action… to get the Add Action dialog.  From there you will select Pulse Relay (channel, duration).

Once the action has been added you will need to configure the correct channel and duration.

The registry on the JNIOR is what defines how it is configured. Registry keys hold information that persist past reboots, allowing applications to set them and save settings that have been created. This information can be connection settings, device identification, versioning, etc. Below is a quick example that prints out a specific registry key’s information, and then prompts the user to enter a new value for it. 

In this example the registry key being referenced on the JNIOR called AppData/RegistyTest. This registry key doesn’t exist the first time the application is run, and it will print out “Registry not created yet”. It will then prompt the user to enter a value for it, and once that’s done it will exit the application. Running the application a second time will show that the value entered for the registry key will now be what’s displayed for its value.

View on GitHub

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. As you can see it, the registry key report empty the first the application is run, and the second time its run the registry key contains the value enter for it the first time it was run.

Here shows the registry key we created in the Registry Tab of the JNIOR Web UI.

There could be a want for an application that performs different functionality, completing multiple operations at the same time. The JNIOR accomplishes this with threading. A thread is a sequence of instructions within a program that can be executed independently of other code. The JNIOR is able to handle threading via the default JAVA library. Below are two quick examples of threading, with one of them using synchronization. 

Non-Synchronized Threading

In this first example, there is a main method that creates two threads, each supplying it an array of words that will be used to create sentences and print them out. Each new thread calls a function called slowStringBuffer, taking the words in their string array’s they’ve been supplied and adding them to the string buffer in that function. Since the threads run at the same time, they add their words to the string buffer simultaneously. This results in nonsense being printed out for the sentences, showing that synchronization in our next example is useful in avoiding this issue.

View on GitHub

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. As you can see it, the threads compete against each other to build their sentences, resulting in nonsense being printed out.

Synchronized Threading

In this second example, the only change that is made is that the slowStringBuffer function is made synchronized. This results in one thread taking control first, making sure it prints out its sentence completely before the next thread can start its sentence. This results in two complete sentences being generated.

View on GitHub

I put the built jar file of this example application into the JNIOR’s flash folder and ran it from the Web UI’s console tab. In this example two complete sentences are formed and printed.