Cury
Cury is a device for distributing fragrances efficiently and effectively. It features remote control capabilities, dynamic diffusion, and customizable lighting options, making it a versatile addition to any modern living space.
The following components are available in Cury:
- System
- WiFi
- Bluetooth Low Energy
- Cloud
- MQTT
- Outbound Websocket
- Up to 10 instances of Script
- Cury
Cury
Methods
Cury.GetStatus
Obtain the device’s status and errors
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
Response:
Find the Cury.GetStatus response properties in status section
See example here
Cury.GetConfig
Properties:
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
Response:
Find the Cury.GetConfig response properties in config section
See example here
Cury.SetConfig
Request:
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
| object | Configuration that the method takes |
Response:
| Property | Type | Description |
|---|---|---|
| boolean |
See example here
Cury.GetVialInfo
Obtain the detailed info of a vial in a slot
Request:
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
| string | optional Name of the slot in which the vial is placed (left or right) |
Response:
If slot param is omitted, data for both vial's is returned
If no vial is present in the slots, null will be returned.
See example here
Cury.Set
Set the vaporizing intensity of a vial in a slot
Request:
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
| string | Name of the slot in which the vial is placed (left or right) |
| number | Vaporization intensity in percents (0 - off, 1..100 working) |
| bool | Turns vaporization on or off without modifying the intensity value |
Response:
null on success or error
See example here
Cury.Boost
Turn on boost mode (max intensity for a predefined period) for a vial in a slot
Request:
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
| string | Name of the slot in which the vial is placed (left or right) |
Response:
{"boost":{"started_at":1737619149,"duration":60}} on success or error
See example here
Cury.StopBoost
Stop boost mode (max intensity for a predefined period) for a vial in a slot
Request:
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
| string | Name of the slot in which the vial is placed (left or right) |
Response:
{"was_on": true} on success or error
Cury.SetMode
Set the mode of operation. This will insert predefined schedules that control the heating and operation of the device that are suited for the appropriate room. Note that changing the mode from one to another will remove the shecules that were created by the previosly active mode.
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
| string | Name of mode of operation (one of |
Response:
null on success or error
Home Mode Profiles
Bedroom
{
"mode_id": "bedroom",
"label": "Bedroom",
"auto_heating_on": true,
"schedule": {
"days": ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
"hours": [
{"time": "06:00-10:00", "slot": "left", "intensity": 55},
{"time": "10:00-20:00", "slot": "right", "intensity": 40},
{"time": "20:00-22:00", "slot": "left", "intensity": 50}
]
}
}
Living Room
{
"mode_id": "living_room",
"label": "Living Room",
"auto_heating_on": true,
"schedule": {
"days": ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
"hours": [
{"time": "06:00-10:00", "slot": "left", "intensity": 70},
{"time": "10:00-19:00", "slot": "right", "intensity": 45},
{"time": "19:00-23:00", "slot": "left", "intensity": 60}
]
}
}
Lavatory Room
{
"mode_id": "lavatory_room",
"label": "Lavatory Room",
"auto_heating_on": true,
"schedule": {
"days": ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
"hours": [
{"time": "20:00-07:00", "slot": "right", "intensity": 25},
{"time": "07:00-09:00", "slot": "left", "intensity": 70},
{"time": "09:00-17:00", "slot": "right", "intensity": 25},
{"time": "17:00-20:00", "slot": "left", "intensity": 70}
]
}
}
Office Mode Profiles
Reception
{
"mode_id": "reception",
"label": "Reception",
"auto_heating_on": true,
"schedule": {
"days": ["Mon","Tue","Wed","Thu","Fri"],
"hours": [
{"time": "07:30-10:00", "slot": "left", "intensity": 80},
{"time": "10:00-12:00", "slot": "right", "intensity": 60},
{"time": "12:00-14:00", "slot": "left", "intensity": 80},
{"time": "14:00-18:30", "slot": "right", "intensity": 60}
]
}
}
Hall
{
"mode_id": "hall",
"label": "Hall",
"auto_heating_on": true,
"schedule": {
"days": ["Mon","Tue","Wed","Thu","Fri"],
"hours": [
{"time": "07:00-10:00", "slot": "left", "intensity": 90},
{"time": "10:00-16:00", "slot": "right", "intensity": 50},
{"time": "16:00-18:30", "slot": "left", "intensity": 80}
]
}
}
Workplace
{
"mode_id": "workplace",
"label": "Workplace",
"auto_heating_on": true,
"schedule": {
"days": ["Mon","Tue","Wed","Thu","Fri"],
"hours": [
{"time": "07:30-10:00", "slot": "left", "intensity": 70},
{"time": "10:00-12:30", "slot": "right", "intensity": 40},
{"time": "12:30-14:00", "slot": "left", "intensity": 70},
{"time": "14:00-18:30", "slot": "right", "intensity": 40}
]
}
}
Cury.SetAwayMode
Set away mode. Turning it on will turn off heating for both vials, turn off ambient light, turn off autoswitching and disable all schedules and vice versa if it's off. When away mode is active, all RPC methods which can modify the device state (except this one) will return an error indicating that away mode is active.
| Property | Type | Description |
|---|---|---|
| number | Id of the Cury component instance |
| bool | Enable/disable away mode |
Response:
null on success or error
Status
| Property | Type | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| number | Id of the Cury component instance | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| string | Currenly set mode of operation or | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| bool | Away mode active | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| object | Slots |
| object | Status of left slot or
|
| object | Status of right slot or
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| array of type string | Device errors if present
|
Configuration
| Property | Type | Description | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| number | Id of the Cury component instance | |||||||||||||||||||||||||||||||||||||||
| string | User editable device friendly name | |||||||||||||||||||||||||||||||||||||||
| number | Time in seconds that boost will be active after turned on | |||||||||||||||||||||||||||||||||||||||
| boolean | Automatically turn on heating for other vial if current one has become empty | |||||||||||||||||||||||||||||||||||||||
| object | Object to configure LEDs for left and right slot
| |||||||||||||||||||||||||||||||||||||||
| object | Controls ambient light behavior
| |||||||||||||||||||||||||||||||||||||||
| object | Default power on states for slots, possible values are
| |||||||||||||||||||||||||||||||||||||||
| object | Slot timer configuration
|
Webhook Events
cury.level_changed- produced when a vial's liquid level has changed
cury.level_changed supports attributes, that can be used to compose conditional webhooks:
| Property | Type | Description |
|---|---|---|
| string | The vial slot on which the level change was detected |
| number | The liquid level of the vial in percents |
cury.heating_changed- produced when a vial's heating state and intensity has changed
cury.heating_changed supports attributes, that can be used to compose conditional webhooks:
| Property | Type | Description |
|---|---|---|
| string | The vial slot on which the heating state change was detected |
| boolean | If the vial slot heating is on |
| number | The vial slot intensity in percents (0 to 100) |
Examples
Cury.GetStatus Example
- Cury.GetStatus HTTP GET Request
- Cury.GetStatus Curl Request
- Cury.GetStatus Mos Request
http://192.168.33.1/rpc/Cury.GetStatus?id=0
curl -X POST -d '{"id":1,"method":"Cury.GetStatus","params":{"id":0}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.GetStatus '{"id":0}'
Response
- Cury.GetStatus HTTP GET Response
- Cury.GetStatus Curl Response
- Cury.GetStatus Mos Response
{
"id": 0,
"slots": {
"left": {
"intensity": 0,
"on": false,
"boost": null,
"timer": null,
"vial": {
"level": 0,
"serial": "6861050000c01de0",
"name": "Givodan",
"vial_fault": "empty"
}
},
"right": {
"intensity": 70,
"on": true,
"boost": null,
"timer": null,
"vial": {
"level": 86,
"serial": "6e89050000c01de0",
"name": "Silk Bloom"
}
}
}
}
{
"id": 1,
"params": {
"id": 0,
"slots": {
"left": {
"intensity": 0,
"on": false,
"boost": null,
"timer": null,
"vial": {
"level": 0,
"serial": "6861050000c01de0",
"name": "Givodan",
"vial_fault": "empty"
}
},
"right": {
"intensity": 70,
"on": true,
"boost": null,
"timer": null,
"vial": {
"level": 86,
"serial": "6e89050000c01de0",
"name": "Silk Bloom"
}
}
}
}
}
{
"id": 0,
"slots": {
"left": {
"intensity": 0,
"on": false,
"boost": null,
"timer": null,
"vial": {
"level": 0,
"serial": "6861050000c01de0",
"name": "Givodan",
"vial_fault": "empty"
}
},
"right": {
"intensity": 70,
"on": true,
"boost": null,
"timer": null,
"vial": {
"level": 86,
"serial": "6e89050000c01de0",
"name": "Silk Bloom"
}
}
}
}
Cury.GetConfig example
- Cury.GetConfig HTTP GET Request
- Cury.GetConfig Curl Request
- Cury.GetConfig Mos Request
http://192.168.33.1/rpc/Cury.GetConfig?id=0
curl -X POST -d '{"id":1,"method":"Cury.GetConfig","params":{"id":0}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.GetConfig '{"id":0}'
Response
- Cury.GetConfig HTTP GET Response
- Cury.GetConfig Curl Response
- Cury.GetConfig Mos Response
{
"id": 0,
"name": null,
"boost_time": 1800,
"ui": {
"mode": "level",
"brightness": 10
},
"ambient": {
"enable": true,
"use_vial_color": true,
"color": [
0,
255,
0
],
"brightness": 100
},
"initial_state": {
"left": "restore_last",
"right": "restore_last"
},
"timer": {
"left": {
"auto_on": false,
"auto_on_delay": 60,
"auto_off": false,
"auto_off_delay": 60
},
"right": {
"auto_on": false,
"auto_on_delay": 60,
"auto_off": false,
"auto_off_delay": 60
}
},
"auto_heating_on": true
}
{
"id": 1,
"params": {
"id": 0,
"name": null,
"boost_time": 1800,
"ui": {
"mode": "level",
"brightness": 10
},
"ambient": {
"enable": true,
"use_vial_color": true,
"color": [
0,
255,
0
],
"brightness": 100
},
"initial_state": {
"left": "restore_last",
"right": "restore_last"
},
"timer": {
"left": {
"auto_on": false,
"auto_on_delay": 60,
"auto_off": false,
"auto_off_delay": 60
},
"right": {
"auto_on": false,
"auto_on_delay": 60,
"auto_off": false,
"auto_off_delay": 60
}
},
"auto_heating_on": true
}
}
{
"id": 0,
"name": null,
"boost_time": 1800,
"ui": {
"mode": "level",
"brightness": 10
},
"ambient": {
"enable": true,
"use_vial_color": true,
"color": [
0,
255,
0
],
"brightness": 100
},
"initial_state": {
"left": "restore_last",
"right": "restore_last"
},
"timer": {
"left": {
"auto_on": false,
"auto_on_delay": 60,
"auto_off": false,
"auto_off_delay": 60
},
"right": {
"auto_on": false,
"auto_on_delay": 60,
"auto_off": false,
"auto_off_delay": 60
}
},
"auto_heating_on": true
}
Cury.SetConfig Example
- Cury.SetConfig HTTP GET Request
- Cury.SetConfig Curl Request
- Cury.SetConfig Mos Request
http://192.168.33.1/rpc/Cury.SetConfig?id=0&config={"ui":{"mode":"level","brightness":60}}
curl -X POST -d '{"id":1,"method":"Cury.SetConfig","params":{"id":0,"config":{"ui":{"mode":"level","brightness":60}}}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.SetConfig '{"id":0,"config":{"ui":{"mode":"level","brightness":60}}}'
Response
- Cury.SetConfig HTTP GET Response
- Cury.SetConfig Curl Response
- Cury.SetConfig Mos Response
{
"restart_required": false
}
{
"id": 1,
"params": {
"restart_required": false
}
}
{
"restart_required": false
}
Cury.GetVialInfo Example
- Cury.GetVialInfo HTTP GET Request
- Cury.GetVialInfo Curl Request
- Cury.GetVialInfo Mos Request
http://192.168.33.1/rpc/Cury.GetVialInfo?id=0&slot="left"
curl -X POST -d '{"id":1,"method":"Cury.GetVialInfo","params":{"id":0,"slot":"left"}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.GetVialInfo '{"id":0,"slot":"left"}'
Response
- Cury.GetVialInfo HTTP GET Response
- Cury.GetVialInfo Curl Response
- Cury.GetVialInfo Mos Response
{
"id": 0,
"left": {
"type": "perfume",
"product_name": "Amber Dusk",
"mfr_name": "Shelly",
"exp_date": "2027-10-27",
"default_intensity": 70,
"serial": "3072050000c01de0",
"color_intensity": {
"brightness": 39,
"rgb": [
238,
119,
36
]
},
"color_level": {
"brightness": 39,
"rgb": [
238,
119,
36
]
}
}
}
{
"id": 1,
"params": {
"id": 0,
"left": {
"type": "perfume",
"product_name": "Amber Dusk",
"mfr_name": "Shelly",
"exp_date": "2027-10-27",
"default_intensity": 70,
"serial": "3072050000c01de0",
"color_intensity": {
"brightness": 39,
"rgb": [
238,
119,
36
]
},
"color_level": {
"brightness": 39,
"rgb": [
238,
119,
36
]
}
}
}
}
{
"id": 0,
"left": {
"type": "perfume",
"product_name": "Amber Dusk",
"mfr_name": "Shelly",
"exp_date": "2027-10-27",
"default_intensity": 70,
"serial": "3072050000c01de0",
"color_intensity": {
"brightness": 39,
"rgb": [
238,
119,
36
]
},
"color_level": {
"brightness": 39,
"rgb": [
238,
119,
36
]
}
}
}
Cury.Set Example
- Cury.Set HTTP GET Request
- Cury.Set Curl Request
- Cury.Set Mos Request
http://192.168.33.1/rpc/Cury.Set?id=0&slot="left"&intensity=50
curl -X POST -d '{"id":1,"method":"Cury.Set","params":{"id":0,"slot":"left","intensity":50}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.Set '{"id":0,"slot":"left","intensity":50}'
Response
- Cury.Set HTTP GET Response
- Cury.Set Curl Response
- Cury.Set Mos Response
null
{
"id": 1,
"params": null
}
null
Cury.Set Example disabling heating
- Cury.Set HTTP GET Request
- Cury.Set Curl Request
- Cury.Set Mos Request
http://192.168.33.1/rpc/Cury.Set?id=0&slot="left"&on=false
curl -X POST -d '{"id":1,"method":"Cury.Set","params":{"id":0,"slot":"left","on":false}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.Set '{"id":0,"slot":"left","on":false}'
Response
- Cury.Set HTTP GET Response
- Cury.Set Curl Response
- Cury.Set Mos Response
null
{
"id": 1,
"params": null
}
null
Cury.Boost Example
- Cury.Boost HTTP GET Request
- Cury.Boost Curl Request
- Cury.Boost Mos Request
http://192.168.33.1/rpc/Cury.Boost?id=0&slot="left"
curl -X POST -d '{"id":1,"method":"Cury.Boost","params":{"id":0,"slot":"left"}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.Boost '{"id":0,"slot":"left"}'
Response
- Cury.Boost HTTP GET Response
- Cury.Boost Curl Response
- Cury.Boost Mos Response
{
"boost": {
"started_at": 1737619149,
"duration": 60
}
}
{
"id": 1,
"params": {
"boost": {
"started_at": 1737619149,
"duration": 60
}
}
}
{
"boost": {
"started_at": 1737619149,
"duration": 60
}
}
Cury.GetStatus Example with orientation tilt
- Cury.GetStatus HTTP GET Request
- Cury.GetStatus Curl Request
- Cury.GetStatus Mos Request
http://192.168.33.1/rpc/Cury.GetStatus?id=0
curl -X POST -d '{"id":1,"method":"Cury.GetStatus","params":{"id":0}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.GetStatus '{"id":0}'
Response
- Cury.GetStatus HTTP GET Response
- Cury.GetStatus Curl Response
- Cury.GetStatus Mos Response
{
"id": 0,
"mode": null,
"away_mode": false,
"slots": {
"left": {
"intensity": 0,
"on": true,
"boost": null,
"timer": null,
"vial": {
"level": 86,
"serial": "7fc9010000c01de0"
}
},
"right": null
},
"errors": [
"orientation_tilt"
]
}
{
"id": 1,
"params": {
"id": 0,
"mode": null,
"away_mode": false,
"slots": {
"left": {
"intensity": 0,
"on": true,
"boost": null,
"timer": null,
"vial": {
"level": 86,
"serial": "7fc9010000c01de0"
}
},
"right": null
},
"errors": [
"orientation_tilt"
]
}
}
{
"id": 0,
"mode": null,
"away_mode": false,
"slots": {
"left": {
"intensity": 0,
"on": true,
"boost": null,
"timer": null,
"vial": {
"level": 86,
"serial": "7fc9010000c01de0"
}
},
"right": null
},
"errors": [
"orientation_tilt"
]
}
Cury.GetStatus Example with non genuine vial
- Cury.GetStatus HTTP GET Request
- Cury.GetStatus Curl Request
- Cury.GetStatus Mos Request
http://192.168.33.1/rpc/Cury.GetStatus?id=0
curl -X POST -d '{"id":1,"method":"Cury.GetStatus","params":{"id":0}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.GetStatus '{"id":0}'
Response
- Cury.GetStatus HTTP GET Response
- Cury.GetStatus Curl Response
- Cury.GetStatus Mos Response
{
"id": 0,
"mode": null,
"away_mode": false,
"slots": {
"left": {
"intensity": 0,
"boost": null,
"timer": null,
"vial": {
"level": -1,
"serial": "52c6010000c01de0",
"vial_fault": "non_genuine"
}
},
"right": null
}
}
{
"id": 1,
"params": {
"id": 0,
"mode": null,
"away_mode": false,
"slots": {
"left": {
"intensity": 0,
"boost": null,
"timer": null,
"vial": {
"level": -1,
"serial": "52c6010000c01de0",
"vial_fault": "non_genuine"
}
},
"right": null
}
}
}
{
"id": 0,
"mode": null,
"away_mode": false,
"slots": {
"left": {
"intensity": 0,
"boost": null,
"timer": null,
"vial": {
"level": -1,
"serial": "52c6010000c01de0",
"vial_fault": "non_genuine"
}
},
"right": null
}
}
Cury.SetMode Example
- Cury.SetMode HTTP GET Request
- Cury.SetMode Curl Request
- Cury.SetMode Mos Request
http://192.168.33.1/rpc/Cury.SetMode?id=0&mode="hall"
curl -X POST -d '{"id":1,"method":"Cury.SetMode","params":{"id":0,"mode":"hall"}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.SetMode '{"id":0,"mode":"hall"}'
Response
- Cury.SetMode HTTP GET Response
- Cury.SetMode Curl Response
- Cury.SetMode Mos Response
null
{
"id": 1,
"params": null
}
null
Cury.SetAwayMode Example
- Cury.SetAwayMode HTTP GET Request
- Cury.SetAwayMode Curl Request
- Cury.SetAwayMode Mos Request
http://192.168.33.1/rpc/Cury.SetAwayMode?id=0&on=true
curl -X POST -d '{"id":1,"method":"Cury.SetAwayMode","params":{"id":0,"on":true}}' http://${SHELLY}/rpc
mos --port ${PORT} call Cury.SetAwayMode '{"id":0,"on":true}'
Response
- Cury.SetAwayMode HTTP GET Response
- Cury.SetAwayMode Curl Response
- Cury.SetAwayMode Mos Response
null
{
"id": 1,
"params": null
}
null