Skip to content

Browser demo

Ralf Steinert edited this page Nov 2, 2026 · 4 revisions

https://opcua-sim.steitec.net is a static page that runs opcua-sim's device code in your browser, without installing anything.

The demo: simulated devices next to a terminal

What runs in the browser, and what does not

The devices, their behaviour, the faults and the alarm states are the real opcua-sim code, running in Pyodide. The OPC UA wire protocol is not. A browser has no TCP sockets, so your commands reach the devices directly, and the tx lines in the terminal name the service, not the bytes. The page answers by the same rules as the server, but you cannot point a client at it. To test a client, install opcua-sim.

What is on the page

The demo on a phone in dark mode, with the pump running
  • Six devices: a drive, a pressure transmitter, an oven, an energy meter, a PLC with the S7-1500 layout and a bar code reader with the BCL 300 layout. The first four show their DeviceHealth.
  • Three servers to switch between: the plant, the S7-1500 and the BCL 300, each with its own namespaces and node IDs.
  • A terminal: read, write, call, browse, namespaces, alarms, ack, refresh, inject, clear and help.
  • A list of retained alarms with an Acknowledge button.
  • A tour of eight steps and buttons that break things.

Things to try

  1. Press Set 30 Hz and start it, then Trip it: Start now answers BadInvalidState, and the trip stays latched after you clear its cause until you call Reset.

  2. Press Broken sensor: the value reads null [BadSensorFailure], the health goes to failure and the loop current to 3.6 mA.

    The pump tripped and the pressure sensor broken: no value, health failure, 3.6 mA, two alarms waiting

  3. Type read pump.State, inject server drop_connections, inject pump overload, then refresh. The alarm happened without a session, so you only learn about it through ConditionRefresh.

    The terminal: the connection is cut, an alarm is missed, ConditionRefresh brings it back

  4. Type read pump.State, inject pump overload and inject tank_pressure sensor_break, then press Acknowledge on the overload. It stays in the list while it is active, now acknowledged.

    The terminal and the alarm list: one alarm acknowledged, one still waiting

  5. Press Siemens: the quotes belong to the ID: without the quotes the node does not exist.

The page sends nothing anywhere and loads nothing from other hosts. Its source is in web/.

Clone this wiki locally