public sbyte ChangeParam([FromBody]DevParam devInfo)
        {
            sbyte newValue = -1;

            if (devInfo.Cmd == "onoff")
            {
                switch (devInfo.Type)
                {
                    case "Lamp":
                        dev = db.Lamps.Find(devInfo.Id);
                        break;
                    case "Fan":
                        dev = db.Fans.Include("Speed").FirstOrDefault(p => p.Id == devInfo.Id);
                        break;
                    case "Louvers":
                        dev = db.LouversSet.Include("Open").FirstOrDefault(p => p.Id == devInfo.Id);
                        break;
                    case "Tv":
                        dev = db.TvSet.Include("Volume").FirstOrDefault(p => p.Id == devInfo.Id);
                        break;
                }
                dev.OnOff();
                if (dev.State)
                {
                    newValue = 1;
                }
                else
                {
                    newValue = 0;
                }
            }
            else
            {
                switch (devInfo.Type)
                {
                    case "Fan":
                        dev = db.Fans.Include("Speed").FirstOrDefault(p => p.Id == devInfo.Id);
                        if (devInfo.Cmd == "down")
                            newValue = (sbyte)((Fan)dev).Speed.Down();
                        else
                            newValue = (sbyte)((Fan)dev).Speed.Up();
                        break;
                    case "Louvers":
                        dev = db.LouversSet.Include("Open").FirstOrDefault(p => p.Id == devInfo.Id);
                        if (devInfo.Cmd == "down")
                            newValue = (sbyte)((Louvers)dev).Open.Down();
                        else
                            newValue = (sbyte)((Louvers)dev).Open.Up();
                        break;
                    case "Tv":
                        switch (devInfo.Param)
                        {
                            case "Volume":
                                dev = db.TvSet.Include("Volume").FirstOrDefault(p => p.Id == devInfo.Id);
                                if (devInfo.Cmd == "down")
                                    newValue = (sbyte)((Tv)dev).Volume.Down();
                                else
                                    newValue = (sbyte)((Tv)dev).Volume.Up();
                                break;
                            case "Program":
                                dev = db.TvSet.Find(devInfo.Id);
                                if (devInfo.Cmd == "down")
                                    newValue = (sbyte)((Tv)dev).PreviousChannel();
                                else
                                    newValue = (sbyte)((Tv)dev).NextChannel();
                                break;
                        }
                        break;
                }
            }

            if (dev != null)
            {
                try
                {
                    db.Entry(dev).State = EntityState.Modified;
                    db.SaveChanges();

                    return newValue;
                }
                catch
                {
                    return -1;
                }
            }
            else
            {
                return -1;
            }
        }