Skip to content
Joel T. Collins edited this page Feb 6, 2020 · 8 revisions

LabThings Scope

Terminology

Thing - An abstraction of a physical or a virtual entity whose metadata and interfaces are described by a Thing Description, whereas a virtual entity is the composition of one or more Things.

Component - An abstraction of a physical or a virtual entity used by a Thing's functionality, but not individually described by a Thing Description. For example, a Python picamera object may be a component of a microscope Thing, and server-side extensions adding functionality to the microscope Thing can access and use the picamera component's Python functionality.

Gateway - A physical device connected to a network of Things, acting as both a Thing directory, and a user-interface for Thing functionality.

Datastore - A physical device connected to a network of Things, listening to, and storing, a user-defined subset of available Thing events across a user-defined subset of the network. For example, a Datastore can be set up to permanently log all experimental data events, as well as all error and warning events.

Core Web of Things terminology can be found from the Web of Things (WoT) Architecture specification

Spec

Architecture

  • Based on the W3C Web of Things Architecture

  • Specification will describe potentially common network topologies

  • Specification will describe the functionality and relationships between Things, Gateways, and Datastores.

  • Specification will describe options for protocols, including HTTP (REST-like), and WebSockets

Thing Description

  • Implementation of the W3C Thing Description (TD), and extends the Mozilla Web Thing Description

  • Specification will detail which properties, actions, and events should be expected that are specific to LabThings

  • Specification may detail additional TD elements for describing LabThings Components and Extensions

Data Model

  • Specification will include additional schema @context specific to LabThings. This will introduce a vocabulary for common laboratory Properties, Actions, and Events.

Thing Widgets

  • Based on standard HTML Components (Custom Elements), it would allow Thing developers to create sets of graphical "widgets" to control the device, which can then be imported into the Gateway interface, and hopefully Jupyter notebooks.

Framework

  • Flask-based framework to simplify converting instrument control code into LabThings-compatible connected devices

  • Key focus on automatic documentation, and the Extensions manager

LabThings Gateway

  • Graphical interface for monitoring and simple control of a connected lab

  • Key focus on event-driven information, e.g. from instrument sensors, or data-acquisition events

LabThings Datastore

  • Large-storage fileserver (e.g. R-Pi + large HDD) which discovers and monitors any Things on the local network

  • Set up to automatically store all collected data from connected Things

  • Options to store Events emitted by connected Things

Consumer/Client Libraries

  • Python, Javascript, MatLab (etc.) client libraries for connecting to, and interacting with, Things

    • Intended to be the main point-of-entry for lab users scripting experiments
  • Blockly-based graphical scripting application for visually developing automated lab experiments

    • Provides a simple subset of the consumer libraries, designed to "scratch the same itch" as environments like LabView
    • Generates valid Python code, which can then be used in more complex scripts later, if needed
Clone this wiki locally