summaryrefslogtreecommitdiff
path: root/envmon/onewire-ow.py
diff options
context:
space:
mode:
authorChristian Franke <nobody@nowhere.ws>2013-06-20 19:25:15 +0200
committerChristian Franke <nobody@nowhere.ws>2013-06-20 19:25:31 +0200
commit9191312aac429e745388029ba57a29f015378541 (patch)
tree43fbbf740d0e2a0a231accb2db8e5f9df3af6c8c /envmon/onewire-ow.py
parent0ab0cbbda438fd30f24273f1db99d76746108a75 (diff)
Add envmon code
Diffstat (limited to 'envmon/onewire-ow.py')
-rw-r--r--envmon/onewire-ow.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/envmon/onewire-ow.py b/envmon/onewire-ow.py
new file mode 100644
index 0000000..6e3420b
--- /dev/null
+++ b/envmon/onewire-ow.py
@@ -0,0 +1,46 @@
+"""
+Onewire interface using owserver
+"""
+
+import os
+import ow
+
+class OnewireException(Exception):
+ pass
+
+ow.init('127.0.0.1:4304')
+
+_sensors = {}
+with open(os.path.join(os.path.realpath(os.path.dirname(__file__)), 'onewire-sensors.txt'), 'r') as sensors_file:
+ for line in sensors_file:
+ line = line.strip()
+ address, name = line.split(' ', 1)
+ _sensors[name] = address
+
+def sensors():
+ return list(_sensors.keys())
+
+class SensorFacade(object):
+ def __init__(self, sensor, name):
+ self._sensor = sensor
+ self._name = name
+
+ def __getattr__(self, name):
+ return getattr(self._sensor, name)
+
+ @property
+ def temperature(self):
+ for i in range(1,3):
+ rv = float(self._sensor.temperature)
+ if rv > 65:
+ continue
+ if rv < -25:
+ continue
+ return rv
+ raise OnewireException("Bus error for %s" % self._name)
+
+def sensor(name):
+ if name not in _sensors:
+ raise OnewireException('Don\'t know about sensor %s' % name)
+
+ return SensorFacade(ow.Sensor('/%s' % _sensors[name]), name)