-
Notifications
You must be signed in to change notification settings - Fork 0
/
lcdscreen.py
81 lines (65 loc) · 1.76 KB
/
lcdscreen.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import Adafruit_CharLCD as LCD
import sqlite3
import signal
from time import sleep
from sys import exit
from os import environ
lcd_rs = 25
lcd_en = 24
lcd_d4 = 23
lcd_d5 = 17
lcd_d6 = 18
lcd_d7 = 22
lcd_backlight = 4
lcd_columns = 16
lcd_rows = 2
# Define LCD column and row size for 16x2 LCD.
lcd_columns = 16
lcd_rows = 2
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)
def signal_handler(sig, frame):
lcd.clear()
exit(0)
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGQUIT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
database_file = "./sensor-data.db"
if 'SENSOR_DATA_DB' in environ:
database_file = environ['SENSOR_DATA_DB']
data_select_query = '''
SELECT
AVG(temperature) AS temperature,
AVG(humidity) AS humidity,
AVG(pressure) AS pressure,
COUNT(*) AS num_data_points
FROM sensor_data
WHERE
"timestamp" > datetime('now', '-25 seconds')
'''
try:
conn = sqlite3.connect(database_file)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
except sqlite3.Error:
print("Error connecting database")
lcd.clear()
lcd.message("Database error")
exit(1)
def get_message(row):
if row['num_data_points'] == 0:
return "No recent data,\ncheck status"
temp = row['temperature']
hum = int(row['humidity'])
return "Temp: {:>9.1f}C\nHumidity: {:>5d}%".format(temp, hum)
try:
while True:
cursor.execute(data_select_query)
row = cursor.fetchone()
lcd.clear()
lcd.message(get_message(row))
sleep(2)
except sqlite3.Error:
print("Error communicating with database")
lcd.clear()
lcd.message("Database error")
exit(1)