import json, platform, time import pigpio from settings.parseSettings import get_Settings from pigpiod_service_manager import start_PIGPIO_Service from datentime.datentime import dt DHT22_Settings = get_Settings('DHT22') #For DHT Library import DHT22_Library #For Adafruit Library import Adafruit_DHT as dht Adafruit_Lib = True def read_DHT22(): dt_Obj = dt() data = {} if Adafruit_Lib == True: Humidity, Temperature = dht.read_retry(dht.DHT22, int(DHT22_Settings['DATA'])) data['sid'] = DHT22_Settings['SENSOR_ID'] data['dt'] = str(dt_Obj.get_DB_datetime_str()) data['temp'] = '{0:0.2f}'.format(Temperature) data['humi'] = '{0:0.2f}'.format(Humidity) else: dht22_Obj = DHT22_Sensor()
import paho.mqtt.client as mqtt from db.sensor_data_to_db import sensor_Data_Handler from settings.parseSettings import get_Settings MQTT_Settings = get_Settings('MQTT') #Subscribe to all Sensors at Base Topic def on_connect(mosq, obj, rc): mqttc.subscribe(MQTT_Settings['MQTT_BASE_TPC'], 0) #Save Data into DB Table def on_message(mosq, obj, msg): sensor_Data_Handler(msg.topic, msg.payload) def on_subscribe(mosq, obj, mid, granted_qos): pass mqttc = mqtt.Client() # Assign event callbacks mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_subscribe = on_subscribe # Connect mqttc.connect(MQTT_Settings['HOST'], int(MQTT_Settings['PORT']), int(MQTT_Settings['KEEPALIVE']))
import inspect, os from subprocess import PIPE, Popen from datetime import datetime camera_Dir = os.path.dirname( os.path.abspath(inspect.getfile(inspect.currentframe()))) ffmpeg_File_Path = os.path.join(camera_Dir, 'ffmpeg') from settings.parseSettings import get_Settings Camera_Settings = get_Settings('CAMERA') Video_Dir_Path = Camera_Settings['VIDEO_DIR'] Frame_Height = Camera_Settings['VIDEO_FRAME_HEIGHT'] Frame_Width = Camera_Settings['VIDEO_FRAME_WIDTH'] Frame_Per_Second = Camera_Settings['VIDEO_FRAME_PER_SECOND'] Bit_Rate = Camera_Settings['VIDEO_BITRATE'] YouTube_Settings = get_Settings('YOUTUBE') Stream_Name = YouTube_Settings['LIVE_STREAM_NAME_KEY'] #==================================================================================== def cmdline(command): process = Popen(args=command, stdout=PIPE, shell=True) return process.communicate()[0] #==================================================================================== #==================================================================================== # UNDER TESTING (DO NOT USE)
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from settings.parseSettings import get_Settings EMAIL_Settings = get_Settings('EMAIL') FROM_ADD = EMAIL_Settings['FROM_ADD'] USERNAME = EMAIL_Settings['USERNAME'] PASSWORD = EMAIL_Settings['PASSWORD'] SMTP_SERVER = EMAIL_Settings['SMTP_ADD'] SMTP_PORT = EMAIL_Settings['SMTP_PORT'] class Class_eMail(): def __init__(self): self.session = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) self.session.ehlo() self.session.login(USERNAME, PASSWORD) def initialise_Mail_Body(self, To_Add, Subject): #Prepare Mail Body Mail_Body = MIMEMultipart() Mail_Body['From'] = FROM_ADD Mail_Body['To'] = To_Add Mail_Body['Subject'] = Subject return Mail_Body #Call this to send plain text emails. def send_Text_Mail(self, To_Add, Subject, txtMessage): Mail_Body = self.initialise_Mail_Body(To_Add, Subject) #Attach Mail Message
import RPi.GPIO as GPIO from settings.parseSettings import get_Settings Status_LED_Settings = get_Settings('STATUS_LED') GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(int(Status_LED_Settings['POWER']), GPIO.OUT) def status_LED_ON(): GPIO.output(int(Status_LED_Settings['POWER']), GPIO.HIGH) return def status_LED_OFF(): GPIO.output(int(Status_LED_Settings['POWER']), GPIO.LOW) return
import json from settings.parseSettings import get_Settings from datentime.datentime import dt import Adafruit_BMP.BMP085 as BMP085 BMP180_Settings = get_Settings('BMP180') def read_BMP180(): dt_Obj = dt() data = {} sensor = BMP085.BMP085() data['sid'] = str(BMP180_Settings['SENSOR_ID']) data['dt'] = dt_Obj.get_DB_datetime_str() data['pres'] = format(sensor.read_pressure()) data['pres_at_sea_level'] = '{0:0.2f}'.format(sensor.read_sealevel_pressure()) data['alti'] = '{0:0.2f}'.format(sensor.read_altitude()) data['temp'] = '{0:0.2f}'.format(sensor.read_temperature()) json_data = json.dumps(data) del dt_Obj return json_data
from led.status_led import status_LED_ON, status_LED_OFF from photocell_light.photocell_light_sensor import read_LIGHT from settings.parseSettings import get_Settings, Str_To_Boolean from multi_threading.multi_threading import RepeatedTimer from pir.pir_motion_sensor import PIR_Sensor from camera.capture_time_lapse_photo import start_Time_Lapse_Photo_Capture from camera.camera_file_gdrive_youtube_upload import PiCam_GDrive_YouTube_Upload_Service, get_GDrive_PiCam_Data_Path from camera.capture_mp4_video import start_Video_Capture from twitter_post.twitter_post import publish_Status_On_Twitter from facebook_post.facebook_post import post_on_Facebook from sms.ways2sms import send_SMS #====================================================== #Fetch Settings #====================================================== MQTT_Settings = get_Settings('MQTT') DHT22_Settings = get_Settings('DHT22') BMP180_Settings = get_Settings('BMP180') LIGHT_Settings = get_Settings('PHOTOCELL') STATUS_LED_Settings = get_Settings('STATUS_LED') SYSTEM_Settings = get_Settings('SYSTEM') Motion_Sensor_Settings = get_Settings('PIR') Camera_Settings = get_Settings('CAMERA') GOOGLE_DRIVE_Settings = get_Settings('GOOGLE_DRIVE') FACEBOOK_Settings = get_Settings('FACEBOOK') TWITTER_Settings = get_Settings('TWITTER') WAYS2SMS_Settings = get_Settings('WAYS2SMS') #======================================================
from db.db_operations import DatabaseManager from google_drive.google_drive_upload import gDrive from datentime.datentime import dt import time, json, os, threading from youtube.youtube_upload import upload_Video_On_YouTube from settings.parseSettings import get_Settings GOOGLE_DRIVE_Settings = get_Settings('GOOGLE_DRIVE') #======================================================================== class Upload_Camera_Files: def __init__(self): #Initialize Objects self.gdObj = gDrive() self.DateObj = dt() self.db_Obj = DatabaseManager() def get_Motion_Event_Google_Drive_Folder_ID(self, sensor_ID, motion_Event_Date): #Get Camera File Root Folder ID from Google Drive (Create it if it doesn't exist) Root_Folder_Name = GOOGLE_DRIVE_Settings[ 'ROOT_FOLDER_FOR_UPLOADED_CAMERA_FILES'] Root_Folder_ID = self.gdObj.create_GDrive_Folder(Root_Folder_Name) #Create a Folder with Today's Date in Root Folder inside Root Folder(if it doesn't exists) Today_Folder_Name = self.DateObj.get_GDrive_Day_Folder_datetime_str( motion_Event_Date) Today_Folder_ID = self.gdObj.create_GDrive_Folder( Today_Folder_Name, Root_Folder_ID)
import json from db.db_operations import DatabaseManager from settings.parseSettings import get_Settings DB_Settings = get_Settings('SQLIGHT') MQTT_Settings = get_Settings('MQTT') def bmp180_Data(jsonData): print "BMP 180 Data" print jsonData #Parse Data json_Dict = json.loads(jsonData) SensorID = json_Dict['sid'] DatenTime = json_Dict['dt'] Pressure = json_Dict['pres'] Pressure_At_Sea_Level = json_Dict['pres_at_sea_level'] Altitude = json_Dict['alti'] Temperature = json_Dict['temp'] #Push into DB Table dbObj = DatabaseManager() dbObj.add_del_update_db_record( "insert into BMP180_Data (SensorID, Date_n_Time, Pressure, Pressure_At_Sea_Level, Altitude, Temperature) values (?,?,?,?,?,?)", [ SensorID, DatenTime, Pressure, Pressure_At_Sea_Level, Altitude, Temperature ]) del dbObj
import facebook from settings.parseSettings import get_Settings FACEBOOK_Settings = get_Settings('FACEBOOK') FB_APP_ID = FACEBOOK_Settings['FB_APP_ID'] FB_APP_SECRET = FACEBOOK_Settings['FB_APP_SECRET'] FB_ACCESS_TOKEN = FACEBOOK_Settings['FB_ACCESS_TOKEN'] def post_on_Facebook(strMsg): facebook_graph = facebook.GraphAPI(FB_ACCESS_TOKEN) try: response = facebook_graph.put_wall_post(strMsg) except facebook.GraphAPIError as e: print e
from decimal import Decimal import threading, time, json import RPi.GPIO as GPIO from datentime.datentime import dt #Read Settings from settings.parseSettings import get_Settings Motion_Sensor_Settings = get_Settings('PIR') Data_Pin = int(Motion_Sensor_Settings['DATA']) #Set GPIO Mode and Pin GPIO.setmode(GPIO.BCM) GPIO.setup(Data_Pin, GPIO.IN, GPIO.PUD_DOWN) class PIR_Sensor(): def __init__(self): pass #============================================================================= def read_PIR_Motion_Sensor(self, event_Listener_Function): #Initialize Variables Previous_Motion_State = 0 Current_Motion_State = 0 Motion_Start_Time = None dt_Obj = dt() #Keep Reading Sensor while True: Previous_Motion_State = Current_Motion_State #Read Motion Sensor
import RPi.GPIO as GPIO, time, os, json from datentime.datentime import dt from settings.parseSettings import get_Settings Light_Sensor_Settings = get_Settings('PHOTOCELL') DEBUG = 1 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Set GPIO Pin to Output Pun as we need to use it as 3V Power supply for Circuit GPIO.setup(int(Light_Sensor_Settings['POWER']), GPIO.OUT) def read_LIGHT(): # Set GPIO High to supply 3V Power to Circuit GPIO.output(int(Light_Sensor_Settings['POWER']), GPIO.HIGH) RCpin = int(Light_Sensor_Settings['DATA']) reading = 0 GPIO.setup(RCpin, GPIO.OUT) GPIO.output(RCpin, GPIO.LOW) time.sleep(0.1) GPIO.setup(RCpin, GPIO.IN) # This takes about 1 millisecond per loop cycle while (GPIO.input(RCpin) == GPIO.LOW): reading += 1 GPIO.output(int(Light_Sensor_Settings['POWER']), GPIO.LOW)
import time from datetime import datetime, date from settings.parseSettings import get_Settings dt_Settings = get_Settings('DATE_TIME') class dt: def __init__(self): pass def get_datetime_str(self): return (datetime.today()).strftime(dt_Settings['DATE_TIME_FORMAT']) def get_datetime(self): return datetime.today() def get_date_str(self): return (datetime.today()).strftime(dt_Settings['DATE_FORMAT']) def get_date(self): return date.today() def get_time_str(self): return (datetime.today()).strftime(dt_Settings['TIME_FORMAT']) def get_time(self): return time.time() #============================================================================ # DB Date Entries #============================================================================
import picamera from datetime import datetime, date import time from settings.parseSettings import get_Settings Camera_Settings = get_Settings('CAMERA') class camera_module: def __init__(self): #Initialize Camera Object self.Camera_Obj = picamera.PiCamera() #Set Camera Settings self.Camera_Obj.resolution = tuple( [int(s) for s in Camera_Settings['RESOLUTION'].split(',')]) self.Camera_Obj.sharpness = int(Camera_Settings['SHARPNESS']) self.Camera_Obj.contrast = int(Camera_Settings['CONTRAST']) self.Camera_Obj.brightness = int(Camera_Settings['BRIGHTNESS']) self.Camera_Obj.saturation = int(Camera_Settings['SATURATION']) self.Camera_Obj.ISO = int(Camera_Settings['ISO']) self.Camera_Obj.video_stabilization = True if ( Camera_Settings['VIDEO_STABILIZATION'] ).title() == 'True' else False self.Camera_Obj.exposure_compensation = int( Camera_Settings['EXPOSURE_COMPENSATION']) self.Camera_Obj.exposure_mode = Camera_Settings['EXPOSURE_MODE'] self.Camera_Obj.meter_mode = Camera_Settings['METER_MODE'] self.Camera_Obj.awb_mode = Camera_Settings['AWB_MODE'] self.Camera_Obj.image_effect = Camera_Settings['IMAGE_EFFECT'] self.Camera_Obj.color_effects = None if (
from twitter import * from settings.parseSettings import get_Settings TWITTER_Settings = get_Settings('TWITTER') CONSUMER_KEY = TWITTER_Settings['CONSUMER_KEY'] CONSUMER_SECRET = TWITTER_Settings['CONSUMER_SECRET'] ACCESS_TOKEN = TWITTER_Settings['ACCESS_TOKEN'] ACCESS_TOKEN_SECRET = TWITTER_Settings['ACCESS_TOKEN_SECRET'] def publish_Status_On_Twitter(Twitter_Status): TW = Twitter(auth=OAuth(ACCESS_TOKEN, ACCESS_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET)) TW.statuses.update(status=Twitter_Status)
from camera.video_stream_encoder import capture_MP4_Video from db.db_operations import DatabaseManager from datentime.datentime import dt import threading, json #Read Settings from settings.parseSettings import get_Settings Motion_Sensor_Settings = get_Settings('PIR') PIR_MOTION_STATUS_HOLD_TIME = int( Motion_Sensor_Settings['MOTION_STATUS_HOLD_TIME']) Camera_Settings = get_Settings('CAMERA') Video_Upload_Location = (Camera_Settings['VIDEO_UPLOAD_AT']).upper() #==================================================================================== def capture_and_add_to_upload_queue(motion_Start_Json_Data): #Read Sensor Data json_Dict = json.loads(motion_Start_Json_Data) SensorID = json_Dict['sid'] Motion_Event_Date = json_Dict['dt'] #Generate Video File Name DateObj = dt() File_Name = DateObj.get_Video_Name_datetime_str(Motion_Event_Date) del DateObj #Start Capturing Video File_Path = capture_MP4_Video(File_Name, int(PIR_MOTION_STATUS_HOLD_TIME) - 2)
import sqlite3 import inspect, os from settings.parseSettings import get_Settings DB_Settings = get_Settings('DATABASE') DB_Dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) DB_File = "UserDB" class DatabaseManager(): def __init__(self): self.conn = sqlite3.connect(DB_File) self.conn.execute('pragma foreign_keys = on') self.conn.commit() self.cur = self.conn.cursor() def query_records(self, sql_query, args=(), single_record=False): records = [] self.cur.execute(sql_query, args) if single_record == True: records = self.cur.fetchone() else: records = self.cur.fetchall() col_names = list(map(lambda x: x[0], self.cur.description)) return records, col_names def add_del_update_db_record(self, sql_query, args=()): self.cur.execute(sql_query, args) self.conn.commit() return