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, defaultfalse
delay
Type thingstudio/delay, kind transform, palette group general.
- Inputs: msg (any)
- Outputs: msg (any)
- Properties (name, type, default):
delayMs, number, default1000
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, default1intervalMs, number, default1000ignoreFirst, boolean, defaultfalseperTopic, boolean, defaulttrue
function
Type thingstudio/function, kind transform, palette group general.
- Inputs: msg (any)
- Outputs: msg (any) (the number of outputs is the node's
outputCountproperty) - Properties (name, type, default):
code, string, default"msg['payload'] = msg['payload']\nreturn msg\n"— the body of a MicroPython function;msgin, return the message, None, or a list with one entry per outputoutputCount, number, default1— 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, default60— how many rows are kept, 1 to 256stepSeconds, number, default60— seconds per row; 0 makes every message its own rowsteps, number, default0— rows per roll-up to the second output; 0 sends nonexff, number, default0.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, default1000— 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, default10lo, number, default0— the value at which the bar is emptyhi, number, default100— the value at which the bar is fullstaleAfter, number, default0— 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 navigatestyle, string, default"box"valueType, string, default"bool"— bool, string or number: the type of what it sendsfireOn, string, default"release"— release (default: the finger lifts inside the button) or presstext, string, default""— what is drawn on the button; empty usesnamevalue, string, default""— momentary: what it sends; empty sends true, 'ON' or 1 by valueTypemaxChars, number, default8— room for this many characters (a value replaces the text)onValue, string, default""— toggle: what it sends to turn onoffValue, string, default""— toggle: what it sends to turn offonText, string, default"ON"offText, string, default"OFF"initial, boolean, defaultfalsependingTimeout, number, default5— toggle with a wired input: seconds to wait for the input to confirm before going backtarget, string, default""— navigate: next, prev, back, home or a page name fromscreens
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, default8— room for this many charactersstaleAfter, number, default0— 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, default0— seconds without a new value before it goes grey; 0 = never
modal
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 topriority, number, default0— a higher priority takes the screen from a lower one; the other waitstimeout, number, default0— seconds before the modal closes itself; 0 never
navigator
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 numberdecimals, number, default1lo, number, default0— lowest value it will show; with hi, sizes the space the number getshi, number, default100— highest value it will show; with lo, sizes the space the number getsstaleAfter, number, default0— 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, default200— least milliseconds between screen updateswrap, boolean, defaulttrue— whether next/prev wrap around at the ends of the pagesgridColumns, number, default12gridRows, number, default0touchPanelConfigId, string, default"", the id of athingstudio/config/touch-panelconfig — the touch-panel config to read touches from; empty for nonethemeConfigId, string, default"", the id of athingstudio/config/gui-themeconfigthemePreset, string, default""bg, colour, default nonecard, colour, default nonefg, colour, default nonemuted, colour, default nonetrack, colour, default noneaccent, colour, default noneon_accent, colour, default noneok, colour, default nonewarn, colour, default nonealarm, 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, default0— value at the bottom of the bars; the range is fixedhi, number, default100— value at the top of the bars; the range is fixedcolumns, number, default60— natural width in bars; in a layout it can stretch to show morecolWidth, number, default3— pixels per barheight, number, default48— natural height in pixelsstaleAfter, number, default0— 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, default34— 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, default2000— relative mode: how far the reading must move from the last sent one to firelower, number, default0— absolute mode: the low boundupper, number, default50000— absolute mode: the high boundsense, string, default"outside"— outside (fire when the value leaves the bounds) or inside (fire when it returns)pollMs, number, default0— 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 athingstudio/config/i2c-busconfigaddress, number, default118— the I2C address as a plain number: 118 is 0x76, 119 is 0x77intervalMs, number, default5000— 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 athingstudio/config/i2c-busconfigaddr, number, default60— the I2C address as a plain number: 60 is 0x3C, the usual SSD1306 addresswidth, number, default128height, number, default64
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 rawrotation), or 0, 90, 180, 270 as a string: the picture turned clockwise. Portrait 320x480 needs nonecontroller, string, default"st7789"frameFormat, string, default"rgb565"— rgb565, gs4, gs2 or mono; must match the gui screenpalette, object, default[0,65535,63488,2016,31,65504,2047,63519,33808,16904,50712,64800,32768,1024,16,1040]spiBus, number, default2baudrate, number, default40000000sck, number, default12mosi, number, default11dc, number, default13cs, number, default-1— GPIO, or -1 for nonereset, number, default-1— GPIO, or -1 for nonebacklight, number, default-1— GPIO, or -1 for nonewidth, number, default135— the panel's own width in pixelsheight, number, default240— the panel's own height in pixelsrotation, number, default1— how the panel is mounted, 0 to 7 (MADCTL); with an orientation, 0 to 3 onlycolorOrder, string, default"bgr"invertColors, boolean, defaultfalsedataLatchOrder, boolean, defaulttruexstart, number, default-1— -1 lets the driver choose; set both only for an unusual panel offsetystart, number, default-1
ebutton
Type thingstudio/ebutton, kind source, palette group hardware.
- Inputs: none
- Outputs: msg (string)
- Properties (name, type, default):
pin, number, default5pull, string, default"none"senseMode, string, default"auto"suppress, boolean, defaultfalsedebounceMs, number, default50longPressMs, number, default1000doubleClickMs, number, default400
encoder
Type thingstudio/encoder, kind source, palette group hardware.
- Inputs: none
- Outputs: msg (number)
- Properties (name, type, default):
pinX, number, default10— one of the two quadrature switch pinspinY, number, default11— the other quadrature switch pindiv, number, default1— divide the count by this to track detents; 1 counts every pulsevalue, number, default0— the starting valuevmin, string, default""— lowest value, or blank for no limitvmax, string, default""— highest value, or blank for no limitmod, string, default""— wrap the value at this number, or blank for nonedelay, number, default100— 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, default4pull, string, default"none"lopen, number, default1debounceMs, number, default50
gpio out
Type thingstudio/gpio_out, kind sink, palette group hardware.
- Inputs: signal (bool)
- Outputs: none
- Properties (name, type, default):
pin, number, default12
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 athingstudio/config/i2c-busconfigoperation, string, default"read"address, string, default""register, string, default""length, number, default1
interrupt
Type thingstudio/interrupt, kind source, palette group hardware.
- Inputs: none
- Outputs: msg (bool)
- Properties (name, type, default):
pin, number, default4edge, string, default"rising"
neopixel
Type thingstudio/neopixel, kind sink, palette group hardware.
- Inputs: msg (any)
- Outputs: none
- Properties (name, type, default):
pin, number, default13— the strip's data pincount, number, default8— how many pixels on the striporder, 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, default12freq, number, default1000
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 athingstudio/config/touch-panelconfigorientation, 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, default8080path, string, default"/"method, string, default"GET"responseTimeoutMs, number, default10000wifiConfigId, string, default"", the id of athingstudio/config/wificonfig
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, default5000wifiConfigId, string, default"", the id of athingstudio/config/wificonfig
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, defaultfalseqos, number, default0— 0 or 1brokerConfigId, string, default"", the id of athingstudio/config/mqtt-brokerconfigwifiConfigId, string, default"", the id of athingstudio/config/wificonfig
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, default0dynamic, boolean, defaultfalsebrokerConfigId, string, default"", the id of athingstudio/config/mqtt-brokerconfigwifiConfigId, string, default"", the id of athingstudio/config/wificonfig
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, default0— hours from UTC for standard time, -12 to 14 (5.5 for India); the summer hour is added bydstdst, string, default"eu"— eu adds the UK/EU summer hour automatically; none adds nothingformat, 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 nameswifiConfigId, string, default"", the id of athingstudio/config/wificonfig
udp receive
Type thingstudio/udp_receive, kind source, palette group network.
- Inputs: none
- Outputs: msg (bytes)
- Properties (name, type, default):
port, number, default9998pollMs, number, default20wifiConfigId, string, default"", the id of athingstudio/config/wificonfig
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, default9999timeoutMs, number, default2000wifiConfigId, string, default"", the id of athingstudio/config/wificonfig
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 athingstudio/config/wificonfig
wifi status
Type thingstudio/wifi_status, kind source, palette group network.
- Inputs: none
- Outputs: msg (bool)
- Properties (name, type, default):
pollMs, number, default5000wifiConfigId, string, default"", the id of athingstudio/config/wificonfig
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 ofdark-slate,light-paper,vivid, ``; Choosing a starting point replaces the colours below; editing one makes the theme custom.bg, colourcard, colourfg, colourmuted, colourtrack, colouraccent, colouron_accent, colourok, colourwarn, colouralarm, 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, numberscl, pinsda, pinfreq, 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 offt6336u; Other controllers (GT911, CST820) aren't supported yet.i2cConfigId, configRef: the id of athingstudio/config/i2c-busconfigaddress, text: 7-bit, e.g. 0x38.rstPin, pin: Blank if the panel has none.pollMs, numberwidth, numberheight, number: The panel's own size. If the display is rotated, tick swap/flip until a touch lands where you pressed.swapXY, booleanflipX, booleanflipY, 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, credentialsecurity, select: one ofpassword,open,unmanagedallowReprovisioning, 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}