# -*- coding: UTF-8 -*- #!/usr/bin/env python # # 太陽電池の発電量と電圧をzivelyにアップロード # 2014/6/15 ラジオペンチ # http://radiopench.blog96.fc2.com/ # import os import xively import subprocess import time import datetime import requests import serial # extract feed_id and api_key from environment variables FEED_ID = "************" API_KEY = "*********************************" DEBUG = "DEBUG" # initialize api client api = xively.XivelyAPIClient(API_KEY) feed = api.feeds.get(FEED_ID) # function to return a datastream object. This either creates a new datastream, # or returns an existing one def get_datastream_watt(feed): try: datastream_watt = feed.datastreams.get("power") if DEBUG: print "Found power" return datastream_watt except: if DEBUG: print "Creating new datastream" datastream = feed.datastreams.create("power", tags="max30W") return datastream def get_datastream_volt(feed): try: datastream_volt = feed.datastreams.get("voltage") if DEBUG: print "Found voltage" return datastream_volt except: if DEBUG: print "Creating new datastream" datastream = feed.datastreams.create("power", tags="max30W") return datastream # main program entry point - runs continuously updating our datastream with the # current 1 minute load average def run(): print "Starting GTI loging" con=serial.Serial('/dev/ttyUSB0', 9600) # USBシリアルポートを接続 print con.portstr # ポートの情報を出力 str=con.readline() # ゴミが入っているのを捨てる feed = api.feeds.get(FEED_ID) datastream_watt = get_datastream_watt(feed) datastream_volt = get_datastream_volt(feed) # datastream.max_value = None # datastream.min_value = None counter = 0 while True: # 無限ループで str = con.readline() # USBから一行読んで n = str.count(",") # デリミッタの数を数え if n== 5: # 5個なら該当データーとみなし counter += 1 if counter == 20: # 20秒毎に counter = 0 xx = str.split(',', 6)[2] # 電圧取り出し volt = int(xx)/10.0 # 電圧 xx = int(str.split(',', 6)[4]) # 発電量のデータを取り出し xx = (xx + 5) / 10 watt = xx/1000.0 # スケーリングして、データ投げる print volt, watt, datetime.datetime.utcnow() datastream_watt.current_value = watt # 電力を記録 datastream_watt.at = datetime.datetime.utcnow() try: datastream_watt.update() except requests.HTTPError as e: print "HTTPError({0}): {1}".format(e.errno, e.strerror) datastream_volt.current_value = volt # 電圧を記録 datastream_volt.at = datetime.datetime.utcnow() try: datastream_volt.update() except requests.HTTPError as e: print "HTTPError({0}): {1}".format(e.errno, e.strerror) run()