lucid tc | twingraph
Solutions · IoT & Telemetry

A digital twin that updates in real time — and remembers.

IoT platforms are either time-series silos (good at storage, bad at relationships) or static asset models (good at relationships, can't react). Industrial operators need both. TwinGraph is both.

Topology
PLCs / SensorsMQTT BrokerTwinGraph ServerBrowser UIAgents
The problem

A plant floor has devices, machines, lines, operators, and sensors — and they all relate to each other. Historians store the data; asset models describe the hierarchy. Neither system talks to the other, and neither can react to a live event.

The TwinGraph angle

Every device, asset, machine, and operator becomes a live graph node. MQTT streams telemetry directly in via MQTTBrokerNode + MQTTTopicNode. Edges express topology — plant → line → cell → machine → sensor. History can be pushed to BigQuery for analytics. Agents run anomaly detection and trigger alarms via MCP or gRPC.

How it works

A few steps. Real infrastructure.

01

Model your plant

Plant, line, cell, machine, sensor — express topology as graph edges.

02

Stream telemetry

PLCs and sensors push to MQTT. TwinGraph ingests and persists every event.

03

Explore in Browser

TwinGraph Browser (Sigma.js) visualizes the live plant as a dense graph.

04

Agents watch

AI agents run anomaly detection on the graph and fire alarms over MCP.

Capabilities used
MQTTAuto-persistenceSigma.js BrowserBigQuery historyVertex AI Agents
Example code

Real industrial telemetry.

python · iot.pylive
import lucidtc_twingraph as tg

graph = tg.RemoteTwinGraph(
    twingraph_id="plant-kc",
    server_address="plant.twingraph.local:50051",
    secure_channel=True,
    auth_token=TWINGRAPH_SERVER_AUTH_TOKEN,
)

# model the hierarchy once
graph.add_twingraph_node(
    twingraph_node=tg.TwinGraphNode(node_id="line_3", node_type="Line"),
    connection_type="HAS_LINE",
    source_twingraph_id="plant-kc",
)

# wire up an MQTT broker and subscribe a topic — readings stream straight in
broker = tg.MQTTBrokerNode(
    broker_host="mqtt.plant.local",
    broker_port=8883,
    client_id="plant-kc",
    use_tls=True,
)
graph.add_mqtt_broker_node(mqtt_broker_node=broker, auto_connect=True)
graph.subscribe_to_topic(
    broker_twingraph_id=broker.twingraph_id,
    topic="plant/kc/line3/#",
    qos=0,
)
Why TwinGraph
  • 01

    One system for topology and telemetry — no more time-series ↔ asset-model drift.

  • 02

    Real, running reference implementations for ISX15 engine and GEA CFL63 filler.

  • 03

    The Browser ships with the server — operators get a live view out of the box.

See this running on your infrastructure.