Skip to content

02 Overview

Daniel Dunn edited this page Jul 15, 2024 · 1 revision

Overview

Tag Points

A tag point is an object that holds a bit of data. It usually represents something like the color of a smart bulb, or the status of a vibration sensor.

They are like the cells in a spreadsheet, the main places where most of the live data lives.

Tag points have file-like names, such as "devices/vibrationSensor1.vibrationDetected"

Unlike other platforms with dozens of unique data types, there are only four types of tag: number, string (text), object, and binary.

Most things are done with number and text based tags, you likely won't encounter many object or binary tags.

Modules

A module is a bundle of various kinds of objects, known as "resources".

They are distinct from Python modules, while they can contain Python code, they can also contain many other things.

There are many resource types, such as web pages, bits of Python code, or configuration for devices like cameras and GPIO pins.

Modules work somewhere like folders, they can be imported and exported as ZIP files, and they can have subfolders.

Resources

A resource is any object that lives in a module. Most resources are stored on-disk as a single YAML file.

Some of the currently available resource types are:

Tags

Most of the time, you don't need to manually create a tag point, they are created by device plugins. However, it is possible to create a tag point as a resource.

Resources can also add configuration to an existing tag.

Devices

A Device resource represents the configuration that lets Kaithem connect to a device and make it available.

From the device's page, you can also do simple operations like turning switches on and off, or "faking" inputs, which may be needed to bypass bas hardware.

Devices expose their inputs and output as Tag Points in the global tag points list. For example, a light switch might expose a tag called "/devices/bedroomlight.switch".

Pages

Page resources allow you to create your own web content, using plain HTML, with Jinja2 template syntax available for dynamic content.

Chandler Project

A Chandler Project is probably Kaithem's most powerful feature. These allow you to control lights, play sounds, respond to events, send media to web kiosks, and more.

Groups

Every Chandler project contains a set of "Groups".

Each Groups has one or more Cues, with one cue being active at any one time.

Cues are like songs in a playlist or steps in a recipe, and can have a variety of different actions attached to them, which trigger when the cue becomes active

Cues can be manually triggered, or set to auto-advance on timers and schedules, or when conditions are met.

Mixing Boards

These resources represent a web based mixing board, that routes audio using Linux 's PipeWire support. They let you apply affects to live inputs, and route between multiple soundcards, and can be controlled from cues.

Loggers

This resource type lets you log the value of a tag point over time. You can log the min/max/average, or log every time it changes.

All logs get stored in a SQLite file, and can be downloaded as CSV or viewed on the web.

Config Options

These resources work a bit like the windows registry. They set the value of one or more keys.

These are used for things like adding items to the top menu bar.

If two Config Options resources try to set the same key, the one with the highest priority wins.

This means that you can set up some defaults in a module, reuse the same module on multiple devices, and override things as needed in another module.

Config options can be read in Chandler cues automation logic.

Python Events

This resource type lets you poll for a condition written in pure python, and run a Python function when it becomes true.

They let you control things that don't have any built-in support.

Plugins

These are different from Kaithem modules, they are essentially just regular old folders of Python code loaded at startup. They can do things modules can't, including creating new resource types(documentation pending!).

Clone this wiki locally