-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsensors.py
116 lines (93 loc) · 2.73 KB
/
sensors.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import Adafruit_DHT
import time
import datetime
import RPi.GPIO as GPIO
import threading
from mq import *
# Constants
DHT_PIN = 4
LIGHT_PIN = 19
SOUND_CHANNEL = 17
VIBRATION_CHANNEL = 16
PIR_PIN = 23
FLAME_CHANNEL = 12
# Initialize sensors
GPIO.setmode(GPIO.BCM)
GPIO.setup(LIGHT_PIN, GPIO.IN)
GPIO.setup(SOUND_CHANNEL, GPIO.IN)
GPIO.setup(VIBRATION_CHANNEL, GPIO.IN)
GPIO.setup(PIR_PIN, GPIO.IN)
GPIO.setup(FLAME_CHANNEL, GPIO.IN)
dht_sensor = Adafruit_DHT.DHT11
sound_beat = 0
vibration_beat = 0
motion_beat = 0
flame_beat = 0
mq2 = None
# Sensor Callbacks
def sound_callback(sound_channel):
global sound_beat
sound_beat += 1
def vibration_callback(vibration_channel):
global vibration_beat
vibration_beat += 1
def flame_callback(flame_channel):
global flame_beat
flame_beat += 1
# Sensor Reading Start Functions
def start_reading(channel, callback):
GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300)
GPIO.add_event_callback(channel, callback)
def start_sound_reading():
start_reading(SOUND_CHANNEL, sound_callback)
def start_vibration_reading():
start_reading(VIBRATION_CHANNEL, vibration_callback)
def start_flame_reading():
start_reading(FLAME_CHANNEL, flame_callback)
def start_mq2_reading():
global mq2
mq2 = MQ()
# Sensor Data Fetch Functions
def get_sensor_data(channel, beat):
data = beat
beat = 0
return data
def get_temperature_humidity():
while True:
humidity, temperature = Adafruit_DHT.read(dht_sensor, DHT_PIN)
if humidity is not None and temperature is not None:
return temperature, humidity
def get_light():
return GPIO.input(LIGHT_PIN)
def get_sound():
return get_sensor_data(SOUND_CHANNEL, sound_beat)
def get_vibration():
return get_sensor_data(VIBRATION_CHANNEL, vibration_beat)
def get_flame():
return get_sensor_data(FLAME_CHANNEL, flame_beat)
def get_mq2_reading():
global mq2
reading = mq2.MQPercentage()
return reading["SMOKE"], reading["CO"], reading["GAS_LPG"]
# Helper Functions
def get_date_time():
date_time = str(datetime.datetime.now())
return date_time
def get_id(rpi_id, room_id, date_time):
row_id = date_time + "_" + rpi_id + "_" + room_id
return row_id
def get_reading(rpi_id, room_id):
date_time = get_date_time()
row = dict()
row['id'] = get_id(rpi_id, room_id, date_time)
row['date_time'] = date_time
row['rpi_id'] = rpi_id
row['room_id'] = room_id
row['temp'], row['humidity'] = get_temperature_humidity()
row['light'] = get_light()
row['sound'] = get_sound()
row['flame'] = get_flame()
row['vibration'] = get_vibration()
row['motion'] = get_motion()
row['smoke'], row['co'], row['lpg'] = get_mq2_reading()
return row