76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
from datetime import datetime, time
|
|
|
|
from flask import render_template
|
|
from homeassistant_api import HomeassistantAPIError
|
|
|
|
from app import webapp
|
|
from app.models.callback import Callback
|
|
from app.models.settings import Setting
|
|
from app.models.schedule import Schedule
|
|
from app.models.trigger import Trigger
|
|
from app.homeassistant import HomeAssistant
|
|
|
|
@webapp.route('/hook/<uuid>')
|
|
def hook(uuid:str):
|
|
callback = None
|
|
|
|
try:
|
|
callback = Callback.get_callback(uuid)
|
|
except:
|
|
return render_template("error/404.html"), 404
|
|
|
|
if(not callback.active):
|
|
return render_template("error/404.html"), 404
|
|
|
|
feedback = Setting.get_value(Setting.Keys.FEEDBACK);
|
|
schedules = Schedule.get_schedules(uuid=callback.uuid);
|
|
|
|
now = datetime.now()
|
|
cweekday = datetime.now().weekday()
|
|
ctime = datetime.now().time()
|
|
|
|
trigger_schedule = -1
|
|
|
|
if(schedules.count() != 0):
|
|
anymatch = False;
|
|
|
|
for schedule in schedules:
|
|
|
|
possiblematch = True
|
|
|
|
if(cweekday == schedule.start_day):
|
|
if(ctime < schedule.start_time):
|
|
possiblematch = False
|
|
|
|
if(cweekday == schedule.end_day):
|
|
if(ctime > schedule.end_time):
|
|
possiblematch = False
|
|
|
|
if(cweekday < schedule.start_day or cweekday > schedule.end_day):
|
|
possiblematch = False
|
|
|
|
if(possiblematch):
|
|
trigger_schedule = schedule.id
|
|
anymatch = True
|
|
|
|
if not anymatch:
|
|
trigger = Trigger(uuid, trigger_schedule, now, False)
|
|
trigger.save()
|
|
|
|
if(feedback == "none"):
|
|
return render_template("error/404.html"), 404
|
|
if(feedback == "some"):
|
|
return render_template("hook.html", name="Action not permitted", note="This action cannot be performed at this time.")
|
|
if(feedback == "all"):
|
|
return render_template("hook.html", name=callback.name, note="This action is not scheduled to be active at this time.")
|
|
|
|
trigger = Trigger(uuid, trigger_schedule, now, True)
|
|
trigger.save()
|
|
|
|
try:
|
|
HomeAssistant.getInstance().trigger_service(callback.domain, callback.service, callback.entity, callback.data)
|
|
except HomeassistantAPIError as e:
|
|
return render_template("error/500.html", error=str(e)), 500
|
|
|
|
return render_template("hook.html", name=callback.name, note=callback.note)
|