#!/usr/bin/env python import os import xively import subprocess import time import datetime import requests import serial from tracer import Tracer, TracerSerial, QueryCommand FEED_ID = "Change_me" API_KEY = "Change_me" api = xively.XivelyAPIClient("Change_me") feed = api.feeds.get(FEED_ID) # initialize api client fake = None # A sample response, to show what this demo does. Uncomment to use. #fake = bytearray(b'\xEB\x90\xEB\x90\xEB\x90\x00\xA0\x18\xD2\x04\xD3\x04\x00\x00\x0E\x00\x53\x04\xA5\x05\x01\x00\x00\x1F\x00\x00\x00\x01\x33\x0A\x00\x00\x99\x5B\x7F') class FakePort(object): def __init__(self, data): self.data = data read_idx = 0 def read(self, count=1): result = self.data[self.read_idx:self.read_idx+count] self.read_idx += count return result def write(self, data): return len(data) if not fake: ser = serial.Serial('/dev/ttyAMA0', 9600, timeout = 1) else: ser = FakePort(fake) tracer = Tracer(0x16) t_ser = TracerSerial(tracer, ser) query = QueryCommand() t_ser.send_command(query) result = t_ser.receive_result() def get_datastream(feed): try: datastream = feed.datastreams.get("DS18B20") return datastream except: datastream = feed.datastreams.create("DS18B20", tags="temperature") return datastream # main program entry point - runs continuously updating our datastream with the # latest temperature reading def run(): feed = api.feeds.get(FEED_ID) now = datetime.datetime.utcnow() feed.datastreams = [ xively.Datastream(id='batt_voltage', current_value= result.batt_voltage, at = now), xively.Datastream(id='pv_voltage', current_value= result.pv_voltage, at = now), xively.Datastream(id='load_amps', current_value= result.load_amps, at = now), xively.Datastream(id='batt_overdischarge_voltage', current_value= result.batt_overdischarge_voltage, at = now), xively.Datastream(id='batt_full_voltage', current_value= result.batt_full_voltage, at = now), xively.Datastream(id='batt_temp', current_value= result.batt_temp, at = now), xively.Datastream(id='load_on', current_value= int(result.load_on), at = now), xively.Datastream(id='load_overload', current_value= int(result.load_overload), at = now), xively.Datastream(id='load_short', current_value= int(result.load_short), at = now), xively.Datastream(id='batt_overload', current_value= int(result.batt_overload), at = now), xively.Datastream(id='charge_current', current_value= result.charge_current, at = now), xively.Datastream(id='batt_charging', current_value= int(result.batt_charging), at = now), xively.Datastream(id='batt_full', current_value= int(result.batt_full), at = now), xively.Datastream(id='batt_overdischarge', current_value= int(result.batt_overdischarge), at = now), ] feed.update() run()