Skip to content

Instantly share code, notes, and snippets.

@abulte
Created October 20, 2012 20:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save abulte/3924783 to your computer and use it in GitHub Desktop.
Save abulte/3924783 to your computer and use it in GitHub Desktop.
Simple Arduino Serial reader script in python
Sensor reading Humidity %
100 75
200
#!/usr/bin/python
# apt-get install screen python python-serial sqlite3 python-pip
# pip install pyzmail
mail_alerts = True
LOW_LIMIT = 80
import serial, time, sqlite3, signal, sys
#EXIT
def grexit(signal, frame):
# conn.close();
print("Bye.")
sys.exit(0)
signal.signal(signal.SIGINT, grexit)
# create table readings (ts integer, temp real, hum real, humt real);
conn = sqlite3.connect('temps_w_tobacco.db')
c = conn.cursor()
# XRF
serialport = '/dev/ttyACM0'
#serialport = '/dev/usbdev1.3'
baudrate = '9600'
ser = serial.Serial(serialport, baudrate)
ser.stopbits = 2
input = ''
print "Working..."
previous_ts = 0
previous_alert = 0
while True:
input += ser.read()
while input.find("\r\n") != -1:
chopped_line = input[:input.find("\r\n")]
input = input[input.find("\r\n")+2:]
# print chopped_line
if chopped_line.find('temperature') != -1:
values = chopped_line.split(' ')
if len(values) > 4:
temp = values[1]
rhum = values[3]
thum = values[5]
ts = int(time.time())
# alert every 60 min
if mail_alerts and float(thum) < LOW_LIMIT:
if ts - previous_alert > 3600:
print "Low!"
from pyzmail import compose_mail, send_mail
payload, mail_from, rcpt_to, msg_id = compose_mail((u'RPI42', 'rpi42@bulte.net'),
[(u'Alexandre', 'alexandre@bulte.net')], u'Humidity is low! %s' % thum, 'utf-8', None)
error = send_mail(payload, mail_from, rcpt_to, 'smtp.free.fr', smtp_port=25)
previous_alert = ts
# log every 5 min
if ts - previous_ts > 300:
print "Writing in DB."
c.execute("INSERT INTO readings VALUES (?, ?, ?, ?)", (ts, temp, rhum, thum))
conn.commit()
previous_ts = ts
#!/usr/bin/python
# apt-get install screen python python-serial sqlite3
import serial, time, sqlite3, signal, sys
#EXIT
def grexit(signal, frame):
# conn.close();
print("Bye.")
sys.exit(0)
signal.signal(signal.SIGINT, grexit)
# XRF
serialport = '/dev/ttyACM0'
#serialport = '/dev/usbdev1.3'
baudrate = '9600'
ser = serial.Serial(serialport, baudrate)
ser.stopbits = 2
input = ''
print "Working..."
while True:
input += ser.read()
while input.find("\r\n") != -1:
chopped_line = input[:input.find("\r\n")]
input = input[input.find("\r\n")+2:]
print chopped_line
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment