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

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 8.8.8.8, 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.

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.

JNIORs can connect with other devices via Ethernet connections. Defining a port and IP, the JNIOR can listen or send to a device with those Ethernet settings using the IO and Net classes of the JANOS Runtime library. Receiving data uses a DataInputStream and sending data uses a DataOutputStream. 

TCP

Below is a very short example, that shows a quick reference to the IO class to create a socket to open a DataOutputStream. Once that is open I can send a message to an external device. The socket only requires the IP address and the port number. In this example the IP is 10.0.0.17 and the port is 9222. Once the DataOutputStream is created using the socket, I send a string out it. I use a TCP server I created that listens on that IP and port number to see if it receives the data sent.

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. After it has successfully run, I check my TCP server and see that the information was successfully received.

UDP

Another example of Ethernet control uses a UDP connection versus a TCP connection. Another example is below, using the Datagram Socket and Packet classes from the Java.net package. This creates a UDP connection from the JNIOR to any UDP server listening and sends it a string. 

View on GitHub

Just like before, 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 a UDP server I created  and see that the information was successfully received.

Applications can log information they are generating into a .log file to view. This feature can be crucial to some users, letting them be able to monitor data that constantly needs supervision. Log files can roll over as well, which happens when a log file runs out of space. When this occurs, a new empty file with the same name is created to log more data, while the old file that has no more space gets a .bat extension added to the end of the file name. This allows for data to be retained longer before being overwritten. 

To use logging in a software application on the JNIOR, you will need to use the JANOS class of the JANOS runtime library. With it you can define a log file name and what you want to log to it. If the log file exists at the location you specify, it will add what enter to it. If the log file doesn’t exist, it will create the log file, and then log what you enter to it. Below is a short example of creating/adding to a log file that exists in the temp folder of the JNIOR.

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 after running it, going to the temp directory of the JNIOR shows the loggingExample.log file.

Series 4 JNIORs have a varying amount of inputs and outputs depending on what model you have. 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 relay contact rating is 1A @ 24VDC and the voltage source must be in the range of 5 – 30V AC or DC. 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.

Controlling Relay Outputs

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 pulse outputs, get the output states mask, check the status of an output, and check an outputs 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 outputs at the time of the application running.

Getting Outputs 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 pulses an output, and then shows how the Iolog has recorded that output 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 output change where output 8 turned on and again when it turned back off.

Excluding the 412DMX, each JNIOR model has a COM port (labelled RS-232) and an AUX port (labelled AUX Serial). Both are DB-9F Female 9-pin D-sub connectors. The AUX port has 4 active signals and the COM port 2. The pin assignments are as follows:

2 >> RS232 TX / RS485 TX-
3 << RS232 RX / RS485 RX-
5    GND
7 << RS232 RTS / RS485 RX+
8 >> RS232 CTS / RS485 TX+

Each port provides at least a 3-wire RS-232 interface. A 3-wire connection contains only the Transmit (Tx), Receive (Rx) and Signal Ground (GND) circuits. The  COM port is used for diagnostics, but the AUX port on the 410 is RS-485 capable. These ports can be taken over to send and receive messages from these ports.

Creating a Serial Connection

When creating applications to control a serial port, the Comm and IO classes are what can be used to control them from the JANOS runtime library. Using this class you can create Input and Output streams for either the AUX or COM ports to receive or send out data via the serial ports. Below is a very short example, that shows a quick reference to the Comm class to open the AUX serial port and after establishing an Output Stream sends out a string. I opened a serial connection from my computer using command line and connected to the AUX port of the JNIOR to see if the data went through successfully.

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. After it has successfully run, I checked my serial connection to the AUX port of that JNIOR and saw the message went through.

Serial Connection Output

NOTE: AUX and COM ports can’t be opened more then one time, if they are then a PortInUseException error is thrown. An example of this happening is shown below where a serial port was opened twice.

The available expansion modules for the JNIOR are as follows: the Control Panel, Temperature Probe, Environmental Sensor, 4 Relay Output, 10volt, 4-20ma, and 3 Channel LED Dimmer. These expansion modules all have ways to be manipulated through the JANOS runtime library. Each Expansion Module works on any JNIOR logic controller model and contains the following key features:

  • On-board microprocessor for rapid, effective analog signal sampling
  • Automatic recognition of the module by the main JNIOR logic controller
  • Flexibility to utilize a mix of modules
  • Can be used in addition to the JNIOR temperature sensors
  • Web-based configuration via the main JNIOR web page
  • Easily integrated into all the JNIOR communication methods
  • No separate power supply necessary – all power received via the Sensor Port
  • 2-year warranty

Controlling I/O and Reporting Data

When creating applications to control expansion modules, the SensorPort and JANOS classes are what can be used to control them from the JANOS runtime library. Using this class you can get an expansion modules type, check their inputs, check/set their outputs, get the temperature, set LEDs, and check the external device list of expansion modules. Below is an example, that gets each module connected to the JNIOR, and then reports on their data. 

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 prints the expansion modules connected along with info about the data they are reporting.

To update JANOS, the JNIOR Series 4 Operating System, you will need to do two things.

  1. Get the UPD file on the JNIOR in the /temp directory.
  2. Execute the jupdate command. To force the update to happen immediately upon entering this command we will type jrupdate -fup /temp/janos_filename.upd

The easiest way to update the unit remotely is using the DCP The DCP is most likely to be available on a remote JNIOR because it uses a single port for all of the features. Without the DCP you might need port 23 for telnet, port 21 for FTP commands, and many other ports for FTP data.

If the DCP is available follow this procedure.

  1. Once the DCP is open, navigate to the Console tab.
  2. Login to the command console.
  3. Drag and drop the JANOS .upd file into the console window. This automatically stores the file in the /temp directory.
  1. Issue the jrupdate command. Like above, to force the update to happen immediately upon entering this command we will type jrupdate -fup /temp/janos_filename.upd

This post goes over an application that reads inputs being activated as a pattern using their state mask. However many times inputs are triggered within a certain amount of milliseconds between them, those inputs state masks are added to the pattern already there. This continues until there is an input not within the set amount of milliseconds. Then it prints the pattern and begins creating a new one.

Make sure to have properly setup the project before using this code, to learn how to setup a custom java application on the JNIOR, a link is here.

After setting up the project, it will require two files. This first one we create is called MultiplexSample, which calls the run function we will create in the second file.

//function runs the application
public class MultiplexSample {

    public static void main(String[] args) {
        
        InputMultiplexer inputMultiplex = new InputMultiplexer();
        inputMultiplex.run();
        
    }
    
}

After that we begin creating the second file called InputMultiplexer. The first thing we include in the project is the import statements. The two imports we use are for IoEvents and the Iolog. We will use these to get the input’s information and process them as patterns.

We then declare the global variables. The first one we declare is the _iolog object. The Iolog keeps track of all IoEvents, including inputs. We will use the IoEvents from the Iolog to grab the information of the inputs when they are activated.

After this is _eventCaptureTime which grabs the start of when the IoEvents are grabbed at the start of each loop through the application.

We then need a long value called _startOfPatternTime. This is the current time of each new input that comes in. We need this because the program loops every 500 seconds, and if 1 input happens right after the loop ends we’ll miss it. The _startOfPatternTime is subtracted from the _eventCaptureTime which helps us check if that input should keep the pattern going.

The _refreshTimestamp value helps us only grab new IoEvents from the Iolog by only grabbing events past its value.

Next is the IoEvent array _ioEvents which contains the inputs we are processing from the Iolog for the current pattern.

We then have the pattern value, which is the pattern we are constantly building from the IoEvents state mask.

Lastly is PATTERN_WINDOW_DURATION which is the value in milliseconds we are looking to see pass between inputs to determine if they are close enough to combine into a new pattern or process as separate ones.

import com.integpg.system.IoEvent;
import com.integpg.system.Iolog;

public class InputMultiplexer implements Runnable {

    //grabs the Iolog to get IoEvents
    private Iolog _iolog = new Iolog();
    //time of the first input to find the start of the input pattern
    private long _startOfPatternTime = 0;
    //time where Iolog is refreshed as to not look at old IoEvents
    private long _refreshTimestamp = _startOfPatternTime;
    //array of IoEvents to evaluate from the Iolog
    private IoEvent[] _ioEvents;
    //value for checking pattern has more IoEvents to process
    private long _eventCaptureTime = 0;
    //input pattern to log
    private int _pattern = 0;
    //duration between inputs required to continue a pattern
    private static final int PATTERN_WINDOW_DURATION = 100;

Next is the run function, which sets the _eventCaptureTime value, calls the other functions we are about to create, and permanently loops the program every 500 seconds. This makes it so the application is constantly checking the Iolog for new IoEvents.

    //function calls other functions to log input pattern in a infinite loop
    @Override
    public void run() {

        while (true) {

            _eventCaptureTime = System.currentTimeMillis();
            getIoEvents();

            lookForIoPattern();

            try {
                Thread.sleep(500);
            } catch (InterruptedException ex) {

            }

        }

    }

Next is the lookForIoPattern function. This function starts with a for loop that will go through all recent IoEvents from the Iolog and processes their states to begin creating a new pattern.

Next the IoEvent states and mask values have an & operation done to get which states have turned high. Next the _startOfPatternTime was set if this was the first input in the pattern. After that _startOfPatternTime would be compared with either the current IoEvent’s timestamp or the _eventCaptureTime value to determine if more inputs need to be added to the pattern. _startOfPatternTime is compared to currentIoEvent’s timestamp to check if timestamps of inputs were within PATTERN_WINDOW_DURATION milliseconds of each other, which in this example is 100 milliseconds. If the 500 milliseconds that the program is looping in ends as another input comes in, then its compared to the _eventCaptureTime value to check if another input came in within 100 milliseconds of the last input, even if the loop ended. This would prevent patterns from getting cut of from one another because of the 500 millisecond loop.

//function checks the IoEvents of the Iolog and evaluates an input pattern
    private void lookForIoPattern() {

        //grabs the IoEvents of the Iolog
        for (int index = _ioEvents.length - 1; index >= 0; index--) {

            IoEvent currentIoEvent = _ioEvents[index];

            System.out.println(currentIoEvent.timestamp);

            //This value shows the state total for the IoEvent
            System.out.println("This is the current I/O state: " + currentIoEvent.states);
            //This value shows which input values were activated for the IoEvent
            int statesTurnedHigh = currentIoEvent.states & currentIoEvent.mask;
            System.out.println("This is the value of statesTurnedHigh: " + statesTurnedHigh + "\n");

            //grabs the start of the input pattern if its hasn't been assigned yet and if enough time passes between IoEvents it evaluates the pattern,
            //otherwise the pattern has an or statement performed on it with the current IO event
            if (statesTurnedHigh != 0) {

                if (_startOfPatternTime == 0) {
                    _startOfPatternTime = currentIoEvent.timestamp;
                    System.out.println("Start of pattern found.");
                }
                if (currentIoEvent.timestamp - _startOfPatternTime > PATTERN_WINDOW_DURATION) {
                    evaluatePattern(_pattern);
                    _startOfPatternTime = currentIoEvent.timestamp;
                    _pattern = currentIoEvent.states;

                } else {
                    _pattern = currentIoEvent.states | _pattern;
                }

            }

        }

        //checks if the pattern is done or if the loop needs to grab more IoEvents
        if (_startOfPatternTime != 0) {

            if (_eventCaptureTime - _startOfPatternTime > PATTERN_WINDOW_DURATION) {

                evaluatePattern(_pattern);
                _startOfPatternTime = 0;
                _pattern = 0;

            }
        }
    }

The last two functions are the evaluatePattern function and the getIoEvents function. The evaluatePattern function simply grabs the pattern created from the lookForIoPattern function and prints it. The getIoEvents function is what is called to grab the most recent IoEvents from the IoLog.

 //prints out the Input Pattern
    private void evaluatePattern(int createdPattern) {

        System.out.println("Pattern is " + createdPattern);

    }



    //grabs IoEvents and puts them into a class level array
    private void getIoEvents() {

        _iolog.refresh(_refreshTimestamp);
        _ioEvents = _iolog.getInputEvents();

    }

}

After adding those last functions, you should now have program that grabs all the inputs activating on the JNIOR, and creates a state pattern depending on how close each input’s timestamp is. Below is the code for the full application. Make sure you set the MultiplexSample file as the main function of your project.

//function runs the application
public class MultiplexSample {

    public static void main(String[] args) {
        
        InputMultiplexer inputMultiplex = new InputMultiplexer();
        inputMultiplex.run();
        
    }
    
}
import com.integpg.system.IoEvent;
import com.integpg.system.Iolog;

public class InputMultiplexer implements Runnable {

    //grabs the Iolog to get IoEvents
    private Iolog _iolog = new Iolog();
    //time of the first input to find the start of the input pattern
    private long _startOfPatternTime = 0;
    //time where Iolog is refreshed as to not look at old IoEvents
    private long _refreshTimestamp = _startOfPatternTime;
    //array of IoEvents to evaluate from the Iolog
    private IoEvent[] _ioEvents;
    //value for checking pattern has more IoEvents to process
    private long _eventCaptureTime = 0;
    //input pattern to log
    private int _pattern = 0;
    //duration between inputs required to continue a pattern
    private static final int PATTERN_WINDOW_DURATION = 100;



    //function calls other functions to log input pattern in a infinite loop
    @Override
    public void run() {

        while (true) {

            _eventCaptureTime = System.currentTimeMillis();
            getIoEvents();

            lookForIoPattern();

            try {
                Thread.sleep(500);
            } catch (InterruptedException ex) {

            }

        }

    }



    //function checks the IoEvents of the Iolog and evaluates an input pattern
    private void lookForIoPattern() {

        //grabs the IoEvents of the Iolog
        for (int index = _ioEvents.length - 1; index >= 0; index--) {

            IoEvent currentIoEvent = _ioEvents[index];

            System.out.println(currentIoEvent.timestamp);

            //This value shows the state total for the IoEvent
            System.out.println("This is the current I/O state: " + currentIoEvent.states);
            //This value shows which input values were activated for the IoEvent
            int statesTurnedHigh = currentIoEvent.states & currentIoEvent.mask;
            System.out.println("This is the value of statesTurnedHigh: " + statesTurnedHigh + "\n");

            //grabs the start of the input pattern if its hasn't been assigned yet and if enough time passes between IoEvents it evaluates the pattern,
            //otherwise the pattern has an or statement performed on it with the current IO event
            if (statesTurnedHigh != 0) {

                if (_startOfPatternTime == 0) {
                    _startOfPatternTime = currentIoEvent.timestamp;
                    System.out.println("Start of pattern found.");
                }
                if (currentIoEvent.timestamp - _startOfPatternTime > PATTERN_WINDOW_DURATION) {
                    evaluatePattern(_pattern);
                    _startOfPatternTime = currentIoEvent.timestamp;
                    _pattern = currentIoEvent.states;

                } else {
                    _pattern = currentIoEvent.states | _pattern;
                }

            }

        }

        //checks if the pattern is done or if the loop needs to grab more IoEvents
        if (_startOfPatternTime != 0) {

            if (_eventCaptureTime - _startOfPatternTime > PATTERN_WINDOW_DURATION) {

                evaluatePattern(_pattern);
                _startOfPatternTime = 0;
                _pattern = 0;

            }
        }
    }



    //prints out the Input Pattern
    private void evaluatePattern(int createdPattern) {

        System.out.println("Pattern is " + createdPattern);

    }



    //grabs IoEvents and puts them into a class level array
    private void getIoEvents() {

        _iolog.refresh(_refreshTimestamp);
        _ioEvents = _iolog.getInputEvents();

    }

}

There has been an update to the Update Project for OS 4.8.

Name Version Release Date Size MD5
Series 3 All-In-One v4.8 Nov 11 2019 251.7 KB ef6a2613188b70725b155c9c026064b3

Browsers no longer support Java Applets.  Therefore, the web files have been removed from the JNIOR in this update. This fixes flash space issues. The applets can still be loaded from within the JNIOR Support Tool.  To load the Applets, right click on the JNIOR  in the Beacon Tab.  Then go to Tools -> Open Classic Monitor, Configure, Control Application.

Sometimes the JNIOR doesn’t appear to be working but follow these steps and you might be able to determine why. There are a few steps that you can take before contacting INTEG or declaring that the JNIOR is not functioning. Hopefully the steps below will help save some time.

The number one way for INTEG to help provide support is to send us a Snapshot using the Support Tool. We can use the Snapshot to look at logs, analyze your configuration and to look at network interactions. Snapshots are most effective when taken soon after the issue is noticed. If too much time has passed the logs and network information may no longer contain relevant information pertaining to the time of the issue.

Power

The JNIOR requires 12 – 24v DC. We recommend a power supply capable of 1 Amp.

The very first thing to check is to make sure the unit has power. No, I don’t mean “did you plug the JNIOR in?” We need to make sure that the internal power supply is functioning and that the wires going in to the connector on the outside of the JNIOR have not broken.

To check the internal power supply we need to verify that the BLUE LED is illuminated next to the power connector.

If the BLUE LED is not illuminated then we want to make sure the wires have not been broken. This can easily happen if there is stress put on the wires during installation or if the connector was not securely fastened before being shipped.

Operating System

Is the OS running? To check this remove power. Upon applying power the amber light next to the BLUE power LED should come on for two or three seconds and then go out. Another thing we can check is to unplug the Ethernet cable. As of JANOS v1.8 the Status LED will blink Morse code indicating the value of the last octet of the IP Address when the Ethernet cable is unplugged.

Ethernet

The first thing to check regarding Ethernet connectivity is that the lights on the Ethernet port are lit. If they are not, please check both end of the cable to make sure it is connected. If the cable appears to be properly connected and the lights are not lit, please try a different cable.

Check Beacon to see that the JNIOR is on the network. Beacon is a feature on the JNIOR that uses UDP to broadcast itself on the network. The JNIOR Support Tool implements beacon and will query the network for any JNIORs. Any JNIOR that hears the query will respond. Because this feature uses UDP a valid working IP Address is not necessary.

If the cable, lights and beacon all appear to be in working order then the last thing to check here is the IpConfig/Allow setting. That will need to be done using the serial port. You can read about that procedure in the Dangers of IpConfig/Allow.

As of JANOS v1.8 the Status LED will blink Morse code indicating the value of the last octet of the IP Address when the Ethernet cable is unplugged.

Serial Port

The serial port can be used to diagnose JNIOR issues. Most of the time the Ethernet connection will be used to do this but in the case that the Ethernet connection is suspect we will need to use the serial port. There are two serial ports on the JNIOR but the RS-232 port is the is the port that facilitates the command line functionality. To connect to the JNIOR for command line use you will need to use the following settings. 115200 baud, 8 data bits, 1 stop bit and no parity. Once the cable is connected and you launched your favorite serial application you will need to press enter to see the login prompt. You could also reboot the JNIOR to observe the banner.

Configuration

If the hardware steps above do not alert you to the issue you are having then configuration is most likely to blame. Please contact us INTEG for further assistance. We can walk you through configuration issues, connect to your computer via TeamViewer, or determine if your unit needs to be replaced.

Depending on the application, something going wrong and stopping it from running could lead to big complications. Thankfully, a watchdog can monitor your application and react how you want it to using the Watchdog class. The watchdog can stop, restart, and report on applications not responding to it and more. Watchdogs have configurable timeframes, and when they aren’t updated before the time frame expires they trigger.

The watchdog is a very powerful concept. Wikipedia says:

watchdog timer (sometimes called a computer operating properly or COP timer, or simply a watchdog) is an electronic timer that is used to detect and recover from computer malfunctions. During normal operation, the computer regularly resets the watchdog timer to prevent it from elapsing, or “timing out”. If, due to a hardware fault or program error, the computer fails to reset the watchdog, the timer will elapse and generate a timeout signal. The timeout signal is used to initiate corrective action or actions. The corrective actions typically include placing the computer system in a safe state and restoring normal system operation.

Usage

The example below is very basic. You will need to adjust the duration and location of the watchdog for your application.

View on GitHub

This is what we see in the log after the unit has come back up.

01/15/19 08:37:36.361, FTP/10.0.0.27:62888 uploaded /flash/WatchdogExample.jar [115.3 kbps] 
01/15/19 08:37:44.081, WatchdogExample started 
01/15/19 08:37:44.203, WatchdogExample activated 
01/15/19 08:38:14.307, WatchdogExample loop finished 
01/15/19 08:38:18.451, ** Assertion: WatchdogExample watchdog triggered reboot (Line 1278) 
01/15/19 08:38:18.483, ** Terminating: System 
01/15/19 08:38:20.971, ** Reboot on assertion: WatchdogExample watchdog triggered reboot (Line 1278) 
01/15/19 08:38:20.997, -- JANOS 410 v1.7.1 initialized (POR: 1546)

Here are the options that are available to choose from when the watchdog expires.  You see that we assign the action in the setAction() method above.  watchdog.setAction(Watchdog.WDT_REBOOT);

WDT_REBOOT

This is the default action. Expiration of the watchdog timer causes the unit to reboot.

WDT_APPLICATION

This action indicates that a watchdog timer expiration is to be handled by the application itself. The system takes no action.

WDT_TERMINATE

When the watchdog timer expires the system will terminate the application.

WDT_BREAK

This interrupts the current application (similar to Ctrl-C interruption) when the watchdog timer expires.

WDT_RESTART

When the watchdog timer expires this will interrupt the current application and restart it.

WDT_MESSAGE

When the watchdog timer expires a WM_WATCHDOG (0x11) message will be sent through the system message pump. The content contains the text associated with the watchdog.

WDT_EVENT

Watchdog timer expiration will notify the first thread in the application that is waiting  for notification using waitOnWatchdogNotify().

This sample shows you how to use the Immutable class. The immutable class represents persistent storage that can be accessed at the low level as an array of primitive types. This information will withstand reboots and application terminations. You can view Immutable data by typing the ‘nv’ command in the command line of a JNIOR. If using only one data type, you can express to create an immutable array of that data type, but if you want your array to have mixed data types inside it, you have to use a byte array. 

Using Immutable Blocks

This example shows the use of an array of longs. The long values in this application are date values that represent when the application was started. The long array is part of an Immutable block, therefore the application start times don’t go away until overwritten or manual removed. This application holds up to the last five application start times.

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. After it has successfully run, I run the application multiple times, and it shows each time it runs a new application start time added to its immutable array.

JANOS supplies a Message Pump wherein messages of various types may circulate between processes.

 

JANOS supplies a Message Pump wherein messages of various types may be circulated between processes or application. These messages may be user defined.
Message numbers below 1024 (0x400) are RESERVED by the system.
The following are the system defined message types.

SM_SHUTDOWN (0x01)

This message is generated by the system prior to shutdown. When received applications MUST forward the message by returning it to the pump and exit in an expeditious fashion. The JNIOR is about to reboot.

SM_PROBE (0x02)

This message is generated by the system periodically. When receive applications MUST forward the message by returning it to the pump. This is used to detect listeners that are no longer responding or that are not properly forwarding messages. The system expects to see this message return to it in a prompt fashion.

SM_GCRUN (0x10)

This message indicates that the Garbage Collection (GC) has completed. When received applications MUST forward the message by returning it to the pump.

SM_WATCHDOG (0x11)

This message is generated by a application watchdog configured to send then message on timer expiration.

SM_SYSLOGMSG (0x12)

System log messages can be sent to an external Syslog Server. This message also passes the log information to listening applications.

SM_PWRLOST (0x20)

When Ride-Thru Power support is available this indicates the lost of external power.

SM_PWRGOOD (0x21)

When Ride-Thru Power support is available this indicates that external power has been restored.

SM_PWRREADY (0x22)

When Ride-Thru Power support is available this indicates that the supply is fully charged and ready to provide maximum holding capacity.

SM_REGUPDATE (0x40)

This message is generated whenever a registry entry is updated or removed. When received application MUST forward the message by returning it to the pump.

SM_WEBSTARTUP (0x60)

Message sent when the Web Server process is activated.

SM_WEBSHUTDOWN (0x61)

Message sent when the Web Server process is terminated.

SM_PROTCMDMSG (0x70)

This message is generated when the JNIOR Protocol receives a custom command message. When received an application MUST either forward the message or provide a SM_PROTCMDRESP response.

SM_PROTCMDRESP (0x71)

This message is generated by an application in response to a SM_PROTCMDMSG command message. It is intended for the JNIOR Protocol server. When received applications MUST forward the message by returning it to the pump.

SM_PIPEOPEN (0x80)

This message is sent by the Web Server when a piped websocket connection has been established. The message contains the client IP Address and Port as well as the target message number.

SM_PIPECLOSE (0x81)

This message is sent by the Web Server when a piped websocket connection has terminated. The message contains the client IP Address and Port as well as the original targeted message number.

SM_USER (0x400)

Lowest allowed user defined message number. Applications that intend to exchange messages SHOULD attempt to define globally unique message identifiers. These must be values from 1024 and up. Message numbers below SM_USER are RESERVED by the system.

When configuring JNIORs, how you should configure them depends on what Series JNIOR you have. You’ll want to use the JNIOR Web Page for Series 4 JNIORs, and the Java Applet for Series 3 JNIORs.

JNIOR Web Page
Java Applet

The Java Applet is a local Java application that can be launched from the Support Tool for each Series 3 JNIOR, while the JNIOR Web Page is a browser accessible configuration for Series 4 JNIORs.  Series 3 JNIORs can’t open the JNIOR Web Page because they don’t support the necessary web files required to run the JNIOR Web Page from it. The Java Applet at one point was accessible from a browser, but due to security risks it was changed to be a separate application. Series 4 JNIORs do have the necessary files to open both the Java Applet and the JNIOR Web Page, but you should not use the Java Applet for Series 4 JNIORs. The applets cannot properly configure a Series 4 as the registry settings for many configuration settings are different than what the Series 3 used.

All JNIORs have the ability to boot into a state called Safe Mode. Safe Mode enables the default ‘jnior’ ‘jnior’ username and password for logging in, and disables all applications from running on boot. This is extremely useful in situations where you either forgot your JNIOR log-in, or have an application that is locking up your JNIOR before you can access it. Here is how to boot your JNIOR in Safe Mode.

NOTE: Do not leave your JNIOR in Safe Mode after you are done using it. Safe Mode’s features can interrupt the JNIOR’s functionality when left on.

Power Off and Disconnect the JNIOR

Before attempting to boot your JNIOR in Safe Mode, make sure your JNIOR is disconnected, and that no power is being supplied to it. This helps ensure the JNIOR is not damaged, and leads into rebooting the JNIOR after we enabled Safe Mode.

Locate A Jumper From Outputs 1 or 2

The first thing we need to do is grab a Jumper off of the JNIOR. You’ll start by unscrewing the JNIOR’s lid and locating the Jumpers on outputs 1 and 2. These outputs have Jumpers on them because they are able to be set to normally opened or closed. You’ll want to vertically pull one of these Jumpers off the output pins they are attached to. (These should just pull off by grabbing the plastic ends sticking out off the Jumpers.)

Locate Hole for Safe Mode Jumper

Every JNIOR has a small opening between its Ethernet port and RS-232 serial port. In this small opening are two pins that can have a jumper placed on them to force the JNIOR to boot in Safe Mode.

Plug Jumper Into Safe Mode Pins

Now taking the Jumper, you are going to slide it into the hole, and plug the Jumper into the two pins on the board in front of the small opening. Once the Jumper is in place, and resupply power to it.

Check if JNIOR is in Safe Mode

Once the JNIOR is powered back on, the only way to check if the JNIOR is successfully in Safe Mode is by making a command line connection to the JNIOR, and seeing if it says *SAFE MODE in the boot dialog. If this gets displayed, you have successfully booted the JNIOR in Safe Mode!

Once you are finished making changes in Safe Mode, make sure disconnect power to the JNIOR again, move the Jumper you used back to the output it was taken from, and screw the lid back on the JNIOR.

What is an escape sequence?

From Wikipedia, an escape sequence is a combination of characters that has a meaning other than the literal characters contained therein.  Ab Escape Sequence starts with a backslash (\) and is followed by a character.  The most common Escape Sequences would be \r for carriage return and \n for linefeed.  These are usually used to denote a break between commands.  Some Escape Sequences can require additional information to be included in the sequence.

It is important to understand that these escape sequences get converted before sending the bytes.  The escape sequences differ from device to device and the correct sequence is defined by the device you are sending from.  One device might want a carriage return entered as \r, like the JNIOR, and another might want it entered as \0d

What Escape Sequences are available?

\0: NULL
\r: Carriage Return
\n: Linefeed
\b: Backspace
\t: Tab
\\: Backslash
\”: Double Quote
\x##: HEX value

Here we see the example where the \x requires two more digits to be entered following the \x.  These digits are hexadecimal digits (0-9, a-f, A-F).  Capitalization does not matter.  Any value can be entered as a HEX value.  For instance, \r has a decimal value of 13 or a hexadecimal value of 0d and can be entered as \x0d.  The lowercase letter k has a hexadecimal value of 6b and can be entered as \x6b.  It is much easier to use printable characters where you can.  Printable characters and escape sequences can be intermixed.

Sometimes a double quote (“) cannot be entered because it has another meaning.  For example, when declaring a string we start and end that string with a double quote.  Entering a double quote in the middle of that string would confuse the code about where the string should actually end.  In this case, we can escape that interior double quote.

Special Note about Commas

Commas in Cinema Actions are special.  Unfortunately, the macro file is stored in CSV format.  That means all fields are separated by commas.  Entering a comma in the data field for an action will confuse the whole macro file.  The prevent confusion you should escape the comma and use the hexadecimal value \x2c.

Special Note about Double Quotes

Double quotes are also special in Cinema Actions.  At one time they were used as in the above example to define strings.  Double quotes should always be escaped.  There is a special escape sequence for double quotes, \",  where there are not for commas.

The Cinema Migration Tool is an application that copies a Cinema Setup from a Series 3 JNIOR and loads it on a Series 4 JNIOR. All that’s needed is a snapshot from the Series 3 JNIOR, and the Cinema Migration Tool will use the configuration files inside it to format that Series 3 JNIOR’s Cinema setup on a Series 4 JNIOR. This tool should make moving Cinema setups from Series 3 JNIORs to Series 4 JNIORs much easier. Here is a brief walkthrough on how to use the Cinema Migration Tool.

Name Version Release Date Size MD5
Cinema Migration Tool v1.0 Nov 09 2023 536.3 KB 2433b01bbc7cf107c9e5c275f271aca3

Load the Series 3 Snapshot

To start, once you’ve downloaded the zip file, you’ll want to open it and run the cinema-series3-upgrade.exe application within it. (Don’t unzip). Then as mentioned previously, the Cinema Migration Tool requires that you take a Snapshot of the Series 3 JNIOR whose configuration you are trying to copy over. Once you have the snapshot, you’ll then select the Open Series 3 Snapshot button, where you’ll navigate to the snapshot on your PC and open it in the Cinema Migration Tool.

NOTE: When opened, the device file, macro file, and jnior.ini file should say they are found in the Cinema Migration Tool. If they are not found, this means the pathing to the files in the snapshot isn’t incorrect. Make sure not to unzip or alter snapshots after they’ve been taken.

Publish Configuration to Target Series 4 JNIOR

Once the snapshot is loaded, next you’ll want to enter the IP of the JNIOR you are trying to publish this configuration to. Make sure this JNIOR is on the same network as your PC. Once entered, hitting run will start the Cinema Migration Tool in publishing the Cinema configuration to the Series 4 JNIOR. 

The Cinema Migration Tool will state when it is done at the bottom of its dialog. Once finished, the Cinema Migration Tool can be immediately run again to publish to another JNIOR.

Confirm Your Setup

To make sure this has worked, you can check by going to your Series 4 JNIOR’s web page and navigating to the Folder tab. Once there, check that your root folder contains the device and macro file from your Series 3 Snapshot, along with making sure the Cinema.jar application exists in the flash folder. If this is the case, then you’ve successfully moved your configuration from the Series 3 to the Series 4 JNIOR! If this isn’t the case, INTEG support would like to help you out. You can reach out to us by joining our online chat, or by emailing our support at support@integpg.com.

This is the JNIOR Knowledge-base.  Here you will find a collection of articles that will help you learn or troubleshoot 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

Models

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 the other with a few differences.

JNIOR ModelCatalog NumberI/O CountSerial/DMX Ports
410JNR-100-004B8 Inputs, 8 OutputsCOM Port (RS232), AUX Port (RS232 / RS485)
412JNR-200-004B4 Inputs, 12 OutputsCOM Port (RS232) , AUX Port (RS232)
414JNR-300-004B12 Inputs, 4 OutputsCOM Port (RS232) , AUX Port (RS232)
412DMXJNR-200-004D4 Inputs, 12 OutputsCOM Port (RS232), DMX 512 (5-pin XLR connector)
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: https://www.integpg.com/jnior-support-tool/. You can use the 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: http://www.integpg.com/support/jnior/. 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 192.168.1.10. A common mask would be 255.255.255.0. The command would then look as follows:
ipconfig -a 192.168.1.10 -m 255.255.255.0

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, Firefox, 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: http://10.0.0.146 or jr616010235

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

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

There are two tools to choose from when working with the JNIOR.

Why two tools?

The JNIOR Support Tool has been around for more than ten years. For much of that time, it has remained unchanged and has been a staple for configuring and maintaining the JNIORs. Within the past few years, we have seen more and more customers using non-Microsoft Windows computers and we wanted to offer a cross-platform alternative—that’s where the JNIOR Supporter comes in. We chose to develop the new cross-platform tool in JAVA. This requires you to have a Java Runtime Environment loaded.

Why not move to the new tool altogether?

The JNIOR Support Tool allows Cinema users to configure devices and macro files. There is A LOT of functionality that we are not ready to replicate. We wanted to get the tool released and not delay while the cinema functionality was being implemented.

Which one should I use?

If you are running a non-Windows environment then you will need to load the new Supporter. If you are looking to use the Cinema application then you will need to use the Support Tool. Beyond that, it is up to you. We try to ensure that they both have the same basic functionality.

The JNIOR Supporter has 3 different sections: Beacon, Update Projects/Snapshots, and Notifications/Progress Bars. This post will briefly go over each section and what its used for to help you get started.

Beacon

Beacon is the main section of the JNIOR Supporter. Here, all JNIORs that can communicate with your PC using a UDP protocol on port 4444 report to the Beacon tab. JNIORs that are displayed in the Beacon tab can be selected and right clicked to be interacted with. A drop-down menu appears when a JNIOR is right clicked, and different options for the JNIOR can be selected from the menu. The Beacon tab can be edited at the top of the JNIOR Supporter, under the Beacon Tab

Update Projects and Snapshots

A window on the right side of the JNIOR Supporter is for performing Update Projects and Snapshots. You can switch between Update Projects or Snapshots by selecting the corresponding tab. You can find where Update Projects or Snapshots are located on your PC by selecting the ‘Open Directory button. Opening or taking update projects and snapshots will display them in bottom of the JNIOR Supporter. These actions can also be performed at the top of the JNIOR Supporter, under the Update Project/Snapshot tabs.

Notifications and Progress Bars

The window at the bottom of the JNIOR Supporter is viewing messages that the JNIOR Supporter reports. The notifications tab is for reporting general issues or warnings the JNIOR Supporter is experiencing. The Update Project Progress and Snapshot Progress are for keeping track of Update Projects and Snapshots when they are being performed. 

When updating a Series 4 JNIOR from version 2.0 or older to a newer version, there is a rare chance you may lose access to the JNIOR Web Page. This is because the Web Page pathing was changed in JANOS 2.0 and sometimes doesn’t correct itself after updating. Below is an update project that you can publish to a JNIOR to potentially fix this issue. 

Name Version Release Date Size MD5
Web Page Pathing Fix Nov 01 2023 398.0 B 034746058ad41a7c44e3e6079c9cf8bd

If you are still having issues accessing your JNIOR’s webpage, please reach out to our support to get your setup working again.

When you boot up the JNIOR Support Tool, typically all the JNIORs on your network should appear in the Beacon tab. Sometimes though, you may be greeted with an empty Beacon tab even though you have JNIORs on your network. This may be your firewall blocking the Beacon protocol that allows JNIORs to be discovered in the Beacon tab. Here is how to allow the Beacon protocol through the Windows Defender Firewall.

NOTES: You may have third party firewalls setup on your computer blocking the Beacon protocol besides Windows Defender. Check these to make sure they aren’t blocking the Beacon protocol as well. Also, this walkthrough was done on Windows 10, and depending on your Operating System and Version, you may need to take different steps.

You’ll first need to open your Window Firewall Defender. Once its open, first you’ll need to select Inbound Rules, then right click it and select New Rule.

Once selected, the Inbound Rule Wizard dialog will open and you’ll select the following for creating the rule:

  • Rule Type will be Port
  • Protocol will be TCP, and the port will be 4444
  • Action will be to allow the connection
  • Leave defaults for the Profile
  • Enter any name and description for this new rule

Once all these steps are complete, you’ll hit finish and the rule should be created. You’ll then repeat this process for creating an Outbound Rule. Once an Inbound and Outbound Rule have been created for the Beacon Protocol, re-querying in the Beacon tab of the Support Tool should hopefully get your units to appear if they were being blocked by your firewall!

If JNIORs are not showing up in Beacon then your network could be blocking UDP broadcasts.  We recommend trying to use the Query Range feature or defining a JNIOR Listing as explained in the Beacon Overview article.

Another thing that may be happening is that the JNIORs and your PC are on different subnets and the router or switch between the subnets is not forwarding UDP traffic.

How…

How does Beacon work you ask?  Basically, Beacon works by “yelling” on the network “Hey, who is a JNIOR?”.  The JNIORs respond directly to the person by saying “Hi there, I am a JNIOR”.  This “yelling” and response is performed using a UDP packet.

Why a UDP Packet?

Beacon uses a UDP packet because it doesn’t require a connection to be established like TCP.  It also allows us to use the broadcast address.  This way all of the JNIORs can hear it at once.

The downside to using UDP

There isn’t necessarily a downside to using UDP but some networks block broadcasting.  The Support Tool implements 2 options since networks may block broadcasts.  You can query a range of IP Addresses or create a JNIOR listing.  Both of these methods go to each IP Address and basically ask “Are you a JNIOR?”

Query Range

This method allows you to specify a starting address, a factor, and a count. For example, your first JNIOR is at the address 10.0.0.11, your second is at 10.0.0.21, and so on. Each JNIOR has an IP Address with the last octet ending in 1. The dialog will automatically calculate how many units can be on the network with this scheme.

JNIOR Listing

The JNIOR Listing allows you to build a list of JNIORs and save it. You can save the list based on the location for instance. The list will be opened immediately and can be opened again later. The listing also allows you to define credentials for the JNIORs. This is helpful when the credentials on the JNIOR are changed from the default. We recommend securing your unit.

Connecting to JNIORs through their command line is a useful way to configure them. While there is a command line available in the JNIOR Web Pages, you can also open a command line connection to the JNIOR using the Support Tool. 

Opening the Command Line

There are two ways to open a JNIOR’s command line from the Support Tool. One way is by right-clicking a JNIOR in the Beacon tab and going to Tools->Open Telnet. The other way is by going up to the Tools tab and selecting the Command Line option there.

How to Open Telnet by going through the Tools tab
How to open the command line by right-clicking a JNIOR in Beacon

Once selected, the JNIOR Command Line should open in a separate window. Here you can establish a command-line connection two ways, either with a TCP or Serial connection. 

NOTE: If you’ve opened the command line by right-clicking a JNIOR in the Beacon tab, the command line will automatically create a TCP connection to the JNIOR you’ve selected on port 23. You’ll need to disconnect the command line first if you want to change the type of connection.

TCP Command Line

To open a TCP command line connection to the JNIOR, you’ll click Connect and select TCP/IP. A separate dialog will then open, requiring you to enter the IP, a port number, and if the connection should be secure or not. If a port number is not entered, port 23 will be used by default. Selecting secure will determine if the connection is encrypted or not. Once the connection information is entered, you should have a command line connection to the JNIOR.

Serial Command Line

To open a Serial command line connection to the JNIOR, you’ll to make sure you have a Serial cable connected between the JNIOR’s RS-232 COM serial port and your PC (You can use a Serial-to-USB cable for this). Once a serial cable connection has been made, you’ll click Connect and select Serial. If you correctly connected your JNIOR serially to your Computer, a COM option should be available. Selecting that and then hitting any key should prompt the boot dialog, and you should now have a command line connection to the JNIOR.

NOTE: You cannot make a Serial command line connection to the JNIOR if you have it’s boot dialog disabled. Here is how to enable/disable the RS-232 COM port boot dialog.

For information on what type of command line commands you can run, here is a post with command line examples.

What Battery does the JNIOR use?

In the 410, 412, and 414, the battery is a CR2032 coin cell battery.  The 412DMX battery is a CR1632 coin cell battery.  The battery in the Series 4 JNIORs is replaceable.  The battery in the Series 3 JNIORs was not replaceable.  The batteries have a life of around 6 or so years.  This can vary and is impacted most by the amount of time that the unit is without external power.

What does the Battery do for the JNIOR?

The battery is needed to maintain the SRAM and the clock.  The SRAM holds the root of the filesystem.  Most notably, log files.  Log files are useful for debugging an issue and can be frustrating if they keep getting reset.  The battery is only needed in the event that the JNIOR loses external power.

What happens when the Battery dies?

The unit will operate correctly in the event that the battery dies.  The issue with a dead battery is only noticed if the JNIOR loses external power.  If the battery dies and external power is lost then the RAM will be reset.  You will see the following message on the next boot.  “SRAM was reformatted on boot”.  The clock will also be reset to January 1, 1970 0:00 UTC.  The clock will be fixed if the JNIOR has access to a NTP server.

How do I know if the Battery is good or bad?

The battery voltage can be measured with a voltmeter.  The voltage of a good battery should be 2.7 volts or greater.

When trying to communicate with the JNIOR, one of the main ways to do so is using the JNIOR Protocol. With that said, you may want to try sending messages to the JNIOR protocol directory from an external device. Inside the JNIOR Support Tool is the Hex String Sender device, which shows you how to create JNIOR Protocol commands and test them.

On the top left of the JNIOR Support Tool under Tools->Advanced is where you can access the Hex String Sender Tool. This tool opens in a separate, smaller dialog box. When you select from one of the pre-defined commands available, and enter some additional information for the options of the command, the Hex String Sender generates how that command would need to be sent to the JNIOR Protocol in Hex to work. You can then use the generated Hex command to send from your other device to the JNIOR Protocol of a JNIOR to execute that command. 

At the bottom, you may enter the IP of a JNIOR to test if the commands being generated work with it. Once a command is selected and an IP is entered, clicking the test button will execute that command on the specified JNIOR. Using this, you should now be able to create and test JNIOR Protocol commands for JNIORs.

For example, you can set the duration of the output pulses.

When creating Macros to use with the Cinema application, you may want to test some of them out before creating them all. The Macro Name Sender is a tool within the JNIOR Support Tool that allows you to execute macros using a JNIOR Protocol connection. Below is how to find and use the Macro Name Sender Tool.

NOTE: In order to use the Macro Name Sender Tool, you need to create macros and publish them to a JNIOR first.

There are two ways to open the Macro Name Sender in the JNIOR Support Tool. You can either open the Macro Name Sender by opening the Tools tab at the top and selecting Macro Execution, or you can right click a JNIOR and select Tools->Macro Execution. Once done, the Macro Name Sender Tool should be open.

NOTE: If this was opened by right-clicking a JNIOR in Beacon, the Macro Name Sender will already be connected to the JNIOR

In order to use the Macro Name Sender, you first need to enter the information of the JNIOR you are trying to test macros on. Entering the JNIOR’s IP, Username, Password and then clicking Connect will establish the JNIOR Protocol connection to the JNIOR. Once connected, all you need to do is enter the name of the Macro at the top and click Send. If the Macro exists and has been published to the JNIOR, it should execute. Now you can easily test macros published to a JNIOR through the JNIOR Support Tool.

In rare instances, Series 4 JNIORs can become unresponsive. This can happen for example when a JNIOR is interrupted when their OS is being updated, or when the JNIOR has a network lockup. When this happens, their is an unconventional way to get the JNIOR working. Here are the steps to potentially get your Series 4 JNIOR operating again. This process requires you to physically have the JNIOR near you, along with a business card (or something similar and non-conductive) and a Phillip screw driver.

Take Off Lid of the JNIOR Case

To start, we need to remove power from the JNIOR, as we are going to open the JNIOR case. Once the JNIOR has no power, we need to remove the lid of the JNIOR case to access the JNIOR’s coin battery on its circuit board. There are 4 screws that keep the JNIOR lid on, and they can be removed with a Phillip’s screw driver. Once removed, the case’s lid should easy come off.

Find the Coin Battery

Once the lid is removed, you should see the coin battery at the top middle of the JNIOR’s circuit board. Notice there is a metal contact plate on top of the battery. The metal contact plate and the coin battery need physically interrupted from touching each other.

Separate Coin Battery from the JNIOR

Slip the business card between the coin battery and metal contact plate. This will disconnect the JNIOR’s RAM from the battery. Once the business card is in place, power up the JNIOR for 30 seconds, giving the JNIOR enough time to reset the RAM memory. After 30 seconds, remove power from the JNIOR again, remove the business card, re-attach lid to the JNIOR, and then power up the JNIOR again. Hopefully with this, the JNIOR should be working properly!

NOTE: If you don’t have a business card or something similar, you can also just remove the coin battery as well.

To re-iterate the steps taken:

  1. Power down the JNIOR
  2. Remove JNIOR’s case lid
  3. Locate coin battery
  4. Insert business card between coin battery and metal contact plate
  5. Power on JNIOR for 30 seconds
  6. Power down the JNIOR
  7. Remove business card
  8. Re-attach JNIOR’s case lid
  9. Power on the JNIOR

On every JNIOR is JANOS (JNIOR Automation Network Operating System). This is installed when the JNIOR is being made. Overtime, the operating system gets older, while here at INTEG we are always creating newer versions that improve upon the last. With each release we typically fix bugs and add functionality. To avoid running into issues with older JANOS OS versions, we typically tell customers to stay up-to-date with each JNIOR’s JANOS OS version. Below is how you update your JNIOR with the latest OS.

Below are the downloads for the JNIOR Support Tool, and two separate Update Projects that will install the latest JANOS OS version on your JNIOR. The Support Tool is needed in order to update a JNIOR with an update project. As for the update projects, there is the All-in-one Update Project and the Core Update Project. The All-in-one Update Project updates the JANOS OS, but it also updates a few applications that come bundled with the All-in-one Update Project such as, Modbus, Serial Control, Serial-to-Etherent, SNMP, and Slaving. The Core Update Project just updates the JANOS OS. Both will work for updating the JNIOR’s OS, so choose one that you’ll use to update the JNIOR.

Name Version Release Date Size MD5
JNIOR Support Tool v7.15 Nov 20 2023 10.4 MB 7f91fafc366fae2c7a38a670d584d2bd
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

After installing the JNIOR Support Tool application and downloading one of the Update Projects, you’ll want to open the Support Tool and click on the Update Tab. Once there, the first thing you’ll want to do is select the Open Project button, and select the Update Project you downloaded. When you open one of the Update Projects in the Support Tool you will see something similar to the following:

Click Publish and select the JNIOR you want to update. Once the update is complete the JNIOR will have rebooted and the JANOS OS should be up to date. 

One of the features of the Support Tool is being able to use it to update JNIORs with software. This is done with update projects, which load files and configuration settings onto the JNIOR in a step-by-step order. This post will go over how to Open, Create/Edit, Close, and Publish/Cancel update projects to the JNIOR.  

Opening an Update Project

In order to update your JNIOR with an update project, you first need to have an update project downloaded to use. For this example, we’ll use the JNIOR Core update project, which will update your JNIOR with the latest JANOS OS available onto your JNIOR. Here is a download for the update project. NOTE: Update Projects are zip files, do not unzip it once its downloaded. 

Name Version Release Date Size MD5
Core JANOS Update Project v2.4.1 Sep 05 2023 1.3 MB 921c9867931b4f36234527e597b14d46

Once you have downloaded this update project, we then need to open it in the Support Tool. You do this by clicking the Open Project button in the Update tab of the Support Tool. This will open your computers file explorer, and you’ll navigate to the update project that you just downloaded. Select it and hit open in the file explorer, and you should now see the update project and its steps displayed in the JNIOR Support Tool Update tab. This means you’ve successfully opened an update project.

Creating/Editing an Update Project

While our website has tons of update projects for different applications already made, you may want to create your own or edit one that already exists. To create a new update project, go to the Update tab of the support tool and select Edit Project Configuration while no update project is open in the Update tab. Once selected, you’ll now see a new window open for editing/creating projects. To create a new project, you have to give it a name in the Title field before you can begin adding steps. Once a title is given, you can steps using the Add Step button at the bottom left. Steps in an update project are executed from top to bottom. Selecting a step and clicking the UP or DN buttons shifts that step up or down in the execution order. When you are done, you can select the Package button to generate your update project.

To edit an existing update project, you open it in the Support Tool, and then select the Edit Project Configuration button. Once selected, you’ll now the new window open for editing/creating projects, but this time with all the steps that are currently inside the opened update project.

Update Project Steps

Update Projects can perform a multitude of actions on a JNIOR. The following are the available steps that can be added for an update project:

  • Registry Key
  • Update Registry
  • Delete File
  • Make Remote Directory
  • Reboot
  • Load Application
  • Transfer File
  • Clean Up
  • Preserve Files
  • Restore Files
  • Telnet Command
  • Transfer Zip
  • Update Series 3 OS
  • Update Series 4 OS

Publishing an Update Project

Once an update project has been opened or created, it can now be loaded on to a JNIOR by publishing it. While the update project is open in the support tool, you’ll click on the Publish button. This will open a new dialog box to select which JNIORs you want to apply your update project to. You can select as many JNIORs as are available in the Beacon tab to publish to. The update project will publish to whichever JNIOR’s you select the checkbox next to. Once you have selected the JNIORs you want to publish to, hit OK. You’ll then see the Support Tool begin to follow the steps inside the update project for each JNIOR selected.

Cancelling an Update Project

While an update project is being published to, you can cancel it if needed. While an update project is publishing, select the Cancel button to stop the update project from being applied to JNIORs.

When interacting with the JNIOR, the easiest way to see which ones are on your network and access them is through the Beacon tab of the JNIOR Support Tool. The Beacon tab shows all the JNIORs on the network that respond to the Beacon protocol, which is a UDP message sent on port 4444. When JNIORs report back to Beacon, they provide useful information about themselves in the Beacon tab such as their Serial Number, Hostname, IP Address, OS Version and more.

Each column of data presented in the Beacon tab can be sorted, alternating from ascending and descending, by clicking on the column header.

JNIOR Dropdown Options

Right clicking a JNIOR in the Beacon tab opens a dropdown menu that allows you to access or configure  JNIORs in many ways. Below are all the options in the dropdown menu:

Query

  • Identify – causes the amber LED to rapidly flash for 5 seconds on the JNIOR.
  • Query – sends a Beacon request to the selected JNIOR .
  • Query All – sends a request to all JNIORs on the network and those that have Beacon enabled will respond.
  • Query New – sends a request to all JNIORs on the network and only those that have Beacon enabled and set as ‘new’ (default setting) will respond.
  • Query Range – define a range of IP Addresses to directly send a beacon request to. Similar to the JNIOR list, but doesn’t save the IP Addresses as a file for future requests.
  • Auto Query – allows you to set an automatic sending of a Query All or Query New at a user defined time period
  • Send Query To… – opens a new dialog, and sends a Beacon request to the JNIOR with the IP you define in the dialog.

Configure

  • Identify – causes the amber LED to rapidly flash for 5 seconds on the JNIOR.
  • Set Hostname – allows you to enter the hostname for the JNIOR and will be displayed in the Beacon window.
  • IP Configuration – allows you to configure the IP address of the selected JNIOR and set its Time zone.
  • Registry Editor – opens the Registry Editor tab in the support tool.
  • Reset Attention Flag – clears the message field for a JNIOR in Beacon if it is caused by a flag.

Tools

  • Open Web Page – opens the JNIOR Web Page for the selected JNIOR.
  • Open Telnet – launches a window that allows you to make a command line connection to the JNIOR using a TCP or Serial connection. Here is a link to different telnet commands a JNIOR can be given.
  • Open FTP – Opens the file explorer for a JNIOR, allowing you to access files on it like you would on your PC.
  • Open Classic Monitor, Configure, Control Application – Opens the Java applet for the selected JNIOR (This opens the Java Applet Configuration Page, and is only available for Series 3 JNIORs. Use the JNIOR Web Pages to configure Series 4 JNIORs.)
  • Open Task Manager Application – opens the Task Manager application for the selected JNIOR.
  • Macro Execution – Opens the Macro Executor and enters the selected JNIORs IP into it. Allows you to test macros you created for the JNIOR.
  • Show JniorSysLog – displays the JNIOR’s system log.
  • Set Time – sets the current time for the JNIOR.

JNIOR List

NOTE: The JNIOR List is an unfinished feature, designed to target an IP Address with the Beacon Protocol, rather then it typically broadcasting it to the entire network.

  • Create New – Create a file that contains the IP Addresses of JNIORs you wish to target with the Beacon Protocol.
  • Open – Open an already created JNIOR List file.
  • Edit – Edit an existing JNIOR List file.
  • Close – Close an already open JNIOR List file.
  • Preview – View an already created JNIOR List File.

Reboot

This will reboot the selected unit. After a few seconds, the JNIOR will drop out of Beacon as it will briefly turn off. Once it reboots, it will respond to the Beacon Protocol and return to the Beacon tab.

JNIOR Support Tool Footer

Some useful information is displayed at the bottom of the Beacon Tab. On the left is the JNIOR count, showing the total amount of connected JNIORs and their model types. On the right is the currently opened JNIOR list. This can be useful to quickly check if all your units are connected on the network or not.