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()))  | 
