删除 device
This commit is contained in:
@@ -1,3 +0,0 @@
|
|||||||
from django.contrib import admin
|
|
||||||
|
|
||||||
# Register your models here.
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
from django.apps import AppConfig
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceConfig(AppConfig):
|
|
||||||
default_auto_field = 'django.db.models.BigAutoField'
|
|
||||||
name = 'device'
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
from django.db import models
|
|
||||||
|
|
||||||
from dvadmin.utils.models import CoreModel, table_prefix
|
|
||||||
|
|
||||||
|
|
||||||
class Template(CoreModel):
|
|
||||||
CLASSIFY_CHOICE = (
|
|
||||||
(0, "网关"),
|
|
||||||
(1, "终端设备"),
|
|
||||||
)
|
|
||||||
classify = models.SmallIntegerField(choices=CLASSIFY_CHOICE, verbose_name="模板类别")
|
|
||||||
name = models.CharField(max_length=128, verbose_name="模板名称", unique=True)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = table_prefix + 'device_template'
|
|
||||||
verbose_name = "模板表"
|
|
||||||
verbose_name_plural = verbose_name
|
|
||||||
ordering = ("-id",)
|
|
||||||
|
|
||||||
|
|
||||||
class TemplateDetail(CoreModel):
|
|
||||||
template = models.ForeignKey(to="Template", null=False, on_delete=models.CASCADE, db_constraint=False,
|
|
||||||
verbose_name="所属模板")
|
|
||||||
key_title = models.CharField(max_length=64, verbose_name="键标题", unique=True)
|
|
||||||
key_name = models.CharField(max_length=64, verbose_name="键名")
|
|
||||||
key_type = models.CharField(max_length=32, verbose_name="键值类型")
|
|
||||||
parent_key = models.ForeignKey(to="TemplateDetail", null=True, on_delete=models.CASCADE, db_constraint=False,
|
|
||||||
verbose_name="父级键")
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = table_prefix + 'device_template_detail'
|
|
||||||
verbose_name = "模板详情表"
|
|
||||||
verbose_name_plural = verbose_name
|
|
||||||
ordering = ("-id",)
|
|
||||||
unique_together = (('key_name', 'parent_key'),)
|
|
||||||
|
|
||||||
|
|
||||||
class Gateway(CoreModel):
|
|
||||||
name = models.CharField(max_length=128, verbose_name="设备名称", unique=True)
|
|
||||||
specification = models.CharField(max_length=32, verbose_name="设备型号")
|
|
||||||
mac_address = models.CharField(max_length=32, verbose_name="设备MAC地址")
|
|
||||||
version = models.CharField(max_length=64, verbose_name="设备固件版本号")
|
|
||||||
ip_address = models.CharField(max_length=32, verbose_name="设备IP地址")
|
|
||||||
physics_address = models.CharField(max_length=255, default="暂无位置信息", verbose_name="设备实际地址")
|
|
||||||
account = models.CharField(max_length=32, verbose_name="设备账号")
|
|
||||||
password = models.CharField(max_length=32, verbose_name="设备密码")
|
|
||||||
template = models.ForeignKey(to="Template", null=False, on_delete=models.CASCADE, db_constraint=False,
|
|
||||||
verbose_name="所用模板")
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = table_prefix + 'device_gateways'
|
|
||||||
verbose_name = "网关表"
|
|
||||||
verbose_name_plural = verbose_name
|
|
||||||
ordering = ("-id",)
|
|
||||||
|
|
||||||
|
|
||||||
class Terminal(CoreModel):
|
|
||||||
name = models.CharField(max_length=128, verbose_name="设备名称", unique=True)
|
|
||||||
specification = models.CharField(max_length=32, verbose_name="设备型号")
|
|
||||||
identify = models.CharField(max_length=128, verbose_name="设备标识", unique=True)
|
|
||||||
physics_address = models.CharField(max_length=255, default="暂无位置信息", verbose_name="设备实际地址")
|
|
||||||
project = models.CharField(max_length=128, verbose_name="所属项目")
|
|
||||||
remark = models.CharField(max_length=255, null=True, verbose_name="设备备注")
|
|
||||||
gateway = models.ForeignKey(to=Gateway, null=True, on_delete=models.CASCADE, db_constraint=False,
|
|
||||||
verbose_name="关联网关")
|
|
||||||
template = models.ForeignKey(to="Template", null=False, on_delete=models.CASCADE, db_constraint=False,
|
|
||||||
verbose_name="所用模板")
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
db_table = table_prefix + 'device_terminal'
|
|
||||||
verbose_name = "终端设备表"
|
|
||||||
verbose_name_plural = verbose_name
|
|
||||||
ordering = ("-id",)
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
from django.urls import path
|
|
||||||
from device.websocket import DeviceStatusWebSocket
|
|
||||||
|
|
||||||
websocket_urlpatterns = [
|
|
||||||
path('ws/gateway_status/<str:token>/', DeviceStatusWebSocket.as_asgi()),
|
|
||||||
]
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
# Create your tests here.
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
from django.urls import path
|
|
||||||
from rest_framework import routers
|
|
||||||
|
|
||||||
from device.views.gateway import GatewayViewSet
|
|
||||||
from device.views.template import TemplateViewSet, TemplateDetailViewSet
|
|
||||||
from device.views.terminal import TerminalViewSet
|
|
||||||
|
|
||||||
|
|
||||||
device_url = routers.SimpleRouter()
|
|
||||||
device_url.register(r'gateway', GatewayViewSet)
|
|
||||||
device_url.register(r'template', TemplateViewSet)
|
|
||||||
device_url.register(r'template_detail', TemplateDetailViewSet)
|
|
||||||
device_url.register(r'terminal', TerminalViewSet)
|
|
||||||
|
|
||||||
urlpatterns = []
|
|
||||||
urlpatterns += device_url.urls
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
from dvadmin.utils.serializers import CustomModelSerializer
|
|
||||||
from dvadmin.utils.viewset import CustomModelViewSet
|
|
||||||
from device.models import Gateway
|
|
||||||
|
|
||||||
|
|
||||||
class GatewaySerializer(CustomModelSerializer):
|
|
||||||
"""网关管理序列化器"""
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Gateway
|
|
||||||
fields = '__all__'
|
|
||||||
read_only_fields = ['id']
|
|
||||||
|
|
||||||
|
|
||||||
class GatewayViewSet(CustomModelViewSet):
|
|
||||||
"""网关管理视图集"""
|
|
||||||
queryset = Gateway.objects.all()
|
|
||||||
serializer_class = GatewaySerializer
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
from dvadmin.utils.serializers import CustomModelSerializer
|
|
||||||
from dvadmin.utils.viewset import CustomModelViewSet
|
|
||||||
from device.models import Template, TemplateDetail
|
|
||||||
|
|
||||||
|
|
||||||
class TemplateSerializer(CustomModelSerializer):
|
|
||||||
"""模板管理序列化器"""
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Template
|
|
||||||
fields = '__all__'
|
|
||||||
read_only_fields = ['id']
|
|
||||||
|
|
||||||
|
|
||||||
class TemplateDetailSerializer(CustomModelSerializer):
|
|
||||||
"""模板详情序列化器"""
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = TemplateDetail
|
|
||||||
fields = '__all__'
|
|
||||||
read_only_fields = ['id']
|
|
||||||
|
|
||||||
|
|
||||||
class TemplateViewSet(CustomModelViewSet):
|
|
||||||
"""模板管理视图集"""
|
|
||||||
queryset = Template.objects.all()
|
|
||||||
serializer_class = TemplateSerializer
|
|
||||||
|
|
||||||
|
|
||||||
class TemplateDetailViewSet(CustomModelViewSet):
|
|
||||||
"""模板详情视图集"""
|
|
||||||
queryset = TemplateDetail.objects.all()
|
|
||||||
serializer_class = TemplateDetailSerializer
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
from dvadmin.utils.serializers import CustomModelSerializer
|
|
||||||
from dvadmin.utils.viewset import CustomModelViewSet
|
|
||||||
from device.models import Terminal
|
|
||||||
|
|
||||||
|
|
||||||
class TerminalSerializer(CustomModelSerializer):
|
|
||||||
"""终端设备管理序列化器"""
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Terminal
|
|
||||||
fields = '__all__'
|
|
||||||
read_only_fields = ['id']
|
|
||||||
|
|
||||||
|
|
||||||
class TerminalViewSet(CustomModelViewSet):
|
|
||||||
"""终端设备管理视图集"""
|
|
||||||
queryset = Terminal.objects.all()
|
|
||||||
serializer_class = TerminalSerializer
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
import json
|
|
||||||
from hashlib import md5
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import jwt
|
|
||||||
from channels.generic.websocket import AsyncJsonWebsocketConsumer
|
|
||||||
|
|
||||||
from application.websocketConfig import set_message
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceStatusWebSocket(AsyncJsonWebsocketConsumer):
|
|
||||||
"""设备状态ws"""
|
|
||||||
chat_group = 'device_status'
|
|
||||||
|
|
||||||
async def connect(self):
|
|
||||||
try:
|
|
||||||
print('设备ws创建连接', self.scope)
|
|
||||||
self.token = self.scope['url_route']['kwargs']['token']
|
|
||||||
decoded_result = jwt.decode(self.token, settings.SECRET_KEY, algorithms=['HS256'])
|
|
||||||
if decoded_result:
|
|
||||||
self.uid = decoded_result.get('user_id')
|
|
||||||
self.hash = md5(str(self.token).encode('utf-8'))
|
|
||||||
self.chat_name = f'{self.chat_group}:user_{self.uid}'
|
|
||||||
await self.channel_layer.group_add(self.chat_name, self.channel_name)
|
|
||||||
await self.accept()
|
|
||||||
else:
|
|
||||||
raise jwt.InvalidSignatureError()
|
|
||||||
except jwt.InvalidSignatureError:
|
|
||||||
await self.send_json(set_message('system', 'SYSTEM', {'message': 'Token无效'}), True)
|
|
||||||
await self.disconnect(None)
|
|
||||||
except jwt.ExpiredSignatureError:
|
|
||||||
await self.send_json(set_message('system', 'SYSTEM', {'message': 'Token过期'}), True)
|
|
||||||
await self.disconnect(None)
|
|
||||||
|
|
||||||
async def disconnect(self, code):
|
|
||||||
print('设备ws连接关闭')
|
|
||||||
await self.channel_layer.group_discard(self.chat_name, self.channel_name)
|
|
||||||
try:
|
|
||||||
await self.close(code)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
Reference in New Issue
Block a user