85 lines
2.1 KiB
Python
Executable file
85 lines
2.1 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import re
|
|
import serial
|
|
import sys
|
|
|
|
re_fmt = "^%s[^:]*: (.+)$"
|
|
h_re = re.compile(re_fmt % "Humidity")
|
|
t_re = re.compile(re_fmt % "Temperature")
|
|
exprs = {"H": h_re, "T": t_re}
|
|
conv = {"T": lambda x: x / 10.}
|
|
|
|
lines_to_read = 2
|
|
|
|
def read_data(ser):
|
|
data = {}
|
|
|
|
while data == {}:
|
|
ser.write("\n")
|
|
for i in xrange(lines_to_read):
|
|
line = ser.readline()
|
|
for k, expr in exprs.items():
|
|
m = expr.match(line)
|
|
if m is not None:
|
|
data[k] = float(m.group(1))
|
|
if k in conv:
|
|
data[k] = conv[k](data[k])
|
|
return data
|
|
|
|
def main_tty():
|
|
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.1)
|
|
|
|
while True:
|
|
data = read_data(ser)
|
|
print data
|
|
if raw_input("q to quit: ") == "q":
|
|
break
|
|
|
|
ser.close()
|
|
|
|
def main_munin():
|
|
mode = None
|
|
if len(sys.argv) > 1:
|
|
mode = sys.argv[1]
|
|
|
|
arg = sys.argv[0].rsplit("_", 1)[-1]
|
|
if arg not in ["hygro", "temp"]:
|
|
return 1
|
|
|
|
if mode == "config":
|
|
print "host_name mdr.crans.org"
|
|
print "graph_category Environnement"
|
|
|
|
if arg == "hygro":
|
|
print "graph_title Hygrométrie 4J"
|
|
print "graph_vlabel Humidité (%)"
|
|
print "graph_args --lower-limit 0 --upper-limit 100 --rigid"
|
|
print "hygro.label Humidité 4J"
|
|
elif arg == "temp":
|
|
print "graph_title Température 4J"
|
|
print "graph_vlabel Température (°C)"
|
|
print "temp.label Température 4J"
|
|
else:
|
|
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.1)
|
|
data = read_data(ser)
|
|
ser.close()
|
|
|
|
if arg == "hygro":
|
|
print "hygro.value %d" % data["H"]
|
|
elif arg == "temp":
|
|
print "temp.value %.1f" % data["T"]
|
|
|
|
return 0
|
|
|
|
if __name__ == '__main__':
|
|
if sys.argv[0].endswith(".py"):
|
|
try:
|
|
main_tty()
|
|
except KeyboardInterrupt:
|
|
print
|
|
else:
|
|
sts = main_munin()
|
|
sys.exit(sts)
|
|
|