Skip to main content
Version: 1.0

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:

Cury

Methods

Cury.GetStatus

Obtain the device’s status and errors

PropertyTypeDescription

id

number

Id of the Cury component instance

Response:

Find the Cury.GetStatus response properties in status section

See example here

Cury.GetConfig

Properties:

PropertyTypeDescription

id

number

Id of the Cury component instance

Response:

Find the Cury.GetConfig response properties in config section

See example here

Cury.SetConfig

Request:

PropertyTypeDescription

id

number

Id of the Cury component instance

config

object

Configuration that the method takes

Response:

PropertyTypeDescription

restart_required

boolean

See example here

Cury.GetVialInfo

Obtain the detailed info of a vial in a slot

Request:

PropertyTypeDescription

id

number

Id of the Cury component instance

slot

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:

PropertyTypeDescription

id

number

Id of the Cury component instance

slot

string

Name of the slot in which the vial is placed (left or right)

intensity

number

Vaporization intensity in percents (0 - off, 1..100 working)

on

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:

PropertyTypeDescription

id

number

Id of the Cury component instance

slot

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:

PropertyTypeDescription

id

number

Id of the Cury component instance

slot

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.

PropertyTypeDescription

id

number

Id of the Cury component instance

mode

string

Name of mode of operation (one of null, "hall", "bedroom", "living_room", "lavatory_room", "reception", "workplace")

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.

PropertyTypeDescription

id

number

Id of the Cury component instance

on

bool

Enable/disable away mode

Response:

null on success or error

Status


PropertyTypeDescription

id

number

Id of the Cury component instance

mode

string

Currenly set mode of operation or null if none is activated

away_mode

bool

Away mode active

slots

object

Slots

left

object

Status of left slot or null if no vial is present

PropertyTypeDescription

on

bool

Vial heating enabled

intensity

number

Current intensity in percent 0..100 working

boost

object

Boost state

PropertyTypeDescription

started_at

number

Unix timestamp of moment boost was activated

duration

number

Boost duration in seconds

timer

object

Auto timer state

PropertyTypeDescription

timer_started_at

number

Unix timestamp of moment the timer was started

timer_duration

number

Timer duration in seconds

vial

object

Brief data about vial state

PropertyTypeDescription

level

number

Current liquid level in percent 0-100, -1 if liquid level is still being retrieved

serial

string

Serial number of vial

name

string

Vial Aroma name

vial_fault

string

Vial error (present only when error is detected)

ValueDescription

non_genuine

Vial is not genuine

tag_error

NFC tag communication problem

expired

Vial liquid have expired

empty

No liquid in vial

right

object

Status of right slot or null if no vial is present

PropertyTypeDescription

on

bool

Vial heating enabled

intensity

number

Current intensity in percent 0..100

boost

object

Boost state

PropertyTypeDescription

started_at

number

Unix timestamp of moment boost was activated

duration

number

Boost duration in seconds

timer

object

Auto timer state

PropertyTypeDescription

timer_started_at

number

Unix timestamp of moment the timer was started

timer_duration

number

Timer duration in seconds

vial

object

Brief data about vial state

PropertyTypeDescription

level

number

Current liquid level in percent 0-100, -1 if liquid level is still being retrieved

serial

string

Serial number of vial

name

string

Vial Aroma name

vial_fault

string

Vial error (present only when error is detected)

ValueDescription

non_genuine

Vial is not genuine

tag_error

NFC tag communication problem

expired

Vial liquid have expired

empty

No liquid in vial

errors

array of type string

Device errors if present

ValueDescription

nfc_bus

Error with NFC communcation

acc_bus

Accelerometer error

keyboard_button_stuck

Button stuck

keyboard_general_error

Button general error

input_voltage_out_of_range

Input voltage out of range

thermal_sensor_connection

Thermal sensor connection error

thermal_sensor_driver

Thermal sensor driver error

heater_disconnected

Heater disconnected error

heater_overload

Heater overload error

input_voltage_change

Input voltage changed error

orientation_tilt

Device is tiled error

orientation_plug_rotated

Device is plugged upside down in to power plug

Configuration

PropertyTypeDescription

id

number

Id of the Cury component instance

name

string

User editable device friendly name

boost_time

number

Time in seconds that boost will be active after turned on

auto_heating_on

boolean

Automatically turn on heating for other vial if current one has become empty

ui

object

Object to configure LEDs for left and right slot

PropertyTypeDescription

mode

string

Information to show on inactive (no user interaction) state, enum

ValueDescription

off

Turn off slot LEDs

level

Shoe vial liquid level

intensity

Show vial vaporization intensity

brightness

number

UI brightness in inactive mode

ambient

object

Controls ambient light behavior

PropertyTypeDescription

enable

bool

Should ambient light be enabled or not

use_vial_color

bool

Should ambient light use the color from the left vial/slot, if color data is present in the vial

color

array of type number

Color to use when ambient is on but the vial slots are empty or no vial has color info data in it's nfc tag. Red, Green, Blue [r,g,b] - each value represents level between 0..255

brightness

number

Ambient color brightness if no vial is present or either vials have no color data. Range in 0-100 in percents

initial_state

object

Default power on states for slots, possible values are restore_last, on, off. Boosts do not survive power cycling

PropertyTypeDescription

left

string

Default power on state for left slot

right

string

Default power on state for right slot

timer

object

Slot timer configuration

PropertyTypeDescription

left

object

Timer configuration for left slot

PropertyTypeDescription

auto_on

boolean

True if the "Automatic ON" function is enabled, false otherwise

auto_on_delay

number

Seconds to pass until the slot vial heating is set back to on

auto_off

boolean

True if the "Automatic OFF" function is enabled, false otherwise

auto_off_delay

number

Seconds to pass until the slot vial heating is set back to off

right

object

Timer configuration for right slot

PropertyTypeDescription

auto_on

boolean

True if the "Automatic ON" function is enabled, false otherwise

auto_on_delay

number

Seconds to pass until the slot vial heating is set back to on

auto_off

boolean

True if the "Automatic OFF" function is enabled, false otherwise

auto_off_delay

number

Seconds to pass until the slot vial heating is set back to off

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:

PropertyTypeDescription

slot

string

The vial slot on which the level change was detected

level

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:

PropertyTypeDescription

slot

string

The vial slot on which the heating state change was detected

on

boolean

If the vial slot heating is on

intensity

number

The vial slot intensity in percents (0 to 100)

Examples

Cury.GetStatus Example

http://192.168.33.1/rpc/Cury.GetStatus?id=0

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"
}
}
}
}

Cury.GetConfig example

http://192.168.33.1/rpc/Cury.GetConfig?id=0

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
}

Cury.SetConfig Example

http://192.168.33.1/rpc/Cury.SetConfig?id=0&config={"ui":{"mode":"level","brightness":60}}

Response

{
"restart_required": false
}

Cury.GetVialInfo Example

http://192.168.33.1/rpc/Cury.GetVialInfo?id=0&slot="left"

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
]
}
}
}

Cury.Set Example

http://192.168.33.1/rpc/Cury.Set?id=0&slot="left"&intensity=50

Response

null

Cury.Set Example disabling heating

http://192.168.33.1/rpc/Cury.Set?id=0&slot="left"&on=false

Response

null

Cury.Boost Example

http://192.168.33.1/rpc/Cury.Boost?id=0&slot="left"

Response

{
"boost": {
"started_at": 1737619149,
"duration": 60
}
}

Cury.GetStatus Example with orientation tilt

http://192.168.33.1/rpc/Cury.GetStatus?id=0

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"
]
}

Cury.GetStatus Example with non genuine vial

http://192.168.33.1/rpc/Cury.GetStatus?id=0

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
}
}

Cury.SetMode Example

http://192.168.33.1/rpc/Cury.SetMode?id=0&mode="hall"

Response

null

Cury.SetAwayMode Example

http://192.168.33.1/rpc/Cury.SetAwayMode?id=0&on=true

Response

null