Hi,
I followed the code flow to update temperature and humidity data with the following code:
import smbus
import time
import datetime
import requests
from ubidots import ApiClient
import json
# Get I2C bus
bus = smbus.SMBus(2)
TOKEN = "" # Put your TOKEN here
DEVICE_LABEL = "" # Put your device label here
VARIABLE_LABEL_1 = "" # Put your first variable label here
VARIABLE_LABEL_2 = "relative-humidity" # Put your second variable label here
VARIABLE_LABEL_3 = "temperature-in-celsius" # Put your third variable label here
def build_payload(curr_time, relativeHumidity, temperatureCelsius):
payload = {"datetime": curr_time,
"relative-humidity": relativeHumidity,
"temperature-in-celsius": temperatureCelsius}
return payload
def post_request(payload):
# Creates the headers for the HTTP requests
url = "http://things.ubidots.com"
url = "{}/api/v1.6/devices/{}".format(url, DEVICE_LABEL)
headers = {"X-Auth-Token": TOKEN, "Content-Type": "application/json"}
print url
# Makes the HTTP requests
status = 400
attempts = 0
while status >= 400 and attempts <= 5:
req = requests.post(url=url, headers=headers, json=payload)
status = req.status_code
attempts += 1
time.sleep(1)
print status
# Processes results
if status >= 400:
print("[ERROR] Could not send data after 5 attempts, please check \
your token credentials and internet connection")
return False
else:
print("[INFO] request made properly, your device is updated")
return True
return status
def main():
bus.write_byte_data(0x40, 0x03, 0x11)
time.sleep(0.5)
# TH02 address, 0x40(64)
# Read data back from 0x00(00), 3 bytes
# Status register, cTemp MSB, cTemp LSB
data = bus.read_i2c_block_data(0x40, 0x00, 3)
# Convert the data to 14-bits
cTemp = ((data[1] * 256 + (data[2] & 0xFC))/ 4.0) / 32.0 - 50.0
fTemp = cTemp * 1.8 + 32
# TH02 address, 0x40(64)
# Select configuration register, 0x03(03)
# 0x01(01) Normal mode enabled, Relative humidity
bus.write_byte_data(0x40, 0x03, 0x01)
time.sleep(0.5)
# TH02 address, 0x40(64)
# Read data back from 0x00(00), 3 bytes
# Status register, humidity MSB, humidity LSB
data = bus.read_i2c_block_data(0x40, 0x00, 3)
# Convert the data to 12-bits
humidity = ((data[1] * 256 + (data[2] & 0xF0)) / 16.0) / 16.0 - 24.0
humidity = humidity - (((humidity * humidity) * (-0.00393)) + (humidity * 0.4008) - 4.7844)
humidity = humidity + (cTemp - 30) * (humidity * 0.00237 + 0.1973)
#Current time
Curr_Time = datetime.datetime.now()
# Output data to screen
print "Relative Humidity : %.2f %%" %humidity
print "Temperature in Celsius : %.2f C" %cTemp
print "Temperature in Fahrenheit : %.2f F" %fTemp
print "Current Time: " + str(Curr_Time)
payload = build_payload(json.dumps(Curr_Time, indent=4, sort_keys=True, default=str),humidity,cTemp)
print("[INFO] Attemping to send data")
print(payload)
post_request(payload)
print("[INFO] finished")
if __name__ == '__main__':
while (True):
main()
time.sleep(1)
On execution I get the following message on running the code:
Although it looks like successful updation, the variable are empty.
Relative Humidity : 46.08 %
Temperature in Celsius : 31.28 C
Temperature in Fahrenheit : 88.31 F
Current Time: 2018-05-15 20:35:22.727166
[INFO] Attemping to send data
{'temperature-in-celsius': 31.28125, 'relative-humidity': 46.08213189049126, 'datetime': '"2018-05-15 20:35:22.727166"'}
http://things.ubidots.com/api/v1.6/devices/bbgw_01
200
[INFO] request made properly, your device is updated
[INFO] finished
Relative Humidity : 46.10 %
Temperature in Celsius : 31.34 C
Temperature in Fahrenheit : 88.42 F
Current Time: 2018-05-15 20:35:26.897965
[INFO] Attemping to send data
{'temperature-in-celsius': 31.34375, 'relative-humidity': 46.10123106045425, 'datetime': '"2018-05-15 20:35:26.897965"'}
http://things.ubidots.com/api/v1.6/devices/bbgw_01
200
[INFO] request made properly, your device is updated
[INFO] finished