Examples¶
Initializing the client¶
You must initialize a client object before you can make any API calls:
import tempoiq.session
client = tempoiq.session.get_session(
"https://your-url.backend.tempoiq.com",
"your-key",
"your-secret")
Creating a device¶
To create a new device in your backend:
from tempoiq.protocol.device import Device
from tempoiq.protocol.sensor import Sensor
import tempoiq.response
temp_sensor = Sensor("temperature", attributes={"unit": "degC"})
humid_sensor = Sensor("humidity", attributes={"unit": "percent"})
device = Device("thermostat-12345",
attributes={"type": "thermostat", "building": "24"},
sensors=[temp_sensor, humid_sensor])
response = client.create_device(device)
if response.successful != tempoiq.response.SUCCESS:
print("Error creating device!")
Writing sensor data¶
To write sensor data for the device we created above:
import datetime
from tempoiq.protocol.point import Point
current = datetime.datetime.now()
device_data = {"temperature": [ Point(current, 23.5) ],
"humidity": [ Point(current, 72.0) ]}
response = client.write({"thermostat-12345": device_data})
if res.successful != tempoiq.response.SUCCESS:
print("Error writing data!")
Getting devices¶
To get a list of all devices matching given filter criteria:
result = client.query(Device).filter(Device.attributes["building"] == "24").read()
for dev in result.data:
print("Got device with key: {}".format(dev.key))
You can use a compound selector to filter for the logical AND or OR of several selectors:
from tempoiq.protocol.query.selection import and_, or_
filter = or_([Device.attributes["building"] == "24",
Device.attributes["building"] == "26"])
result = client.query(Device)
.filter(filter)
.read()
Reading sensor data¶
To read raw data from one or more sensors and devices:
start = datetime.datetime(2014, 6, 1, 0, 0)
end = datetime.datetime(2014, 6, 2, 0, 0)
result = client.query(Sensor).filter(Device.attributes["building"] == "24")
.filter(Sensor.key == "temperature")
.read(start=start, end=end)
for row in result.data:
print("Timestamp: {} Values: {}".format(row.timestamp, row.values))
It’s also possible to iterate through individual values in each row object:
for row in result.data:
for ((device, sensor), value) in row:
print device, sensor, value
Rollups, interpolation, and aggregation can be added to the query as well:
result = client.query(Sensor).filter(Device.attributes["building"] == "24")
.rollup("max", "1hour")
.read(start=start, end=end)