SIMATIC IOT2000 Setup Guide: Node-RED, Eclipse, and OPC UA

David Krause15 min read
Industrial NetworkingSiemensTechnical Reference
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

SIMATIC IOT2000 Hardware Platform Overview

The SIMATIC IOT2000 is Siemens' industrial IoT gateway family. Two variants are referenced in field-tested deployment notes: the IOT2020 and the IOT2040. The IOT2040 is the most-cited device in setup guides and supports a 24 V DC supply, multiple Ethernet ports, USB 2.0 host ports, an RS232/422/485 combination port, a mini-PCIe slot, and a µSD slot that holds the Yocto-based Linux operating-system image. The gateway typically draws 5-11 W depending on the expansion hardware attached. For exact electrical ratings, port counts, CPU, memory, and dimensional drawings, refer to the SIMATIC IOT2000 support entry and the official operating instructions bundled with the device.

The SIMATIC IOT2000 I/O module is a separate add-on that mounts to the gateway and exposes digital and analog channels to the application layer. Both the gateway and the I/O module are available through the Siemens Industry Mall; the I/O module has its own dedicated manual covering wiring, channel count, and electrical limits.

Variant Role in deployments Form factor
IOT2020 Entry-level gateway Compact DIN-rail mount
IOT2040 Standard gateway referenced in most field guides DIN-rail mount with mini-PCIe expansion
Note: Always verify the exact SKU and electrical ratings of your specific IOT2000 variant and I/O module against the official Siemens manual before designing wiring. The IOT2000 family is also succeeded by the SIMATIC IOT2050; check the current Siemens product selector for cross-references.

Image Deployment, Network, and Wireless Configuration

The example image is delivered as a disk image. Use a µSD card of at least 8 GB (Class 10 or better, brand-name). Write the image with Win32DiskImager on Windows, with dd bs=4M if=iot2000-image-v2.6.wic of=/dev/sdX status=progress conv=fsync on Linux, or with balenaEtcher cross-platform.

Insert the µSD, apply 24 V DC, and wait about 60 s for the first boot. The IOT2000 example image runs a DHCP server on its first Ethernet port (X1), so a direct patch-cable connection from a PC works without a separate switch. A static fallback address of 192.168.200.1 is also configured on the device.

For console access use PuTTY via the FTDI cable (debug serial) or via SSH over Ethernet. For file transfer use WinSCP (SFTP). The default user is root. Set the host password and SSH configuration at first boot before attaching the device to a production network. The FTDI cable driver and the µUSB serial driver are bundled in the Siemens software pack.

Wired Ethernet. Configure by editing /etc/network/interfaces or by NetworkManager depending on the image revision. Example static address stanza:

auto eth0
iface eth0 inet static
    address 192.168.0.50
    netmask 255.255.255.0
    gateway 192.168.0.1
    dns-nameservers 8.8.8.8 1.1.1.1

Restart with systemctl restart networking. Validate with ip addr show and ping -c 4 192.168.0.1.

USB WiFi. Sticks based on the Realtek RTL8188 and Atheros AR9271 chipsets are field-tested for the IOT. After plugging in, confirm the interface with iwconfig wlan0 and register an SSID:

wpa_passphrase "SSID" "PASSWORD" > /etc/wpa_supplicant.conf
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf

Add iface wlan0 inet dhcp to /etc/network/interfaces for automatic addressing on the wireless link.

3G mobile radio. A mini-PCIe modem (e.g. Sierra Wireless MC7304 or Huawei ME909s) and the ppp daemon are used. The Siemens "3G connection" how-to covers AT-port initialization, APN definition, and a watchdog that re-establishes the PPP link on failure. Tested modems and WiFi sticks are listed in the starter pack "tested WIFI and mobile radio devices" reference.

For real-time I/O, the Siemens "Realtime Image and Profinet Driver" guide documents a kernel-level Profinet stack that pairs the IOT2040 with a Profinet controller.

Node-RED Programming Environment

Node-RED is a browser-driven flow editor that ships preinstalled on the IOT2000 example image. On image v2.6 the stack is:

Component Version on image v2.6
Node.js 8.16.0
Node-RED 0.20.7

The editor listens on TCP 1880. Browse to http://<iot-ip>:1880. The user flow store is at /home/root/.node-red/. Manual foreground start:

node-red-pi --max-old-space-size=256

Enable autostart on boot:

systemctl enable node-red.service
systemctl start node-red.service

To wipe all flows while keeping installed nodes, delete /home/root/.node-red/flows_iot2000.json and restart the service; a fresh empty flow is generated on next start.

Custom third-party nodes install with npm install <node-name> --unsafe-perm from inside /home/root/.node-red/ followed by a service restart. Siemens-supplied nodes include S7, OPC UA, MindConnect (MindSphere), the IOT I/O module, an NTP Client, and other domain-specific bindings. Node-RED can be upgraded to v1.0.3 on image v2.6 while remaining on Node.js v8; check the official Node-RED supported Node.js list before jumping to newer versions.

EOL warning: Node.js 8.x reached End-of-Life on 31 December 2019. The Node-RED v0.20.7 binaries shipped with image v2.6 will continue to load and run, but Node.js security patches and runtime fixes are no longer delivered. For new deployments use the latest Siemens IOT image and confirm the bundled Node.js LTS version. "EOL" in this context means Node.js 8 is no longer maintained with bugfixes and security patches; the preinstalled Node-RED will continue to operate, but errors may appear when updating Node-RED itself or specific nodes to versions that require newer Node.js.

OPC UA Server and Client Integration

The IOT2000 can act as an OPC UA client (consuming tags from a SIMATIC S7 controller) or an OPC UA server (exposing its own address space to SCADA). The recommended path is the Siemens-supplied node-red-contrib-iiot-opcua package, which is built on the open-source node-opcua library. The starter pack ships an "OPC UA client in Node-RED" example for reading controller tags and a "Creating an OPC UA server model via Nodeset XML" guide for building a server address space from an XML model file.

Client connection to a SIMATIC S7-1500 OPC UA server:

  1. Enable the OPC UA server in TIA Portal under the CPU properties. Default port 4840. Security policy None for lab, Basic128Rsa15 or Basic256Sha256 for production.
  2. Drop an OPC UA Client node into a Node-RED flow. Configure Endpoint URL as opc.tcp://<s7-ip>:4840 with the matching security mode and policy.
  3. Use OPC UA Item nodes to bind to specific NodeIds, e.g. ns=4;s=|var|CPU_1500.PLC_1.DB1.Real4.

To expose the IOT as a server, drop an OPC UA Server node and define the address space using OPC UA Variable nodes. For larger address spaces, the Nodeset XML method is the production-recommended approach because the entire address space is described once in XML and loaded at startup, avoiding hand-mapping dozens of variables inside Node-RED.

Security policies and message-level security are described in IEC 62541; consult that standard when commissioning certificates, user tokens, and audit logging for production cells.

PLC Communication: S7 and MicroLogix

For direct S7 communication without an OPC UA wrapper, the starter pack documents the node-red-contrib-s7 package built on the node-snap7 C binding.

Field Value
Host IP of S7 CPU
Port 102 (ISO-on-TCP)
Rack 0 (S7-1200/1500)
Slot 1 (S7-1200/1500)
Connection type PG/OP or S7 basic communication

Typical DB read/write examples used in production nodes:

// Read 4 bytes from DB1 starting at offset 0
node.send({payload: await snap7.read(DB, 1, 0, 4)});
// Write a REAL (1.0f) to DB1.DBD4
await snap7.write(DB, 1, 4, Buffer.from([0x00, 0x00, 0x80, 0x3F]));

For S7-1200/1500 controllers, enable PUT/GET in TIA Portal under the CPU protection settings and grant access to the relevant DBs; otherwise the S7 node times out with an 0x0310 "function not available" error. For S7-300/400, the rack/slot must match the physical hardware position (rack 0, slot 2 for an S7-300 CPU). The field-tested setup note confirms successful communication between an IOT2040 and a SIMATIC S7-1200 programmed through TIA Portal.

For Allen-Bradley MicroLogix controllers through RSLogix 500, the IOT2040 acts as a CIP/Ethernet-IP client. The starter pack documents a flow that uses an Ethernet-IP client node, the controller's Ethernet port (default IP 192.168.1.x/24), and a CIP path of 1,0,<slot>. The IOT must be on the same subnet as the MicroLogix. Field notes confirm that the IOT2040 will communicate with both a SIMATIC S7-1200 and an Allen-Bradley MicroLogix simultaneously using these node packages.

Application Development: Arduino, Eclipse, and Add-Ons

Arduino sketch development. Image v2.6 supports the Arduino IDE targeting the IOT2000's x86 board. Procedure:

  1. Install the Arduino IDE on a host PC and connect the PC and IOT to the same network.
  2. Add the IOT2000 board-support URL under File > Preferences > Additional Board Manager URLs: https://raw.githubusercontent.com/siemens/iot2000-arduinoide-package/master/package_iot2000_index.json
  3. Open Tools > Board > Boards Manager, search for SIMATIC IOT2000, and install the package.
  4. Select SIMATIC IOT2000 as the target board, choose the network port under Tools > Port > Network ports, and set the IOT's IP.
  5. Compile and upload the sketch. The IDE transfers the ELF over Ethernet to the arduino-sketch-daemon on the IOT, which runs the binary on the next boot.

Verify the daemon is running with systemctl status arduino-sketch-daemon. The µUSB-to-USB cable is required to use the Arduino IDE.

Eclipse C/C++ development. For native C/C++ with full Yocto toolchain integration:

  1. Install Eclipse IDE for C/C++ Developers and the Siemens IOT2000 Eclipse plugin from the Siemens support page.
  2. Drop the plugin into Eclipse' dropins/ folder and restart.
  3. Create a new Siemens IOT2000 C/C++ Project. The plugin generates a Yocto cross-compilation environment, a remote target definition, and a remote launch configuration.
  4. Build with Ctrl-B. Eclipse invokes the Siemens Yocto SDK toolchain and produces a binary that runs on the IOT.
  5. Use the Remote System Explorer view to deploy the binary to /home/root/<appname> and run it via SSH.

For projects that do not require the Siemens-specific plugin, a generic Eclipse project can be set up with a manually configured cross-compiler path. Shared libraries for the IOT can be built and distributed with the "How to create shared libraries" guide: install the .so into /usr/lib/ on the target, run ldconfig, and add -l<libname> to the compiler flags.

Community Arduino libraries. Community-supplied libraries extend the IOT2000 into common panel-HMI and instrumentation roles:

Library Peripheral Bus
USER LED Onboard status LED GPIO
Rotary encoder Mechanical encoder GPIO
HD44780 Character LCD Parallel GPIO
HD44780 via PCF8574 Character LCD I2C
LCD4884 Nokia graphic display SPI
MAX7219 7-segment / 8x8 LED matrix SPI

Each library ships with a sample sketch in the Siemens starter pack and can be dropped into the Arduino IDE once the IOT2000 board package is installed. The "How to create own node" guide covers packaging a custom Node-RED node for distribution through npm.

Database Integration: MariaDB and SQL Server

Image v2.6 ships with MariaDB by default. Field deployment has shown MariaDB is the more reliable choice for low-memory single-board gateways. The SQL Server ODBC driver is heavier for the gateway's CPU and is only recommended when a corporate SQL Server instance is the mandated destination.

Install MariaDB on a clean image:

opkg update
opkg install mariadb-server
/etc/init.d/mariadb start
mysql_secure_installation

Create a database and a user:

CREATE DATABASE plantdata;
CREATE USER 'iot'@'localhost' IDENTIFIED BY 'changeme';
GRANT ALL ON plantdata.* TO 'iot'@'localhost';
FLUSH PRIVILEGES;

From Node-RED use the node-red-node-mysql node with a connection string of mysql://iot:[email protected]:3306/plantdata. For SQL Server, install the Microsoft ODBC driver and follow the Siemens "SQL server connection" guide. Connection-string example:

Driver={ODBC Driver 17 for SQL Server};Server=tcp:sql.corp.local,1433;Database=plantdata;Uid=iot;Pwd=***;

Time-series data from the IOT should be inserted via parameterised queries rather than string-concatenated SQL to avoid injection. The starter pack shows a common pattern of buffering flow output to an in-memory queue and flushing to MariaDB in batches of 100-500 rows to avoid SD-card wear on the µSD.

SIMATIC IOT2000 I/O Module

The SIMATIC IOT2000 I/O module is a separate add-on that mounts on the side of the gateway and exposes digital and analog channels. Channel count, electrical ratings, and pinout are documented in the SIMATIC IOT2000 I/O module manual. Refer to the official Siemens manual for the exact channel layout before wiring; the I/O module's IEC 61131-2 type-1 digital input characteristics and short-circuit-protected outputs are defined by that standard.

Under Node-RED the I/O module is exposed by the node-red-contrib-iot2000-io package, which provides input and output nodes for each channel. Under Arduino the module is exposed as digital and analog pin numbers (DI, DO, AI, AO) in the Arduino abstraction. Under Eclipse the module registers as a character device at /dev/iot2000-io; the "How to program SIMATIC IOT2000 I/O module" guide covers ioctl commands for raw access. The "SIMATIC IOT2000 I/O module" how-to in the starter pack covers hardware installation and software binding.

The I/O module makes the IOT2000 deployable as a stand-alone controller, eliminating the need for a separate PLC when the application is small (a few DI/DO and one or two AI/AO points) and the deterministic cycle time of a PLC is not required. For applications needing guaranteed cycle time, use the SIMATIC S7-1200/1500 with the IOT2000 as a north-bound gateway.

Cloud Connectivity

Beyond local PLCs, the IOT2000 is often deployed as a north-bound gateway to a cloud platform. Common patterns documented in the starter pack:

  • IBM Bluemix / IBM Cloud. Historical reference; Bluemix reached end-of-marketing. The Predictive Maintenance example using Node-RED flows and Watson IoT can be migrated to IBM Watson IoT Platform on IBM Cloud or replaced by AWS IoT Core.
  • MindSphere. Siemens' own cloud. Use the MindConnect Lib for MindSphere access; data is published through the node-red-contrib-mindconnect nodes.
  • Google Sheets. The "Sending data to Google spreadsheet" example uses a Google Apps Script webhook and a simple HTTP request node in Node-RED. Useful for low-rate telemetry and ad-hoc dashboards.
  • cloudmqtt. Broker-based MQTT. The "Connect node-red to cloudmqtt" guide walks through TLS client-cert authentication against a managed MQTT broker.
  • LoRaWAN. The LORA communication guide uses an attached LoRa modem (e.g. a Microchip RN2483 on a serial port) to push IOT-side data into a private LoRaWAN network.

For bidirectional control, prefer MQTT over request-response HTTP because the broker manages session state, last-will, and offline buffering. For one-way telemetry to a spreadsheet, HTTP webhooks are sufficient.

Security Hardening and Mass Deployment

Default IOT2000 images are not production-ready from a security standpoint. Apply the following before commissioning:

  1. Change the root password and create a dedicated iotadmin user for daily operations.
  2. Disable root SSH login by setting PermitRootLogin no in /etc/ssh/sshd_config and restarting sshd.
  3. Replace the default self-signed certificate with a CA-signed certificate for the Node-RED editor. Bind the editor to TLS on port 1880 with a reverse proxy, or use the --https option of Node-RED with a private key and certificate file.
  4. Configure a host firewall with iptables or nftables to allow only the IOT management VLAN, the S7 PLC subnet, and an outbound cloud endpoint.
  5. Follow the "Tips on how to make the IOT2000 secure" procedure in the starter pack, including the systemd watchdog.
  6. Lock the filesystem. The read-only overlayfs configuration in image v2.6 means system changes are not persisted across reboot unless /var/lib/overlay is committed. Document which files are persisted and verify after each firmware update.

For fleets of IOT devices, the starter pack documents deployment through resin.io / balenaCloud. The flow is: build a Docker image containing the application and Node-RED flows on a CI host, push to balenaCloud, provision each IOT with a balenaOS image (a balena-forked Yocto build) so the device pulls its image and runs it as a container on first boot, and manage updates and remote shell from the balenaCloud dashboard. For on-prem mass deployment, use the "Readme building an own IOT2000 image" guide to bake a custom Yocto image and deploy the resulting .wic file with a USB SD-card duplicator.

To add programs to autostart, drop a systemd unit into /etc/systemd/system/, then run systemctl daemon-reload and systemctl enable <unit>. Verify boot-time start order with systemd-analyze blame.

Troubleshooting Matrix

Symptom Likely cause Resolution
Node-RED editor returns 502 on http://<ip>:1880 Service not running systemctl status node-red, systemctl restart node-red, and check journalctl -u node-red -n 200 for stack traces.
S7 connection times out with 0x0310 PUT/GET disabled on S7-1200/1500 In TIA Portal enable "Permit access with PUT/GET communication from remote partner".
OPC UA client cannot connect (ECONNREFUSED) Server disabled or wrong port Confirm port 4840 is open on the controller and that the OPC UA server is activated in TIA Portal.
Node-RED upgrade fails on node v8.x Node.js 8 EOL - newer Node-RED versions require Node 12+ Stay on a Node-RED version compatible with Node 8, or rebuild the image against a newer Yocto branch.
WiFi stick not detected Unsupported chipset Check the Siemens "tested WIFI and mobile radio devices" list; swap for a verified RTL8188/AR9271-based stick.
Arduino sketch upload fails over Ethernet arduino-sketch-daemon not running Run systemctl enable --now arduino-sketch-daemon and verify the sketch port is open in the host firewall.
OPC UA variable reads zero Wrong NodeId namespace Verify the NodeId via the OPC UA client's browse tree rather than from TIA Portal text.
IOT loses time on reboot No RTC backup / NTP not configured Install the NTP Client node or run ntpd -qg on boot. Confirm network reachability of the NTP server.
SQL Server connection refused TLS not negotiated or driver missing Install the Microsoft ODBC driver on the IOT, add the appropriate Encrypt= and certificate parameters to the connection string, and import the CA into the IOT trust store.
Filesystem changes lost on reboot overlayfs not committed Use the documented overlay commit procedure from "Readme building an own IOT2000 image" to persist changes.

FAQ

What version of Node-RED and Node.js ship with image v2.6 of the SIMATIC IOT2000?

Image v2.6 ships Node-RED v0.20.7 on Node.js v8.16.0. Node.js 8 reached End-of-Life on 31 December 2019, so the preinstalled stack will continue to run but no longer receives security patches or bugfixes. You can upgrade Node-RED to v1.0.3 while staying on Node.js v8.

Can the IOT2000 communicate directly with a SIMATIC S7-1200 or S7-1500 without an OPC UA wrapper?

Yes. Use the node-snap7-based S7 nodes from Node-RED, connecting on TCP port 102 with rack 0, slot 1 for S7-1200/1500. PUT/GET must be enabled in TIA Portal under the CPU protection settings; otherwise the read returns 0x0310 "function not available".

What database does Siemens recommend on the IOT2000?

MariaDB is the default and recommended engine on the IOT2000. The SQL Server ODBC driver is supported but is heavy for the gateway CPU and is only recommended when a corporate SQL Server instance is the mandated destination.

How is the Arduino sketch uploaded to the IOT2000?

After adding the Siemens board-support URL to the Arduino IDE, select SIMATIC IOT2000 as the board, set the network port to the IOT's IP, and click Upload. The IDE transfers the ELF over Ethernet to the arduino-sketch-daemon running on the device.

Which wireless sticks are field-tested for the IOT2000?

USB WiFi sticks based on the Realtek RTL8188 and Atheros AR9271 chipsets, and mini-PCIe 3G modems such as the Sierra Wireless MC7304 and Huawei ME909s. The Siemens "tested WIFI and mobile radio devices" list is the authoritative reference for production deployment.

Can the IOT2000 also talk to an Allen-Bradley MicroLogix?

Yes. The starter pack documents a flow that uses Ethernet-IP / CIP to read and write tags on a MicroLogix through RSLogix 500, with a CIP path of 1,0,<slot> and the IOT on the same 192.168.1.x/24 subnet as the controller.

Back to blog