public async Task <IActionResult> EventDeviceEvent(dynamic data) { var deviceEvent = data.eventData.events[0].deviceEvent; var deviceEventValue = deviceEvent.value.ToString(); var client = new SmartThingsClient(); var installedApp = data.eventData.installedApp; var installedAppId = installedApp.installedAppId.ToString(); var authToken = data.eventData.authToken.ToString(); if (deviceEventValue == "unlocked") { var scheduleInterval = DateTime.Now.DayOfWeek >= DayOfWeek.Monday && DateTime.Now.DayOfWeek <= DayOfWeek.Friday ? installedApp.config.scheduleIntervalWeekdays[0].stringConfig.value : installedApp.config.scheduleIntervalWeekenddays[0].stringConfig.value; client.Schedule( installedAppId, authToken, new { name = "SCHEDULE_DOOR_UNLOCKED", cron = new { expression = $"*/{scheduleInterval} * * * ? *", timezone = "GMT" } }); } else if (deviceEventValue == "locked") { client.Unschedule(installedAppId, authToken, "SCHEDULE_DOOR_UNLOCKED"); } return(new OkResult()); }
private static void HandleEventAction(dynamic data) { // if lock state is unlocked // start timer "*/X * * * * *" var eventType = data.events[0].eventType.ToString(); if (eventType == "DEVICE_EVENT") { var deviceEventValue = data.events[0].deviceEvent.value.ToString(); var client = new SmartThingsClient(); var installedAppId = data.installedApp.installedAppId.ToString(); var authToken = data.authToken.ToString(); if (deviceEventValue == "unlocked") { var scheduleInterval = DateTime.Now.DayOfWeek >= DayOfWeek.Monday && DateTime.Now.DayOfWeek <= DayOfWeek.Friday ? data.installedApp.config.scheduleIntervalWeekdays[0].stringConfig.value : data.installedApp.config.scheduleIntervalWeekenddays[0].stringConfig.value; client.Schedule( installedAppId, authToken, new { name = "SCHEDULE_DOOR_UNLOCKED", cron = new { expression = $"*/{scheduleInterval} * * * ? *", timezone = "GMT" } }); } else if (deviceEventValue == "locked") { client.Unschedule(installedAppId, authToken, "SCHEDULE_DOOR_UNLOCKED"); } } else if (eventType == "TIMER_EVENT") { var timerEventName = data.events[0].timerEvent.name; if (timerEventName == "SCHEDULE_DOOR_UNLOCKED") { var client = new SmartThingsClient(); var authToken = data.authToken.ToString(); // check if door sensor is on/off var doorSensorId = data.installedApp.config.doorSensor[0].deviceConfig.deviceId.ToString(); var doorSensorStatus = JObject.Parse(client.Status(doorSensorId, authToken)); if (doorSensorStatus.components.main.relaySwitch["switch"].value.ToString() == "off") { var doorLockId = data.installedApp.config.doorLock[0].deviceConfig.deviceId.ToString(); var commands = new { commands = new List <dynamic> { new { component = "main", capability = "lock", command = "lock" } } }; client.Command(doorLockId, authToken, commands); var installedAppId = data.installedApp.installedAppId.ToString(); client.Unschedule(installedAppId, authToken, "SCHEDULE_DOOR_UNLOCKED"); // TODO: delete schedule } } } }