This UI widget is not a functional widget in that it is something you would want to put on your Pages. It is intended to provide examples of most of what is possible when defining properties on custom UI widgets and rule templates for reference and testing. It presents properties in all sorts of different ways and shows you what the property becomes when the user selects is. For example, the Multiple Items property shows how one can select more than one Item and the widget renders what that looks like (a comma separated list of Item names).
To use the widget, first install it from the marketplace.
Then Navigate to MainUI → Developer Tools → UI Widgets → parameterPlayground.
In the bottom left select Set Props, and you’ll be presented with a form showing how each parameter is displayed to the user to fill them out. On the right you will see exactly how that value will be passed into your widget once the parameter is selected.
I used numbering to help correlate the property with where it’s rendered in the widget. The order is not the same because the parameter Grouping will change the order the fields are shown to the user.
Some features demonstrated include:
- grouping parameters so they are displayed together on the form
- flagging parameters as advanced so they only appear when “Show Advanced” is selected
- default values
- selecting multiple (e.g. multiple Items)
- filtering (does not work prior to OH 5.1 M3)
- Item, Thing, Channel, rule/script pickers
- Map picker
- cron expression builder
- Units
- regex input checking
- date and time pickers
For more details on what contexts are supported see ConfigDescriptionParameter (openHAB Core 5.1.0-SNAPSHOT API)
As of this writing the following contexts do not do anything so you can avoid them (I’ve removed them from the original version of this widget):
- network-address
- network-interface
- serial-port
- password-create
- week
- telephone
- url
- tag (but you can filter on tags)
- group (is probably going to be removed, use item with filterCritera on type Group)
- service
- channel-type
Some notes on filterCriteria are needed.
- You can have more than one criterion on the same parameter which can be helpful to narrow down the list based both on tag and Item type.
- Filtering on Number dimensions (e.g. Number:Temperature) works, but it will also so plain Number Items without units. this also applies to Group’s (e.g. Group:Number:Temperature).
- I recommend always showing the filter button so the end users can choose something else. They know better than we do what’s appropriate.
Screenshots
Changelog
Verison 0.2
- removed contexts that don’t do anything
- added more filterCritera examples
- added headers to the rendered widget to make it easier to map the list item to the property
- added more parameter groups for UI, numbers, and date time
- added a numbering scheme to make mapping the list item to the property easier
Version 0.1
- initial release
Resources
uid: parameterPlayground
tags: []
props:
parameters:
- context: item
description: Only allow selection of Switch and Contact Items
label: I-1 Switch or Contact Item
name: switchContact
required: false
type: TEXT
groupName: items
filterCriteria:
- value: Switch,Contact
name: type
- value: "true"
name: filterToggle
- context: item
description: Only allow selection of Number and Number:Temperature Items
label: I-2 Temperature Item
name: numberItem
required: false
type: TEXT
groupName: items
filterCriteria:
- value: Number:Temperature
name: type
- value: "true"
name: filterToggle
- context: item
description: Only show Group Items
label: I-3 Group
name: group
required: true
type: TEXT
groupName: items
filterCriteria:
- value: Group
name: type
- value: "true"
name: filterToggle
- context: item
description: Only show Group Items of type Number
label: I-4 Number Group
name: groupTypeFilter
required: true
type: TEXT
groupName: items
filterCriteria:
- value: Number
name: groupType
- value: Group
name: type
- value: "true"
name: filterToggle
- context: item
default: not set
description: Select more than one DateTime Item
label: I-5 Multiple Items
name: multi
required: false
type: TEXT
multiple: true
groupName: items
filterCriteria:
- value: DateTime
name: type
- context: item
default: not set
description: Select an Item from a list only showing Items with the Switch or
Light tags.
label: I-6 An Item with tag
name: withTags
required: false
type: TEXT
groupName: items
filterCriteria:
- value: Switch,Light
name: tag
- context: item
description: Select an Item from a list only showing Number, Number:Temperature,
and Items with the Setpoint tag
label: I-7 A temperature setpoint Item
name: setpoint
required: false
type: TEXT
groupName: items
filterCriteria:
- value: Number:Temperature
name: type
- value: Setpoint
name: tag
- context: rule
default: not set
description: Select from Scenes, Scripts, and Rules
label: R-1 Script to Call
name: script
required: false
type: TEXT
groupName: rules
- context: script
description: Create an inline script
label: R-2 Inline script
name: inlineScript
required: false
type: TEXT
groupName: rules
- context: thing
default: not set
description: Select a Thing
label: T-1 Thing
name: thing
required: false
type: TEXT
groupName: things
- context: channel
description: Select an Event Channel
label: T-2 Event Channel
name: channel
required: false
type: TEXT
groupName: things
- context: date
description: Choose a date using a calendar
label: D-1 Date Picker
name: date
required: false
type: TEXT
groupName: datetime
- context: datetime
description: Choose a date and time using pickers
label: D-2 Date and Time Picker
name: datetime
required: false
type: TEXT
groupName: datetime
- context: month
description: Choose a month of the year
label: D-3 Month
name: month
required: false
type: TEXT
groupName: datetime
- context: dayOfWeek
description: Choose a day of the week
label: D-4 Day of the Week
name: day
required: false
type: TEXT
groupName: datetime
- context: time
description: Select a time, 24 hour format
label: D-5 Time
name: time
required: false
type: TEXT
groupName: datetime
- default: not set
description: Any arbitrary text
label: M-1 Arbitrary Text
name: text
required: false
type: TEXT
groupName: input
- default: "7"
description: An integer > 0, defaults to 7
label: N-1 Integer
name: integer
required: false
type: INTEGER
min: 0
groupName: input
- default: "8"
description: An integer between 0 and 10 with a step of 2, defaults to 8
label: N-2 Bound Integer
name: boundInt
required: false
type: INTEGER
min: 0
max: 10
groupName: input
- default: "12.34"
description: A decimal value
label: N-3 Decimal
name: decimal
required: false
type: DECIMAL
groupName: input
- default: "65"
description: A decimal value with units
label: N-4 Temperature
name: temp
required: false
type: DECIMAL
groupName: input
unit: F
unitLabel: °F
- default: ==
description: Select from a list, default is ==
label: M-2 List Selection
name: list
required: false
type: TEXT
groupName: input
limitToOptions: true
options:
- label: == equals
value: ==
- label: "!= not equals"
value: "!="
- label: < less than
value: <
- label: <= less than equal
value: <=
- label: "> greater than"
value: ">"
- label: ">= greater than equal"
value: ">="
- default: "true"
description: A binary selection
label: M-3 Boolean Option
name: bool
required: false
type: BOOLEAN
groupName: input
- context: password
default: not set
description: Passwords or other secrets that should not be displayed
label: M-4 Password
name: password
required: false
type: TEXT
groupName: input
- context: color
description: Choose a color using a color wheel
label: M-5 Color Picker
name: color
required: false
type: TEXT
groupName: input
- context: email
description: Enforces email address formatting
label: M-6 Email address
name: email
required: false
type: TEXT
groupName: input
- context: location
description: Map location picker
label: M-7 Location
name: location
required: false
type: TEXT
groupName: input
- context: cronexpression
description: M-8 Cron Expression
label: Cron Expression
name: cron
required: false
type: TEXT
groupName: input
- context: persistenceService
description: Persistence service picker
label: M-9 Persistence Service
name: persistence
required: false
type: TEXT
groupName: input
- context: page
description: Page picker
label: U-1 Page
name: page
required: false
type: TEXT
groupName: ui
- context: widget
description: Widget picker
label: U-2 Widget
name: widget
required: false
type: TEXT
groupName: ui
- description: Arbitrary text limited to IP address formatting
label: M-10 Regex enforcing IP address formatting
name: regex
required: false
type: TEXT
pattern: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
groupName: input
- default: not set
description: Advanced property, should be hidden until show advanced is checked
label: A-1 Avanced property
name: advanced
required: false
type: TEXT
groupName: input
advanced: true
- default: not set
description: Advanced property 1, should be hidden until show advanced is checked
label: A-2 Avanced property 1
name: advanced1
required: false
type: TEXT
groupName: advanced
advanced: false
- default: not set
description: Advanced property 2, should be hidden until show advanced is checked
label: A-3 Avanced property 2
name: advanced2
required: false
type: TEXT
groupName: advanced
advanced: false
parameterGroups:
- name: items
advanced: false
label: Item selectors
description: Item related selectors, pickers, etc.
- name: rules
advanced: false
label: Rule selectors
description: Scene, Scripts, and Rules selectors, pickers, etc.
- name: things
advanced: false
label: Thing selectors
description: Thing and Channel related selectors, pickers, etc.
- name: datetime
advanced: false
label: Date and time selectors
description: Input fields and selectors for date time parameters
- name: numbers
advanced: false
label: Numbers and units
description: Number parameters with restrictions
- name: ui
advanced: false
label: UI selectors
description: Selectors for pages and widgets
- name: input
advanced: false
label: Text input and selectors
description: Input fields, selectors, etc. for text, numbers, locations, etc.
- name: advanced
advanced: true
label: Group for advanced properties
description: The whole group is hidden until show advanced is checked.
timestamp: Dec 5, 2025, 10:17:40 AM
component: oh-list-card
config:
footer: footer
simpleList: true
title: Set props to test!
slots:
default:
- component: oh-label-item
config:
title: "----Items----"
- component: oh-label-item
config:
title: "='I-1 Switch or Contact Item: ' + props.switchContact"
- component: oh-label-item
config:
title: "='I-2 Temperature Items: ' + props.numberItem"
- component: oh-label-item
config:
title: "='I-3 Group: ' + props.group"
- component: oh-label-item
config:
title: "='I-4 Group Type: ' + props.groupTypeFilter"
- component: oh-label-item
config:
title: "='I-5 Multiple Items: ' + props.multi"
- component: oh-label-item
config:
title: "='I-6 Items with tags: ' + props.withTags"
- component: oh-label-item
config:
title: "='I-7 Items with type and tags: ' + props.setpoint"
- component: oh-label-item
config:
title: "----Rules----"
- component: oh-label-item
config:
title: "='R-1 Script to Call: ' + props.script"
- component: oh-label-item
config:
title: "='R-2 Inline Script: ' + props.inlineScript"
- component: oh-label-item
config:
title: "----Things----"
- component: oh-label-item
config:
title: "='T-1 Thing: ' + props.thing"
- component: oh-label-item
config:
title: "='T-2 Event Channel: ' + props.channel"
- component: oh-label-item
config:
title: "----Datetime----"
- component: oh-label-item
config:
title: "='D-1 Date Picker: ' + props.date"
- component: oh-label-item
config:
title: "='D-2 Date Time Picker: ' + props.datetime"
- component: oh-label-item
config:
title: "='D-3 Month: ' + props.month"
- component: oh-label-item
config:
title: "='D-4 Day of the Week: ' + props.day"
- component: oh-label-item
config:
title: "='D-5 Time: ' + props.time"
- component: oh-label-item
config:
title: "----Numbers----"
- component: oh-label-item
config:
title: "='N-1 Integer: ' + props.integer"
- component: oh-label-item
config:
title: "='N-2 Bound Integer: ' + props.boundInt"
- component: oh-label-item
config:
title: "='N-3 Decimal: ' + props.decimal"
- component: oh-label-item
config:
title: "='N-4 Temperature: ' + props.temp"
- component: oh-label-item
config:
title: "----UI----"
- component: oh-label-item
config:
title: "='U-1 Page: ' + props.page"
- component: oh-label-item
config:
title: "='U-2 Widget: ' + props.widget"
- component: oh-label-item
config:
title: "----Miscellaneous----"
- component: oh-label-item
config:
title: "='M-1 Arbitrary Text: ' + props.text"
- component: oh-label-item
config:
title: "='M-2 List Selection: ' + props.list"
- component: oh-label-item
config:
title: "='M-3 Boolean Option: ' + props.bool"
- component: oh-label-item
config:
title: "='M-4 Password: ' + props.password"
- component: oh-label-item
config:
title: "='M-5 Color Picker: ' + props.color"
- component: oh-label-item
config:
title: "='M-6 Email: ' + props.email"
- component: oh-label-item
config:
title: "='M-7 Location: ' + props.location"
- component: oh-label-item
config:
title: "='M-8 Cron Expression: ' + props.cron"
- component: oh-label-item
config:
title: "='M-9 Persistence Service: ' + props.persistence"
- component: oh-label-item
config:
title: "='M-10 Regex enforcing IP address formatting: ' + props.regex"
- component: oh-label-item
config:
title: "----Advanced----"
- component: oh-label-item
config:
title: "='A-1 Advanced Properties: ' + props.advanced"
- component: oh-label-item
config:
title: "='A-2 Advanced Properties 1: ' + props.advanced1"
- component: oh-label-item
config:
title: "='A-3 Advanced Properties 2: ' + props.advanced2"



