public async Task <IActionResult> EventTimerEvent(dynamic data) { var eventData = data.eventData; var evt = eventData.events[0]; var timerEventName = evt.timerEvent.name.ToString(); if (timerEventName == "SCHEDULE_DOOR_UNLOCKED") { var client = new SmartThingsClient(); var authToken = eventData.authToken.ToString(); // check if door sensor is on/off var installedApp = eventData.installedApp; var installedAppId = installedApp.installedAppId.ToString(); var installedAppConfig = installedApp.config; var doorSensor = installedAppConfig.doorSensor[0]; var doorSensorId = doorSensor.deviceConfig.deviceId.ToString(); var doorSensorStatus = JObject.Parse(client.Status(doorSensorId, authToken)); if (doorSensorStatus.components.main.relaySwitch["switch"].value.ToString() == "on") { var doorLock = installedAppConfig.doorLock[0]; var doorLockId = doorLock.deviceConfig.deviceId.ToString(); var commands = new { commands = new List <dynamic> { new { component = "main", capability = "lock", command = "lock" } } }; client.Command(doorLockId, authToken, commands); client.Unschedule(installedAppId, authToken, "SCHEDULE_DOOR_UNLOCKED"); // TODO: delete schedule } } 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 } } } }