117 lines
4.6 KiB
Python
117 lines
4.6 KiB
Python
import datetime
|
|
import time
|
|
import sys
|
|
import echo_serial.serial_controller as EchoSerial
|
|
import echo_db.database as EchoDB
|
|
import _thread
|
|
|
|
class LEDStrip:
|
|
|
|
@staticmethod
|
|
def handle_action(device, action, data):
|
|
actionData = device['actions'][action]
|
|
collection = EchoDB.EchoDB.database['Devices']
|
|
|
|
# Check if we send action too fast after last issued action
|
|
actionNow = datetime.datetime.now()
|
|
actionLast = device['last_used']
|
|
lastIssued = (actionNow - actionLast).total_seconds()
|
|
|
|
# if lastIssued < 2.0:
|
|
# return {'status': 'failed', 'message': 'Issued action too fast after last issued action!'}, 200
|
|
|
|
# Check if a thread is using the blinds, if so return.
|
|
if device['status'] == "busy":
|
|
return {'status': 'failed', 'message': 'LED Strip is being controlled by Echo, Please wait till finished.'}, 200
|
|
|
|
# Stop blinds if we are moving
|
|
if action == "off":
|
|
EchoSerial.EchoSerial.send_commmand(device, 'clear_color')
|
|
|
|
# Update Database
|
|
collection.update_one({'uuid': device['uuid']}, {
|
|
"$set": { 'last_used': datetime.datetime.now(),
|
|
"status": action
|
|
}})
|
|
|
|
return {'status': 'success', 'message': actionData['message']}, 200
|
|
|
|
if action == "on":
|
|
EchoSerial.EchoSerial.send_commmand(device, 'set_color', device['current_color'])
|
|
|
|
# Update Database
|
|
collection.update_one({'uuid': device['uuid']}, {
|
|
"$set": { 'last_used': datetime.datetime.now(),
|
|
"status": action
|
|
}})
|
|
|
|
return {'status': 'success', 'message': actionData['message']}, 200
|
|
|
|
if action == "set_color":
|
|
EchoSerial.EchoSerial.send_commmand(device, 'set_color', data)
|
|
|
|
# Update Database
|
|
collection.update_one({'uuid': device['uuid']}, {
|
|
"$set": { 'last_used': datetime.datetime.now(),
|
|
"current_color": data,
|
|
"status": "on"
|
|
}})
|
|
|
|
return {'status': 'success', 'message': actionData['message']}, 200
|
|
|
|
if action == "automatic_movement":
|
|
|
|
if data == "on":
|
|
# Update Database
|
|
now_time = datetime.datetime.now()
|
|
auto_shutdown = now_time + datetime.timedelta(minutes = 2)
|
|
collection.update_one({'uuid': device['uuid']}, {"$set": { 'last_used': datetime.datetime.now(), 'automatic_movement': True, 'automatic_shutdown': auto_shutdown }})
|
|
return {'status': 'success', 'message': actionData['message']}, 200
|
|
|
|
if data == "off":
|
|
# Update Database
|
|
collection.update_one({'uuid': device['uuid']}, {"$set": { 'last_used': datetime.datetime.now(), 'automatic_movement': False }})
|
|
return {'status': 'success', 'message': actionData['message']}, 200
|
|
|
|
return {'status': 'failed', 'message': 'Setting not found!'}, 200
|
|
|
|
@staticmethod
|
|
def handle_data(device, action, data):
|
|
pass
|
|
|
|
@staticmethod
|
|
def handle_movement_led():
|
|
mainBedLEDUUID = '34gr-54jf'
|
|
collection = EchoDB.EchoDB.database['Devices']
|
|
|
|
# Get Device (Main Light)
|
|
mainBedLEDDevice = collection.find_one({'uuid': mainBedLEDUUID})
|
|
|
|
# Check if automatic movement mode of main light is enabled, else do nothing
|
|
if mainBedLEDDevice['automatic_movement'] == False:
|
|
return
|
|
|
|
# Check if light levels are low enough to turn on light
|
|
collectionLight = EchoDB.EchoDB.database['LightLog']
|
|
data = collectionLight.find().sort([('timestamp', -1)]).limit(1)
|
|
if data[0]['light_amount'] > 20:
|
|
return;
|
|
|
|
# Light is already on, update automatic shutdown.
|
|
if mainBedLEDDevice['status'] == "on":
|
|
now_time = datetime.datetime.now()
|
|
auto_shutdown = now_time + datetime.timedelta(minutes = 2)
|
|
collection.update_one({'uuid': mainBedLEDUUID}, {"$set": { 'automatic_shutdown': auto_shutdown }})
|
|
return
|
|
|
|
# Light is off, turn it on
|
|
|
|
# Send Serial Command
|
|
EchoSerial.EchoSerial.send_commmand(mainBedLEDDevice, "set_color", mainBedLEDDevice['current_color'])
|
|
|
|
# Auto shutdown time
|
|
now_time = datetime.datetime.now()
|
|
auto_shutdown = now_time + datetime.timedelta(minutes= 2)
|
|
|
|
# Update Database
|
|
collection.update_one({'uuid': mainBedLEDUUID}, {"$set": { 'last_used': datetime.datetime.now(), 'status': "on", 'automatic_shutdown': auto_shutdown }}) |