diff options
Diffstat (limited to 'envmon/onewire2graphite.py')
-rwxr-xr-x | envmon/onewire2graphite.py | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/envmon/onewire2graphite.py b/envmon/onewire2graphite.py index 46bc94e..4b7743e 100755 --- a/envmon/onewire2graphite.py +++ b/envmon/onewire2graphite.py @@ -6,27 +6,43 @@ import sys import onewire import socket -CARBON_SERVER = 'sonar.local.sublab.org' +CARBON_SERVER = '2a02:238:f02a:8e2f:1:67:7261:7068' # 'sonar.local.sublab.org' CARBON_PORT = 2003 -prefix = "envmon.beaglebone_local_sublab_org." +prefix = "sublab.beaglebone.env." -sock = socket.socket() +sock = socket.socket(socket.AF_INET6) sock.connect((CARBON_SERVER, CARBON_PORT)) +sensors = onewire.sensors() +sensobj = dict([(sensor, onewire.sensor(sensor)) for sensor in sensors]) +vals = {} + while True: - message = '' - for sensor in onewire.sensors(): - try: - message += "%s %f %d\n" % (prefix + sensor, onewire.sensor(sensor).temperature, time.time()) - except onewire.SensorNotPresent, e: - print >>sys.stderr, 'SensorNotPresent:', str(e) - except Exception: - print >>sys.stderr, "On %s: Could not retrieve temperature for '%s':" % ( - time.strftime('%a, %d %b %Y %T %z'), sensor) - sys.excepthook(*sys.exc_info()) - print >>sys.stderr, '========================================' - if message: - print message + nextslot = time.time() + 65 + nextslot = nextslot - (nextslot % 60) + + while nextslot - time.time() > 5.0: + for sensor in sensors: + try: + vals.setdefault(sensor, None) + vals[sensor] = sensobj[sensor].temperature + except onewire.SensorNotPresent, e: + print >>sys.stderr, sensor, 'SensorNotPresent:', str(e) + except onewire.OutOfRange, e: + # print >>sys.stderr, sensor, 'OutOfRange:', str(e) + pass + except Exception: + print >>sys.stderr, "On %s: Could not retrieve temperature for '%s':" % ( + time.strftime('%a, %d %b %Y %T %z'), sensor) + sys.excepthook(*sys.exc_info()) + print >>sys.stderr, '========================================' + time.sleep(0.5) + + time.sleep(max(nextslot - time.time(), 0)) + goodvals = [sensor for sensor in sensors if vals.get(sensor, None) is not None] + print '%d of %d sensors have data' % (len(goodvals), len(sensors)) + message = ''.join(["%s %f %d\n" % (prefix + sensor, vals[sensor], nextslot) for sensor in goodvals]) + if message != '': + # print message sock.sendall(message) - time.sleep(300-len(onewire.sensors())) |