scripts/munin/meteo4J_

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)