-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcron.py
61 lines (55 loc) · 2.36 KB
/
cron.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import sqlite3
import os.path
import datetime
from time import sleep
import RPi.GPIO as GPIO
from gpiozero import Motor
dbfilename = '/home/pi/watering/watering.db'
pump1_pin1=26
pump1_pin2=19
GPIO.setmode(GPIO.BCM)
GPIO.setup(pump1_pin1, GPIO.OUT)
GPIO.setup(pump1_pin2, GPIO.OUT)
def initialize():
if os.path.isfile(dbfilename):
conn = sqlite3.connect(dbfilename)
conn.row_factory = sqlite3.Row
c = conn.cursor()
else:
conn = sqlite3.connect(dbfilename)
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute('''CREATE TABLE history (date integer, text text)''')
c.execute('''CREATE TABLE pumps (id integer primary key, name text, milliseconds integer, hour integer, days text)''')
entry = (datetime.datetime.now().timestamp(), "Created database")
c.execute("INSERT INTO history VALUES (?,?)", entry)
#pumps = [ (1, '1', 3000, 13, '12345'), (2, '2', 3000, 13, '12345') ]
pumps = [ (1, '1', 30000, 11, '1234567') ]
c.executemany("INSERT INTO pumps VALUES (?,?,?,?,?)", pumps)
conn.commit()
return conn
def print_history(conn):
for row in conn.cursor().execute('SELECT * FROM history ORDER BY date'):
print('{} {}'.format(datetime.datetime.fromtimestamp(row["date"]).strftime('%Y-%m-%d %H:%M:%S'), row["text"]))
def run_motors(conn):
entry = (datetime.datetime.now().timestamp(), "Cron job executed")
conn.cursor().execute("INSERT INTO history VALUES (?,?)", entry)
conn.commit()
for row in conn.cursor().execute('SELECT * FROM pumps ORDER BY id'):
# TODO: Check if correct day
# Check if correct time
now = datetime.datetime.now()
if (now.hour == row["hour"]):
entry = (datetime.datetime.now().timestamp(), "Starting pump {} for {} seconds".format(row["id"], row["milliseconds"] / 1000))
conn.cursor().execute("INSERT INTO history VALUES (?,?)", entry)
conn.commit()
motor = Motor(pump1_pin1, pump1_pin2)
motor.forward(1)
sleep(row["milliseconds"] / 1000)
motor.stop()
entry = (datetime.datetime.now().timestamp(), "Stopping pump {}".format(row["id"]))
conn.cursor().execute("INSERT INTO history VALUES (?,?)", entry)
conn.commit()
if __name__ == "__main__":
conn = initialize()
run_motors(conn)