Skip to content

Node catalog

Every node a flow file can use: its type id, its ports with their payload types, and its properties with the default the editor gives a new node. A property a flow file leaves out gets this default. Allowed values and ranges are checked when the flow is compiled, and the error says what is allowed. See Check a flow without the editor.

Ports are numbered from 0 in a flow file's edges: [fromNodeId, outputNumber, toNodeId, inputNumber], in the order listed here.

general

change

Type thingstudio/change, kind transform, palette group general.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • operation, string, default "set"
    • scope, string, default "msg"
    • property, string, default "payload"
    • valueFrom, string, default "literal"
    • valueType, string, default "string"
    • value, string, default ""

debug

Type thingstudio/debug, kind sink, palette group general.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • fullMessage, boolean, default false

delay

Type thingstudio/delay, kind transform, palette group general.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • delayMs, number, default 1000

filter

Type thingstudio/filter, kind transform, palette group general.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • mode, string, default "change"
    • threshold, number, default 1
    • intervalMs, number, default 1000
    • ignoreFirst, boolean, default false
    • perTopic, boolean, default true

function

Type thingstudio/function, kind transform, palette group general.

  • Inputs: msg (any)
  • Outputs: msg (any) (the number of outputs is the node's outputCount property)
  • Properties (name, type, default):
    • code, string, default "msg['payload'] = msg['payload']\nreturn msg\n" — the body of a MicroPython function; msg in, return the message, None, or a list with one entry per output
    • outputCount, number, default 1 — how many outputs, 1 to 10

inject

Type thingstudio/inject, kind source, palette group general.

  • Inputs: none
  • Outputs: msg (bool)
  • Properties (name, type, default):
    • payloadType, string, default "bool"
    • payloadValue, string, default "true"

journal

Type thingstudio/journal, kind transform, palette group general.

  • Inputs: msg (any)
  • Outputs: series (any), rollup (any)
  • Properties (name, type, default):
    • rows, number, default 60 — how many rows are kept, 1 to 256
    • stepSeconds, number, default 60 — seconds per row; 0 makes every message its own row
    • steps, number, default 0 — rows per roll-up to the second output; 0 sends none
    • xff, number, default 0.5 — 0 to 1: a roll-up becomes a gap if more than this fraction of its rows are gaps

startup

Type thingstudio/startup, kind source, palette group general.

  • Inputs: none
  • Outputs: msg (bool)
  • Properties (name, type, default):
    • payloadType, string, default "bool"
    • payloadValue, string, default "true"

timer

Type thingstudio/timer, kind source, palette group general.

  • Inputs: none
  • Outputs: msg (int)
  • Properties (name, type, default):
    • intervalMs, number, default 1000 — milliseconds between messages; the payload is a count that rises 1, 2, 3...

GUI

bar

Type thingstudio/gui_bar, kind sink, palette group GUI.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • name, string, default ""
    • style, string, default "solid"
    • segments, number, default 10
    • lo, number, default 0 — the value at which the bar is empty
    • hi, number, default 100 — the value at which the bar is full
    • staleAfter, number, default 0 — seconds without a new value before it dims; 0 = never

button

Type thingstudio/gui_button, kind sink, palette group GUI.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • name, string, default ""
    • mode, string, default "momentary" — momentary, toggle or navigate
    • style, string, default "box"
    • valueType, string, default "bool" — bool, string or number: the type of what it sends
    • fireOn, string, default "release" — release (default: the finger lifts inside the button) or press
    • text, string, default "" — what is drawn on the button; empty uses name
    • value, string, default "" — momentary: what it sends; empty sends true, 'ON' or 1 by valueType
    • maxChars, number, default 8 — room for this many characters (a value replaces the text)
    • onValue, string, default "" — toggle: what it sends to turn on
    • offValue, string, default "" — toggle: what it sends to turn off
    • onText, string, default "ON"
    • offText, string, default "OFF"
    • initial, boolean, default false
    • pendingTimeout, number, default 5 — toggle with a wired input: seconds to wait for the input to confirm before going back
    • target, string, default "" — navigate: next, prev, back, home or a page name from screens

label

Type thingstudio/gui_label, kind sink, palette group GUI.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • name, string, default ""
    • font, string, default ""
    • maxChars, number, default 8 — room for this many characters
    • staleAfter, number, default 0 — seconds without a new value before it dims; 0 = never

light

Type thingstudio/gui_led, kind sink, palette group GUI.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • name, string, default ""
    • style, string, default "light"
    • onText, string, default "On"
    • offText, string, default "Off"
    • staleAfter, number, default 0 — seconds without a new value before it goes grey; 0 = never

Type thingstudio/gui_modal, kind sink, palette group GUI.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • name, string, default ""
    • screen, string, default "" — the id of the gui_screen node this modal belongs to
    • priority, number, default 0 — a higher priority takes the screen from a lower one; the other waits
    • timeout, number, default 0 — seconds before the modal closes itself; 0 never

Type thingstudio/gui_navigator, kind transform, palette group GUI.

  • Inputs: msg (any)
  • Outputs: page (string)
  • Properties (name, type, default):
    • name, string, default "navigator"
    • screen, string, default ""

readout

Type thingstudio/gui_readout, kind sink, palette group GUI.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • name, string, default ""
    • font, string, default ""
    • caption, string, default ""
    • units, string, default "" — text shown after the number
    • decimals, number, default 1
    • lo, number, default 0 — lowest value it will show; with hi, sizes the space the number gets
    • hi, number, default 100 — highest value it will show; with lo, sizes the space the number gets
    • staleAfter, number, default 0 — seconds without a new value before it dims; 0 = never

screen

Type thingstudio/gui_screen, kind source, palette group GUI.

  • Inputs: none
  • Outputs: frame (bytes)
  • Properties (name, type, default):
    • name, string, default "screen"
    • minInterval, number, default 200 — least milliseconds between screen updates
    • wrap, boolean, default true — whether next/prev wrap around at the ends of the pages
    • gridColumns, number, default 12
    • gridRows, number, default 0
    • touchPanelConfigId, string, default "", the id of a thingstudio/config/touch-panel config — the touch-panel config to read touches from; empty for none
    • themeConfigId, string, default "", the id of a thingstudio/config/gui-theme config
    • themePreset, string, default ""
    • bg, colour, default none
    • card, colour, default none
    • fg, colour, default none
    • muted, colour, default none
    • track, colour, default none
    • accent, colour, default none
    • on_accent, colour, default none
    • ok, colour, default none
    • warn, colour, default none
    • alarm, colour, default none

histogram

Type thingstudio/gui_trend, kind sink, palette group GUI.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • name, string, default ""
    • lo, number, default 0 — value at the bottom of the bars; the range is fixed
    • hi, number, default 100 — value at the top of the bars; the range is fixed
    • columns, number, default 60 — natural width in bars; in a layout it can stretch to show more
    • colWidth, number, default 3 — pixels per bar
    • height, number, default 48 — natural height in pixels
    • staleAfter, number, default 0 — seconds without a new row before it dims; 0 = never

hardware

adc

Type thingstudio/adc, kind source, palette group hardware.

  • Inputs: none
  • Outputs: msg (any)
  • Properties (name, type, default):
    • pin, number, default 34 — the ADC pin to read; on ESP32, use an ADC1 pin if the flow uses WiFi (ADC2 can't with the radio on)
    • mode, string, default "relative" — relative (current value +- delta) or absolute (lower..upper)
    • delta, number, default 2000 — relative mode: how far the reading must move from the last sent one to fire
    • lower, number, default 0 — absolute mode: the low bound
    • upper, number, default 50000 — absolute mode: the high bound
    • sense, string, default "outside" — outside (fire when the value leaves the bounds) or inside (fire when it returns)
    • pollMs, number, default 0 — also send every this many ms; 0 = only on a bounds crossing

bme280

Type thingstudio/bme280, kind source, palette group hardware.

  • Inputs: none
  • Outputs: msg (any)
  • Properties (name, type, default):
    • i2cConfigId, string, default "", the id of a thingstudio/config/i2c-bus config
    • address, number, default 118 — the I2C address as a plain number: 118 is 0x76, 119 is 0x77
    • intervalMs, number, default 5000 — milliseconds between readings, at least 100

display i2c

Type thingstudio/display_i2c, kind sink, palette group hardware.

  • Inputs: frame (bytes)
  • Outputs: none
  • Properties (name, type, default):
    • controller, string, default "ssd1306"
    • i2cConfigId, string, default "", the id of a thingstudio/config/i2c-bus config
    • addr, number, default 60 — the I2C address as a plain number: 60 is 0x3C, the usual SSD1306 address
    • width, number, default 128
    • height, number, default 64

display spi

Type thingstudio/display_spi, kind sink, palette group hardware.

  • Inputs: frame (bytes)
  • Outputs: none
  • Properties (name, type, default):
    • orientation, string, default "" — empty = off (the raw rotation), or 0, 90, 180, 270 as a string: the picture turned clockwise. Portrait 320x480 needs none
    • controller, string, default "st7789"
    • frameFormat, string, default "rgb565" — rgb565, gs4, gs2 or mono; must match the gui screen
    • palette, object, default [0,65535,63488,2016,31,65504,2047,63519,33808,16904,50712,64800,32768,1024,16,1040]
    • spiBus, number, default 2
    • baudrate, number, default 40000000
    • sck, number, default 12
    • mosi, number, default 11
    • dc, number, default 13
    • cs, number, default -1 — GPIO, or -1 for none
    • reset, number, default -1 — GPIO, or -1 for none
    • backlight, number, default -1 — GPIO, or -1 for none
    • width, number, default 135 — the panel's own width in pixels
    • height, number, default 240 — the panel's own height in pixels
    • rotation, number, default 1 — how the panel is mounted, 0 to 7 (MADCTL); with an orientation, 0 to 3 only
    • colorOrder, string, default "bgr"
    • invertColors, boolean, default false
    • dataLatchOrder, boolean, default true
    • xstart, number, default -1 — -1 lets the driver choose; set both only for an unusual panel offset
    • ystart, number, default -1

ebutton

Type thingstudio/ebutton, kind source, palette group hardware.

  • Inputs: none
  • Outputs: msg (string)
  • Properties (name, type, default):
    • pin, number, default 5
    • pull, string, default "none"
    • senseMode, string, default "auto"
    • suppress, boolean, default false
    • debounceMs, number, default 50
    • longPressMs, number, default 1000
    • doubleClickMs, number, default 400

encoder

Type thingstudio/encoder, kind source, palette group hardware.

  • Inputs: none
  • Outputs: msg (number)
  • Properties (name, type, default):
    • pinX, number, default 10 — one of the two quadrature switch pins
    • pinY, number, default 11 — the other quadrature switch pin
    • div, number, default 1 — divide the count by this to track detents; 1 counts every pulse
    • value, number, default 0 — the starting value
    • vmin, string, default "" — lowest value, or blank for no limit
    • vmax, string, default "" — highest value, or blank for no limit
    • mod, string, default "" — wrap the value at this number, or blank for none
    • delay, number, default 100 — ms to wait for motion to settle; also limits how often it sends

eswitch

Type thingstudio/eswitch, kind source, palette group hardware.

  • Inputs: none
  • Outputs: msg (bool)
  • Properties (name, type, default):
    • pin, number, default 4
    • pull, string, default "none"
    • lopen, number, default 1
    • debounceMs, number, default 50

gpio out

Type thingstudio/gpio_out, kind sink, palette group hardware.

  • Inputs: signal (bool)
  • Outputs: none
  • Properties (name, type, default):
    • pin, number, default 12

i2c device

Type thingstudio/i2c, kind transform, palette group hardware.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • i2cConfigId, string, default "", the id of a thingstudio/config/i2c-bus config
    • operation, string, default "read"
    • address, string, default ""
    • register, string, default ""
    • length, number, default 1

interrupt

Type thingstudio/interrupt, kind source, palette group hardware.

  • Inputs: none
  • Outputs: msg (bool)
  • Properties (name, type, default):
    • pin, number, default 4
    • edge, string, default "rising"

neopixel

Type thingstudio/neopixel, kind sink, palette group hardware.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • pin, number, default 13 — the strip's data pin
    • count, number, default 8 — how many pixels on the strip
    • order, string, default "GRB" — RGB, GRB, RGBW or GRBW: the wire colour order of your strip

pwm out

Type thingstudio/pwm_out, kind sink, palette group hardware.

  • Inputs: duty (number)
  • Outputs: none
  • Properties (name, type, default):
    • pin, number, default 12
    • freq, number, default 1000

touch

Type thingstudio/touch_i2c, kind source, palette group hardware.

  • Inputs: none
  • Outputs: msg (any)
  • Properties (name, type, default):
    • touchPanelConfigId, string, default "", the id of a thingstudio/config/touch-panel config
    • orientation, string, default ""

network

http in

Type thingstudio/http_in, kind source, palette group network.

  • Inputs: none
  • Outputs: msg (any)
  • Properties (name, type, default):
    • port, number, default 8080
    • path, string, default "/"
    • method, string, default "GET"
    • responseTimeoutMs, number, default 10000
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

http request

Type thingstudio/http_request, kind transform, palette group network.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • url, string, default ""
    • method, string, default "GET"
    • timeoutMs, number, default 5000
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

http response

Type thingstudio/http_response, kind sink, palette group network.

  • Inputs: msg (any)
  • Outputs: none
  • Properties: none

mqtt publish

Type thingstudio/mqtt_publish, kind sink, palette group network.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • topic, string, default ""
    • retain, boolean, default false
    • qos, number, default 0 — 0 or 1
    • brokerConfigId, string, default "", the id of a thingstudio/config/mqtt-broker config
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

mqtt subscribe

Type thingstudio/mqtt_subscribe, kind sink, palette group network.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • topic, string, default ""
    • qos, number, default 0
    • dynamic, boolean, default false
    • brokerConfigId, string, default "", the id of a thingstudio/config/mqtt-broker config
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

ntp

Type thingstudio/ntp, kind sink, palette group network.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • server, string, default "pool.ntp.org"
    • utcOffset, number, default 0 — hours from UTC for standard time, -12 to 14 (5.5 for India); the summer hour is added by dst
    • dst, string, default "eu" — eu adds the UK/EU summer hour automatically; none adds nothing
    • format, string, default "time" — what goes in payload: unix (int), time (14:05), time_seconds, time_12h (2:05 pm), date (Wed 14 Oct), date_iso, iso. Every message also carries all seven as fields of those names
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

udp receive

Type thingstudio/udp_receive, kind source, palette group network.

  • Inputs: none
  • Outputs: msg (bytes)
  • Properties (name, type, default):
    • port, number, default 9998
    • pollMs, number, default 20
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

udp send

Type thingstudio/udp_send, kind sink, palette group network.

  • Inputs: msg (any)
  • Outputs: none
  • Properties (name, type, default):
    • host, string, default ""
    • port, number, default 9999
    • timeoutMs, number, default 2000
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

wifi gate

Type thingstudio/wifi_gate, kind transform, palette group network.

  • Inputs: msg (any)
  • Outputs: msg (any)
  • Properties (name, type, default):
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

wifi status

Type thingstudio/wifi_status, kind source, palette group network.

  • Inputs: none
  • Outputs: msg (bool)
  • Properties (name, type, default):
    • pollMs, number, default 5000
    • wifiConfigId, string, default "", the id of a thingstudio/config/wifi config

Config nodes

A config node is listed under configs in a flow file as {id, type, properties}. A node names it by id in a property such as i2cConfigId. Credentials are saved by name (credentialName), never as secrets in the file.

GUI theme

Type thingstudio/config/gui-theme.

  • preset, select: one of dark-slate, light-paper, vivid, ``; Choosing a starting point replaces the colours below; editing one makes the theme custom.
  • bg, colour
  • card, colour
  • fg, colour
  • muted, colour
  • track, colour
  • accent, colour
  • on_accent, colour
  • ok, colour
  • warn, colour
  • alarm, colour

Defaults: {"preset":"dark-slate","bg":4258,"card":8484,"fg":65535,"muted":35953,"track":16904,"accent":16113,"on_accent":2113,"ok":15974,"warn":64608,"alarm":63488}

I2C bus

Type thingstudio/config/i2c-bus.

  • bus, number
  • scl, pin
  • sda, pin
  • freq, number: 100000 suits most sensors; 400000 for displays that can take it.

Defaults: {"bus":0,"scl":null,"sda":null,"freq":100000}

MQTT Broker

Type thingstudio/config/mqtt-broker.

  • credentialName, credential

Defaults: {"credentialName":""}

Touch panel

Type thingstudio/config/touch-panel.

  • controller, select: one of ft6336u; Other controllers (GT911, CST820) aren't supported yet.
  • i2cConfigId, configRef: the id of a thingstudio/config/i2c-bus config
  • address, text: 7-bit, e.g. 0x38.
  • rstPin, pin: Blank if the panel has none.
  • pollMs, number
  • width, number
  • height, number: The panel's own size. If the display is rotated, tick swap/flip until a touch lands where you pressed.
  • swapXY, boolean
  • flipX, boolean
  • flipY, boolean

Defaults: {"controller":"ft6336u","i2cConfigId":"","address":"0x38","rstPin":"","pollMs":20,"width":320,"height":480,"swapXY":false,"flipX":false,"flipY":false}

WiFi

Type thingstudio/config/wifi, one per flow.

  • credentialName, credential
  • security, select: one of password, open, unmanaged
  • allowReprovisioning, boolean: Off by default: the device only opens its setup AP on first run. Turning this on lets it reopen that AP any time WiFi drops, not just once -- only do this on a trusted, physically-controlled network. Anyone in radio range while WiFi is down could otherwise connect to the AP and redirect this device to a different network.

Defaults: {"credentialName":"","security":"password","allowReprovisioning":false}