--- title: Introduction description: hololinked introduces SCADA & IoT systems to beginners --- # 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 or run automated scripts, `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](https://www.w3.org/WoT/), one can expect a consistent API and flexible bidirectional message flow to interact with your devices, irrespective of the underlying protocol. Currently HTTP, MQTT & ZMQ are supported. This implementation is based on RPC, built ground-up in python keeping both the latest web technologies and python principles in mind.
Documentation Status CI Pipeline Status Ruff Linter PyPI Anaconda codecov Conda Downloads PyPI - Downloads DOI Discord email feedback
--- ## 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) - _Oscilloscope_ - publishes captured waveforms once a measurement is complete - _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, Pickle etc.) - security or access control mechanisms (JWT, Basic Auth, OAuth etc.) 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 [Handbook](beginners-guide/articles/servers) section for concepts and code example and the [Examples Repository](https://github.com/hololinked-dev/examples) section for hardware-specific implementations.