浏览代码

alexa语音控制智能插座

peng 2 年之前
父节点
当前提交
f35c06416d
共有 3 个文件被更改,包括 166 次插入40 次删除
  1. 1 0
      azoauth/urls.py
  2. 142 36
      controller/index.py
  3. 23 4
      model/models.py

+ 1 - 0
azoauth/urls.py

@@ -28,6 +28,7 @@ urlpatterns = [
     path('oa2/token', index.oa2TokenView.as_view()),
     path('oa2/token', index.oa2TokenView.as_view()),
     path('oa2/rtspStart', index.oa2RtspStartView.as_view()),
     path('oa2/rtspStart', index.oa2RtspStartView.as_view()),
     path('oa2/discoverydevice', index.oa2DiscoveryDevice.as_view()),
     path('oa2/discoverydevice', index.oa2DiscoveryDevice.as_view()),
+    path('oa2/discoveryswitch', index.oa2DiscoverySwitch.as_view()),
     # 新增停流
     # 新增停流
     path('oa2/stoprtsp', index.testRunSendStop),
     path('oa2/stoprtsp', index.testRunSendStop),
     # 新增设备推流测试
     # 新增设备推流测试

+ 142 - 36
controller/index.py

@@ -24,12 +24,13 @@ from urllib.parse import urlencode
 import subprocess
 import subprocess
 import uuid
 import uuid
 # from gevent.pool import Pool
 # from gevent.pool import Pool
-from model.models import UserModel, UidRtspModel, AlexaAuthModel, UserCountModel
+from model.models import UserModel, UidRtspModel, AlexaAuthModel, UserCountModel, SwitchModel
 from object.ResponseObject import ResponseObject
 from object.ResponseObject import ResponseObject
 from object.tkObject import tkObject
 from object.tkObject import tkObject
 from service.CommonService import CommonService
 from service.CommonService import CommonService
 from object.RedisObject import RedisObject
 from object.RedisObject import RedisObject
 from azoauth.config import *
 from azoauth.config import *
+from datetime import datetime
 
 
 
 
 class authView(TemplateView):
 class authView(TemplateView):
@@ -149,7 +150,7 @@ class loginHandleView(TemplateView):
             user_qs.update(code=code, updTime=nowTime)
             user_qs.update(code=code, updTime=nowTime)
         else:
         else:
             UserModel.objects.create(userID=userID, code=code, addTime=nowTime, updTime=nowTime)
             UserModel.objects.create(userID=userID, code=code, addTime=nowTime, updTime=nowTime)
-            year_month = str(time.strftime('%Y%m', time.localtime(nowTime)))    # 获取当前年月
+            year_month = str(time.strftime('%Y%m', time.localtime(nowTime)))  # 获取当前年月
             user_count_qs = UserCountModel.objects.filter(skill_name=skill_name, year_month=year_month).values('amount')
             user_count_qs = UserCountModel.objects.filter(skill_name=skill_name, year_month=year_month).values('amount')
             if not user_count_qs.exists():
             if not user_count_qs.exists():
                 UserCountModel.objects.create(skill_name=skill_name, year_month=year_month, amount=1)
                 UserCountModel.objects.create(skill_name=skill_name, year_month=year_month, amount=1)
@@ -288,7 +289,7 @@ class oa2RtspStartView(TemplateView):
         command = "./pushtool {UID} {PWD} {MSG} 1 {channel}".format(UID=UID, PWD=PWD, MSG=MSG, channel=channel)
         command = "./pushtool {UID} {PWD} {MSG} 1 {channel}".format(UID=UID, PWD=PWD, MSG=MSG, channel=channel)
         # 请求MQTT发布消息
         # 请求MQTT发布消息
         url = '{}/iot/requestPublishMessage'.format(SERVER_PREFIX)
         url = '{}/iot/requestPublishMessage'.format(SERVER_PREFIX)
-        requests_data = {'UID': UID, 'rtsp': MSG, 'enable': '1'}   # 1: 开始推流,0: 停止推流; channel: 推流通道
+        requests_data = {'UID': UID, 'rtsp': MSG, 'enable': '1'}  # 1: 开始推流,0: 停止推流; channel: 推流通道
         r = requests.post(url, requests_data)
         r = requests.post(url, requests_data)
         if r.status_code == 200:
         if r.status_code == 200:
             res = r.json()
             res = r.json()
@@ -308,12 +309,12 @@ class oa2RtspStartView(TemplateView):
                     self.runSendRtspMsg(logger, region, command)
                     self.runSendRtspMsg(logger, region, command)
             else:
             else:
                 self.runSendRtspMsg(logger, region, command)
                 self.runSendRtspMsg(logger, region, command)
-        else:   # 使用pushtool通知设备推流
+        else:  # 使用pushtool通知设备推流
             self.runSendRtspMsg(logger, region, command)
             self.runSendRtspMsg(logger, region, command)
 
 
         # 拉流地址
         # 拉流地址
         rtsp_uri = '{}://{}:443/{}'.format(RTSP_PREFIX, RESP_SERVER_DOMAIN, stream_name)
         rtsp_uri = '{}://{}:443/{}'.format(RTSP_PREFIX, RESP_SERVER_DOMAIN, stream_name)
-        stop_time = int(time.time()) + 2*60
+        stop_time = int(time.time()) + 2 * 60
         expirationTime = time.strftime('%Y-%m-%dT%H:%MZ', time.localtime(stop_time))
         expirationTime = time.strftime('%Y-%m-%dT%H:%MZ', time.localtime(stop_time))
 
 
         res_json = {
         res_json = {
@@ -364,7 +365,7 @@ class oa2RtspStartView(TemplateView):
                     communicate(timeout=2)
                     communicate(timeout=2)
                 logger.info('back: {}'.format(str(back[0].decode()) + str(back[1].decode())))
                 logger.info('back: {}'.format(str(back[0].decode()) + str(back[1].decode())))
             except Exception as e:
             except Exception as e:
-                self.runSendRtspMsg(logger, 'CN', command)  #调用失败时尝试用国内的发送
+                self.runSendRtspMsg(logger, 'CN', command)  # 调用失败时尝试用国内的发送
                 logger.info('调用pushtool异常: {}'.format(repr(e)))
                 logger.info('调用pushtool异常: {}'.format(repr(e)))
 
 
     def runSendStop(self, UID, PWD, MSG):
     def runSendStop(self, UID, PWD, MSG):
@@ -409,7 +410,7 @@ class oa2DiscoveryDevice(TemplateView):
         userID = user.userID
         userID = user.userID
         logger.info('userID: {}'.format(userID))
         logger.info('userID: {}'.format(userID))
 
 
-        #更新事件网关接口
+        # 更新事件网关接口
         alexAuth = AlexaAuthModel.objects.filter(token=access_token).order_by('-addTime')
         alexAuth = AlexaAuthModel.objects.filter(token=access_token).order_by('-addTime')
         if alexAuth.exists():
         if alexAuth.exists():
             auth_res = alexAuth.values()
             auth_res = alexAuth.values()
@@ -442,7 +443,7 @@ class oa2DiscoveryDevice(TemplateView):
         res_json = res.json()
         res_json = res.json()
         logger.info('正式服务器响应: {}'.format(res_json))
         logger.info('正式服务器响应: {}'.format(res_json))
 
 
-        test_flag = False   # 用来区分测试服务器,后面删掉
+        test_flag = False  # 用来区分测试服务器,后面删掉
         # 添加测试服务器测试
         # 添加测试服务器测试
         if res_json['result_code'] != 0:
         if res_json['result_code'] != 0:
             auth_request_url = '{}/oalexa/discoveryuid'.format(SERVER_PREFIX_TEST)
             auth_request_url = '{}/oalexa/discoveryuid'.format(SERVER_PREFIX_TEST)
@@ -508,14 +509,116 @@ class oa2DiscoveryDevice(TemplateView):
         logger.info('搜索设备返回值: {}'.format(res_json))
         logger.info('搜索设备返回值: {}'.format(res_json))
         return JsonResponse(res_json, safe=False)
         return JsonResponse(res_json, safe=False)
 
 
-#新增
+
+class oa2DiscoverySwitch(TemplateView):
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        return self.validate(request_dict)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        return self.validate(request_dict)
+
+    def validate(self, request_dict):
+        # 增加对code和client_id的校验代码,返回access_token和refresh_token
+        skill_name = request_dict.get("skill_name", 'loocam')
+        access_token = request_dict.get("access_token", None)
+
+        logger = logging.getLogger('django')
+        logger.info('--------{} 开始搜索设备--------'.format(skill_name))
+
+        user_qs = UserModel.objects.filter(access_token=access_token)
+        if not user_qs.exists():
+            return JsonResponse({'错误': '用户数据不存在'})
+
+        response = ResObject()
+        user = user_qs.first()
+        userID = user.userID
+        logger.info('userID: {}'.format(userID))
+
+        # 更新事件网关接口
+        alexAuth = AlexaAuthModel.objects.filter(token=access_token).order_by('-addTime')
+        if alexAuth.exists():
+            auth_res = alexAuth.values()
+            event_access_token = auth_res[0]['access_token']
+            event_refresh_token = auth_res[0]['refresh_token']
+            event_token = auth_res[0]['token']
+            event_expiresTime = auth_res[0]['expiresTime']
+            event_addTime = auth_res[0]['addTime']
+            event_updTime = auth_res[0]['updTime']
+            event_alexa_region = auth_res[0]['alexa_region']
+            AlexaAuthModel.objects.filter(userID=userID).delete()
+            alexAuth.delete()
+            logger.info('update_event_access_token')
+            logger.info(event_token)
+            AlexaAuthModel.objects.create(
+                userID=userID,
+                access_token=event_access_token,
+                refresh_token=event_refresh_token,
+                token=event_token,
+                expiresTime=event_expiresTime,
+                addTime=event_addTime,
+                updTime=event_updTime,
+                alexa_region=event_alexa_region,
+                skill_name=skill_name,
+            )
+
+        auth_request_url = '{}/oalexa/discoveryswitch'.format(SERVER_PREFIX)
+        requests_data = {'sid': 'admin', 'sst': 'admin', 'alexa_user_id': userID}
+        res = requests.post(url=auth_request_url, data=requests_data)
+        res_json = res.json()
+        logger.info('正式服务器响应: {}'.format(res_json))
+
+        test_flag = False  # 用来区分测试服务器,后面删掉
+        # 添加测试服务器测试
+        if res_json['result_code'] != 0:
+            auth_request_url = '{}/oalexa/discoveryswitch'.format(SERVER_PREFIX_TEST)
+            res = requests.post(url=auth_request_url, data=requests_data)
+            res_json = res.json()
+            test_flag = True
+
+        logger.info('请求服务器url: {}'.format(auth_request_url))
+        logger.info('服务器响应: {}'.format(res_json))
+
+        if res_json['result_code'] != 0:
+            return response.json(0, res={'msg': 'error'})
+
+        switch_list = res_json['result']['switch_list']
+        now_time = int(time.time())
+        res_json = []
+        for switch in switch_list:
+            serial_number = switch['serial_number']
+            nick = switch['nick']
+            region = 'EU' if switch['region'] == 'EU' else 'EN'
+            switch_info_qs = SwitchModel.objects.filter(serial_number=serial_number, userID=userID)
+            if switch_info_qs.exists():
+                switch_info_qs.update(nick=nick, region=region, updTime=now_time)
+            else:
+                SwitchModel.objects.create(serial_number=serial_number, nick=nick, region=region, addTime=now_time,
+                                           updTime=now_time, userID=userID)
+            ur_data = {
+                'endpointId': serial_number,
+                'friendlyName': nick,
+                'manufacturerName': skill_name,
+                'description': 'Camera connected via {}'.format(skill_name),
+                'modelName': 'P1425-LE',
+                'manufacturerId': 'zosi-ACCC8E5E7513',
+            }
+            res_json.append(ur_data)
+        logger.info('搜索设备返回值: {}'.format(res_json))
+        return JsonResponse(res_json, safe=False)
+
+
+# 新增
 def testRunSendStop(request):
 def testRunSendStop(request):
     request.encoding = 'utf-8'
     request.encoding = 'utf-8'
     if request.method == 'GET':
     if request.method == 'GET':
         request_dict = request.GET
         request_dict = request.GET
-    UID=request_dict.get('UID', None)
-    PWD=request_dict.get('PWD', None)
-    MSG=request_dict.get('MSG', None)
+    UID = request_dict.get('UID', None)
+    PWD = request_dict.get('PWD', None)
+    MSG = request_dict.get('MSG', None)
     command = "./pushtool {UID} {PWD} {MSG} 0".format(UID=UID, PWD=PWD, MSG=MSG)
     command = "./pushtool {UID} {PWD} {MSG} 0".format(UID=UID, PWD=PWD, MSG=MSG)
     print('command=>{command}'.format(command=command))
     print('command=>{command}'.format(command=command))
     try:
     try:
@@ -528,45 +631,46 @@ def testRunSendStop(request):
         print("back1----", back[1].decode())  # back是一个元祖,可以通过元祖取值的方式获取结果
         print("back1----", back[1].decode())  # back是一个元祖,可以通过元祖取值的方式获取结果
         return JsonResponse({'msg': 'stop Stream', 'code': 0})
         return JsonResponse({'msg': 'stop Stream', 'code': 0})
 
 
-from datetime import datetime
+
 def testRunStream(request):
 def testRunStream(request):
     request.encoding = 'utf-8'
     request.encoding = 'utf-8'
     if request.method == 'GET':
     if request.method == 'GET':
         request_dict = request.GET
         request_dict = request.GET
-    UID=request_dict.get('UID', None)
-    PWD=request_dict.get('PWD', None)
-    MSG=request_dict.get('MSG', None)
-    time1=datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
+    UID = request_dict.get('UID', None)
+    PWD = request_dict.get('PWD', None)
+    MSG = request_dict.get('MSG', None)
+    time1 = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
     command = "./pushtool {UID} {PWD} {MSG} 1".format(UID=UID, PWD=PWD, MSG=MSG)
     command = "./pushtool {UID} {PWD} {MSG} 1".format(UID=UID, PWD=PWD, MSG=MSG)
     print('command=>{command}'.format(command=command))
     print('command=>{command}'.format(command=command))
     try:
     try:
         back = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE). \
         back = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE). \
             communicate(timeout=10)
             communicate(timeout=10)
-        time2=datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
+        time2 = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
         # print("时间:%s"%datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
         # print("时间:%s"%datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
     except Exception as e:
     except Exception as e:
         return repr(e)
         return repr(e)
     else:
     else:
         print("back0----", back[0].decode())  # 注意需要进行解码操作,默认输出的是字节
         print("back0----", back[0].decode())  # 注意需要进行解码操作,默认输出的是字节
         print("back1----", back[1].decode())  # back是一个元祖,可以通过元祖取值的方式获取结果
         print("back1----", back[1].decode())  # back是一个元祖,可以通过元祖取值的方式获取结果
-        #return str(back[0].decode()) + str(back[1].decode())
-        return JsonResponse({'msg': "star is %s"%time1+",end is %s"%time2, 'code': 0})
+        # return str(back[0].decode()) + str(back[1].decode())
+        return JsonResponse({'msg': "star is %s" % time1 + ",end is %s" % time2, 'code': 0})
         # return JsonResponse({'msg': "run stream", 'code': 0})
         # return JsonResponse({'msg': "run stream", 'code': 0})
 
 
 
 
-#测试是否正常接口
+# 测试是否正常接口
 def test(request):
 def test(request):
     return JsonResponse({'msg': 'Server running normal', 'code': 0})
     return JsonResponse({'msg': 'Server running normal', 'code': 0})
 
 
-#test接口
+
+# test接口
 def loadBalancingServer(request):
 def loadBalancingServer(request):
     try:
     try:
         res1 = requests.get('http://rtsp.zositech.com:10008/api/v1/players', timeout=5)
         res1 = requests.get('http://rtsp.zositech.com:10008/api/v1/players', timeout=5)
     except Exception as e:
     except Exception as e:
         res1 = -1
         res1 = -1
 
 
-    time1=datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
-    print("时间1:%s"%time1)
+    time1 = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
+    print("时间1:%s" % time1)
     # ---------压测接口demo------------
     # ---------压测接口demo------------
     redisObj = RedisObject(db=1)
     redisObj = RedisObject(db=1)
     key1 = 'rtsp.zositech.com'
     key1 = 'rtsp.zositech.com'
@@ -575,7 +679,7 @@ def loadBalancingServer(request):
     redis_data2 = redisObj.get_data(key2)
     redis_data2 = redisObj.get_data(key2)
     if redis_data1 and redis_data2:
     if redis_data1 and redis_data2:
         print("进缓存")
         print("进缓存")
-        mm=min(redis_data1,redis_data2)
+        mm = min(redis_data1, redis_data2)
         if redis_data1 == mm and redis_data1 != -1:
         if redis_data1 == mm and redis_data1 != -1:
             RESP_SERVER_DOMAIN = RESP_SERVER_DOMAIN_DATA['EN']
             RESP_SERVER_DOMAIN = RESP_SERVER_DOMAIN_DATA['EN']
         elif redis_data2 == mm and redis_data2 != -1:
         elif redis_data2 == mm and redis_data2 != -1:
@@ -599,7 +703,7 @@ def loadBalancingServer(request):
     #         RESP_SERVER_DOMAIN = RESP_SERVER_DOMAIN_DATA['EN']
     #         RESP_SERVER_DOMAIN = RESP_SERVER_DOMAIN_DATA['EN']
     #     else:
     #     else:
     #         RESP_SERVER_DOMAIN = RESP_SERVER_DOMAIN_DATA['EN1']
     #         RESP_SERVER_DOMAIN = RESP_SERVER_DOMAIN_DATA['EN1']
-    return JsonResponse({'msg': 'The number of people online is :%s'%res1, 'code': 0})
+    return JsonResponse({'msg': 'The number of people online is :%s' % res1, 'code': 0})
 
 
 
 
 class powerController(TemplateView):
 class powerController(TemplateView):
@@ -614,24 +718,26 @@ class powerController(TemplateView):
         return self.power_controller(request_dict)
         return self.power_controller(request_dict)
 
 
     def power_controller(self, request_dict):
     def power_controller(self, request_dict):
-        uid = request_dict.get('uid', '')
+        serial_number = request_dict.get('serial_number', '')
         access_token = request_dict.get('access_token', '')
         access_token = request_dict.get('access_token', '')
-        skill_name = request_dict.get('skill_name', 'zosi smart')
+        skill_name = request_dict.get('skill_name', 'loocam')
         power_controller = request_dict.get('power_controller', '')
         power_controller = request_dict.get('power_controller', '')
 
 
+        if not all([serial_number, access_token, skill_name]):
+            return JsonResponse({'result_code': '500', '错误': '缺少参数'})
         user_qs = UserModel.objects.filter(access_token=access_token)
         user_qs = UserModel.objects.filter(access_token=access_token)
         if not user_qs.exists():
         if not user_qs.exists():
-            return JsonResponse({'result_code': '500' , '错误': '用户数据不存在'})
-
-        ur_qs = UidRtspModel.objects.filter(uid=uid).values('uid', 'nick', 'rtsp_url', 'password', 'region')
-        if not ur_qs.exists():
-            return JsonResponse({'result_code': '500', '错误': 'uid数据不存在'})
+            return JsonResponse({'result_code': '500', '错误': '用户数据不存在'})
+        userID = user_qs.first().userID
+        switch_qs = SwitchModel.objects.filter(serial_number=serial_number, userID=userID).values('nick', 'region')
+        if not switch_qs.exists():
+            return JsonResponse({'result_code': '500', '错误': 'serial_number数据不存在'})
 
 
         logger = logging.getLogger('django')
         logger = logging.getLogger('django')
-        logger.info('{} 唤醒设备 {}'.format(skill_name, uid))
+        logger.info('{} 唤醒设备 {}'.format(skill_name, serial_number))
         # 请求MQTT发布消息
         # 请求MQTT发布消息
-        url = '{}/iot/requestPublishMessage'.format(SERVER_PREFIX_TEST)    # 测试服务器
-        requests_data = {'UID': uid, 'MSG': power_controller}   # TurnOn, TurnOff
+        url = '{}/api/loocam/open/socket/alexa-socket-switch'.format(SERVER_PREFIX_TEST)  # 测试服务器
+        requests_data = {'serial_number': serial_number, 'power_controller': power_controller}  # TurnOn, TurnOff
         r = requests.post(url, requests_data)
         r = requests.post(url, requests_data)
         if r.status_code != 200:
         if r.status_code != 200:
             return JsonResponse({'result_code': '500', '错误': '请求响应异常'})
             return JsonResponse({'result_code': '500', '错误': '请求响应异常'})

+ 23 - 4
model/models.py

@@ -10,7 +10,8 @@ class UserModel(models.Model):
     code = models.CharField(max_length=32, unique=True, default='', verbose_name='授权码')
     code = models.CharField(max_length=32, unique=True, default='', verbose_name='授权码')
     access_token = models.CharField(max_length=64, unique=False, default='', verbose_name='访问令牌')
     access_token = models.CharField(max_length=64, unique=False, default='', verbose_name='访问令牌')
     refresh_token = models.CharField(max_length=64, unique=False, default='', verbose_name='刷新令牌')
     refresh_token = models.CharField(max_length=64, unique=False, default='', verbose_name='刷新令牌')
-    uid_rtsp = models.ManyToManyField(to='UidRtspModel', blank=True, verbose_name=u'用户关联uid_rtsp表', db_table='user_uid_rtsp')
+    uid_rtsp = models.ManyToManyField(to='UidRtspModel', blank=True, verbose_name=u'用户关联uid_rtsp表',
+                                      db_table='user_uid_rtsp')
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
 
 
@@ -41,7 +42,7 @@ class UserCountModel(models.Model):
 class UidRtspModel(models.Model):
 class UidRtspModel(models.Model):
     id = models.AutoField(primary_key=True)
     id = models.AutoField(primary_key=True)
     nick = models.CharField(max_length=32, verbose_name=u'设备昵称', default='')
     nick = models.CharField(max_length=32, verbose_name=u'设备昵称', default='')
-    uid = models.CharField(max_length=20, verbose_name=u'设备UID', default='',unique=True)
+    uid = models.CharField(max_length=20, verbose_name=u'设备UID', default='', unique=True)
     password = models.CharField(max_length=32, verbose_name=u'设备密码', default='')
     password = models.CharField(max_length=32, verbose_name=u'设备密码', default='')
     rtsp_url = models.CharField(max_length=128, verbose_name='rtsp流地址', default='')
     rtsp_url = models.CharField(max_length=128, verbose_name='rtsp流地址', default='')
     region = models.CharField(max_length=8, verbose_name='区域', default='CN')
     region = models.CharField(max_length=8, verbose_name='区域', default='CN')
@@ -57,17 +58,35 @@ class UidRtspModel(models.Model):
         return self.id
         return self.id
 
 
 
 
+class SwitchModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    nick = models.CharField(max_length=32, verbose_name=u'设备昵称', default='')
+    serial_number = models.CharField(max_length=20, verbose_name=u'设备序列号', default='', unique=True)
+    userID = models.CharField(blank=True, max_length=32, verbose_name=u'用户ID', unique=True)
+    region = models.CharField(max_length=8, verbose_name='区域', default='EN')
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+    updTime = models.IntegerField(verbose_name='更新时间', default=0)
+
+    class Meta:
+        ordering = ('-addTime',)
+        verbose_name = '智能插座表'
+        db_table = 'switch_info'
+
+    def __str__(self):
+        return self.id
+
+
 class AlexaAuthModel(models.Model):
 class AlexaAuthModel(models.Model):
     id = models.AutoField(primary_key=True)
     id = models.AutoField(primary_key=True)
     skill_name = models.CharField(max_length=32, default='', verbose_name=u'skill名称')
     skill_name = models.CharField(max_length=32, default='', verbose_name=u'skill名称')
-    userID = models.CharField(blank=True, max_length=32,verbose_name=u'用户ID', default='', unique=False)
+    userID = models.CharField(blank=True, max_length=32, verbose_name=u'用户ID', default='', unique=False)
     access_token = models.CharField(max_length=150, unique=False, default='', verbose_name='访问令牌')
     access_token = models.CharField(max_length=150, unique=False, default='', verbose_name='访问令牌')
     refresh_token = models.CharField(max_length=150, unique=False, default='', verbose_name='刷新令牌')
     refresh_token = models.CharField(max_length=150, unique=False, default='', verbose_name='刷新令牌')
     token = models.CharField(max_length=150, unique=False, default='', verbose_name='区分用户token')
     token = models.CharField(max_length=150, unique=False, default='', verbose_name='区分用户token')
     expiresTime = models.IntegerField(verbose_name='过期时间', default=0)
     expiresTime = models.IntegerField(verbose_name='过期时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
-    alexa_region = models.CharField(max_length=8,verbose_name='alexa区域',default=0)
+    alexa_region = models.CharField(max_length=8, verbose_name='alexa区域', default=0)
 
 
     class Meta:
     class Meta:
         ordering = ('-addTime',)
         ordering = ('-addTime',)