summaryrefslogtreecommitdiff
path: root/envmon/onewire2graphite.py
diff options
context:
space:
mode:
Diffstat (limited to 'envmon/onewire2graphite.py')
-rwxr-xr-xenvmon/onewire2graphite.py50
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()))