Exemple #1
0
        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
                    }
                }
            }
        }