-
-
Notifications
You must be signed in to change notification settings - Fork 8
Getting Your Sensor Data from the API
To get the sensor data you will need to be able to sign into the API, this is done with the same credentials as this integration.
Swagger is a tool used by developers to provide documentation for the endpoints that are available in their API. For us, it gives us an easier way to see and test the requests.
To access the Swagger page, go to https://v5.api.cloudgarden.nl/swagger/index.html.
The endpoints are split into sections and have the request HTTP method on the right. GET is usually to Get data, POST is to create, PUT and PATCH are for updates and DELETE deletes. POST can also be used for updates.
Clicking on the bar expands it and shows more details. To interact with it, you will need to click the try it out button in the top right.

The text box becomes editable and the blue Execute button sends the request. The response will be shown below that.
The image above shows an error being returned.
To login and allow Swagger to make requests as you, you will need to find the /auth/v4/login GET endpoint in the list, as shown below.

In the text box, replace the username with your email address and the password with the password you setup for the integration.
When the response comes back, you want to copy everything that is in the token section.
{
"token": "Bearer eyJhBGcrOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InNzbWFsZTkzQGdtYWlsLmNvbSIsImV4cCI6MTc3NjAyMTExNCwiaWF0IjoxNzY4MjQ1MTE0fQ.WVwBB7jnFQT0HgYCYHqUn-JqtSltS-UwpOoHFXpgrck",
"refresh_token": null,
"username": "MY EMAIL",
"displayname": "Simon",
"lang": "The Moon"
}
So for the example above, I want the following:
Bearer eyJhBGcrOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InNzbWFsZTkzQGdtYWlsLmNvbSIsImV4cCI6MTc3NjAyMTExNCwiaWF0IjoxNzY4MjQ1MTE0fQ.WVwBB7jnFQT0HgYCYHqUn-JqtSltS-UwpOoHFXpgrck
Click on the green Authorize button at the top of the page and paste the token in.
The bearer token should be treated like your password. Be careful sharing it!
To check you are logged in correctly, use the /auth/current-user endpoint to check you get your information back.
Scrolling down the page, you will find a section called Sensor, running the GET /sensor endpoint will give you the details of your device(s).
I would be careful with the Mac address as there are some endpoints that give details about the Mac address, even if it is not in your account.
For me, this is the output of my Duux Edge v2
Duux Edge v2 /sensor details
{
"data": [
{
"id": 274364,
"type": "51",
"name": "DUUX.1.266641",
"displayName": "Office Heater",
"owner": "storage",
"location": "Warehouse",
"deviceId": "REDACTED",
"tcf": 1,
"baseLineCalibration": 0,
"hcf": 1,
"hBaseLine": 0,
"batchId": 11,
"placementDate": "2024-06-03T03:04:09",
"story": "REDACTED",
"address": null,
"latitude": null,
"longtitude": null,
"config": null,
"retired": 0,
"hidden": false,
"notifications": true,
"notificationEmail": null,
"sensorTypeIdsensorType": 50,
"createdAt": "2024-06-03T03:04:09",
"updatedAt": "2026-01-12T06:42:19",
"parentSensorId": null,
"spaceId": REDACTED,
"online": true,
"connectionType": "mqtt",
"connectionUpdateDate": "2026-01-12T06:42:19",
"color": null,
"serialNumber": null,
"space": {
"id": REDACTED,
"name": "Office"
},
"sensorType": {
"productIds": [
"ml6gqdjaacijzzgq"
],
"id": 50,
"name": "DUUX Edge heater v2"
},
"simcard": null,
"calibrationPreset": null
}
],
"errorMessage": null
}
There is a GET endpoint called /smarthome/sensor that gives you the above data, plus a block for the commands the sensor supports.
It has been my experience that this is not always accurate....
Duux Edge v2 /smarthome/sensor details
{
"data": [
{
"id": 274364,
"type": "51",
"name": "DUUX.1.266641",
"displayName": "Office Heater",
"owner": "storage",
"deviceId": "REDACTED",
"sensorTypeId": 50,
"online": true,
"connectionUpdateDate": "2026-01-12T06:42:19.000Z",
"connectionType": "mqtt",
"sensorType": {
"fwVersion": "14.3.10",
"alexaDisplayCategories": "[\"THERMOSTAT\"]",
"name": "DUUX Edge heater v2",
"description": "DUUX Edge heater v2",
"googleDeviceType": "action.devices.types.HEATER",
"id": 50,
"type": 51,
"Traits": [
{
"id": 1,
"commands": [
"tune set power {on}"
],
"config": {
"unique_name": "OnOff",
"on": {
"requestStatusPath": "latestData.fullData.power",
"mapValue": {
"valueMap": [
{
"match": true,
"value": 1
},
{
"match": false,
"value": 0
}
]
}
}
},
"name": "OnOff",
"queryOnly": 0,
"type": "command",
"settings": {
"friendlyNames": [
{
"lang": "en",
"synonyms": [
"Power",
"Power Switch",
"On Off"
]
},
{
"lang": "es",
"synonyms": [
"Encendido",
"Interruptor",
"Encender Apagar"
]
}
]
}
},
{
"id": 4,
"commands": [
"tune set sp {temperatureSetpoint}",
"tune set mode {heaterMode}"
],
"config": {
"unique_name": "TemperatureSettingEdgeHeater",
"temperatureSetpoint": {
"requestStatusPath": "latestData.fullData.sp"
},
"temperature": {
"requestStatusPath": "latestData.fullData.temp"
},
"heaterMode": {
"defaultReturnValue": "HEAT"
}
},
"name": "TemperatureSetting",
"queryOnly": 0,
"type": "command",
"settings": {
"temperatureStepCelsius": 1,
"temperatureRange": {
"minThresholdCelsius": 5,
"maxThresholdCelsius": 36
},
"availableThermostatModes": [
"HEAT"
]
}
},
{
"id": 16,
"commands": [
"tune set night {nightMode}"
],
"config": {
"unique_name": "NightMode",
"availableMode": {
"defaultReturnName": "night_mode",
"defaultReturnSetting": "off",
"requestStatusPath": "latestData.fullData.night"
},
"command_key": "nightMode"
},
"name": "Modes",
"queryOnly": 0,
"type": "command",
"settings": {
"availableModes": [
{
"name": "night_mode",
"command_key": "nightMode",
"name_values": [
{
"name_synonym": [
"Night mode",
"Sleep mode",
"Quiet mode"
],
"lang": "en"
},
{
"name_synonym": [
"Modo noche"
],
"lang": "es"
}
],
"settings": [
{
"setting_name": "off",
"setting_value": "0",
"setting_values": [
{
"setting_synonym": [
"Off"
],
"lang": "en"
},
{
"setting_synonym": [
"Off"
],
"lang": "es"
}
]
},
{
"setting_name": "on",
"setting_value": "1",
"setting_values": [
{
"setting_synonym": [
"On"
],
"lang": "en"
},
{
"setting_synonym": [
"On"
],
"lang": "es"
}
]
}
],
"ordered": true
}
]
}
},
{
"id": 18,
"commands": [
"tune set heating {mode}"
],
"config": {
"unique_name": "EdgeOilModesTrait",
"availableMode": {
"defaultReturnName": "edge_mode",
"defaultReturnSetting": "low",
"requestStatusPath": "latestData.fullData.heatin"
},
"command_key": "mode"
},
"name": "Modes",
"queryOnly": 0,
"type": "command",
"settings": {
"availableModes": [
{
"name": "edge_mode",
"command_key": "mode",
"name_values": [
{
"name_synonym": [
"Mode",
"Setting",
"Program",
"Profile"
],
"lang": "en"
},
{
"name_synonym": [
"Modo"
],
"lang": "es"
}
],
"settings": [
{
"setting_name": "low",
"setting_value": "1",
"setting_values": [
{
"setting_synonym": [
"Low"
],
"lang": "en"
},
{
"setting_synonym": [
"Baja"
],
"lang": "es"
}
]
},
{
"setting_name": "high",
"setting_value": "2",
"setting_values": [
{
"setting_synonym": [
"High"
],
"lang": "en"
},
{
"setting_synonym": [
"Alta"
],
"lang": "es"
}
]
},
{
"setting_name": "max",
"setting_value": "3",
"setting_values": [
{
"setting_synonym": [
"Boost",
"Max"
],
"lang": "en"
},
{
"setting_synonym": [
"Aumento"
],
"lang": "es"
}
]
}
],
"ordered": true
}
]
}
}
]
},
"space": {
"name": "Office"
},
"latestData": {
"deviceId": "REDACTED",
"pluginName": "tune",
"pluginUid": "ml6gqdjaacijzzgq",
"data": {
"temp": 15,
"hum": null,
"tvoc": null,
"co2": null,
"pmn03": null,
"pmn05": null,
"pm1": null,
"pm2_5": null,
"pm0_3": null,
"pm0_5": null,
"pm10": null,
"time": "2026-01-12T19:24:05Z",
"sensor": "REDACTED",
"zt1": null,
"zt2": null,
"zt3": null,
"zt4": null,
"pluginName": "tune",
"pluginUid": "ml6gqdjaacijzzgq"
},
"fullData": {
"1": null,
"2": null,
"3": null,
"4": null,
"5": null,
"6": null,
"7": null,
"8": null,
"9": null,
"10": null,
"11": null,
"12": null,
"13": null,
"14": null,
"15": null,
"16": null,
"18": null,
"19": null,
"20": null,
"21": null,
"22": null,
"24": null,
"101": null,
"103": null,
"time": "2026-01-12T19:24:05Z",
"aq": null,
"basel": null,
"batcha": null,
"batlvl": null,
"blow": null,
"co2": null,
"di1": null,
"di2": null,
"di3": null,
"dp1": null,
"dp2": null,
"dp3": null,
"dpr": null,
"dpt": null,
"dry": null,
"eco": null,
"eco2": null,
"err": 0,
"fan": null,
"filres": null,
"filter": null,
"heatin": 3,
"horosc": null,
"hours": null,
"hum": null,
"ion": null,
"laundr": null,
"led": null,
"lock": 0,
"mode": 0,
"night": 0,
"p03": null,
"pluginId": null,
"pluginName": "tune",
"pluginUid": "ml6gqdjaacijzzgq",
"pm1": null,
"pm10": null,
"pm2_5": null,
"pmn03": null,
"pmn05": null,
"pmn1": null,
"pmn10": null,
"pmn25": null,
"pmn5": null,
"power": 1,
"ppm": null,
"pump": null,
"raw": null,
"sensor": "REDACTED",
"sleep": null,
"source": "Ingestor1",
"sp": 16,
"speed": null,
"status": 0,
"swing": null,
"t1": null,
"t10": null,
"t2": null,
"t3": null,
"t4": null,
"t5": null,
"t6": null,
"t7": null,
"t8": null,
"t9": null,
"temp": 15,
"tilt": null,
"timer": 0,
"timerr": null,
"timrm": 0,
"tvoc": null,
"unit": null,
"verosc": null,
"wm": null,
"zt1": null,
"zt2": null,
"zt3": null,
"zt4": null,
"pm0_3": null,
"pm0_5": null
},
"scores": null,
"labels": null,
"latest": "2026-01-12T19:24:05"
}
}
],
"errorMessage": null
}