Skip to content

hololinked - Pythonic Object-Oriented Supervisory Control & Data Acquisition / Internet of Things

hololinked is a beginner-friendly pythonic tool suited for instrumentation control and data acquisition over network (IoT & SCADA).

As a novice, you have a requirement to control and capture data from your hardware, say in your electronics or science lab, and you want to show the data in a dashboard, provide a PyQt GUI, run automated scripts, scan routines or jupyter notebooks, hololinked can help. Even for isolated desktop applications or a small setup without networking, one can still separate the concerns of the tools that interact with the hardware & the hardware itself.

If you are a web developer or an industry professional looking for a web standards compatible (high-speed) IoT runtime, hololinked can be a decent choice. By conforming to W3C Web of Things, one can expect a consistent API and flexible bidirectional message flow to interact with your devices, irrespective of the underlying protocol. Currently HTTP & ZMQ are supported. See Use Cases Table.

This implementation is based on RPC.


High Level Overview

Each device, or Thing, is modeled in software with:

  • Properties: Validated, get-set attributes for settings, captured/computed data, or network-accessible values.

  • Oscilloscope: time resolution, time range, channel data

  • Camera: frame rate, exposure time, captured image
  • DC Power Supply: current voltage, voltage range, max allowed current

  • Actions: Methods that command the hardware to perform operations.

  • Oscilloscope: connect/disconnect hardware

  • Camera: start/stop measurement or video capture
  • DC Power Supply: execute control routines (e.g., closed-loop control)

  • Events: Asynchronous messages or data streams to clients (e.g., alarms, measured values).

  • Camera: streams images as events
  • DC Power Supply: raises alarms on over-current or over-voltage

This separation is independent of:

  • The network protocol used for communication (HTTP, MQTT, ZMQ etc.)
  • Data serialization or binary representation (JSON, MessagePack)
  • Security or access control mechanisms (JWT, Basic Auth)

The Thing object represents the physical device and is modeled as a class, encapsulating its properties, actions, and events as its attributes & methods. Additionally, state machines can constrain property and action execution:

  • Oscilloscope: Cannot start a new measurement while one is ongoing
  • Camera: Cannot change exposure time while capturing video

Ready to get started?
See the Beginner's Guide or How-To section for code and the Examples section for hardware-specific implementations.