When using Node.js the easiest way to install everything is by installing the package from the PLCNext Store. From then on you can install all needed dependencies with the use of npm (Node Package Manager).
However, in some cases you won’t be able to connect the PLC to the store in order to get the software you wish to install. In what follows you will learn how to install Node.js, Node-RED and PM2 offline. Once installed you will be able to run locally installed packages on the controller.
All preparations that are needed in order to prepare all packages for offline installation are carried out on a Linux host.
Preparations on the Host computer with connection to the internet
At the time of writing, the latest stable Node.js version was 10.16.3. If you want to check the latest release of Node.js, you can just visit the main page of Node.js (https://nodejs.org/en/). Once you know the release you want to install, execute following command (adapt your release version):
In contrary to Node.js, PM2 can’t be downloaded as a tar.gz. In order to install it we need to download its npm package and make a tarball ourselves. To do this, make sure you have Node.js and NPM installed on your host system.
To start off, execute the following command:
npm install –g npm-bundle
This installs the package “npm-bundle” globaly. The “npm-bundle” package will allow us to create a tarball from PM2 and all its dependencies once we have downloaded it.
When the package has been globally installed we need to download PM2 in a local folder. Do this be executing these commands:
npm install pm2
After installation of PM2 on our created folder, we will pack everything:
The created tarball can be found in your PM2 folder.
Installation on target system (axcf2152)
Before login in on the target, we must copy the 2 created tarballs.
You can copy these easily using scp as shown below. There is a possibility that you must change the locations of the 2 files in the command, depending on in which locations you executed the npm-bundle and curl commands.
scp pm2-3.5.1.tgz email@example.com:/opt/plcnext
scp node-v10.16.3-linux-armv7l.tar.gz firstname.lastname@example.org:/opt/plcnext
Once copied, login to the target using ssh
Change to root user (if not yet present on controller, create by executing “sudo passwd root”) and unpack the 2 files to the /opt folder
tar xpf ./node-v10.16.3-linux-armv7l.tar.gz -C /opt
tar xpf ./pm2-3.5.1.tgz -c /opt
the PM2 package was extracted in a folder named package. In order to change its name go to the /opt folder and use the mv command:
mv package pm2
now that everything is installed, you can remove the 2 tarballs:
The last step is adding the new bin locations so that the PM2, npm and node commands are known system wide:
cat <<EOF > "/etc/profile.d/node.sh"
After executing the command below:
or after a relogin to the target, you should be able to use the npm, node and pm2 command. You can test them be getting their version:
result: [PM2] Spawning PM2 daemon with pm2_home=/home/root/.pm2
[PM2] PM2 Successfully daemonized
Installing a Node project
To show you how you can setup a Node.js project environment on the controller without internet connection we are going to make an example project containing the node-red package with some other modules.
On the host computer
Make a directory in which you will install all needed modules:
Now install the needed modules locally. As example I will download node-red and the node-red-contrib-iiot-opcua module:
npm install node-red
npm install node-red-contrib-iiot-opcua
Transfer your folder to the /opt/plcnext folder on the target:
scp –r nodeProj email@example.com:/opt/plcnext
From as soon the transfer is done, log back in to the target:
pm2 start /opt/plcnext/nodeProj/node_modules/node-red/red.js
If you want to start your project at startup then execute these commands as well:
If you now go to the ip-address of your PLC followed by the port 1880, you should see the Node-RED environment with the opcua library in it!
Have fun tinkering!