Resolving Node-RED Firebase Errors on Siemens IOT2000 IOT2020

David Krause9 min read
Industrial NetworkingSiemensTroubleshooting
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 Series Hardware Reference

The SIMATIC IOT2000 family comprises two industrial IoT gateways built on Intel Quark (x86) SoC architecture and shipped with a custom Yocto-based Linux image. Both SKUs share the same Arduino Uno R3-compatible shield interface, a single 10/100 Mbit Ethernet port, two USB 2.0 host ports, and a 24 V DC power input.

Parameter IOT2020 IOT2040
CPU Intel Quark x1020D, 400 MHz, single core Intel Quark x1020D, 400 MHz, single core
RAM 512 MB DDR3 1 GB DDR3
Internal Flash microSD card only 8 GB eMMC + microSD
Arduino Shield Pins Yes (3.3 V tolerant via level shifter) Yes
Ethernet 1x RJ45 10/100 1x RJ45 10/100
USB 2x USB 2.0 Type-A 2x USB 2.0 Type-A
Serial Console 1x RS232/RS485 via Arduino 1x RS232/485 + 1x RS232 dedicated
Operating Temp 0 to 50 °C -20 to +60 °C
Typical Use Prototype / education / lab Industrial / cabinet mount
Article Number 6ES7647-0AA00-0YA2 6ES7647-0AA00-1YA2
The IOT2020 lacks eMMC and is therefore not designed for permanent industrial deployment. For 24/7 field installations use the IOT2040 or migrate to the IOT2050 platform (6ES7647-0BA00-0YA2 / 0BA01-0YA2) which is the recommended successor as of the 2021 product phase-out announcement for IOT2000.

Firmware V2.1.3 Image and Bundled Software Stack

Firmware V2.1.3 is one of the last released example images for the IOT2000 series and ships the following software versions out of the box:

Component Version (V2.1.3 Image) Notes
Kernel Linux 4.4.13-yocto-standard Yocto Poky 2.1.3 (Krogoth branch)
Node.js v4.6.2 (LTS) Hard requirement for the bundled Node-RED
Node-RED 0.15.2 Listens on TCP 1880 (default)
node-red-contrib-firebase 1.1.1 Installable via Palette Manager
node-red-dashboard 2.4.0 UI on /ui path
WiFi support connman + wpa_supplicant Only with compatible USB dongle
OPC UA server Prosys SDK demo Optional PLC connectivity
S7 node node-red-contrib-s7 1.0.0 Talk to S7-1200 / S7-1500 PLCs

The image is delivered as a writable .wic file (~250 MB) and must be flashed to the microSD card (IOT2020) or to the microSD / eMMC (IOT2040) using tools such as Win32DiskImager, balenaEtcher, or dd on Linux. Siemens provides the image and SHA-256 checksums via the SIMATIC IOT2000 example image support entry.

Problem Description: Firebase Nodes Will Not Initialise

Symptoms reported on firmware V2.1.3 with the example image installed unmodified:

  • The node-red-contrib-firebase node throws an authentication or connection error on the first deploy.
  • Node-RED logs a red exclamation mark in the Editor at the firebase (config) node.
  • Edison/console output contains lines similar to:
    Firebase: FirebaseAuthError: There is no user record corresponding to this identifier.
    or
    ECONNREFUSED 127.0.0.1:9000
  • The IOT2000 can reach the internet for npm install (palettete installation succeeds), but data exchanges terminate after 5-10 s.

These symptoms almost always fall into one of three categories: a local TCP/IP conflict, a misconfigured firebase database URL/secret, or a firewall/NAT issue on the upstream router. The first category is the most common on the IOT2000 because the device ships with a default address of 192.168.200.1 on the Ethernet interface - identical to the default subnet of many consumer SOHO routers (D-Link, TP-Link, certain Fritz!Box models, OpenWrt defaults).

Root Cause: IP Address Collision on 192.168.200.1

When the IOT2020 or IOT2040 is connected via Ethernet to a router that also uses 192.168.200.1/24 as its LAN prefix, the gateway (the router) and the IOT2000 appear at the same IPv4 address on the wire. The IOT2000's connman service binds the address, but routing becomes ambiguous: TCP SYN packets from the IOT2000 are returned to whichever device last sent an ARP reply for the address, which in practice is the router itself. The result is that:

  1. The IOT2000 can no longer reach DNS (UDP 53) because DNS is offered by the router at 192.168.200.1, which the IOT2000 believes is itself.
  2. Outbound TLS handshakes to *.firebaseio.com hang or fail, which surfaces as ETIMEDOUT in the firebase node.
  3. When a USB WiFi NIC is also installed, the host's WLAN is also degraded because the IOT2000 begins responding to ARPs on the wired side and confuses the PC's IP stack - this matches the reported "I lose WiFi on my laptop when I connect the IOT2000" symptom.
The default IPv4 of the SIMATIC IOT2000 Ethernet port is hard-coded in the connman profile /var/lib/connman/ethernet_001122334455_cable/settings as 192.168.200.1/24. The address is chosen by Siemens to match the SINUMERIK / SIMOTION default subnet. It must be changed before integration with a typical office network.

Step-by-Step: Reconfigure the Ethernet Address and Restore Connectivity

Prerequisites

  • SSH or serial console access to the IOT2000 (default user root, no password on the example image).
  • Knowledge of the LAN prefix of the upstream router (for example 192.168.1.0/24).
  • An unused IPv4 outside the router's DHCP pool (for example 192.168.1.50).

Procedure

  1. Connect the IOT2000 to your PC over the Ethernet cable and access the console:
    ssh [email protected]
  2. List the connman services to identify the Ethernet interface:
    connmanctl services
    Note the service identifier (typically *A0 ethernet_001122334455_cable).
  3. Edit the persistent settings file (replace the MAC in the path):
    vi /var/lib/connman/ethernet_001122334455_cable/settings
  4. Replace the IPv4 stanza with a static address on the production LAN:
    [ethernet_001122334455_cable]
    Name=Wired
    AutoConnect=true
    Modified=2018-04-12T08:32:01Z
    IPv4=192.168.1.50/255.255.255.0/192.168.1.1
    IPv6=off
  5. Disable the WiFi client on the IOT2000 if you are not using it (recommended for deterministic routing):
    connmanctl disable wifi
  6. Reboot and confirm:
    reboot
    After login:
    ip addr show dev eth0
    ping -c 3 192.168.1.1
    ping -c 3 sfo3.firebaseio.com

Configuring node-red-contrib-firebase (v1.1.1) Correctly

With IP connectivity restored, install the firebase palette node:

cd /usr/lib/node_modules
npm install [email protected] --save

Restart Node-RED:

systemctl restart node-red

In the Node-RED editor (http://<iot2000>:1880) drop a firebase config node and fill in the following parameters:

Field Value Notes
Firebase Realtime Database Firestore is not supported by v1.1.1
Server your-project.firebaseio.com From the Firebase console -> Realtime Database URL
Auth Type Legacy token / Email + Password v1.1.1 does not support OAuth2 service accounts
Database Type Realtime Hard requirement
Child path /machines/iot2000/temp Per-flow telemetry topic

Minimum flow to push an S7 tag to Firebase every 5 s:

[{"id":"in.s7","type":"s7 in","z":"f1","endpoint":"192.168.1.20","mode":"single","variable":"DB1,REAL0","name":"TempPV"},
{"id":"fn.set","type":"function","z":"f1","name":"wrap","func":"msg.payload = { value: msg.payload, ts: Date.now() }; return msg;"},
{"id":"fb.out","type":"firebase out","z":"f1","firebase":"c1","childpath":"/machines/iot2000/temp","name":"Push"},
{"id":"c1","type":"firebase config","z":"","name":"iot2000-prod","firebase":"your-project.firebaseio.com","authType":"legacy","token":"<dbSecret>"}]

Hardware Selection: IOT2020, IOT2040, or IOT2050

Use Case Recommended SKU Rationale
Bench prototype, education, Node-RED learning IOT2020 Lowest cost, microSD boot simplifies image swap
Cabinet install with -20 to +60 °C requirement IOT2040 Industrial temperature range, eMMC wear-levelling
Production line with modern TLS / Docker / S7-1500 OPC UA IOT2050 (6ES7647-0BA00-0YA2) Quad-core ARM A53, 1-2 GB RAM, 16 GB eMMC, supported until 2027

For purely WiFi-based deployments a USB WiFi NIC based on the Realtek RTL8188CUS or Atheros AR9271 chipset is recommended; the Intel Quark kernel on firmware V2.1.3 does not include the brcmfmac or rt2x00 modules needed for some consumer adapters. Connect a USB hub if the WiFi NIC and a USB serial console dongle must coexist.

Network Architecture: Avoiding the 192.168.200.x Trap

The cleanest production deployment is to keep the IOT2000 on a dedicated industrial subnet, isolated from the office LAN, and route through a managed firewall that performs NAT to the upstream network. A recommended topology:

Office LAN192.168.1.0/24 Industrial FirewallLayer-3 NAT,stateful packet filter IOT2000 Subnet10.10.10.0/24 IoT202010.10.10.20 IoT204010.10.10.21 S7-120010.10.10.30 WiFi NIC10.10.10.50 Firebase Cloud*.firebaseio.com (reconfigure ETH to 10.10.10.x)

By moving the IOT2000 to a private subnet (10.10.10.0/24) the 192.168.200.1 collision is impossible by design, and the firewall can apply egress rules that allow only the Firebase FQDNs:

*.firebaseio.com        TCP 443
*.googleapis.com        TCP 443
sfo3-xxxx.firebaseio.com UDP 9553 (long-poll)

Verification Checklist

  1. From the IOT2000 console: curl -v https://<project>.firebaseio.com/.json?print=pretty returns JSON, not an SSL error.
  2. In Node-RED, the firebase (config) node has a green dot and no red exclamation.
  3. Deploy a debug node downstream of a firebase in node pointing to /machines/iot2000/temp - it should emit the last value within 30 s.
  4. From the Firebase console, the Realtime Database viewer shows the timestamped object {value: 23.7, ts: 1700000000000}.
  5. Watch the connman log: journalctl -u connman -f - no DHCP renew errors and only one IPv4 on eth0.

Troubleshooting Matrix

Symptom Likely Cause Resolution
Editor shows red exclamation on firebase node, error "ECONNREFUSED 127.0.0.1:9000" Wrong Firebase endpoint - Database vs Hosting Use the URL from Realtime Database, not the project web URL
"Auth error: invalid API key" Legacy db secret revoked by Firebase in 2020 Generate new database secret under Project Settings -> Service Accounts -> Database Secrets, or migrate to OAuth2
PC WiFi dies when IOT2000 is plugged in IP collision 192.168.200.1 Reconfigure the IOT2000 to a non-conflicting address
Node-RED 0.15.2 fails to start on Node.js 8+ Version mismatch on image upgrade Stay on the bundled Node 4.6.2 or reflash the V2.1.3 image
node-red-contrib-firebase install: "no such file or directory, open 'package.json'" npm run from /, not from /usr/lib/node_modules cd /usr/lib/node_modules before npm install
Long-poll data only arrives after 30-60 s Default 25 s keepalive trimmed by router Lower keepalive or move the device behind a less aggressive NAT gateway

Migration Path to the IOT2050

Siemens officially announced the phase-out of the IOT2000 line in 2021. New projects should use the SIMATIC IOT2050 with firmware V1.2.x or later, which provides:

  • Container runtime (Docker/Podman) for running Node-RED as a signed image.
  • Native OPC UA Pub/Sub over MQTT 5 - more efficient than the Firebase REST polling model.
  • Updated Node.js 16 LTS and Node-RED 3.x compatibility.

The configuration procedure in this article applies to the IOT2050 by analogy: change the connman profile at /var/lib/connman/<iface>_<mac>_cable/settings, install node-red via the image, and deploy the same firebase flow with the newer node-red-contrib-firebase-modern package (which supports OAuth2 service accounts).

FAQ

What firmware version of the Siemens IOT2000 bundles Node-RED and the Firebase node?

Firmware V2.1.3 ships Node-RED 0.15.2 on Node.js 4.6.2 and pre-installs node-red-contrib-firebase 1.1.1. The image and SHA-256 checksum are available in the Siemens support entry for the SIMATIC IOT2000 example image. Earlier images (V1.x) do not include Node-RED.

Why does my PC lose WiFi when I connect the IOT2020 over Ethernet?

Both devices default to the IPv4 address 192.168.200.1. When the IOT2020 is plugged in it answers ARPs for that address on the wired segment, which confuses the PC's IP stack and disrupts WLAN routing. Reconfigure the IOT2020 to a non-conflicting address in connman (for example 192.168.1.50) and reboot.

Should I use the IOT2020 or IOT2040 for an industrial cabinet installation?

Use the IOT2040 (6ES7647-0AA00-1YA2). It has 1 GB RAM, 8 GB eMMC, an extended -20 to +60 °C temperature range, and a second dedicated RS232 port. The IOT2020 is specified 0 to 50 °C and boots from microSD only, which is acceptable for prototypes and education but not for long-term field use.

How do I enable WiFi on the IOT2000 with firmware V2.1.3?

Insert a USB WiFi NIC based on RTL8188CUS or Atheros AR9271. The kernel in V2.1.3 includes both r8192cu and ath9k_htc drivers. Configure with connmanctl enable wifi, scan with connmanctl scan wifi, then connmanctl connect <SSID>. Avoid the BCM43236-based NICs that some consumer adapters ship with - the IOT2000 kernel has no brcmfmac module.

Does node-red-contrib-firebase 1.1.1 still work with current Firebase projects?

Yes, with caveats. v1.1.1 uses legacy database secrets (Database Settings -> Secrets tab), which are still issued but Firebase announced their deprecation. The package also does not support the new Google Cloud OAuth2 service-account authentication. For new projects prefer the community fork node-red-contrib-firebase-modern or migrate the IOT2000 to the IOT2050 platform which runs Node-RED 3.x and supports OAuth2.

Back to blog