← Back to blog

Connecting a camera to Ignition: a lost camera must never read as clear

November 5, 2026 · 4 min read · Ender Celik

In 10 seconds

  • The problem: if vision only reports yes or no, a dead camera can look like a clear area.
  • The fix: publish three states, Active, Clear, and Unknown, and treat Unknown as a stop in Ignition.
  • You can test this at home with a Raspberry Pi camera, Ignition, and a small machine you can safely stop.

See the code on GitHub →

The problem

Plants already have cameras and SCADA, but connecting them usually means custom vision work for every machine. The harder part comes later: what does SCADA do when the camera freezes, the network drops, or the model call fails?

A yes or no output cannot tell the difference between "nothing is there" and "I can no longer see". If the last answer was no, the screen keeps saying the area is clear, while nobody is actually watching it.

No data is not good news. It means you do not know.

The fix: three states, not two

  • Active: the rule is met on a fresh, confirmed observation.
  • Clear: the rule is not met on a fresh, confirmed observation.
  • Unknown: there is no current result, for example a lost camera or a failed model call. It never means clear.

Integrators should treat Unknown or Bad quality as a stop. In my demo, an Ignition Perspective project latches a stop on Active, or when vision stays Unknown or Bad quality for 2 seconds.

vLock-AI Vision setup screen showing a selected camera area, an approved rule, and a person outlined by SAM 3.1
The rule is written in plain language and approved by a person before it runs. Missing or expired results are Unknown, never Clear.

How it reaches Ignition

I built this as vLock-AI Vision. You describe a rule in plain English, Muse Spark proposes it, a person approves it, and SAM 3.1 checks the camera. Fixed code then applies the approved rule and publishes the same tags for every zone over OPC UA, MQTT, or REST. Ignition users can download a ready-made UDT.

Ignition Tag Browser showing the vLock zone tags, including State, Quality, Reason, and object counts
The zone tags in Ignition. The italic Score2 value is an open item I still need to investigate.

The app sends no machine commands and keeps no stop latch. It reports what it sees, and SCADA decides what the machine does. Latching and reset belong to the integrator, as they would in a real plant.

How to test an industrial application in a home lab

You do not need a plant to test the logic. You need the same software on the control side, plus a small machine that is safe to stop. Here is my setup:

  • Camera: a Raspberry Pi 5 with a USB camera.
  • SCADA: real Inductive Automation Ignition with Perspective. Ignition offers a free Maker Edition for personal projects.
  • Machine: a Bambu Lab P1S 3D printer, connected over local MQTT. It has a real pause command, and a wrong stop only costs one print.

Then test the failures, not just the happy path. These are my results from November 4, 2026, observed by hand on both a local GPU and Meta's cloud, so no reaction times were measured. The test rule was a person AND a dog in the area.

  • Person alone: Clear. No stop.
  • Person holding a real dog: Active. Stop latched, printer stopped.
  • Camera disabled: Unknown. Treated as a stop, printer stopped.
Ignition Perspective screen showing a paused 3D printer and a latched stop message
My Ignition Perspective screen. The printer stays paused until someone resets the latched stop.

What a home lab proves, and what it does not

  • It can prove: the tags, stale-data handling, stop and reset logic, and operator screens.
  • It cannot prove: accuracy under plant lighting, dust, and vibration, behavior on a plant network, or safety validation.
  • Still on my test list: a physical cable unplug, and the example latch and heartbeat scripts in a real gateway.

Measured speed

  • Meta image API, 1 frame: 2 to 3 seconds per check.
  • Local GPU (RTX 3070 Ti Laptop), 4 frames: 4 to 5 seconds per check.
  • Meta video API, 4 frames: 8 to 17 seconds per check, too slow for this use today.

These numbers come from one camera in one room. Your results will differ.

The limits

  • It is a working prototype for supervisory monitoring, not a fast safety stop.
  • It does not replace physical lockout/tagout or safety-rated controls.
  • It handles one camera and one monitoring job at a time.
  • Accuracy has only been sampled, not benchmarked.
  • Muse Spark's proposals need human review. In one test it got the rule right but chose the wrong output type.

Would this work with a PLC machine?

SCADA can apply the same logic to other machines, but I have only tested this on a 3D printer. On a real machine, the stop logic and its safety review stay with the people who own that machine.

Where vMaint fits

A stop only helps if someone finds out why it happened and fixes the cause. That is the problem I work on with vMaint, my maintenance and downtime software. The two are not connected today, but a vision stop that opens a downtime record is the direction I want to test next.

I submitted vLock-AI Vision to the Meta Global AI Developer Hackathon 2026. If you work with Ignition, please try to break it and tell me what you find.