Skip to main content

Overview

Rhombus IoT sensors (E-series) continuously monitor environmental conditions across your facilities. These sensors capture temperature, humidity, indoor air quality (IAQ), CO2 levels, TVOC, PM2.5, and noise levels, reporting data through environmental gateways back to the Rhombus platform. Through the API, you can:
  • List sensors and retrieve their current readings
  • Query historical data for trend analysis and reporting
  • Configure sensors by updating descriptions, locations, and camera associations
  • Set up climate alert policies that trigger when readings cross defined thresholds
  • Monitor gateways that relay data from sensors to the cloud
  • Export data as CSV for external analysis tools

Prerequisites

Before you begin, make sure you have:
  • A Rhombus API key with sensor permissions (generated in the Rhombus Console under Settings > API)
  • At least one E-series environmental sensor deployed and connected to an environmental gateway
  • A configured location where your sensors are installed

List All Sensors

Retrieve the current state of every climate sensor in your organization. This returns each sensor’s UUID, name, current readings, battery level, and health status.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/climate/getMinimalClimateStateList",
    headers=headers,
    json={}
)

data = response.json()
for sensor in data.get("climateStates", []):
    name = sensor.get("name", "Unnamed")
    temp_c = sensor.get("temperatureCelcius")
    humidity = sensor.get("humidity")
    iaq = sensor.get("iaq")
    battery = sensor.get("batteryPercent")
    temp_f = round(temp_c * 9 / 5 + 32, 1) if temp_c else None
    print(f"{name}: {temp_f}°F, {humidity}% RH, IAQ {iaq}, Battery {battery}%")
The response includes a climateStates array. Key fields for each sensor:
FieldTypeDescription
sensorUuidstringUnique identifier for the sensor
namestringDisplay name (e.g., “Server Room Sensor”)
temperatureCelciusfloatCurrent temperature in Celsius
humidityfloatRelative humidity percentage
iaqfloatIndoor Air Quality index
co2floatCO2 level in ppm
tvocfloatTotal Volatile Organic Compounds
pm25floatPM2.5 particulate matter
batteryPercentintegerBattery level (0-100)
healthstringSensor health status (GREEN or RED)
locationUuidstringLocation where the sensor is assigned
Temperature is returned in Celsius. To convert to Fahrenheit: °F = °C × 9/5 + 32.

Read Sensor Data

Query historical climate events for a specific sensor over a time range. Each event represents a data point with temperature, humidity, air quality, and other environmental readings.
import requests
import time

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

# Query the last 24 hours of data
now_ms = int(time.time() * 1000)
one_day_ago_ms = now_ms - (24 * 60 * 60 * 1000)

response = requests.post(
    "https://api2.rhombussystems.com/api/climate/getClimateEventsForSensor",
    headers=headers,
    json={
        "sensorUuid": "YOUR_SENSOR_UUID",
        "createdAfterMs": one_day_ago_ms,
        "createdBeforeMs": now_ms,
        "limit": 100
    }
)

data = response.json()
for event in data.get("climateEvents", []):
    temp_c = event.get("temp")
    humidity = event.get("humidity")
    timestamp = event.get("timestampMs")
    temp_f = round(temp_c * 9 / 5 + 32, 1) if temp_c else None
    print(f"[{timestamp}] {temp_f}°F, {humidity}% RH")
Each climate event includes these fields:
FieldTypeDescription
timestampMsintegerEvent timestamp in epoch milliseconds
tempfloatTemperature in Celsius at this reading
humidityfloatRelative humidity percentage
iaqfloatIndoor Air Quality index
co2floatCO2 concentration
tvocfloatTotal Volatile Organic Compounds
pm25floatPM2.5 particulate matter
heatIndexDegFfloatCalculated heat index in Fahrenheit
The limit parameter caps the number of events returned. If you need more data points than the limit allows, paginate by adjusting the createdAfterMs and createdBeforeMs window.

Configure Sensors

Get Sensor Configuration

Retrieve the full configuration for a specific sensor, including its threshold settings and associated devices.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/climate/getConfig",
    headers=headers,
    json={
        "uuid": "YOUR_SENSOR_UUID"
    }
)

config = response.json().get("config", {})
print(config)

Update Sensor Details

Update a sensor’s description, location assignment, or camera associations. Fields you include with their corresponding *Updated flag set to true will be modified; all others remain unchanged.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/climate/updateDetails",
    headers=headers,
    json={
        "sensorUuid": "YOUR_SENSOR_UUID",
        "description": "Server Room B - Rack 4 temperature and humidity monitor",
        "descriptionUpdated": True,
        "locationUuid": "YOUR_LOCATION_UUID",
        "locationUuidUpdated": True
    }
)

print(response.json())
You must set the corresponding *Updated flag to true for each field you want to change. For example, setting description without descriptionUpdated: true will have no effect.

Set Up Climate Alerts

Climate policies define threshold rules that trigger alerts when environmental readings go above or below specified values. Create a policy and associate it with sensors to receive notifications.

Create a Climate Policy

This example creates a policy that alerts when temperature exceeds 80°F (26.7°C) or drops below 40°F (4.4°C).
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/policy/createClimatePolicy",
    headers=headers,
    json={
        "policy": {
            "name": "Server Room Temperature Alert",
            "description": "Alert when server room temperature is outside safe operating range",
            "scheduledTriggers": [
                {
                    "triggerSet": [
                        {
                            "activity": "TEMPERATURE_ABOVE",
                            "threshold": 26.7
                        },
                        {
                            "activity": "TEMPERATURE_BELOW",
                            "threshold": 4.4
                        },
                        {
                            "activity": "HUMIDITY_ABOVE",
                            "threshold": 60.0
                        }
                    ]
                }
            ]
        }
    }
)

data = response.json()
print(f"Created policy: {data.get('policyUuid')}")
Threshold values for temperature triggers use Celsius. Convert your target Fahrenheit values before creating the policy: °C = (°F - 32) × 5/9.

List Climate Policies

Retrieve all climate policies configured for your organization.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/policy/getClimatePolicies",
    headers=headers,
    json={}
)

data = response.json()
for policy in data.get("policies", []):
    print(f"{policy.get('name')}: {policy.get('uuid')}")

Environmental Gateways

Environmental gateways are the hardware hubs that receive data from nearby E-series sensors via Bluetooth and relay it to the Rhombus cloud. Each gateway supports multiple sensors and connects over your network. Use the gateway status endpoint to check connectivity, firmware versions, and which sensors each gateway is serving.
import requests

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(
    "https://api2.rhombussystems.com/api/climate/getMinimalEnvironmentalGatewayStates",
    headers=headers,
    json={}
)

data = response.json()
for gw in data.get("minimalEnvironmentalGatewayStates", []):
    print(f"Gateway: {gw.get('name')} ({gw.get('deviceUuid')})")
    print(f"  Health: {gw.get('health')}, Firmware: {gw.get('firmwareVersion')}")

Get Gateway Events

Query historical events for a specific gateway, such as connectivity changes and sensor registration.
import requests
import time

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

now_ms = int(time.time() * 1000)
one_week_ago_ms = now_ms - (7 * 24 * 60 * 60 * 1000)

response = requests.post(
    "https://api2.rhombussystems.com/api/climate/getEventsForEnvironmentalGateway",
    headers=headers,
    json={
        "deviceUuid": "YOUR_GATEWAY_UUID",
        "createdAfterMs": one_week_ago_ms,
        "createdBeforeMs": now_ms
    }
)

print(response.json())

Export Sensor Data

Export climate sensor data as a CSV file for use in spreadsheets, data analysis tools, or compliance reporting. Specify a sensor and time range to download all recorded readings.
import requests
import time

headers = {
    "x-auth-scheme": "api-token",
    "x-auth-apikey": "YOUR_API_KEY",
    "Content-Type": "application/json"
}

# Export the last 30 days of data
now_ms = int(time.time() * 1000)
thirty_days_ago_ms = now_ms - (30 * 24 * 60 * 60 * 1000)

response = requests.post(
    "https://api2.rhombussystems.com/api/export/climateEvents",
    headers=headers,
    json={
        "sensorUuid": "YOUR_SENSOR_UUID",
        "createdAfterMs": thirty_days_ago_ms,
        "createdBeforeMs": now_ms
    }
)

# Response is CSV data
with open("climate_export.csv", "w") as f:
    f.write(response.text)
print("Exported climate data to climate_export.csv")
The export endpoint returns CSV data directly in the response body, not JSON. Use the -o flag in cURL or write the response text to a file in your application.
You can also export environmental gateway events with the same pattern using /api/export/environmentalGatewayEvents.

Next Steps

Alarm Monitoring

Set up automated alert responses when sensor thresholds trigger alarms

Webhook Notifications

Receive real-time push notifications when sensor readings cross thresholds