Device attributes

Device attributes

You will need a {deviceId} from the Get devices request

Get device attributes

Gets a list of device attributes for the selected device. This is used to view the device's current configuration.

Request

GET
https://api.edenic.io/api/v1/device-attribute/{deviceId}

Query parameters

keys string optional

A comma-separated list of attribute keys e.g. setting.ph_low_alarm,setting.ph_high_alarm.

Response

200 OK - Example
[
  {
    "lastUpdateTs": 1689398954522,
    "key": "alarm.ph_low_alarm",
    "value": false
  },
  {
    "lastUpdateTs": 1681544811367,
    "key": "setting.device_name",
    "value": {
        "conflicts": [],
        "correlationId": "12345678-1234-1234-1234-123456789012",
        "originator": "APP",
        "status": "SUCCESS",
        "userId": "12345678-1234-1234-1234-123456789012",
        "value": "My Controller"
    }
  },
  ...
]

Response values

lastUpdateTs bigint

The time (in milliseconds since epoch) when the value was last updated.


key string

The key of the attribute.


value any

For alarms this is either true or false, but for settings it is a JSON object with a nested value.


value.conflicts Array<string>

Used for when the device has changes that conflict with server changes and will include the correlationId of the conflicting change.


value.correlationId string

A random UUID generated for the change. Used when conflicts occur.


value.originator string

Where the change originated.

Values: DEVICE or APP.


value.status string

Whether the change was completed successfully.

Values: SUCCESS, PENDING, FAILURE or CONFLICT.


value.userId string

The UUID of the user that made the change when the originator is APP.


value.value any

The value of the setting. See Available attributes for the expected type.

Update device attributes

Updates a list of device attributes for the selected device. This is used to request an update to the device's configuration.

⚠️

Attribute changes will not be seen straight away in the GET request as the change has to be lined up with the device

Request

PATCH
https://api.edenic.io/api/v1/device-attribute/{deviceId}

Body

Attributes have strict validation for their values and some may need to be sent with other attributes. Multiple attributes can be updated at once, but all need to be valid before any are applied.

The body expects JSON format. The request will have to include the Content-Type: application/json header.

JSON body
{
  "setting.required_ph": 6.0,
  "setting.ph_low_alarm": 5.0,
  "setting.ph_high_alarm": 7.0
}

Available attributes

Available attributes for each device and the validation for each one is listed below. Only setting attributes can be updated but all these attributes can be read.

To understand more about these attribute, see Definitions.

⚠️

Mutually validated attributes must always be updated together, e.g. setting.x_low_alarm, setting.x_high_alarm and setting.required_x

Pro Controller

Attribute nameTypeValidationExample
alarm.ineffective_control_lockoutbooleanNot editable-
alarm.pod_change_lockoutbooleanNot editable-
alarm.normally_closed_lockoutbooleanNot editable-
alarm.normally_open_lockoutbooleanNot editable-
alarm.low_ec_lockoutbooleanNot editable-
alarm.other_lockoutbooleanNot editable-
alarm.calibration_requiredbooleanNot editable-
alarm.ph_high_alarmbooleanNot editable-
alarm.ph_low_alarmbooleanNot editable-
alarm.ec_high_alarmbooleanNot editable-
alarm.ec_low_alarmbooleanNot editable-
alarm.temp_high_alarmbooleanNot editable-
alarm.temp_low_alarmbooleanNot editable-
setting.device_namestring20 character limit"My Controller"
setting.alarmsbooleanOn = true
Off = false
false
setting.control_mode (edit)
setting.device_mode (read)
string"MONITOR" or "CONTROL""MONITOR"
setting.ineffective_control_lockoutbooleanOn = true
Off = false
true
setting.low_conductivity_lockoutbooleanOn = true
Off = false
true
setting.required_phnumberResolution: 1 dp
Range: 0.1 - 13.9
6.0
setting.ph_low_alarmnumberResolution: 1 dp
Range: 0.0 - 13.8
Must be 0.1 below "setting.required_ph"
5.0
setting.ph_high_alarmnumberResolution: 1 dp
Range 0.2 - 14.0
Must be 0.1 above "setting.required_ph"
7.0
setting.ph_on_timenumberContinuous = 0
Resolution: 1000 (ms)
Range: 1000 - 600000 (ms)
10000
setting.ph_off_timenumberResolution: 10000
Range: 10000 - 3600000 (ms)
100000
setting.required_ecnumberResolution: 1 dp
Range: 0.1 - 4.9
2.0
setting.ec_low_alarmnumberResolution: 1 dp
Range: 0.0 - 4.8
Must be 0.1 below "setting.required_ec"
1.0
setting.ec_high_alarmnumberResolution: 1 dp
Range: 0.2 - 5.0
Must be 0.1 above "setting.required_ec"
3.0
setting.ec_on_timenumberContinuous = 0
Resolution: 1000 (ms)
Range: 1000 - 600000 (ms)
10000
setting.ec_off_timenumberResolution: 10000
Range: 10000 - 3600000 (ms)
100000
setting.minimum_tempnumberResolution: 0 dp
Range: 1 - 48 (Celsius)
Must be below "setting.maximum_temp"
18
setting.maximum_tempnumberResolution: 0 dp
Range: 2 - 49 (Celsius)
Must be above "setting.minimum_temp"
22
setting.temp_low_alarmnumberResolution: 0 dp
Range: 0 - 47 (Celsius)
Must be below "setting.minimum_temp"
16
setting.temp_high_alarmnumberResolution: 0 dp
Range: 3 - 50 (Celsius)
Must be above "setting.maximum_temp"
24
setting.temp_on_timenumberContinuous = 0
Resolution: 1000 (ms)
Range: 1000 - 600000 (ms)
10000
setting.temp_off_timenumberResolution: 10000
Range 10000 - 3600000 (ms)
100000

pH Controller

Attribute nameTypeValidationExample
alarm.ineffective_control_lockoutbooleanNot editable-
alarm.calibration_requiredbooleanNot editable-
alarm.ph_high_alarmbooleanNot editable-
alarm.ph_low_alarmbooleanNot editable-
alarm.temp_high_alarmbooleanNot editable-
alarm.temp_low_alarmbooleanNot editable-
setting.device_namestring20 character limit"My Controller"
setting.alarmsbooleanOn = true
Off = false
false
setting.control_mode (edit)
setting.device_mode (read)
string"MONITOR" or "CONTROL""MONITOR"
setting.required_phnumberResolution: 1 dp
Range: 0.1 - 13.9
6.0
setting.ph_low_alarmnumberResolution: 1 dp
Range: 0.0 - 13.8
Must be 0.1 below "setting.required_ph"
5.0
setting.ph_high_alarmnumberResolution: 1 dp
Range: 0.2 - 14.0
Must be 0.1 above "setting.required_ph"
7.0
setting.ph_on_timenumberResolution: 1000
Range: 1000 - 60000 (ms)
10000
setting.ph_off_timenumberResolution: 60000
Range: 60000 - 3600000 (ms)
240000

Guardian (Connect)

Attribute nameTypeValidationExample
alarm.calibration_requiredbooleanNot editable-
alarm.ph_high_alarmbooleanNot editable-
alarm.ph_low_alarmbooleanNot editable-
alarm.ec_high_alarmbooleanNot editable-
alarm.ec_low_alarmbooleanNot editable-
alarm.temp_high_alarmbooleanNot editable-
alarm.temp_low_alarmbooleanNot editable-
setting.device_namestring20 character limit"My Monitor"

Guardian Wi-Fi

Attribute nameTypeValidationExample
alarm.calibration_requiredbooleanNot editable-
alarm.ph_high_alarmbooleanNot editable-
alarm.ph_low_alarmbooleanNot editable-
alarm.ec_high_alarmbooleanNot editable-
alarm.ec_low_alarmbooleanNot editable-
alarm.temp_high_alarmbooleanNot editable-
alarm.temp_low_alarmbooleanNot editable-
setting.device_namestring20 character limit"My Monitor"
setting.alarmsbooleanOn = true
Off = false
true
setting.ph_low_alarmnumberResolution: 1 dp
Range: 0.0 - 13.8
Must be 0.2 below "setting.ph_high_alarm"
5.0
setting.ph_high_alarmnumberResolution: 1 dp
Range: 0.2 - 14.0
Must be 0.2 above "setting.ph_low_alarm"
7.0
setting.ec_low_alarmnumberResolution: 1 dp
Range: 0.0 - 4.8
Must be 0.2 below "setting.ec_high_alarm"
1.0
setting.ec_high_alarmnumberResolution: 1 dp
Range: 0.2 - 5.0
Must be 0.2 above "setting.ec_low_alarm"
3.0
setting.temp_low_alarmnumberResolution: 0 dp
Range: 0 - 47
Must be below "setting.temp_high_alarm"
15
setting.temp_high_alarmNumberResolution: 0 dp
Range: 3 - 50
Must be above "setting.temp_low_alarm"
25

IntelliDose

Attribute nameTypeValidationExample
alarm.ec_dose_lockoutbooleanNot editable-
alarm.ec_high_alarmbooleanNot editable-
alarm.ec_low_alarmbooleanNot editable-
alarm.ec_over_rangebooleanNot editable-
alarm.ec_under_rangebooleanNot editable-
alarm.ph_dose_lockoutbooleanNot editable-
alarm.ph_high_alarmbooleanNot editable-
alarm.ph_low_alarmbooleanNot editable-
alarm.ph_over_rangebooleanNot editable-
alarm.ph_under_rangebooleanNot editable-
alarm.temp_high_alarmbooleanNot editable-
alarm.temp_low_alarmbooleanNot editable-
setting.device_namestring20 character limit"My IDose"
setting.deg_fboolean• false = ˚C
• true = ˚F
true
setting.usa_date_formatboolean• false = dd/mm/yy
• true = mm/dd/yy
true
setting.ec_unitstring• EC = Electo Conductivity
• CF = Conductivity Factor
• TDS = Total Dissolved Solids
"EC"
setting.tds_conversation_standardstring• 500 = 500ppm
• 700 = 700ppm
• 640 = 640ppm
500
setting.day_start_secsNumberResolution: 0 dp
Range: 0 - 86040
HH:MM
(HH * 3600) + (MM * 60) = Value
Must be 60 below "setting.day_end_secs"
Must be divisible by 360
1980 (05:30)
setting.day_end_secsNumberResolution: 0 dp
Range: 0 - 86040
HH:MM
(HH * 3600) + (MM * 60) = Value
Must be 60 above "setting.day_start_secs"
Must be divisible by 360
3600 (18:30)
setting.alarm_detent_secsNumberResolution: 0 dp
Range: 0 - 15240
MM
MM * 60 = Value
180 (3 mins)
setting.dose_interval_secsNumberResolution: 0 dp
Range: 0 - 15240
MM
MM * 60 = Value
180 (3 mins)
setting.sequential_dosingboolean• false = Off (Simultaneous)
• true = On (Sequential)
Forced on if "setting.nutrient_parts" >= 3
true
setting.proportional_dosingboolean• false = Off (Simple Dosing)
• true = On (Proportional Dosing)
Allowed on if "setting.nutrient_parts" < 2
true
setting.buzzer_mutedboolean• false = Off
• true = On
true
setting.external_alarmboolean• false = Off
• true = On
true
setting.ph_dose_modestring• none = No pH Dosing
• both = Two pH pumps installed
• raise = pH Raise pump installed
• lower = pH Lower pump installed
"both" can only be selected if "setting.ph_raise" is set
"both"
setting.ph_dose_time_max_secsNumberResolution: 0 dp
Range: 1 - 254
Must be above "setting.ph_dose_time_min_secs"
"setting.proportional_dosing" must be "true"
30
setting.ph_dose_time_min_secsNumberResolution: 0 dp
Range: 0 - 253
Must be below "setting.ph_dose_time_max_secs" when "setting.proportional_dosing" is "true"
Used for Nutrient Dosing and Dosing Interval when "setting.proportional_dosing" is not "true"
60
setting.ph_set_pointNumberResolution: 1 dp
Range: 0.1 - 13.9
Must be between "setting.ph_max" and "setting.ph_min"
5.8
setting.ph_alarm_enabledboolean• false = Disabled
• true = Enabled
true
setting.ph_maxNumberResolution: 1 dp
Range: 0.2 - 14.0
Must be above "setting.ph_set_point"
6.4
setting.ph_minNumberResolution: 1 dp
Range: 0.0 - 13.8
Must be below "setting.ph_set_point"
5.2
setting.ph_range_lockoutboolean• false = Off
• true = On
true
setting.ph_raiseboolean• false = pH Lower
• true = pH Raise
"setting.ph_dose_mode" must be "both"
true
setting.day_night_ecboolean• false = Off
• true = On
On enables different EC set point for day and night
true
setting.ec_set_pointNumberResolution: 1 dp
Range: 0.1 - 9.9
Must be between "setting.ec_max" and "setting.ec_min"
2.8
setting.ec_lowerboolean• false = Off
• true = On
On enables use of water to reduce EC
true
setting.min_nutrient_dose_time_secsNumberResolution: 0 dp
Range: 0 - 253
Must be below "setting.max_nutrient_dose_time_secs" when "setting.proportional_dosing" is "true"
Used for Nutrient Dosing and Dosing Interval when "setting.proportional_dosing" is not "true"
60
setting.max_nutrient_dose_time_secsNumberResolution: 0 dp
Range: 1 - 254
Must be above "setting.min_nutrient_dose_time_secs"
"setting.proportional_dosing" must be "true"
30
setting.ec_alarm_enabledboolean• false = Disabled
• true = Enabled
true
setting.ec_maxNumberResolution: 1 dp
Range: 0.2 - 10.0
Must be above "setting.ec_set_point"
6.4
setting.ec_minNumberResolution: 1 dp
Range: 0.0 - 9.8
Must be below "setting.ec_set_point"
5.2
setting.ec_night_set_pointNumberResolution: 1 dp
Range: 0.1 - 9.9
Must be between "setting.ec_max" and "setting.ec_min"
"setting.day_night_ec" must be enabled
2.8
setting.ec_range_lockoutboolean• false = Off
• true = On
true
setting.water_dose_time_secsNumberResolution: 0 dp
Range: 1 - 254
"setting.ec_lower" must be "true"
30
setting.nut_temp_alarm_enabledboolean• false = Disabled
• true = Enabled
true
setting.nut_temp_maxNumberResolution: 1 dp
Range: 0.1 - 50.0
Must be above "setting.nut_temp_min"
35.2
setting.nut_temp_minNumberResolution: 1 dp
Range: 0.0 - 49.9
Must be below "setting.nut_temp_max"
18.1
setting.nutrient_partsNumberResolution: 0 dp
Range: 0 - 8
3
setting.mix1NumberResolution: 0 dp
Range: 0 - 100%
48
setting.mix2NumberResolution: 0 dp
Range: 0 - 100%
48
setting.mix3NumberResolution: 0 dp
Range: 0 - 100%
48
setting.mix4NumberResolution: 0 dp
Range: 0 - 100%
48
setting.mix5NumberResolution: 0 dp
Range: 0 - 100%
48
setting.mix6NumberResolution: 0 dp
Range: 0 - 100%
48
setting.mix7NumberResolution: 0 dp
Range: 0 - 100%
48
setting.mix8NumberResolution: 0 dp
Range: 0 - 100%
48
setting.irrigation_installedboolean• false = No irrigation installed
• true = Irrigation installed
true
setting.irrigation_modestring• single = Single irrigation output
• sequential = Irrigation stations trigger sequentially
• independent = Each station has it's own trigger point
"single"
setting.station_countNumberResolution: 0 dp
Range: 0 - 4
"setting.irrigation_mode" must be "sequential" or "independent"
4
setting.separate_pump_outputboolean• false = No irrigation pump installed
• true = Irrigation pump installed
"setting.irrigation_mode" must be "sequential" or "independent"
true
setting.station1_modestring• day_night = Irrigation allow both day and night
• day = Irrigate only during the day
• time = Irrigate at the same time each day
"setting.station1_day_only" must be false to set "day"
"day_night"
setting.station1_day_onlyboolean• false = "setting.station1_mode" is set to "day_night" or "time"
• true = "setting.station1_mode" is set to "day"
true
setting.station1_duration_secsNumberResolution: 0 dp
Range: 0 - 32767
HH:MM:SS
(HH * 3600) + (MM * 60) + SS = Value
900 (15 mins)
setting.station1_day_interval_secsNumberResolution: 0 dp
Range: 0 - 32767
DD:HH:MM
(DD * 1440) + (HH * 60) + MM = Value
180 (3 hours)
setting.station1_night_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
60 (1 hour)
setting.station1_every_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
607 (10:07am)
setting.station2_modestring• day_night = Irrigation allow both day and night
• day = Irrigate only during the day
• time = Irrigate at the same time each day
"setting.station2_day_only" must be false to set "day"
"day_night"
setting.station2_day_onlyboolean• false = "setting.station2_mode" is set to "day_night" or "time"
• true = "setting.station2_mode" is set to "day"
true
setting.station2_duration_secsNumberResolution: 0 dp
Range: 0 - 32767
HH:MM:SS
(HH * 3600) + (MM * 60) + SS = Value
900 (15 mins)
setting.station2_day_interval_secsNumberResolution: 0 dp
Range: 0 - 32767
DD:HH:MM
(DD * 1440) + (HH * 60) + MM = Value
180 (3 hours)
setting.station2_night_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
60 (1 hour)
setting.station2_every_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
607 (10:07am)
setting.station3_modestring• day_night = Irrigation allow both day and night
• day = Irrigate only during the day
• time = Irrigate at the same time each day
"setting.station3_day_only" must be false to set "day"
"day_night"
setting.station3_day_onlyboolean• false = "setting.station3_mode" is set to "day_night" or "time"
• true = "setting.station3_mode" is set to "day"
true
setting.station3_duration_secsNumberResolution: 0 dp
Range: 0 - 32767
HH:MM:SS
(HH * 3600) + (MM * 60) + SS = Value
900 (15 mins)
setting.station3_day_interval_secsNumberResolution: 0 dp
Range: 0 - 32767
DD:HH:MM
(DD * 1440) + (HH * 60) + MM = Value
180 (3 hours)
setting.station3_night_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
60 (1 hour)
setting.station3_every_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
607 (10:07am)
setting.station4_modestring• day_night = Irrigation allow both day and night
• day = Irrigate only during the day
• time = Irrigate at the same time each day
"setting.station4_day_only" must be false to set "day"
"day_night"
setting.station4_day_onlyboolean• false = "setting.station4_mode" is set to "day_night" or "time"
• true = "setting.station4_mode" is set to "day"
true
setting.station4_duration_secsNumberResolution: 0 dp
Range: 0 - 32767
HH:MM:SS
(HH * 3600) + (MM * 60) + SS = Value
900 (15 mins)
setting.station4_day_interval_secsNumberResolution: 0 dp
Range: 0 - 32767
DD:HH:MM
(DD * 1440) + (HH * 60) + MM = Value
180 (3 hours)
setting.station4_night_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
60 (1 hour)
setting.station4_every_interval_secsNumberResolution: 0 dp
Range: 0 - 1439
HH:MM
HH * 60 + MM = Value
607 (10:07am)
setting.ec_enabledboolean• false = Disabled
• true = Enabled
true
setting.ec_force_onboolean• false = Forced Off
• true = Forced On
true
setting.ph_enabledboolean• false = Disabled
• true = Enabled
true
setting.ph_force_onboolean• false = Forced Off
• true = Forced On
true
setting.water_enabledboolean• false = Disabled
• true = Enabled
true
setting.water_force_onboolean• false = Forced Off
• true = Forced On
true
setting.station1_enabledboolean• false = Disabled
• true = Enabled
true
setting.station1_force_onboolean• false = Forced Off
• true = Forced On
true
setting.station2_enabledboolean• false = Disabled
• true = Enabled
true
setting.station2_force_onboolean• false = Forced Off
• true = Forced On
true
setting.station3_enabledboolean• false = Disabled
• true = Enabled
true
setting.station3_force_onboolean• false = Forced Off
• true = Forced On
true
setting.station4_enabledboolean• false = Disabled
• true = Enabled
true
setting.station4_force_onboolean• false = Forced Off
• true = Forced On
true
setting.back_light_percentNumberNot editable-
setting.dose_count_ec_hour_limitNumberNot editable-
setting.dose_count_ec_restrict_timer_secsNumberNot editable-
setting.dose_count_ph_hour_limitNumberNot editable-
setting.dose_count_ph_restrict_timer_secsNumberNot editable-
setting.dose_count_restrict_time_secsNumberNot editable-
setting.dosecount_alarm_enabledbooleanNot editable-
setting.dosecount_limits_enabledbooleanNot editable-
setting.ec_dosecount_resetNumberNot editable-
setting.ec0_temp_scaleNumberNot editable-
setting.ph_dosecount_resetNumberNot editable-
setting.ph_offset_hiNumberNot editable-
setting.ph_offset_loNumberNot editable-
setting.ph_scale_hiNumberNot editable-
setting.ph_scale_loNumberNot editable-
setting.station1_todNumberNot editable-
setting.station1_timer_resetNumberNot editable-
setting.station2_todNumberNot editable-
setting.station2_timer_resetNumberNot editable-
setting.station3_todNumberNot editable-
setting.station3_timer_resetNumberNot editable-
setting.station4_todNumberNot editable-
setting.station4_timer_resetNumberNot editable-
setting.trigger_sequentialbooleanNot editable-
setting.use_station_outputsbooleanNot editable-
setting.using_alarmbooleanNot editable-
setting.valve_latencyNumberNot editable-
state.alarm_soundingbooleanNot editable-
state.daytimebooleanNot editable-
state.dose_count_ecValueNot editable-
state.dose_count_ec_hourValueNot editable-
state.dose_count_phValueNot editable-
state.dose_count_ph_hourValueNot editable-
state.ec_dosecount_exceededbooleanNot editable-
state.ec_lockout_too_highbooleanNot editable-
state.ec_lockout_too_lowbooleanNot editable-
state.ec_range_lockoutbooleanNot editable-
state.ec_trippedbooleanNot editable-
state.firmwareValueNot editable-
state.fuse_failurebooleanNot editable-
state.irrigation_activestringNot editable-
state.ph_dosecount_exceededbooleanNot editable-
state.ph_dosing_activestringNot editable-
state.ph_lockout_too_highbooleanNot editable-
state.ph_lockout_too_lowbooleanNot editable-
state.ph_trippedbooleanNot editable-
state.settings_changedbooleanNot editable-
state.station1_activeValueNot editable-
state.station2_activeValueNot editable-
state.station3_activeValueNot editable-
state.station4_activeValueNot editable-
state.temp_trippedbooleanNot editable-
state.vout_failurebooleanNot editable-
state.watering_activestringNot editable-

Response

You will get a 200 OK response if the attribute updates successfully.

The request will return an error if it fails to update the attributes:

400 Bad Request - Example
{
  "error": "Validation error",
  "issues": {
    "setting.ph_low_alarm": [
      "Value must be a number",
      ...
    ],
    ...
  },
}

Example

Here is an example request to update the pH alarms of a Pro Controller using cURL.

cURL example
curl --include --request PATCH https://api.edenic.io/api/v1/device-attribute/12345678-1234-1234-1234-123456789012 \
  --header 'Authorization: ed_1234567890123456789012345789012345678901234567890123456789012345' \
  --header 'Content-Type: application/json' \
  --data '{
    "setting.required_ph": 6.0,
    "setting.ph_low_alarm": 5.0,
    "setting.ph_high_alarm": 7.0
  }'

Response should give a 200 OK result if successful.