Commit 968d5086 by qianmo

Merge branch 'main' into fh

# Conflicts:
#	frontend/package.json
#	frontend/src/App.vue
#	frontend/src/main.ts
#	frontend/src/style.css
#	frontend/tsconfig.json
#	frontend/vite.config.ts
#	frontend/yarn.lock
#	vue_django/settings.py
#	xdc.sqlite
parents fce834bf 4201aedc
## 介绍
- master 分支,主要为后端接口
- fh 分支,为界面
![1692668065114](image/README/1692668065114.png)
各个文件夹或文件作用
- chat:测试 websocket 的模块
- device_communication:device 通信参数模块
- device_data_op:对 device 已有的表的操作模块
- download_db:测试 下载 sqlite 文件模块
- frontend:前端文件夹
- mqtt:测试 mqtt 连接与发送内容的模块
- protocol_version_manage:协议版本控制模块
- scripts_generate:测试 脚本生成模块
- vue_django:django 项目主模块
- db.sqlite3:没用
- manage.py:django 项目启动文件
- poetry.lock,pyproject.toml:poetry 的管理文件
- xdc.sqlite:device 数据库
## 安装依赖
1. 创建 conda 的虚拟环境
```
conda create -n django-venv python=3.9.16
```
2. 激活 django-venv 虚拟环境
```
conda activate django-venv
```
可以使用 pip list 查看是否为一个新的环境
3. 激活虚拟环境后下载 poetry
```
pip install poetry
```
4. 使用 poetry 命令下载依赖
```
poetry install
```
5. 转到 frontend 文件夹,下载前端的依赖(node 版本最低为16,我这里使用的是 16.20.1)
```
yarn install
```
```
npm install
```
6. 下载完依赖之后打包项目
```
yarn build
```
```
npm run build
```
7. 退回到 vue_django_test 文件夹,启动项目,就能正常看见页面了
```
python manage.py runserver
```
ps:以上步骤在 windows 环境和 ubuntu 20.04 下都测试过,都能正常跑起来
## 运行项目
使用 `python manage.py runserver` 运行项目(目前运行项目只有接口,可能只能通过接口调试工具来测试)
![1692841750241](image/README/1692841750241.png)
## 注意
* 如果是在远程的情况下,需要将 vue_django 目录中 urls.py 文件中的 `mqtt``chat` url 给注释了,否则启动不成功
* ![1692841883700](image/README/1692841883700.png)
...@@ -4,6 +4,8 @@ import json ...@@ -4,6 +4,8 @@ import json
from asgiref.sync import async_to_sync from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer from channels.generic.websocket import WebsocketConsumer
from channels.generic.websocket import AsyncWebsocketConsumer from channels.generic.websocket import AsyncWebsocketConsumer
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
# sync code # sync code
...@@ -72,10 +74,16 @@ class ChatConsumer(AsyncWebsocketConsumer): ...@@ -72,10 +74,16 @@ class ChatConsumer(AsyncWebsocketConsumer):
# Receive message from room group # Receive message from room group
async def chat_message(self, event): async def chat_message(self, event):
message = event["message"] message = dict(event["message"])
# Send message to WebSocket # Send message to WebSocket
await self.send(text_data=json.dumps({"message": message})) await self.send(text_data=json.dumps({"message": [message]}))
# await self.send(bytes_data=message) # await self.send(bytes_data=message)
def send_websocket_message(message, group_name="chat_mqtt"):
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
group_name,
{"type": "chat.message", "message": message}
)
# chat/urls.py # chat/urls.py
from django.urls import path from django.urls import path
from . import views
urlpatterns = [ urlpatterns = [
......
from django.shortcuts import render
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class DeviceCommunicationConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'device_communication'
# Generated by Django 3.2.19 on 2023-08-24 03:03
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='DeviceCommunicationParameter',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('station_id', models.CharField(max_length=10)),
('device_id', models.IntegerField(default=0)),
('device_name', models.CharField(max_length=100)),
('device_name_chn', models.CharField(max_length=100)),
('protocol_name', models.CharField(max_length=100)),
('communicate_mode', models.CharField(max_length=100)),
('tcp_ip', models.CharField(blank=True, default='', max_length=40)),
('tcp_port', models.IntegerField(default=0)),
('udp_ip_src', models.CharField(blank=True, default='', max_length=40)),
('udp_port_src', models.IntegerField(default=0)),
('udp_ip_dst', models.CharField(blank=True, default='', max_length=40)),
('udp_port_dst', models.IntegerField(default=0)),
('performance_fields', models.TextField()),
],
options={
'db_table': 'DeviceCommunicationParameter',
},
),
migrations.CreateModel(
name='SimulateDeviceCommunicationParameter',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('station_id', models.CharField(max_length=10)),
('device_id', models.IntegerField(default=0)),
('device_name', models.CharField(max_length=100)),
('device_name_chn', models.CharField(max_length=100)),
('protocol_name', models.CharField(max_length=100)),
('communicate_mode', models.CharField(max_length=100)),
('tcp_ip', models.CharField(blank=True, default='', max_length=40)),
('tcp_port', models.IntegerField(default=0)),
('udp_ip_src', models.CharField(blank=True, default='', max_length=40)),
('udp_port_src', models.IntegerField(default=0)),
('udp_ip_dst', models.CharField(blank=True, default='', max_length=40)),
('udp_port_dst', models.IntegerField(default=0)),
('performance_fields', models.TextField()),
],
options={
'db_table': 'SimulateDeviceCommunicationParameter',
},
),
]
from django.db import models
def allow_none(value):
"""
当传过来的值为 none 时,则在数据库里存一个空值
:param value: 通过基本校验之后的值
"""
if value == "none":
return ""
return value
# Create your models here.
class SimulateDeviceCommunicationParameter(models.Model):
"""
模拟设备通信参数
"""
id = models.AutoField(primary_key=True)
station_id = models.CharField(max_length=10)
device_id = models.IntegerField(default=0)
device_name = models.CharField(max_length=100)
device_name_chn = models.CharField(max_length=100)
protocol_name = models.CharField(max_length=100)
communicate_mode = models.CharField(max_length=100)
tcp_ip = models.CharField(max_length=40, default="", blank=True)
tcp_port = models.IntegerField(default=0)
udp_ip_src = models.CharField(max_length=40, default="", blank=True)
udp_port_src = models.IntegerField(default=0)
udp_ip_dst = models.CharField(max_length=40, default="", blank=True)
udp_port_dst = models.IntegerField(default=0)
performance_fields = models.TextField()
def validate(self, attrs: dict):
"""
校验字段,在进行基础校验之后,如果字段名称为下面的字段,
且当传过来的值为 none 时,存一个空值
:param attrs: 通过基本校验之后的值
"""
for field_name, value in attrs.items():
if field_name in (['tcp_ip', 'tcp_port', 'udp_ip_src', 'udp_port_src',
'udp_ip_dst', 'udp_port_dst']):
attrs[field_name] = allow_none(value)
return attrs
class Meta:
db_table = 'SimulateDeviceCommunicationParameter'
class DeviceCommunicationParameter(models.Model):
"""
设备通信参数
{
"station_id": "XX1",
"device_id": 1,
"device_name": "XXXX",
"device_name_chn": "XXXX",
"protocol_name": "HY_VirtualDevice_PROTOCOL",
"communicate_mode": "TCP_CLIENT",
"tcp_ip": "127.0.0.1",
"tcp_port": 8888,
"performance_fields": ["info", "END", "CMDS"]
}
"""
id = models.AutoField(primary_key=True)
station_id = models.CharField(max_length=10)
device_id = models.IntegerField(default=0)
device_name = models.CharField(max_length=100)
device_name_chn = models.CharField(max_length=100)
protocol_name = models.CharField(max_length=100)
communicate_mode = models.CharField(max_length=100)
tcp_ip = models.CharField(max_length=40, default="", blank=True)
tcp_port = models.IntegerField(default=0)
udp_ip_src = models.CharField(max_length=40, default="", blank=True)
udp_port_src = models.IntegerField(default=0)
udp_ip_dst = models.CharField(max_length=40, default="", blank=True)
udp_port_dst = models.IntegerField(default=0)
performance_fields = models.TextField()
def validate(self, attrs: dict):
"""
校验字段,在进行基础校验之后,如果字段名称为下面的字段,
且当传过来的值为 none 时,存一个空值
:param attrs: 通过基本校验之后的值
"""
for field_name, value in attrs.items():
if field_name in (['tcp_ip', 'tcp_port', 'udp_ip_src', 'udp_port_src',
'udp_ip_dst', 'udp_port_dst']):
attrs[field_name] = allow_none(value)
return attrs
class Meta:
db_table = 'DeviceCommunicationParameter'
from rest_framework.serializers import ModelSerializer
from .models import (SimulateDeviceCommunicationParameter,
DeviceCommunicationParameter)
class SimulateDeviceCommunicationParameterSerializer(ModelSerializer):
class Meta:
model = SimulateDeviceCommunicationParameter
fields = '__all__'
class DeviceCommunicationParameterSerializer(ModelSerializer):
class Meta:
model = DeviceCommunicationParameter
fields = '__all__'
from django.urls import re_path
from rest_framework.routers import DefaultRouter
from . import views
router = DefaultRouter()
router.register('device_communication/communicate',
views.DeviceCommunicationParameterViewSet)
router.register('device_communication/simulate_communicate',
views.SimulateDeviceCommunicationParameterViewSet)
urlpatterns = [
re_path(r'^device_communication/$', views.get_protocol_names),
re_path(r'^device_communication/protocol_performance/(?P<protocol_name>.+)/$', views.get_protocol_field_names),
re_path(r'^device_communication/set_communication_to_devinfo_table/$',
views.set_communication_to_devinfo_table),
]
urlpatterns += router.urls
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from rest_framework.viewsets import ModelViewSet
from .models import (SimulateDeviceCommunicationParameter, DeviceCommunicationParameter)
from protocol_version_manage.models import (AllProtocolVersion, AllProtocolDefinAndVersion,
AllDevCmdDefineAndVersion)
from device_data_op.models import TableXproAllDevinfo
from .serializers import (SimulateDeviceCommunicationParameterSerializer,
DeviceCommunicationParameterSerializer)
@api_view(['GET'])
def get_protocol_names(request):
"""
获取所有协议,并返回
"""
protocol_names = AllProtocolVersion.objects.all()
res_data = ([{'value': protocol_name.protocol_name, 'label': protocol_name.protocol_name}
for protocol_name in protocol_names])
return Response(data=res_data, status=status.HTTP_200_OK)
@api_view(['GET'])
def get_protocol_field_names(request, protocol_name):
"""
获取指定协议下的指令集
"""
# 获取该协议下的指令集合
cmds = AllProtocolDefinAndVersion.objects.filter(protocol_name=protocol_name, cmd_type='RX').all()
cmd_set = set([cmd.cmd_name for cmd in cmds])
# 获取指令集合下的字段
fields = AllDevCmdDefineAndVersion.objects.filter(cmd_name__in=cmd_set, cmd_type='RX').all()
field_name_set = set([field.fieldname for field in fields])
res_data = ([field_name for field_name in field_name_set])
return Response(data=res_data, status=status.HTTP_200_OK)
@api_view(['POST'])
def set_communication_to_devinfo_table(request):
"""
将设备通信参数或模拟设备通信参数设置到设备信息表
"""
type = request.data.get('type')
if type is None or type == '':
return Response(status=status.HTTP_400_BAD_REQUEST)
if type == 'simulate_communicate':
communications = SimulateDeviceCommunicationParameter.objects.all()
else:
communications = DeviceCommunicationParameter.objects.all()
# 清空设备信息表
# TODO:实际开始用的时候,需要将这个注释打开
# TableXproAllDevinfo.objects.all().delete()
TableXproAllDevinfo.objects.bulk_create(
[TableXproAllDevinfo(sta_id=communication.station_id,
dev_id=communication.device_id,
dev_name=communication.device_name,
dev_name_chn=communication.device_name_chn,
protocol_name=communication.protocol_name,
cmd_excel_path="null",
comunitate_mode=communication.communicate_mode,
tcp_ip=communication.tcp_ip,
tcp_port=communication.tcp_port,
udp_ip_src=communication.udp_ip_src,
udp_port_src=communication.udp_port_src,
udp_ip_dst=communication.udp_ip_dst,
udp_port_dst=communication.udp_port_dst,
udpmc_ip="",
udpmc_ip_tx="",
udpmc_port_tx=0,
udpmc_ip_rx="",
udpmc_port_rx=0,
remarks="")
for communication in communications])
return Response(status=status.HTTP_200_OK)
class DeviceCommunicationParameterViewSet(ModelViewSet):
queryset = DeviceCommunicationParameter.objects.all()
serializer_class = DeviceCommunicationParameterSerializer
def list(self, request):
serializer = self.get_serializer(self.get_queryset(), many=True)
data = sorted(serializer.data, key=lambda item: (item['station_id'], item['device_id']))
return Response(data)
def perform_create(self, serializer):
super().perform_create(serializer)
device_infos = self.queryset.filter(station_id=serializer.instance.station_id).all()
for i in range(len(device_infos)):
device_infos[i].device_id = i + 1
device_infos[i].save()
if serializer.instance.id == device_infos[i].id:
serializer.instance.device_id = device_infos[i].device_id
def perform_destroy(self, instance):
"""
删除某个记录之后,更新 device_id
"""
super().perform_destroy(instance)
communications = self.get_queryset().filter(station_id=instance.station_id).all()
for i in range(len(communications)):
communications[i].device_id = i + 1
communications[i].save()
class SimulateDeviceCommunicationParameterViewSet(ModelViewSet):
queryset = SimulateDeviceCommunicationParameter.objects.all()
serializer_class = SimulateDeviceCommunicationParameterSerializer
def list(self, request):
serializer = self.get_serializer(self.get_queryset(), many=True)
data = sorted(serializer.data, key=lambda item: (item['station_id'], item['device_id']))
return Response(data)
def perform_create(self, serializer):
super().perform_create(serializer)
device_infos = self.queryset.filter(station_id=serializer.instance.station_id).all()
for i in range(len(device_infos)):
device_infos[i].device_id = i + 1
device_infos[i].save()
if serializer.instance.id == device_infos[i].id:
serializer.instance.device_id = device_infos[i].device_id
def perform_destroy(self, instance):
"""
删除某个记录之后,更新 device_id
"""
super().perform_destroy(instance)
communications = self.get_queryset().filter(station_id=instance.station_id).all()
for i in range(len(communications)):
communications[i].device_id = i + 1
communications[i].save()
from rest_framework.routers import SimpleRouter from rest_framework.routers import SimpleRouter
from .views import (TableAllDevCmdDefineView, TableDevCmdNamePollView, from .views import (TableAllDevCmdDefineView, TableDevCmdNamePollView,
TableSoftLimitAngleView, TableXproAllDevinfoView) TableSoftLimitAngleView, TableXproAllDevinfoView)
from .views import test
from django.urls import re_path
router = SimpleRouter() router = SimpleRouter()
router.register(r'all_dev_cmd_define', TableAllDevCmdDefineView) router.register(r'all_dev_cmd_define', TableAllDevCmdDefineView)
...@@ -9,4 +10,9 @@ router.register(r'dev_cmd_name_poll', TableDevCmdNamePollView) ...@@ -9,4 +10,9 @@ router.register(r'dev_cmd_name_poll', TableDevCmdNamePollView)
router.register(r'soft_limit_angle', TableSoftLimitAngleView) router.register(r'soft_limit_angle', TableSoftLimitAngleView)
router.register(r'xpro_all_devinfo', TableXproAllDevinfoView) router.register(r'xpro_all_devinfo', TableXproAllDevinfoView)
urlpatterns = router.urls urlpatterns = [
re_path(r'^test/$', test),
]
urlpatterns += router.urls
import json
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
from django.shortcuts import render from django.shortcuts import render
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import api_view
from rest_framework import status
from .models import (TableAllDevCmdDefine, TableDevCmdNamePoll, from .models import (TableAllDevCmdDefine, TableDevCmdNamePoll,
TableSoftLimitAngle, TableXproAllDevinfo) TableSoftLimitAngle, TableXproAllDevinfo)
from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSerializer, from .serializers import (TableAllDevCmdDefineSerializer, TableDevCmdNamePollSerializer,
...@@ -20,6 +26,7 @@ class TableAllDevCmdDefineView(ModelViewSet): ...@@ -20,6 +26,7 @@ class TableAllDevCmdDefineView(ModelViewSet):
def perform_destroy(self, instance): def perform_destroy(self, instance):
""" """
删除某个字段,需要将字段的 index 更新 删除某个字段,需要将字段的 index 更新
TODO: 返回更新后的数据(不能做完一个操作之后,页面就刷新)
""" """
# 获取改字段的 cmd_name # 获取改字段的 cmd_name
...@@ -54,5 +61,71 @@ class TableXproAllDevinfoView(ModelViewSet): ...@@ -54,5 +61,71 @@ class TableXproAllDevinfoView(ModelViewSet):
serializer_class = TableXproAllDevinfoSerializer serializer_class = TableXproAllDevinfoSerializer
@swagger_auto_schema(method='post', request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'cmds': openapi.Schema(type=openapi.TYPE_OBJECT, properties={
'protocol_name': openapi.Schema(type=openapi.TYPE_STRING),
'cmd_name': openapi.Schema(type=openapi.TYPE_STRING),
'cmd_type': openapi.Schema(type=openapi.TYPE_STRING),
'encode': openapi.Schema(type=openapi.TYPE_STRING),
'timing_cmd_cycle_period': openapi.Schema(type=openapi.TYPE_INTEGER),
'cmd_explain': openapi.Schema(type=openapi.TYPE_STRING),
'fields': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Items(type=openapi.TYPE_OBJECT, properties={
"cmd_name": openapi.Schema(type=openapi.TYPE_STRING),
"cmd_type": openapi.Schema(type=openapi.TYPE_STRING),
"fieldindex": openapi.Schema(type=openapi.TYPE_INTEGER),
"fieldname": openapi.Schema(type=openapi.TYPE_STRING),
"fieldsize": openapi.Schema(type=openapi.TYPE_INTEGER),
"value": openapi.Schema(type=openapi.TYPE_STRING),
"minvalue": openapi.Schema(type=openapi.TYPE_STRING),
"maxvalue": openapi.Schema(type=openapi.TYPE_STRING),
"datatype": openapi.Schema(type=openapi.TYPE_INTEGER),
"operation_in": openapi.Schema(type=openapi.TYPE_INTEGER),
"operation_in_num": openapi.Schema(type=openapi.TYPE_INTEGER),
"operation_out": openapi.Schema(type=openapi.TYPE_INTEGER),
"operation_out_num": openapi.Schema(type=openapi.TYPE_INTEGER),
"operabo_in": openapi.Schema(type=openapi.TYPE_INTEGER),
"operabo_out": openapi.Schema(type=openapi.TYPE_INTEGER),
"lua_script_in": openapi.Schema(type=openapi.TYPE_STRING),
"lua_script_out": openapi.Schema(type=openapi.TYPE_STRING)
}))
})
}
))
@api_view(['POST'])
def test(request):
protocol_cmd = TableDevCmdNamePollView()
cmd_fields = TableAllDevCmdDefineView()
# print(request.data)
protocol_cmd.request = request
protocol_cmd.format_kwarg = None # 设置 format_kwarg 属性
cmd_fields.request = request
cmd_fields.format_kwarg = None # 设置 format_kwarg 属性
cmds = request.data.get('cmds')
for cmd in cmds.values():
# 将指令的字段属性从字典中弹出
fields = cmd.pop('fields')
# 创建协议指令
protocol_cmd_serializer = protocol_cmd.get_serializer(data=cmd)
protocol_cmd_serializer.is_valid(raise_exception=True)
cmd_explain = protocol_cmd_serializer.validated_data.get('cmd_explain')
try:
json.loads(cmd_explain)
except json.JSONDecodeError:
cmd_explain_dict = {
'explain': cmd_explain,
'version': "20230101"
}
cmd_explain = json.dumps(cmd_explain_dict)
protocol_cmd_serializer.validated_data['cmd_explain'] = cmd_explain
protocol_cmd.perform_create(protocol_cmd_serializer)
# 创建指令
for field in fields:
cmd_fields_serializer = cmd_fields.get_serializer(data=field)
cmd_fields_serializer.is_valid(raise_exception=True)
cmd_fields.perform_create(cmd_fields_serializer)
return Response(status=status.HTTP_201_CREATED)
<template>
<el-table :data="tableData" class="w-full">
<el-table-column v-for="(_, key) in tableData[0]" :label="key" :prop="key" width="150" />
</el-table>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
type propsType = {
groupName: string
}
const props = defineProps<propsType>()
type tableDataType = Record<string, string>[]
// const tableData = ref<tableDataType>([{}]);
const tableData = ref<tableDataType>([{}])
onMounted(() => {
let table_websocket = new WebSocket(
'ws://' + window.location.host + '/ws/chat/' + props.groupName! + '/'
)
table_websocket.onmessage = (e) => {
// console.log(e.data);
// TODO: 通过获取需要监控的变量将 key 写死
let data = JSON.parse(e.data).message
for (const [key, value] of Object.entries(data[0] as Record<string, string>)) {
tableData.value[0][key] = value
}
}
table_websocket.onclose = (e) => {
console.error('Table socket closed unexpectedly', e);
}
})
</script>
<template>
<div class="text-right mb-5">
<el-button type="primary" @click="applyComunications"> 应用 </el-button>
<el-button type="primary" @click="copy">copy to ini</el-button>
<el-button type="primary" @click="addDevice">Add device</el-button>
</div>
<div class="demo-collapse">
<el-collapse>
<el-collapse-item class="pt-10" v-for="(device_info_list, station_id) in device_infos">
<template #title>
<span class="text-3xl font-bold"> {{ station_id }} </span>
</template>
<device-info-card
@deleteDeviceInfo="deleteDeviceInfo"
v-for="device_info in device_info_list"
:device-info="device_info"
:tab-type="props.tabType"
/>
</el-collapse-item>
</el-collapse>
</div>
<edit-dialog
:is-show="isShow"
:tab-type="props.tabType"
@close="isShow = false"
@change-device-info="changeDeviceInfo"
type="add" />
</template>
<script setup lang="ts">
import axios from 'axios';
import { onMounted, ref } from 'vue'
import { ElMessage } from 'element-plus'
import useClipboard from 'vue-clipboard3'
import DeviceInfoCard from '@/components/device_communication/DeviceInfoCard'
import type { DeviceInfo } from '@/components/device_communication/types'
import EditDialog from '@/components/device_communication/EditDialog';
type propType = {
tabType: string
}
const props = defineProps<propType>()
// device info card 相关
const device_infos = ref<Record<string, DeviceInfo[]>>({})
// 获取当前选择的页面
onMounted(() => {
axios.get('/api/device_communication/' + props.tabType + '/')
.then(res => {
// console.log(res.data);
// 将数据按照不同的 station_id 分组
for (let i = 0; i < res.data.length; i++) {
if (device_infos.value[res.data[i].station_id] !== undefined) {
device_infos.value[res.data[i].station_id].push(res.data[i])
} else {
device_infos.value[res.data[i].station_id] = [res.data[i]]
}
}
})
.catch(err => {
console.log(err);
})
})
type param = {
station_id: string
id: number
}
const deleteDeviceInfo = (params: param) => {
for (let i = 0; i < device_infos.value[params.station_id].length; i++) {
if ((device_infos.value[params.station_id])[i].id === params.id) {
// 如果 station_id 对应的设备列表为空,则删除 station_id
if (device_infos.value[params.station_id].length === 1) {
delete device_infos.value[params.station_id]
return
}
// 删除
device_infos.value[params.station_id].splice(i, 1)
}
}
}
const isShow = ref(false)
const addDevice = () => {
isShow.value = true
}
const changeDeviceInfo = (params: DeviceInfo) => {
console.log('changeDeviceInfo')
console.log(params);
if (device_infos.value[params.station_id] === undefined) {
device_infos.value[params.station_id] = [params]
} else {
device_infos.value[params.station_id].push(params)
}
}
// clipboard 赋值到设备信息到 ini 文件中
const { toClipboard } = useClipboard()
const copy = async () => {
let configText = composeConfigText()
try {
await toClipboard(configText)
ElMessage({
message: '复制成功',
type: 'success',
})
} catch (error) {
console.log(error);
}
}
// 生成和 ini 文件中类似的配置格式
function composeConfigText(): string {
let configText = ''
for (const [station_level, device_info_list] of Object.entries(device_infos.value)) {
configText += `[Device_info_${station_level}]\n`
configText += `dev_num=${device_info_list.length}\n`
for (let i = 1; i <= device_info_list.length; i++) {
configText += `dev${i}_id=${device_info_list[i - 1].device_id}\n`
configText += `dev${i}_name=${device_info_list[i - 1].device_name}\n`
configText += `dev${i}_name_chn=${device_info_list[i - 1].device_name_chn}\n`
configText += `dev${i}_datacatlog=${device_info_list[i - 1].protocol_name}\n`
}
}
return configText
}
// 应用设备通信参数
const applyComunications = () => {
console.log('applyComunications')
axios.post('/api/device_communication/set_communication_to_devinfo_table/', {
type: props.tabType
})
.then((res) => {
console.log(res.data);
ElMessage({
message: '应用成功',
type: 'success'
})
})
.catch((err) => {
console.log(err);
ElMessage({
message: '应用失败',
type: 'error'
})
})
}
</script>
<template>
<el-descriptions :title="deviceInfo.device_name" :column=1>
<template #extra>
<el-button type="danger" size="small" @click="del">delete</el-button>
<el-button type="primary" size="small" @click="dialogFormVisible = true">Edit</el-button>
</template>
<el-descriptions-item label="协议名">{{ deviceInfo.protocol_name }}</el-descriptions-item>
<el-descriptions-item label="通信参数" :column=3>
<span> {{ deviceInfo.communicate_mode }} </span>
<span v-if="isTcp">
<span ml-9> {{ deviceInfo.tcp_ip }} </span>
<span ml-9> {{ deviceInfo.tcp_port }} </span>
</span>
<span v-else>
<span ml-9> {{ deviceInfo.udp_ip_src}} </span>
<span ml-9> {{ deviceInfo.udp_port_src }} </span>
<span ml-9> {{ deviceInfo.udp_ip_dst }} </span>
<span ml-9> {{ deviceInfo.udp_port_dst }} </span>
</span>
</el-descriptions-item>
<el-descriptions-item label="性能参数">
<el-tag v-for="tag in checked_performance_fields" :key="tag" class="mx-1 mt-1">
{{ tag }}
</el-tag>
</el-descriptions-item>
</el-descriptions>
<el-divider />
<edit-dialog
:is-show="dialogFormVisible"
:device-info="deviceInfo"
:tab-type="props.tabType"
@close="dialogFormVisible = false"
@change-device-info="changeDeviceInfo"
type="edit" />
</template>
<script setup lang="ts">
import { onMounted, ref, watch} from 'vue';
import axios from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import type { DeviceInfo } from '@/components/device_communication/types';
import EditDialog from './EditDialog.vue';
type propType = {
deviceInfo: DeviceInfo,
tabType: string
}
const props = defineProps<propType>();
const deviceInfo = ref<DeviceInfo>(props.deviceInfo)
const checked_performance_fields = ref<string[]>([])
const isTcp = ref<boolean>(true)
// performance_fields tag
const dialogFormVisible = ref(false)
onMounted(() => {
isTcp.value = deviceInfo.value.communicate_mode.toUpperCase().includes('TCP'.toUpperCase())
checked_performance_fields.value = JSON.parse(deviceInfo.value.performance_fields!)
deviceInfo.value.checked_performance_fields = checked_performance_fields.value
})
// 观察 device_info 是否有变化,如果有变化则更新
watch(() => props.deviceInfo, () => {
deviceInfo.value = props.deviceInfo
})
const emit = defineEmits(['deleteDeviceInfo'])
const del = () => {
ElMessageBox.confirm("确认删除吗?", "TIP")
.then(() => {
let station_id = deviceInfo.value.station_id
let id = deviceInfo.value.id
axios.delete('/api/device_communication/' + props.tabType + '/' + id + '/')
.then(() => {
emit('deleteDeviceInfo', { station_id, id })
ElMessage({
message: '删除成功',
type: 'success',
})
})
.catch((err) => {
console.log(err);
})
})
.catch(() => {});
}
const changeDeviceInfo = (device_info: DeviceInfo) => {
console.log('changeDeviceInfo')
deviceInfo.value = device_info
checked_performance_fields.value = JSON.parse(device_info.performance_fields!)
}
</script>
<style>
.el-descriptions__label:not(.is-bordered-label) {
color: var(--el-text-color-regular) !important;
font-weight: bold;
}
</style>
\ No newline at end of file
export interface DeviceInfo {
id?: number,
station_id: string,
device_id: number,
device_name: string,
device_name_chn: string,
protocol_name: string,
communicate_mode: string,
tcp_ip: string,
tcp_port: number,
udp_ip_src: string,
udp_port_src: number,
udp_ip_dst: string,
udp_port_dst: number,
performance_fields?: string
checked_performance_fields?: string[]
}
import { defineStore } from 'pinia'
import { ref } from 'vue'
type ProtocolName = {
label: string
value: string
}
export const useProtocolNamesStore = defineStore('protocolNames', () => {
const protocolNames = ref<ProtocolName[]>([])
return {
protocolNames
}
})
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, watch } from 'vue'; import { ref, onMounted, watch } from 'vue';
import { ElScrollbar, ElInput, ElButton } from 'element-plus'; import { ElScrollbar, ElInput, ElButton } from 'element-plus';
import { ElMessage, ElMessageBox } from 'element-plus'
import DevicePerformanceTable from '@/components/DevicePerformanceTabel'
const innerRef = ref<HTMLDivElement>(); const innerRef = ref<HTMLDivElement>();
const scrollbarRef = ref<InstanceType<typeof ElScrollbar>>(); const scrollbarRef = ref<InstanceType<typeof ElScrollbar>>();
const input = ref(''); const input = ref('');
const items = ref<string[]>([ const items = ref<string[]>([
'{"interface_id":"IID_OAM_Server_HistoryPerformance","dst_suid":285540352,"src_suid":285474816,"priority":100,"ts":"2023-08-08T08:16:14.224831Z","parameters":[{"@type":"type.googleapis.com/RequireHistoryPerformance","station_id":286261248,"start_time":"2023-07-17 02:27:44","end_time":"2023-07-17 02:39:07"}],"forward_flag":0,"request_index":"0","operations_type":0}', JSON.stringify([{"CMDS": "$,", "Xaxis": "034.00", "Comma": ",", "Yaxis": "034.00", "Azimuth": "000.00", "ElevationAngle": "090.00", "ACUstatus": "P", "XTrackerSigIntensity": "255", "YTrackerSigIntensity": "255", "X_STATUS": "244", "Y_STATUS": "245", "XInitPhase": "012", "XPolarizationType": "1", "SPolarizationType": "0", "XTrackerVoltageLimit": "255", "STrackerVoltageLimit": "255", "SUpPolarizationType": "1", "XUpPolarizationType": "1", "TrackingStatus": "0", "TrackingBand": "1", "X-Bias": "+0.00", "Y-Bias": "+0.00", "END": "\r\n", "XaxisAlarm": "0", "XaxisServoStatus": "1", "EasternLimit": "0", "WestLimit": "0", "YaxisAlarm": "0", "YaxisServoStatus": "1", "SouthrLimit": "0", "NorthLimit": "1"}]),
'{"interface_id":"IID_OAM_Server_HistoryPerformance","dst_suid":285540352,"src_suid":285474816,"priority":100,"ts":"2023-08-08T08:16:14.224831Z","parameters":[{"@type":"type.googleapis.com/RequireHistoryPerformance","station_id":286261248,"start_time":"2023-07-17 02:27:44","end_time":"2023-07-17 02:39:07"}],"forward_flag":0,"request_index":"0","operations_type":0}', JSON.stringify([{"CMDS": "$,", "Xaxis": "034.00", "Comma": ",", "Yaxis": "034.00", "Azimuth": "000.00", "ElevationAngle": "090.00", "ACUstatus": "P", "XTrackerSigIntensity": "255", "YTrackerSigIntensity": "255", "X_STATUS": "244", "Y_STATUS": "245", "XInitPhase": "012", "XPolarizationType": "1", "SPolarizationType": "0", "XTrackerVoltageLimit": "255", "STrackerVoltageLimit": "255", "SUpPolarizationType": "1", "XUpPolarizationType": "1", "TrackingStatus": "0", "TrackingBand": "1", "X-Bias": "+0.00", "Y-Bias": "+0.00", "END": "\r\n", "XaxisAlarm": "0", "XaxisServoStatus": "1", "EasternLimit": "0", "WestLimit": "0", "YaxisAlarm": "0", "YaxisServoStatus": "1", "SouthrLimit": "0", "NorthLimit": "1"}]),
'{"interface_id":"IID_OAM_Server_HistoryPerformance","dst_suid":285540352,"src_suid":285474816,"priority":100,"ts":"2023-08-08T08:16:14.224831Z","parameters":[{"@type":"type.googleapis.com/RequireHistoryPerformance","station_id":286261248,"start_time":"2023-07-17 02:27:44","end_time":"2023-07-17 02:39:07"}],"forward_flag":0,"request_index":"0","operations_type":0}', JSON.stringify([{"CMDS": "$,", "Xaxis": "034.00", "Comma": ",", "Yaxis": "034.00", "Azimuth": "000.00", "ElevationAngle": "090.00", "ACUstatus": "P", "XTrackerSigIntensity": "255", "YTrackerSigIntensity": "255", "X_STATUS": "244", "Y_STATUS": "245", "XInitPhase": "012", "XPolarizationType": "1", "SPolarizationType": "0", "XTrackerVoltageLimit": "255", "STrackerVoltageLimit": "255", "SUpPolarizationType": "1", "XUpPolarizationType": "1", "TrackingStatus": "0", "TrackingBand": "1", "X-Bias": "+0.00", "Y-Bias": "+0.00", "END": "\r\n", "XaxisAlarm": "0", "XaxisServoStatus": "1", "EasternLimit": "0", "WestLimit": "0", "YaxisAlarm": "0", "YaxisServoStatus": "1", "SouthrLimit": "0", "NorthLimit": "1"}]),
'{"interface_id":"IID_OAM_Server_HistoryPerformance","dst_suid":285540352,"src_suid":285474816,"priority":100,"ts":"2023-08-08T08:16:14.224831Z","parameters":[{"@type":"type.googleapis.com/RequireHistoryPerformance","station_id":286261248,"start_time":"2023-07-17 02:27:44","end_time":"2023-07-17 02:39:07"}],"forward_flag":0,"request_index":"0","operations_type":0}', JSON.stringify([{"CMDS": "$,", "Xaxis": "034.00", "Comma": ",", "Yaxis": "034.00", "Azimuth": "000.00", "ElevationAngle": "090.00", "ACUstatus": "P", "XTrackerSigIntensity": "255", "YTrackerSigIntensity": "255", "X_STATUS": "244", "Y_STATUS": "245", "XInitPhase": "012", "XPolarizationType": "1", "SPolarizationType": "0", "XTrackerVoltageLimit": "255", "STrackerVoltageLimit": "255", "SUpPolarizationType": "1", "XUpPolarizationType": "1", "TrackingStatus": "0", "TrackingBand": "1", "X-Bias": "+0.00", "Y-Bias": "+0.00", "END": "\r\n", "XaxisAlarm": "0", "XaxisServoStatus": "1", "EasternLimit": "0", "WestLimit": "0", "YaxisAlarm": "0", "YaxisServoStatus": "1", "SouthrLimit": "0", "NorthLimit": "1"}]),
'{"interface_id":"IID_OAM_Server_HistoryPerformance","dst_suid":285540352,"src_suid":285474816,"priority":100,"ts":"2023-08-08T08:16:14.224831Z","parameters":[{"@type":"type.googleapis.com/RequireHistoryPerformance","station_id":286261248,"start_time":"2023-07-17 02:27:44","end_time":"2023-07-17 02:39:07"}],"forward_flag":0,"request_index":"0","operations_type":0}', JSON.stringify([{"CMDS": "$,", "Xaxis": "034.00", "Comma": ",", "Yaxis": "034.00", "Azimuth": "000.00", "ElevationAngle": "090.00", "ACUstatus": "P", "XTrackerSigIntensity": "255", "YTrackerSigIntensity": "255", "X_STATUS": "244", "Y_STATUS": "245", "XInitPhase": "012", "XPolarizationType": "1", "SPolarizationType": "0", "XTrackerVoltageLimit": "255", "STrackerVoltageLimit": "255", "SUpPolarizationType": "1", "XUpPolarizationType": "1", "TrackingStatus": "0", "TrackingBand": "1", "X-Bias": "+0.00", "Y-Bias": "+0.00", "END": "\r\n", "XaxisAlarm": "0", "XaxisServoStatus": "1", "EasternLimit": "0", "WestLimit": "0", "YaxisAlarm": "0", "YaxisServoStatus": "1", "SouthrLimit": "0", "NorthLimit": "1"}]),
'{"interface_id":"IID_OAM_Server_HistoryPerformance","dst_suid":285540352,"src_suid":285474816,"priority":100,"ts":"2023-08-08T08:16:14.224831Z","parameters":[{"@type":"type.googleapis.com/RequireHistoryPerformance","station_id":286261248,"start_time":"2023-07-17 02:27:44","end_time":"2023-07-17 02:39:07"}],"forward_flag":0,"request_index":"0","operations_type":0}',
'{"interface_id":"IID_OAM_Server_HistoryPerformance","dst_suid":285540352,"src_suid":285474816,"priority":100,"ts":"2023-08-08T08:16:14.224831Z","parameters":[{"@type":"type.googleapis.com/RequireHistoryPerformance","station_id":286261248,"start_time":"2023-07-17 02:27:44","end_time":"2023-07-17 02:39:07"}],"forward_flag":0,"request_index":"0","operations_type":0}',
]); ]);
const flag = ref<boolean>(false); const flag = ref<boolean>(false);
...@@ -43,8 +43,8 @@ onMounted(() => { ...@@ -43,8 +43,8 @@ onMounted(() => {
); );
chatSocket.onmessage = (e) => { chatSocket.onmessage = (e) => {
console.log(e); // console.log(e);
console.log(e.data) // console.log(e.data)
// // 接收到的是字节流数据(ArrayBuffer) // // 接收到的是字节流数据(ArrayBuffer)
// const byteArray = new Uint8Array(e.data); // const byteArray = new Uint8Array(e.data);
// // 将字节流转换为字符串或其他格式进行处理 // // 将字节流转换为字符串或其他格式进行处理
...@@ -58,12 +58,34 @@ onMounted(() => { ...@@ -58,12 +58,34 @@ onMounted(() => {
console.error('Chat socket closed unexpectedly', e); console.error('Chat socket closed unexpectedly', e);
}; };
}) })
const deviceTableParams = ref<string[]>([]);
const addDeviceTable = () => {
ElMessageBox.prompt('Please input WebSocket group name', 'Tip', {
confirmButtonText: 'OK',
cancelButtonText: 'Cancel',
})
.then(({ value }) => {
ElMessage({
type: 'success',
message: `new websocket group name is chat_${value}`,
})
deviceTableParams.value.push(value);
})
.catch(() => {
ElMessage({
type: 'info',
message: 'Input canceled',
})
})
}
</script> </script>
<template> <template>
<el-scrollbar ref="scrollbarRef" mb-10 height="400px" always> <el-scrollbar ref="scrollbarRef" mb-10 height="400px" always>
<div ref="innerRef"> <div ref="innerRef">
<p v-for="item in items" :key="item" class="scrollbar-demo-item"> <p v-for="item in items" :key="item" class="scrollbar-demo-item text-sm">
<div>{{ JSON.parse(item)?.ts }}</div> <div>{{ JSON.parse(item)?.ts }}</div>
{{ item }} {{ item }}
</p> </p>
...@@ -72,7 +94,9 @@ onMounted(() => { ...@@ -72,7 +94,9 @@ onMounted(() => {
<el-input v-model="input" placeholder="Please input" @keyup.enter="send"></el-input> <el-input v-model="input" placeholder="Please input" @keyup.enter="send"></el-input>
<el-button @click="send">Send</el-button> <el-button @click="send">Send</el-button>
<br/>
<device-performance-table v-for="param in deviceTableParams" mt-5 :group-name="param" :key="param" />
<el-button @click="addDeviceTable" class="mt-5" >Add table</el-button>
</template> </template>
<style scoped> <style scoped>
......
<template>
<el-tabs v-model="activeName" type="card" class="demo-tabs">
<el-tab-pane label="device" name="device">
<communication-tab tab-type="communicate" />
</el-tab-pane>
<el-tab-pane label="simulate_device" name="simulate_device">
<communication-tab tab-type="simulate_communicate" />
</el-tab-pane>
</el-tabs>
</template>
<script lang="ts" setup>
import axios from 'axios';
import { onMounted, ref } from 'vue'
import { useProtocolNamesStore } from '@/stores/protocolNames'
import CommunicationTab from "@/components/device_communication/CommunicationTab";
// tab 相关
const activeName = ref<string>('simulate_device')
onMounted(() => {
axios.get('/api/device_communication/')
.then((res) => {
const store = useProtocolNamesStore()
store.protocolNames.push(...res.data)
})
})
</script>
<template>
<el-select class="mb-5" v-model="value" placeholder="Select">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<br>
<el-tag v-for="tag in tags" :key="tag" class="mx-1" closable @close="handleClose(tag)">
{{ tag }}
</el-tag>
</template>
<script lang="ts" setup>
import axios from 'axios';
import { onMounted, ref, watch } from 'vue'
const tags = ref<string[]>(['111', '222'])
const handleClose = (tag: string) => {
tags.value.splice(tags.value.indexOf(tag), 1)
console.log(tags.value);
}
const value = ref('')
type OptionItem = {
value: string,
label: string
}
const options = ref<OptionItem[]>([])
onMounted(() => {
axios.get(
'api/device_communication/'
).then((res) => {
options.value = res.data
}).catch((err) => {
console.log(err);
})
})
watch(value, () => {
axios.post(
'api/device_communication/protocol_performance/',
{
'protocol_name': value.value,
}).then((res) => {
console.log(res)
tags.value = res.data
}).catch((err) => {
console.log(err);
})
})
</script>
<template>
<el-upload
class="upload-demo"
action="api/protocol_version_manage/file_upload/"
:show-file-list="false"
:data="data"
>
<el-button type="primary">Click to upload</el-button>
</el-upload>
<br>
<el-button type="primary" @click="downloadFile">下载原始文件</el-button>
</template>
<script lang="ts" setup>
import { ref } from "vue";
import axios from "axios";
const data = ref({
"protocol_name": "HY_VirtualDevice_PROTOCOL",
"version": "222",
});
const downloadFile = () => {
let url = "api/protocol_version_manage/file_download/HY_VirtualDevice_PROTOCOL/222/";
axios({
url,
method: "GET",
responseType: "blob",
}).then((res) => {
// 下载文件
console.log(res);
const blob = new Blob([res.data], { type: "multipart/form-data" });
const link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = decodeURIComponent(res.headers["filename"]);
link.click();
});
console.log("downloadFile");
};
</script>
// vite.config.ts
import { defineConfig } from "file:///W:/work/NetCopilot/test/vue_django/frontend/node_modules/vite/dist/node/index.js";
import vue from "file:///W:/work/NetCopilot/test/vue_django/frontend/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import legacy from "file:///W:/work/NetCopilot/test/vue_django/frontend/node_modules/@vitejs/plugin-legacy/dist/index.mjs";
import UnoCSS from "file:///W:/work/NetCopilot/test/vue_django/frontend/node_modules/unocss/dist/vite.mjs";
import { resolve } from "path";
import process from "process";
function pathResolve(dir) {
return resolve(process.cwd(), ".", dir);
}
var vite_config_default = defineConfig({
resolve: {
alias: {
"@": pathResolve("src")
},
extensions: [".ts", ".js", ".vue"]
// 使用路径别名时想要省略的后缀名,可以自己 增减
},
plugins: [
legacy({
targets: ["defaults", "not IE 11"]
}),
vue(),
UnoCSS()
],
base: "./",
server: {
host: "0.0.0.0"
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJXOlxcXFx3b3JrXFxcXE5ldENvcGlsb3RcXFxcdGVzdFxcXFx2dWVfZGphbmdvXFxcXGZyb250ZW5kXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJXOlxcXFx3b3JrXFxcXE5ldENvcGlsb3RcXFxcdGVzdFxcXFx2dWVfZGphbmdvXFxcXGZyb250ZW5kXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9XOi93b3JrL05ldENvcGlsb3QvdGVzdC92dWVfZGphbmdvL2Zyb250ZW5kL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSdcbmltcG9ydCB2dWUgZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlJ1xuaW1wb3J0IGxlZ2FjeSBmcm9tICdAdml0ZWpzL3BsdWdpbi1sZWdhY3knXG5pbXBvcnQgVW5vQ1NTIGZyb20gJ3Vub2Nzcy92aXRlJ1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdwcm9jZXNzJ1xuXG5mdW5jdGlvbiBwYXRoUmVzb2x2ZShkaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuJywgZGlyKVxufTtcblxuXG4vLyBodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnL1xuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcmVzb2x2ZToge1xuICAgIGFsaWFzOiB7XG4gICAgICBcIkBcIjogcGF0aFJlc29sdmUoJ3NyYycpXG4gICAgfSxcbiAgICBleHRlbnNpb25zOiBbJy50cycsICcuanMnLCAnLnZ1ZSddIC8vIFx1NEY3Rlx1NzUyOFx1OERFRlx1NUY4NFx1NTIyQlx1NTQwRFx1NjVGNlx1NjBGM1x1ODk4MVx1NzcwMVx1NzU2NVx1NzY4NFx1NTQwRVx1N0YwMFx1NTQwRFx1RkYwQ1x1NTNFRlx1NEVFNVx1ODFFQVx1NURGMSBcdTU4OUVcdTUxQ0ZcbiAgfSxcbiAgcGx1Z2luczogW1xuICAgIGxlZ2FjeSh7XG4gICAgICB0YXJnZXRzOiBbJ2RlZmF1bHRzJywgJ25vdCBJRSAxMSddLFxuICAgIH0pLFxuICAgIHZ1ZSgpLFxuICAgIFVub0NTUygpXG4gIF0sXG4gIGJhc2U6ICAnLi8nLFxuICBzZXJ2ZXI6IHtcbiAgICBob3N0OiAnMC4wLjAuMCcsXG4gIH1cbn0pXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQStULFNBQVMsb0JBQW9CO0FBQzVWLE9BQU8sU0FBUztBQUNoQixPQUFPLFlBQVk7QUFDbkIsT0FBTyxZQUFZO0FBQ25CLFNBQVMsZUFBZTtBQUN4QixPQUFPLGFBQWE7QUFFcEIsU0FBUyxZQUFZLEtBQXFCO0FBQ3hDLFNBQU8sUUFBUSxRQUFRLElBQUksR0FBRyxLQUFLLEdBQUc7QUFDeEM7QUFJQSxJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTO0FBQUEsSUFDUCxPQUFPO0FBQUEsTUFDTCxLQUFLLFlBQVksS0FBSztBQUFBLElBQ3hCO0FBQUEsSUFDQSxZQUFZLENBQUMsT0FBTyxPQUFPLE1BQU07QUFBQTtBQUFBLEVBQ25DO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxPQUFPO0FBQUEsTUFDTCxTQUFTLENBQUMsWUFBWSxXQUFXO0FBQUEsSUFDbkMsQ0FBQztBQUFBLElBQ0QsSUFBSTtBQUFBLElBQ0osT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE1BQU87QUFBQSxFQUNQLFFBQVE7QUFBQSxJQUNOLE1BQU07QUFBQSxFQUNSO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K
...@@ -13,7 +13,7 @@ _sym_db = _symbol_database.Default() ...@@ -13,7 +13,7 @@ _sym_db = _symbol_database.Default()
from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
import TDSCmd_pb2 as TDSCmd__pb2 from . import TDSCmd_pb2 as TDSCmd_pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x44\x65vice_datastruct.proto\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x0cTDSCmd.proto\"o\n\x12Proto3DeviceAllCMD\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x10\n\x08\x44\x45V_NAME\x18\x02 \x01(\t\x12\x15\n\rPROTOCOL_NAME\x18\x03 \x01(\t\x12$\n\x04\x43MDs\x18\x04 \x03(\x0b\x32\x16.Proto3DeviceCMDDefine\"~\n\x15Proto3DeviceCMDDefine\x12\x10\n\x08\x43MD_NAME\x18\x01 \x01(\t\x12\x0e\n\x06\x45NCODE\x18\x02 \x01(\t\x12\x1f\n\x17Timing_CMD_Cycle_period\x18\x03 \x01(\x05\x12\"\n\x06\x66\x65lids\x18\x04 \x03(\x0b\x32\x12.Proto3CMDFieldCfg\"\x9d\x01\n\x17Proto3ForReloadProtocol\x12\x10\n\x08\x64\x65v_name\x18\x01 \x01(\t\x12\x10\n\x08\x63md_name\x18\x02 \x01(\t\x12-\n\x05\x66lags\x18\x03 \x01(\x0e\x32\x1e.Proto3ForReloadProtocol.Flags\"/\n\x05\x46lags\x12\x13\n\x0fNORMAL_DISPATCH\x10\x00\x12\x11\n\rFULL_DISPATCH\x10\x01\"\xa8\x01\n\x19Proto3TableDevCmdNamePoll\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x15\n\rprotocol_name\x18\x02 \x01(\t\x12\x10\n\x08\x63md_name\x18\x03 \x01(\t\x12\x10\n\x08\x63md_type\x18\x04 \x01(\t\x12\x0e\n\x06\x65ncode\x18\x05 \x01(\t\x12\x1f\n\x17timing_cmd_cycle_period\x18\x06 \x01(\x05\x12\x13\n\x0b\x63md_explain\x18\x07 \x01(\t\"\x85\x03\n\x1aProto3TableAllDevCmdDefine\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x10\n\x08\x63md_name\x18\x02 \x01(\t\x12\x10\n\x08\x63md_type\x18\x03 \x01(\t\x12\x12\n\nfieldindex\x18\x04 \x01(\x05\x12\x11\n\tfieldname\x18\x05 \x01(\t\x12\x11\n\tfieldsize\x18\x06 \x01(\x05\x12\r\n\x05value\x18\x07 \x01(\t\x12\x10\n\x08minvalue\x18\x08 \x01(\t\x12\x10\n\x08maxvalue\x18\t \x01(\t\x12\x10\n\x08\x64\x61tatype\x18\n \x01(\x05\x12\x14\n\x0coperation_in\x18\x0b \x01(\x05\x12\x18\n\x10operation_in_num\x18\x0c \x01(\x05\x12\x15\n\roperation_out\x18\r \x01(\x05\x12\x19\n\x11operation_out_num\x18\x0e \x01(\x05\x12\x12\n\noperabo_in\x18\x0f \x01(\x05\x12\x13\n\x0boperabo_out\x18\x10 \x01(\x05\x12\x15\n\rlua_script_in\x18\x11 \x01(\t\x12\x16\n\x0elua_script_out\x18\x12 \x01(\t\"\xa2\x03\n\x13Proto3DeviceInfoCfg\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x0e\n\x06STA_ID\x18\x02 \x01(\t\x12\x0e\n\x06\x44\x45V_ID\x18\x03 \x01(\x05\x12\x10\n\x08\x44\x45V_NAME\x18\x04 \x01(\t\x12\x14\n\x0c\x44\x45V_NAME_CHN\x18\x05 \x01(\t\x12\x15\n\rPROTOCOL_NAME\x18\x06 \x01(\t\x12\x16\n\x0e\x43MD_EXCEL_PATH\x18\x07 \x01(\t\x12\x17\n\x0f\x43OMUNITATE_MODE\x18\x08 \x01(\t\x12\x0e\n\x06TCP_IP\x18\t \x01(\t\x12\x10\n\x08TCP_PORT\x18\n \x01(\x05\x12\x12\n\nUDP_IP_SRC\x18\x0b \x01(\t\x12\x14\n\x0cUDP_PORT_SRC\x18\x0c \x01(\x05\x12\x12\n\nUDP_IP_DST\x18\r \x01(\t\x12\x14\n\x0cUDP_PORT_DST\x18\x0e \x01(\x05\x12\x10\n\x08UDPMC_IP\x18\x0f \x01(\t\x12\x13\n\x0bUDPMC_IP_TX\x18\x10 \x01(\t\x12\x15\n\rUDPMC_PORT_TX\x18\x11 \x01(\x05\x12\x13\n\x0bUDPMC_IP_RX\x18\x12 \x01(\t\x12\x15\n\rUDPMC_PORT_RX\x18\x13 \x01(\x05\x12\x0f\n\x07REMARKS\x18\x14 \x01(\t\"\xed\x02\n\x11Proto3CMDFieldCfg\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x12\n\nfieldIndex\x18\x02 \x01(\x05\x12\x11\n\tfieldName\x18\x03 \x01(\t\x12\x11\n\tfieldSize\x18\x04 \x01(\x05\x12\r\n\x05value\x18\x05 \x01(\t\x12\x10\n\x08minValue\x18\x06 \x01(\t\x12\x10\n\x08maxValue\x18\x07 \x01(\t\x12\x10\n\x08\x64\x61taType\x18\x08 \x01(\x05\x12\x14\n\x0coperation_in\x18\t \x01(\x05\x12\x18\n\x10operation_in_num\x18\n \x01(\x05\x12\x15\n\roperation_out\x18\x0b \x01(\x05\x12\x19\n\x11operation_out_num\x18\x0c \x01(\x05\x12\x12\n\noperaBO_in\x18\r \x01(\x05\x12\x13\n\x0boperaBO_out\x18\x0e \x01(\x05\x12\x15\n\rLua_Script_in\x18\x0f \x01(\t\x12\x16\n\x0eLua_Script_out\x18\x10 \x01(\t\x12\x13\n\x0bvalue_bytes\x18\x13 \x01(\x0c\"\xaa\x01\n\x1cProto3TableSoftLimitAngleCfg\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x0e\n\x06STA_ID\x18\x02 \x01(\t\x12\x10\n\x08\x44\x45V_NAME\x18\x03 \x01(\t\x12\x14\n\x0c\x44\x45V_NAME_CHN\x18\x04 \x01(\t\x12\x15\n\rPROTOCOL_NAME\x18\x05 \x01(\t\x12\x1e\n\x16PITCH_SOFT_LIMIT_ANGLE\x18\x06 \x01(\t\x12\x0f\n\x07REMARKS\x18\x07 \x01(\t\"\xd9\x02\n\x0bTDSDBC_CURD\x12\r\n\x05table\x18\x01 \x01(\t\x12!\n\x05\x66lags\x18\x02 \x01(\x0e\x32\x12.TDSDBC_CURD.Flags\x12)\n\toperation\x18\x03 \x01(\x0e\x32\x16.TDSDBC_CURD.Operation\x12\x18\n\x04\x63ode\x18\x04 \x01(\x0e\x32\n.CodeValue\x12\x0b\n\x03msg\x18\x05 \x01(\t\x12\x0f\n\x07msg_CHN\x18\x06 \x01(\t\x12&\n\x08\x61ny_data\x18\x07 \x03(\x0b\x32\x14.google.protobuf.Any\"/\n\x05\x46lags\x12\x13\n\x0fNORMAL_DISPATCH\x10\x00\x12\x11\n\rFULL_DISPATCH\x10\x01\"\\\n\tOperation\x12\x11\n\rOPERATION_ADD\x10\x00\x12\x11\n\rOPERATION_DEL\x10\x01\x12\x14\n\x10OPERATION_UPDATE\x10\x02\x12\x13\n\x0fOPERATION_QUERY\x10\x03\"\xbc\x01\n\x11TDSXDC_Device_cmd\x12\x10\n\x08\x44\x65viceID\x18\x01 \x01(\r\x12\x10\n\x08\x64\x65v_name\x18\x02 \x01(\t\x12\x10\n\x08\x63md_name\x18\x03 \x01(\t\x12\x15\n\rprotocol_name\x18\x04 \x01(\t\x12\x18\n\x04\x63ode\x18\x05 \x01(\x0e\x32\n.CodeValue\x12\x0b\n\x03msg\x18\x06 \x01(\t\x12\x0f\n\x07msg_CHN\x18\x07 \x01(\t\x12\"\n\x06\x66ields\x18\x08 \x03(\x0b\x32\x12.Proto3CMDFieldCfg*\x7f\n\x0e\x41larmID_define\x12\x0b\n\x07ID_Base\x10\x00\x12\x15\n\x0e\x44\x65vAla_id_Base\x10\x80\x87\xa7\x0e\x12\x18\n\x11\x44\x65vAla_id_Offline\x10\x81\x87\xa7\x0e\x12/\n(DevAla_id_Antenna_pitch_angle_soft_limit\x10\x82\x87\xa7\x0e\x42\x0cZ\n../protogob\x06proto3') DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x44\x65vice_datastruct.proto\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x0cTDSCmd.proto\"o\n\x12Proto3DeviceAllCMD\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x10\n\x08\x44\x45V_NAME\x18\x02 \x01(\t\x12\x15\n\rPROTOCOL_NAME\x18\x03 \x01(\t\x12$\n\x04\x43MDs\x18\x04 \x03(\x0b\x32\x16.Proto3DeviceCMDDefine\"~\n\x15Proto3DeviceCMDDefine\x12\x10\n\x08\x43MD_NAME\x18\x01 \x01(\t\x12\x0e\n\x06\x45NCODE\x18\x02 \x01(\t\x12\x1f\n\x17Timing_CMD_Cycle_period\x18\x03 \x01(\x05\x12\"\n\x06\x66\x65lids\x18\x04 \x03(\x0b\x32\x12.Proto3CMDFieldCfg\"\x9d\x01\n\x17Proto3ForReloadProtocol\x12\x10\n\x08\x64\x65v_name\x18\x01 \x01(\t\x12\x10\n\x08\x63md_name\x18\x02 \x01(\t\x12-\n\x05\x66lags\x18\x03 \x01(\x0e\x32\x1e.Proto3ForReloadProtocol.Flags\"/\n\x05\x46lags\x12\x13\n\x0fNORMAL_DISPATCH\x10\x00\x12\x11\n\rFULL_DISPATCH\x10\x01\"\xa8\x01\n\x19Proto3TableDevCmdNamePoll\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x15\n\rprotocol_name\x18\x02 \x01(\t\x12\x10\n\x08\x63md_name\x18\x03 \x01(\t\x12\x10\n\x08\x63md_type\x18\x04 \x01(\t\x12\x0e\n\x06\x65ncode\x18\x05 \x01(\t\x12\x1f\n\x17timing_cmd_cycle_period\x18\x06 \x01(\x05\x12\x13\n\x0b\x63md_explain\x18\x07 \x01(\t\"\x85\x03\n\x1aProto3TableAllDevCmdDefine\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x10\n\x08\x63md_name\x18\x02 \x01(\t\x12\x10\n\x08\x63md_type\x18\x03 \x01(\t\x12\x12\n\nfieldindex\x18\x04 \x01(\x05\x12\x11\n\tfieldname\x18\x05 \x01(\t\x12\x11\n\tfieldsize\x18\x06 \x01(\x05\x12\r\n\x05value\x18\x07 \x01(\t\x12\x10\n\x08minvalue\x18\x08 \x01(\t\x12\x10\n\x08maxvalue\x18\t \x01(\t\x12\x10\n\x08\x64\x61tatype\x18\n \x01(\x05\x12\x14\n\x0coperation_in\x18\x0b \x01(\x05\x12\x18\n\x10operation_in_num\x18\x0c \x01(\x05\x12\x15\n\roperation_out\x18\r \x01(\x05\x12\x19\n\x11operation_out_num\x18\x0e \x01(\x05\x12\x12\n\noperabo_in\x18\x0f \x01(\x05\x12\x13\n\x0boperabo_out\x18\x10 \x01(\x05\x12\x15\n\rlua_script_in\x18\x11 \x01(\t\x12\x16\n\x0elua_script_out\x18\x12 \x01(\t\"\xa2\x03\n\x13Proto3DeviceInfoCfg\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x0e\n\x06STA_ID\x18\x02 \x01(\t\x12\x0e\n\x06\x44\x45V_ID\x18\x03 \x01(\x05\x12\x10\n\x08\x44\x45V_NAME\x18\x04 \x01(\t\x12\x14\n\x0c\x44\x45V_NAME_CHN\x18\x05 \x01(\t\x12\x15\n\rPROTOCOL_NAME\x18\x06 \x01(\t\x12\x16\n\x0e\x43MD_EXCEL_PATH\x18\x07 \x01(\t\x12\x17\n\x0f\x43OMUNITATE_MODE\x18\x08 \x01(\t\x12\x0e\n\x06TCP_IP\x18\t \x01(\t\x12\x10\n\x08TCP_PORT\x18\n \x01(\x05\x12\x12\n\nUDP_IP_SRC\x18\x0b \x01(\t\x12\x14\n\x0cUDP_PORT_SRC\x18\x0c \x01(\x05\x12\x12\n\nUDP_IP_DST\x18\r \x01(\t\x12\x14\n\x0cUDP_PORT_DST\x18\x0e \x01(\x05\x12\x10\n\x08UDPMC_IP\x18\x0f \x01(\t\x12\x13\n\x0bUDPMC_IP_TX\x18\x10 \x01(\t\x12\x15\n\rUDPMC_PORT_TX\x18\x11 \x01(\x05\x12\x13\n\x0bUDPMC_IP_RX\x18\x12 \x01(\t\x12\x15\n\rUDPMC_PORT_RX\x18\x13 \x01(\x05\x12\x0f\n\x07REMARKS\x18\x14 \x01(\t\"\xed\x02\n\x11Proto3CMDFieldCfg\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x12\n\nfieldIndex\x18\x02 \x01(\x05\x12\x11\n\tfieldName\x18\x03 \x01(\t\x12\x11\n\tfieldSize\x18\x04 \x01(\x05\x12\r\n\x05value\x18\x05 \x01(\t\x12\x10\n\x08minValue\x18\x06 \x01(\t\x12\x10\n\x08maxValue\x18\x07 \x01(\t\x12\x10\n\x08\x64\x61taType\x18\x08 \x01(\x05\x12\x14\n\x0coperation_in\x18\t \x01(\x05\x12\x18\n\x10operation_in_num\x18\n \x01(\x05\x12\x15\n\roperation_out\x18\x0b \x01(\x05\x12\x19\n\x11operation_out_num\x18\x0c \x01(\x05\x12\x12\n\noperaBO_in\x18\r \x01(\x05\x12\x13\n\x0boperaBO_out\x18\x0e \x01(\x05\x12\x15\n\rLua_Script_in\x18\x0f \x01(\t\x12\x16\n\x0eLua_Script_out\x18\x10 \x01(\t\x12\x13\n\x0bvalue_bytes\x18\x13 \x01(\x0c\"\xaa\x01\n\x1cProto3TableSoftLimitAngleCfg\x12\n\n\x02ID\x18\x01 \x01(\x05\x12\x0e\n\x06STA_ID\x18\x02 \x01(\t\x12\x10\n\x08\x44\x45V_NAME\x18\x03 \x01(\t\x12\x14\n\x0c\x44\x45V_NAME_CHN\x18\x04 \x01(\t\x12\x15\n\rPROTOCOL_NAME\x18\x05 \x01(\t\x12\x1e\n\x16PITCH_SOFT_LIMIT_ANGLE\x18\x06 \x01(\t\x12\x0f\n\x07REMARKS\x18\x07 \x01(\t\"\xd9\x02\n\x0bTDSDBC_CURD\x12\r\n\x05table\x18\x01 \x01(\t\x12!\n\x05\x66lags\x18\x02 \x01(\x0e\x32\x12.TDSDBC_CURD.Flags\x12)\n\toperation\x18\x03 \x01(\x0e\x32\x16.TDSDBC_CURD.Operation\x12\x18\n\x04\x63ode\x18\x04 \x01(\x0e\x32\n.CodeValue\x12\x0b\n\x03msg\x18\x05 \x01(\t\x12\x0f\n\x07msg_CHN\x18\x06 \x01(\t\x12&\n\x08\x61ny_data\x18\x07 \x03(\x0b\x32\x14.google.protobuf.Any\"/\n\x05\x46lags\x12\x13\n\x0fNORMAL_DISPATCH\x10\x00\x12\x11\n\rFULL_DISPATCH\x10\x01\"\\\n\tOperation\x12\x11\n\rOPERATION_ADD\x10\x00\x12\x11\n\rOPERATION_DEL\x10\x01\x12\x14\n\x10OPERATION_UPDATE\x10\x02\x12\x13\n\x0fOPERATION_QUERY\x10\x03\"\xbc\x01\n\x11TDSXDC_Device_cmd\x12\x10\n\x08\x44\x65viceID\x18\x01 \x01(\r\x12\x10\n\x08\x64\x65v_name\x18\x02 \x01(\t\x12\x10\n\x08\x63md_name\x18\x03 \x01(\t\x12\x15\n\rprotocol_name\x18\x04 \x01(\t\x12\x18\n\x04\x63ode\x18\x05 \x01(\x0e\x32\n.CodeValue\x12\x0b\n\x03msg\x18\x06 \x01(\t\x12\x0f\n\x07msg_CHN\x18\x07 \x01(\t\x12\"\n\x06\x66ields\x18\x08 \x03(\x0b\x32\x12.Proto3CMDFieldCfg*\x7f\n\x0e\x41larmID_define\x12\x0b\n\x07ID_Base\x10\x00\x12\x15\n\x0e\x44\x65vAla_id_Base\x10\x80\x87\xa7\x0e\x12\x18\n\x11\x44\x65vAla_id_Offline\x10\x81\x87\xa7\x0e\x12/\n(DevAla_id_Antenna_pitch_angle_soft_limit\x10\x82\x87\xa7\x0e\x42\x0cZ\n../protogob\x06proto3')
......
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-agi.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rmod-agi.proto\x12\x15satllite.protobuf.agi\"\xd0\x01\n\nCalcTleReq\x12\x0f\n\x07noradID\x18\x01 \x01(\x05\x12\x11\n\tnoradName\x18\x02 \x01(\t\x12\x0c\n\x04year\x18\x03 \x01(\x05\x12\r\n\x05month\x18\x04 \x01(\x05\x12\x0b\n\x03\x64\x61y\x18\x05 \x01(\x05\x12\x0c\n\x04hour\x18\x06 \x01(\x05\x12\x0e\n\x06minute\x18\x07 \x01(\x05\x12\x0e\n\x06second\x18\x08 \x01(\x05\x12\t\n\x01\x61\x18\t \x01(\x02\x12\n\n\x02\x65\x65\x18\n \x01(\x02\x12\t\n\x01I\x18\x0b \x01(\x02\x12\x0c\n\x04raan\x18\x0c \x01(\x02\x12\x0b\n\x03\x61rc\x18\r \x01(\x02\x12\t\n\x01m\x18\x0e \x01(\x02\"9\n\nCalcTleRet\x12\r\n\x05line0\x18\x01 \x01(\t\x12\r\n\x05line1\x18\x02 \x01(\t\x12\r\n\x05line2\x18\x03 \x01(\t\"\xba\x02\n\rCalcReportReq\x12\x15\n\rstartDateTime\x18\x01 \x01(\t\x12\x13\n\x0b\x65ndDateTime\x18\x02 \x01(\t\x12\x10\n\x08latitude\x18\x03 \x01(\x01\x12\x11\n\tlongitude\x18\x04 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x05 \x01(\x01\x12\r\n\x05slice\x18\x06 \x01(\x01\x12\x0e\n\x06minAzi\x18\x07 \x01(\x01\x12\x0e\n\x06maxAzi\x18\x08 \x01(\x01\x12\x0e\n\x06minEle\x18\t \x01(\x01\x12\x0e\n\x06maxEle\x18\n \x01(\x01\x12\x0f\n\x07minDist\x18\x0b \x01(\x01\x12\x0f\n\x07maxDist\x18\x0c \x01(\x01\x12\x12\n\npointSlice\x18\r \x01(\x01\x12\x14\n\x0cpointCollect\x18\x0e \x01(\x05\x12\r\n\x05line0\x18\x0f \x01(\t\x12\r\n\x05line1\x18\x10 \x01(\t\x12\r\n\x05line2\x18\x11 \x01(\t\"e\n\rCalcReportRet\x12(\n\x04xxds\x18\x01 \x03(\x0b\x32\x1a.satllite.protobuf.agi.Xxd\x12*\n\x05tasks\x18\x02 \x03(\x0b\x32\x1b.satllite.protobuf.agi.Task\";\n\x03Xxd\x12\n\n\x02\x64t\x18\x01 \x01(\t\x12\x0b\n\x03lon\x18\x02 \x01(\x01\x12\x0b\n\x03lat\x18\x03 \x01(\x01\x12\x0e\n\x06height\x18\x04 \x01(\x01\"\xb2\x01\n\x04Task\x12\r\n\x05start\x18\x01 \x01(\t\x12\x0b\n\x03\x65nd\x18\x02 \x01(\t\x12\x10\n\x08startAzi\x18\x03 \x01(\x01\x12\x0e\n\x06\x65ndAzi\x18\x04 \x01(\x01\x12\x10\n\x08startEle\x18\x05 \x01(\x01\x12\x0e\n\x06maxEle\x18\x06 \x01(\x01\x12\x0f\n\x07minDist\x18\x07 \x01(\x01\x12\x0f\n\x07maxDist\x18\x08 \x01(\x01\x12(\n\x04obss\x18\t \x03(\x0b\x32\x1a.satllite.protobuf.agi.Obs\":\n\x03Obs\x12\n\n\x02\x64t\x18\x01 \x01(\t\x12\x0b\n\x03\x61zi\x18\x02 \x01(\x01\x12\x0b\n\x03\x65le\x18\x03 \x01(\x01\x12\r\n\x05range\x18\x04 \x01(\x01\x42\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_agi_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_CALCTLEREQ._serialized_start=41
_CALCTLEREQ._serialized_end=249
_CALCTLERET._serialized_start=251
_CALCTLERET._serialized_end=308
_CALCREPORTREQ._serialized_start=311
_CALCREPORTREQ._serialized_end=625
_CALCREPORTRET._serialized_start=627
_CALCREPORTRET._serialized_end=728
_XXD._serialized_start=730
_XXD._serialized_end=789
_TASK._serialized_start=792
_TASK._serialized_end=970
_OBS._serialized_start=972
_OBS._serialized_end=1030
# @@protoc_insertion_point(module_scope)
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-return.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2
import TDSCmd_pb2 as TDSCmd__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10mod-return.proto\x1a\x19google/protobuf/any.proto\x1a\x0cTDSCmd.proto\"\xdb\x01\n\rReturnElement\x12\x1a\n\x06result\x18\x01 \x01(\x0e\x32\n.CodeValue\x12\x0b\n\x03msg\x18\x02 \x01(\t\x12\r\n\x05\x65nMsg\x18\x03 \x01(\t\x12\"\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x14.google.protobuf.Any\x12\"\n\x04list\x18\x05 \x03(\x0b\x32\x14.google.protobuf.Any\x12\x11\n\tdstSiteNo\x18\x06 \x01(\t\x12\x11\n\tsrcSiteNo\x18\x07 \x01(\t\x12\x0f\n\x07noArray\x18\x08 \x03(\t\x12\x13\n\x0bsiteNoArray\x18\t \x03(\tB\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_return_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_RETURNELEMENT._serialized_start=62
_RETURNELEMENT._serialized_end=281
# @@protoc_insertion_point(module_scope)
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-satellite.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13mod-satellite.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xe4\x03\n\x13RetSatelliteElement\x12\r\n\x05norad\x18\x02 \x01(\t\x12\x0c\n\x04\x63ode\x18\x03 \x01(\t\x12\x0e\n\x06\x63nName\x18\x04 \x01(\t\x12\x0e\n\x06\x65nName\x18\x05 \x01(\t\x12\x11\n\tavailable\x18\x06 \x01(\x08\x12\x10\n\x08priority\x18\x07 \x01(\x05\x12\x16\n\x0epriorityBySite\x18\x08 \x01(\x05\x12,\n\x04\x62\x61se\x18\t \x03(\x0b\x32\x1e.RetSatelliteElement.BaseEntry\x12(\n\x07\x64\x65tails\x18\n \x03(\x0b\x32\x17.RetSiteLevel3Satellite\x12\x34\n\x08\x65lements\x18\x0b \x03(\x0b\x32\".RetSatelliteElement.ElementsEntry\x12,\n\nworkParams\x18\x0c \x01(\x0b\x32\x18.RetSatelliteWorkElement\x12\x0b\n\x03off\x18\r \x01(\x08\x12,\n\x08\x63reateDt\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a+\n\tBaseEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a/\n\rElementsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbc\x01\n\x16RetSiteLevel3Satellite\x12\x0e\n\x06siteNo\x18\x01 \x01(\t\x12\x10\n\x08priority\x18\x02 \x01(\x05\x12\x11\n\tavailable\x18\x03 \x01(\x08\x12#\n\x0cobserveGrade\x18\x04 \x01(\x0e\x32\r.ObserveGrade\x12+\n\tworkParam\x18\x05 \x01(\x0b\x32\x18.RetSatelliteWorkElement\x12\x1b\n\x13workParamConfigName\x18\x06 \x01(\t\"\xa2\x01\n\rSatelliteList\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12*\n\x04sort\x18\x03 \x01(\x0e\x32\x1c.SatelliteList.satelliteSort\"F\n\rsatelliteSort\x12\x19\n\x15satelliteSort_default\x10\x00\x12\x1a\n\x16satelliteSort_forecast\x10\x01\"?\n\x0fSatelliteDetail\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\r\n\x05norad\x18\x03 \x01(\t\"D\n\x16SatelliteElementUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x0b\n\x03tle\x18\x03 \x01(\t\"\xc8\x01\n\x13SatelliteBaseUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\r\n\x05norad\x18\x03 \x01(\t\x12\x0e\n\x06\x63nName\x18\x04 \x01(\t\x12\x0c\n\x04\x63ode\x18\x05 \x01(\t\x12\x10\n\x08\x63odeName\x18\x06 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x07 \x01(\t\x12\x11\n\torbitType\x18\x08 \x01(\t\x12\x0f\n\x07purpose\x18\t \x01(\t\x12\x0e\n\x06remark\x18\n \x01(\t\x12\x0e\n\x06\x65nName\x18\x0b \x01(\t\"A\n\x0cSatelliteDel\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x12\n\nnoradArray\x18\x03 \x03(\t\"6\n\x15SatellitePriorityList\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\"L\n\x17SatellitePriorityUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x12\n\nnoradArray\x18\x03 \x03(\t\"6\n\x14SatelliteElementLoad\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0f\n\x07idArray\x18\x02 \x03(\t\"\x90\x01\n\x1bSatelliteElementLoadAutoSet\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x0f\n\x07loadUrl\x18\x03 \x01(\t\x12\x0f\n\x07loadHMS\x18\x04 \x01(\t\x12\x15\n\rloadFrequency\x18\x06 \x01(\x05\x12\x19\n\x11tleStrategyStatus\x18\x08 \x01(\x08\"\xe9\x01\n\x15SatelliteDetailUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\r\n\x05norad\x18\x02 \x01(\t\x12\x0e\n\x06siteNo\x18\x03 \x01(\t\x12\x0e\n\x06\x63nName\x18\x04 \x01(\t\x12\x0c\n\x04\x63ode\x18\x05 \x01(\t\x12\x10\n\x08\x63odeName\x18\x06 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x07 \x01(\t\x12\x11\n\torbitType\x18\x08 \x01(\t\x12\x0f\n\x07purpose\x18\t \x01(\t\x12\x0e\n\x06remark\x18\n \x01(\t\x12\x0e\n\x06\x65nName\x18\x0b \x01(\t\x12\x1d\n\x06params\x18\x0c \x03(\x0b\x32\r.DetailParams\"c\n\x0c\x44\x65tailParams\x12\x0e\n\x06siteNo\x18\x01 \x01(\t\x12\x11\n\tavailable\x18\x02 \x01(\x08\x12\x1c\n\x05grade\x18\x03 \x01(\x0e\x32\r.ObserveGrade\x12\x12\n\nworkConfig\x18\x04 \x01(\x05\"\xc7\x01\n\x17RetSatelliteWorkElement\x12\r\n\x05norad\x18\x01 \x01(\t\x12\x10\n\x08\x63onfigId\x18\x02 \x01(\x05\x12\x0e\n\x06remark\x18\x03 \x01(\t\x12\x12\n\nconfigName\x18\x04 \x01(\t\x12\x10\n\x08\x63\x61tegory\x18\x05 \x01(\t\x12\x1a\n\x06params\x18\x06 \x03(\x0b\x32\n.WorkParam\x12\x0b\n\x03off\x18\x07 \x01(\x08\x12,\n\x08\x63reateDt\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"7\n\x16SatelliteWorkParamList\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\"\x9a\x01\n\x18SatelliteWorkParamUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\r\n\x05norad\x18\x03 \x01(\t\x12\x10\n\x08\x63onfigId\x18\x04 \x01(\x05\x12\x12\n\nconfigName\x18\x05 \x01(\t\x12\x0e\n\x06remark\x18\x06 \x01(\t\x12\x1a\n\x06params\x18\x07 \x03(\x0b\x32\n.WorkParam\"\xc5\x02\n\tWorkParam\x12\x0e\n\x06siteNo\x18\x01 \x01(\t\x12\x1c\n\x14XTrackerSigIntensity\x18\x06 \x01(\x05\x12\x1c\n\x14YTrackerSigIntensity\x18\x07 \x01(\x05\x12\x12\n\nXInitPhase\x18\x08 \x01(\x05\x12\x19\n\x11XPolarizationType\x18\t \x01(\x05\x12\x19\n\x11SPolarizationType\x18\n \x01(\x05\x12\x1c\n\x14XTrackerVoltageLimit\x18\x0b \x01(\x05\x12\x1c\n\x14STrackerVoltageLimit\x18\x0c \x01(\x05\x12\x1b\n\x13SUpPolarizationType\x18\r \x01(\x05\x12\x1b\n\x13XUpPolarizationType\x18\x0e \x01(\x05\x12\x16\n\x0eTrackingStatus\x18\x0f \x01(\x05\x12\x14\n\x0cTrackingBand\x18\x10 \x01(\x05\"X\n\x15SatelliteWorkParamDel\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12 \n\x08keyArray\x18\x03 \x03(\x0b\x32\x0e.NoradConfigId\"0\n\rNoradConfigId\x12\r\n\x05norad\x18\x01 \x01(\t\x12\x10\n\x08\x63onfigId\x18\x02 \x01(\x05\"T\n\x1fSatelliteWorkParamListForChoose\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x12\n\nnoradArray\x18\x03 \x03(\t*`\n\x0cObserveGrade\x12\x17\n\x13ObserveGradeDefault\x10\x00\x12\x11\n\rObserveGrade1\x10\x01\x12\x11\n\rObserveGrade2\x10\x02\x12\x11\n\rObserveGrade3\x10\x03\x42\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_satellite_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_RETSATELLITEELEMENT_BASEENTRY._options = None
_RETSATELLITEELEMENT_BASEENTRY._serialized_options = b'8\001'
_RETSATELLITEELEMENT_ELEMENTSENTRY._options = None
_RETSATELLITEELEMENT_ELEMENTSENTRY._serialized_options = b'8\001'
_OBSERVEGRADE._serialized_start=2948
_OBSERVEGRADE._serialized_end=3044
_RETSATELLITEELEMENT._serialized_start=57
_RETSATELLITEELEMENT._serialized_end=541
_RETSATELLITEELEMENT_BASEENTRY._serialized_start=449
_RETSATELLITEELEMENT_BASEENTRY._serialized_end=492
_RETSATELLITEELEMENT_ELEMENTSENTRY._serialized_start=494
_RETSATELLITEELEMENT_ELEMENTSENTRY._serialized_end=541
_RETSITELEVEL3SATELLITE._serialized_start=544
_RETSITELEVEL3SATELLITE._serialized_end=732
_SATELLITELIST._serialized_start=735
_SATELLITELIST._serialized_end=897
_SATELLITELIST_SATELLITESORT._serialized_start=827
_SATELLITELIST_SATELLITESORT._serialized_end=897
_SATELLITEDETAIL._serialized_start=899
_SATELLITEDETAIL._serialized_end=962
_SATELLITEELEMENTUPDATE._serialized_start=964
_SATELLITEELEMENTUPDATE._serialized_end=1032
_SATELLITEBASEUPDATE._serialized_start=1035
_SATELLITEBASEUPDATE._serialized_end=1235
_SATELLITEDEL._serialized_start=1237
_SATELLITEDEL._serialized_end=1302
_SATELLITEPRIORITYLIST._serialized_start=1304
_SATELLITEPRIORITYLIST._serialized_end=1358
_SATELLITEPRIORITYUPDATE._serialized_start=1360
_SATELLITEPRIORITYUPDATE._serialized_end=1436
_SATELLITEELEMENTLOAD._serialized_start=1438
_SATELLITEELEMENTLOAD._serialized_end=1492
_SATELLITEELEMENTLOADAUTOSET._serialized_start=1495
_SATELLITEELEMENTLOADAUTOSET._serialized_end=1639
_SATELLITEDETAILUPDATE._serialized_start=1642
_SATELLITEDETAILUPDATE._serialized_end=1875
_DETAILPARAMS._serialized_start=1877
_DETAILPARAMS._serialized_end=1976
_RETSATELLITEWORKELEMENT._serialized_start=1979
_RETSATELLITEWORKELEMENT._serialized_end=2178
_SATELLITEWORKPARAMLIST._serialized_start=2180
_SATELLITEWORKPARAMLIST._serialized_end=2235
_SATELLITEWORKPARAMUPDATE._serialized_start=2238
_SATELLITEWORKPARAMUPDATE._serialized_end=2392
_WORKPARAM._serialized_start=2395
_WORKPARAM._serialized_end=2720
_SATELLITEWORKPARAMDEL._serialized_start=2722
_SATELLITEWORKPARAMDEL._serialized_end=2810
_NORADCONFIGID._serialized_start=2812
_NORADCONFIGID._serialized_end=2860
_SATELLITEWORKPARAMLISTFORCHOOSE._serialized_start=2862
_SATELLITEWORKPARAMLISTFORCHOOSE._serialized_end=2946
# @@protoc_insertion_point(module_scope)
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-site.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
import mod_user_pb2 as mod__user__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0emod-site.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x0emod-user.proto\"\xb4\x03\n\x0eRetSiteElement\x12\n\n\x02no\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12&\n\x08operator\x18\x04 \x01(\x0b\x32\x14.RetAdminUserElement\x12\x0e\n\x06remark\x18\x05 \x01(\t\x12\x10\n\x08latitude\x18\x06 \x01(\x01\x12\x11\n\tlongitude\x18\x07 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x08 \x01(\x01\x12\x0e\n\x06parent\x18\t \x01(\t\x12+\n\x06params\x18\n \x03(\x0b\x32\x1b.RetSiteElement.ParamsEntry\x12+\n\x06\x65xtend\x18\x0b \x03(\x0b\x32\x1b.RetSiteElement.ExtendEntry\x12\x16\n\x0e\x61vailableArray\x18\x0c \x03(\t\x12\x0b\n\x03off\x18\r \x01(\x08\x12,\n\x08\x63reateDt\x18\x0e \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a-\n\x0b\x45xtendEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"<\n\x08SiteList\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x11\n\tavailable\x18\x03 \x01(\x08\"\x84\x02\n\nSiteUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06remark\x18\x04 \x01(\t\x12\x10\n\x08latitude\x18\x05 \x01(\x01\x12\x11\n\tlongitude\x18\x06 \x01(\x01\x12\x10\n\x08\x61ltitude\x18\x07 \x01(\x01\x12\x0f\n\x07\x63ountry\x18\x08 \x01(\t\x12\r\n\x05place\x18\t \x01(\t\x12\x10\n\x08timeZone\x18\n \x01(\t\x12\x0f\n\x07voltage\x18\x0b \x01(\x01\x12\x12\n\ndeltaDelay\x18\x0c \x01(\x05\x12\x11\n\tbandwidth\x18\r \x01(\x01\x12\x18\n\x10networkOperators\x18\x0e \x01(\t\"\xc7\x01\n\x0fSiteParamUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\n\n\x02id\x18\x02 \x01(\x05\x12\r\n\x05slice\x18\x03 \x01(\x01\x12\x13\n\x0bminEleAngle\x18\x04 \x01(\x01\x12\x13\n\x0bmaxEleAngle\x18\x05 \x01(\x01\x12\x13\n\x0bminAziAngle\x18\x06 \x01(\x01\x12\x13\n\x0bmaxAziAngle\x18\x07 \x01(\x01\x12\x0f\n\x07minDist\x18\x08 \x01(\x01\x12\x0f\n\x07maxDist\x18\t \x01(\x01\x12\x14\n\x0ctaskDuration\x18\n \x01(\x01\x42\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_site_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_RETSITEELEMENT_PARAMSENTRY._options = None
_RETSITEELEMENT_PARAMSENTRY._serialized_options = b'8\001'
_RETSITEELEMENT_EXTENDENTRY._options = None
_RETSITEELEMENT_EXTENDENTRY._serialized_options = b'8\001'
_RETSITEELEMENT._serialized_start=68
_RETSITEELEMENT._serialized_end=504
_RETSITEELEMENT_PARAMSENTRY._serialized_start=412
_RETSITEELEMENT_PARAMSENTRY._serialized_end=457
_RETSITEELEMENT_EXTENDENTRY._serialized_start=459
_RETSITEELEMENT_EXTENDENTRY._serialized_end=504
_SITELIST._serialized_start=506
_SITELIST._serialized_end=566
_SITEUPDATE._serialized_start=569
_SITEUPDATE._serialized_end=829
_SITEPARAMUPDATE._serialized_start=832
_SITEPARAMUPDATE._serialized_end=1031
# @@protoc_insertion_point(module_scope)
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-system.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10mod-system.proto\"\xc6\x01\n\x15RetMoreSettingElement\x12\x0f\n\x07\x64\x65\x66\x61ult\x18\x01 \x01(\t\x12\x1c\n\x07setting\x18\x02 \x01(\x0b\x32\x0b.DataParams\x12\x1d\n\x08\x64\x61taSave\x18\x03 \x03(\x0b\x32\x0b.DataParams\x12\x1c\n\x07tleLoad\x18\x04 \x01(\x0b\x32\x0b.DataParams\x12\"\n\rforecastParam\x18\x05 \x03(\x0b\x32\x0b.DataParams\x12\x1d\n\x08taskAuto\x18\x06 \x03(\x0b\x32\x0b.DataParams\"d\n\nDataParams\x12\'\n\x06params\x18\x01 \x03(\x0b\x32\x17.DataParams.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x1f\n\x0eMoreSettingSet\x12\r\n\x05token\x18\x01 \x01(\x05\"\xa1\x01\n\x12MoreSettingDataSet\x12\r\n\x05token\x18\x01 \x01(\x05\x12\n\n\x02no\x18\x02 \x01(\t\x12\x10\n\x08\x64\x61taType\x18\x03 \x01(\t\x12\x0e\n\x06hostIP\x18\x04 \x01(\t\x12\x10\n\x08hostPort\x18\x05 \x01(\x05\x12\x0e\n\x06userID\x18\x06 \x01(\t\x12\x0b\n\x03pwd\x18\x07 \x01(\t\x12\x11\n\tdirectory\x18\x08 \x01(\t\x12\x0c\n\x04size\x18\t \x01(\x05\"/\n\x12MoreSettingDataDel\x12\r\n\x05token\x18\x01 \x01(\x05\x12\n\n\x02no\x18\x02 \x01(\t\"H\n\x0eMoreSettingGet\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x17\n\x07labelId\x18\x03 \x01(\x0e\x32\x06.Label\"O\n\x15MoreSettingGetDefault\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x17\n\x07labelId\x18\x03 \x01(\x0e\x32\x06.Label\"S\n\x19MoreSettingRestoreDefault\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x17\n\x07labelId\x18\x03 \x01(\x0e\x32\x06.Label*\x86\x01\n\x05Label\x12\x11\n\rLabel_Default\x10\x00\x12\x16\n\x12Label_TaskForecast\x10\x01\x12\x12\n\x0eLabel_DataSave\x10\x02\x12\x11\n\rLabel_TleLoad\x10\x03\x12\x17\n\x13Label_ForecastParam\x10\x04\x12\x12\n\x0eLabel_TaskAuto\x10\x05\x42\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_system_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_DATAPARAMS_PARAMSENTRY._options = None
_DATAPARAMS_PARAMSENTRY._serialized_options = b'8\001'
_LABEL._serialized_start=810
_LABEL._serialized_end=944
_RETMORESETTINGELEMENT._serialized_start=21
_RETMORESETTINGELEMENT._serialized_end=219
_DATAPARAMS._serialized_start=221
_DATAPARAMS._serialized_end=321
_DATAPARAMS_PARAMSENTRY._serialized_start=276
_DATAPARAMS_PARAMSENTRY._serialized_end=321
_MORESETTINGSET._serialized_start=323
_MORESETTINGSET._serialized_end=354
_MORESETTINGDATASET._serialized_start=357
_MORESETTINGDATASET._serialized_end=518
_MORESETTINGDATADEL._serialized_start=520
_MORESETTINGDATADEL._serialized_end=567
_MORESETTINGGET._serialized_start=569
_MORESETTINGGET._serialized_end=641
_MORESETTINGGETDEFAULT._serialized_start=643
_MORESETTINGGETDEFAULT._serialized_end=722
_MORESETTINGRESTOREDEFAULT._serialized_start=724
_MORESETTINGRESTOREDEFAULT._serialized_end=807
# @@protoc_insertion_point(module_scope)
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-task-exec.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
import mod_task_pb2 as mod__task__pb2
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13mod-task-exec.proto\x1a\x0emod-task.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xa5\x02\n\x12RetTaskExecElement\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x1d\n\x04task\x18\x02 \x01(\x0b\x32\x0f.RetTaskElement\x12+\n\x07startDt\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12)\n\x05\x65ndDt\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12/\n\x06\x65xtend\x18\x05 \x03(\x0b\x32\x1f.RetTaskExecElement.ExtendEntry\x12,\n\x08\x63reateDt\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a-\n\x0b\x45xtendEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x97\x01\n\x0cTaskExecList\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x12\n\ncodeSearch\x18\x02 \x01(\t\x12\x10\n\x08noSearch\x18\x03 \x01(\t\x12)\n\x05start\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x03\x65nd\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xa1\x01\n\x16TaskExecAnalysisResult\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x12\n\ncodeSearch\x18\x03 \x01(\t\x12\x10\n\x08noSearch\x18\x04 \x01(\t\x12)\n\x05start\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x03\x65nd\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_task_exec_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_RETTASKEXECELEMENT_EXTENDENTRY._options = None
_RETTASKEXECELEMENT_EXTENDENTRY._serialized_options = b'8\001'
_RETTASKEXECELEMENT._serialized_start=73
_RETTASKEXECELEMENT._serialized_end=366
_RETTASKEXECELEMENT_EXTENDENTRY._serialized_start=321
_RETTASKEXECELEMENT_EXTENDENTRY._serialized_end=366
_TASKEXECLIST._serialized_start=369
_TASKEXECLIST._serialized_end=520
_TASKEXECANALYSISRESULT._serialized_start=523
_TASKEXECANALYSISRESULT._serialized_end=684
# @@protoc_insertion_point(module_scope)
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-task.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
import mod_satellite_pb2 as mod__satellite__pb2
import mod_site_pb2 as mod__site__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0emod-task.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x13mod-satellite.proto\x1a\x0emod-site.proto\"\xdb\x05\n\x0eRetTaskElement\x12\n\n\x02id\x18\x01 \x01(\t\x12\n\n\x02no\x18\x02 \x01(\t\x12\r\n\x05norad\x18\x03 \x01(\t\x12\'\n\tsatellite\x18\x04 \x01(\x0b\x32\x14.RetSatelliteElement\x12\x0e\n\x06siteNo\x18\x05 \x01(\t\x12\x1d\n\x04site\x18\x06 \x01(\x0b\x32\x0f.RetSiteElement\x12\x0c\n\x04type\x18\x07 \x01(\t\x12\x19\n\x05grade\x18\x08 \x01(\x0e\x32\n.TaskGrade\x12\x1b\n\x06status\x18\t \x01(\x0e\x32\x0b.TaskStatus\x12)\n\x05genDt\x18\n \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12+\n\x07startDt\x18\x0b \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12)\n\x05\x65ndDt\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\rstartAziAngle\x18\r \x01(\x01\x12\x13\n\x0b\x65ndAziAngle\x18\x0e \x01(\x01\x12\x15\n\rstartEleAngle\x18\x0f \x01(\x01\x12\x13\n\x0bmaxEleAngle\x18\x10 \x01(\x01\x12\x0e\n\x06\x63ircle\x18\x11 \x01(\x05\x12\x0f\n\x07minDist\x18\x12 \x01(\x01\x12\x0f\n\x07maxDist\x18\x13 \x01(\x01\x12\r\n\x05slice\x18\x14 \x01(\x05\x12+\n\x06\x65xtend\x18\x15 \x03(\x0b\x32\x1b.RetTaskElement.ExtendEntry\x12%\n\x03res\x18\x16 \x03(\x0b\x32\x18.RetTaskElement.ResEntry\x12\x0b\n\x03off\x18\x17 \x01(\x08\x12,\n\x08\x63reateDt\x18\x18 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a-\n\x0b\x45xtendEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a*\n\x08ResEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe0\x01\n\x08TaskList\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12 \n\x0bstatusArray\x18\x03 \x03(\x0e\x32\x0b.TaskStatus\x12\x12\n\ncodeSearch\x18\x04 \x01(\t\x12\x10\n\x08noSearch\x18\x05 \x01(\t\x12\x19\n\x05grade\x18\x06 \x01(\x0e\x32\n.TaskGrade\x12)\n\x05start\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x03\x65nd\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xda\x01\n\x0cTaskForecast\x12\r\n\x05token\x18\x01 \x01(\x05\x12(\n\x0c\x66orecastList\x18\x02 \x03(\x0b\x32\x12.SiteSatelliteList\x12\r\n\x05slice\x18\x03 \x01(\x01\x12\x13\n\x0bminEleAngle\x18\x04 \x01(\x01\x12)\n\x05start\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\x03\x65nd\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x19\n\x05grade\x18\x07 \x01(\x0e\x32\n.TaskGrade\"E\n\x11SiteSatelliteList\x12\x0e\n\x06siteNo\x18\x01 \x01(\t\x12\x0c\n\x04tles\x18\x02 \x01(\t\x12\x12\n\nnoradArray\x18\x03 \x03(\t\"#\n\x12RetForecastOneOver\x12\r\n\x05norad\x18\x01 \x01(\t\"L\n\x08TaskPlan\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12!\n\x08taskList\x18\x03 \x03(\x0b\x32\x0f.RetTaskElement\"\x9e\x01\n\x12TaskHandleConflict\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x1f\n\x08\x63onflict\x18\x03 \x01(\x0e\x32\r.ConflictType\x12\x11\n\tleastTime\x18\x04 \x01(\x03\x12\x12\n\nswitchTime\x18\x05 \x01(\x03\x12!\n\x08taskList\x18\x06 \x03(\x0b\x32\x0f.RetTaskElement\"b\n\nTaskIssued\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x12\n\nswitchTime\x18\x03 \x01(\x05\x12!\n\x08taskList\x18\x04 \x03(\x0b\x32\x0f.RetTaskElement\";\n\tTaskPause\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x0f\n\x07idArray\x18\x03 \x03(\t\">\n\x0cTaskRecovery\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x0f\n\x07idArray\x18\x03 \x03(\t\"9\n\x07TaskDel\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x0f\n\x07idArray\x18\x03 \x03(\t\":\n\x0bTaskConfirm\x12\x1b\n\x07operate\x18\x01 \x01(\x0e\x32\n.Operation\x12\x0e\n\x06taskId\x18\x02 \x01(\t\"=\n\x0eRetTaskConfirm\x12\x1b\n\x07operate\x18\x01 \x01(\x0e\x32\n.Operation\x12\x0e\n\x06taskId\x18\x02 \x01(\t\"\x85\x01\n\x0cRetTaskIndex\x12%\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x17.RetTaskIndex.DataEntry\x12!\n\x08taskList\x18\x02 \x03(\x0b\x32\x0f.RetTaskElement\x1a+\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf5\x01\n\x14TaskForecastParamSet\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\r\n\x05slice\x18\x03 \x01(\x01\x12\x0f\n\x07maxDist\x18\x04 \x01(\x01\x12\x0f\n\x07minDist\x18\x05 \x01(\x01\x12\x13\n\x0bmaxAziAngle\x18\x06 \x01(\x01\x12\x13\n\x0bminAziAngle\x18\x07 \x01(\x01\x12\x13\n\x0bmaxEleAngle\x18\x08 \x01(\x01\x12\x13\n\x0bminEleAngle\x18\t \x01(\x01\x12\x11\n\tpointStep\x18\n \x01(\x05\x12\x15\n\rpointDuration\x18\x0b \x01(\x05\x12\x0f\n\x07\x64\x61tPath\x18\x0c \x01(\t\"\x8d\x02\n\x0bTaskAutoSet\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0e\n\x06siteNo\x18\x02 \x01(\t\x12\x14\n\x0c\x61utoStartHMS\x18\x03 \x01(\t\x12\x12\n\nautoEndHMS\x18\x04 \x01(\t\x12\x15\n\rautoFrequency\x18\x05 \x01(\x05\x12\x1e\n\x16taskAutoStrategyStatus\x18\x06 \x01(\x08\x12\x1f\n\x08\x63onflict\x18\x07 \x01(\x0e\x32\r.ConflictType\x12\x1e\n\x16\x63onflictStrategyStatus\x18\x08 \x01(\x08\x12\x11\n\tleastTime\x18\t \x01(\x03\x12\x12\n\nswitchTime\x18\n \x01(\x03\x12\x16\n\x0e\x63ollectionTime\x18\x0b \x01(\x03\"*\n\rTaskDetailDat\x12\r\n\x05token\x18\x01 \x01(\x05\x12\n\n\x02id\x18\x02 \x01(\t\"]\n\nRetTaskDat\x12&\n\x02\x64t\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\r\n\x05range\x18\x02 \x01(\x01\x12\x0b\n\x03\x65le\x18\x03 \x01(\x01\x12\x0b\n\x03\x61zi\x18\x04 \x01(\x01\",\n\x0fTaskDetailPoint\x12\r\n\x05token\x18\x01 \x01(\x05\x12\n\n\x02id\x18\x02 \x01(\t\"`\n\x0cRetTaskPoint\x12&\n\x02\x64t\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0b\n\x03lat\x18\x05 \x01(\t\x12\x0b\n\x03lon\x18\x06 \x01(\t\x12\x0e\n\x06height\x18\x07 \x01(\t*\x83\x01\n\nTaskStatus\x12\x0e\n\nStatusInit\x10\x00\x12\x0e\n\nStatusUndo\x10\x01\x12\x11\n\rStatusWaiting\x10\x02\x12\x0f\n\x0bStatusDoing\x10\x03\x12\x0e\n\nStatusDone\x10\x04\x12\x0f\n\x0bStatusPause\x10\x05\x12\x10\n\x0cStatusFailed\x10\n*P\n\tTaskGrade\x12\r\n\tGradeNone\x10\x00\x12\x0f\n\x0bGradeNormal\x10\x01\x12\x12\n\x0eGradeImportant\x10\x02\x12\x0f\n\x0bGradeUrgent\x10\x03*n\n\x0c\x43onflictType\x12\x18\n\x14\x43onflictType_Default\x10\x00\x12\x13\n\x0f\x43onflictType_Dt\x10\x01\x12\x14\n\x10\x43onflictType_Ele\x10\x02\x12\x19\n\x15\x43onflictType_Priority\x10\x03*s\n\tOperation\x12\x14\n\x10OperationDefault\x10\x00\x12\x13\n\x0fOperationIssued\x10\x01\x12\x12\n\x0eOperationPause\x10\x02\x12\x15\n\x11OperationRecovery\x10\x03\x12\x10\n\x0cOperationDel\x10\x04\x42\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_task_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_RETTASKELEMENT_EXTENDENTRY._options = None
_RETTASKELEMENT_EXTENDENTRY._serialized_options = b'8\001'
_RETTASKELEMENT_RESENTRY._options = None
_RETTASKELEMENT_RESENTRY._serialized_options = b'8\001'
_RETTASKINDEX_DATAENTRY._options = None
_RETTASKINDEX_DATAENTRY._serialized_options = b'8\001'
_TASKSTATUS._serialized_start=2964
_TASKSTATUS._serialized_end=3095
_TASKGRADE._serialized_start=3097
_TASKGRADE._serialized_end=3177
_CONFLICTTYPE._serialized_start=3179
_CONFLICTTYPE._serialized_end=3289
_OPERATION._serialized_start=3291
_OPERATION._serialized_end=3406
_RETTASKELEMENT._serialized_start=89
_RETTASKELEMENT._serialized_end=820
_RETTASKELEMENT_EXTENDENTRY._serialized_start=731
_RETTASKELEMENT_EXTENDENTRY._serialized_end=776
_RETTASKELEMENT_RESENTRY._serialized_start=778
_RETTASKELEMENT_RESENTRY._serialized_end=820
_TASKLIST._serialized_start=823
_TASKLIST._serialized_end=1047
_TASKFORECAST._serialized_start=1050
_TASKFORECAST._serialized_end=1268
_SITESATELLITELIST._serialized_start=1270
_SITESATELLITELIST._serialized_end=1339
_RETFORECASTONEOVER._serialized_start=1341
_RETFORECASTONEOVER._serialized_end=1376
_TASKPLAN._serialized_start=1378
_TASKPLAN._serialized_end=1454
_TASKHANDLECONFLICT._serialized_start=1457
_TASKHANDLECONFLICT._serialized_end=1615
_TASKISSUED._serialized_start=1617
_TASKISSUED._serialized_end=1715
_TASKPAUSE._serialized_start=1717
_TASKPAUSE._serialized_end=1776
_TASKRECOVERY._serialized_start=1778
_TASKRECOVERY._serialized_end=1840
_TASKDEL._serialized_start=1842
_TASKDEL._serialized_end=1899
_TASKCONFIRM._serialized_start=1901
_TASKCONFIRM._serialized_end=1959
_RETTASKCONFIRM._serialized_start=1961
_RETTASKCONFIRM._serialized_end=2022
_RETTASKINDEX._serialized_start=2025
_RETTASKINDEX._serialized_end=2158
_RETTASKINDEX_DATAENTRY._serialized_start=2115
_RETTASKINDEX_DATAENTRY._serialized_end=2158
_TASKFORECASTPARAMSET._serialized_start=2161
_TASKFORECASTPARAMSET._serialized_end=2406
_TASKAUTOSET._serialized_start=2409
_TASKAUTOSET._serialized_end=2678
_TASKDETAILDAT._serialized_start=2680
_TASKDETAILDAT._serialized_end=2722
_RETTASKDAT._serialized_start=2724
_RETTASKDAT._serialized_end=2817
_TASKDETAILPOINT._serialized_start=2819
_TASKDETAILPOINT._serialized_end=2863
_RETTASKPOINT._serialized_start=2865
_RETTASKPOINT._serialized_end=2961
# @@protoc_insertion_point(module_scope)
# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: mod-user.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0emod-user.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xf1\x01\n\x13RetAdminUserElement\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x13\n\x04role\x18\x02 \x01(\x0e\x32\x05.Role\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x0b\n\x03pwd\x18\x04 \x01(\t\x12\x0b\n\x03off\x18\x05 \x01(\x05\x12\x30\n\x06\x65xtend\x18\x06 \x03(\x0b\x32 .RetAdminUserElement.ExtendEntry\x12,\n\x08\x63reateDt\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x1a-\n\x0b\x45xtendEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\".\n\x08UserList\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x13\n\x04role\x18\x02 \x01(\x0e\x32\x05.Role\"P\n\nUserCreate\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x0b\n\x03pwd\x18\x02 \x01(\t\x12\x13\n\x04role\x18\x03 \x01(\x0e\x32\x05.Role\x12\x0e\n\x06remark\x18\x04 \x01(\t\"r\n\nUserUpdate\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x0e\n\x06oldPwd\x18\x03 \x01(\t\x12\x0e\n\x06newPwd\x18\x04 \x01(\t\x12\x13\n\x04role\x18\x05 \x01(\x0e\x32\x05.Role\x12\x0e\n\x06remark\x18\x06 \x01(\t\")\n\x07UserDel\x12\r\n\x05token\x18\x01 \x01(\x05\x12\x0f\n\x07idArray\x18\x02 \x03(\x05\"&\n\x05Login\x12\x10\n\x08username\x18\x01 \x01(\t\x12\x0b\n\x03pwd\x18\x02 \x01(\t*6\n\x04Role\x12\r\n\tUser_None\x10\x00\x12\x0e\n\nUser_Admin\x10\x01\x12\x0f\n\x0bUser_Normal\x10\x02\x42\x0cZ\n../protogob\x06proto3')
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'mod_user_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'Z\n../protogo'
_RETADMINUSERELEMENT_EXTENDENTRY._options = None
_RETADMINUSERELEMENT_EXTENDENTRY._serialized_options = b'8\001'
_ROLE._serialized_start=624
_ROLE._serialized_end=678
_RETADMINUSERELEMENT._serialized_start=52
_RETADMINUSERELEMENT._serialized_end=293
_RETADMINUSERELEMENT_EXTENDENTRY._serialized_start=248
_RETADMINUSERELEMENT_EXTENDENTRY._serialized_end=293
_USERLIST._serialized_start=295
_USERLIST._serialized_end=341
_USERCREATE._serialized_start=343
_USERCREATE._serialized_end=423
_USERUPDATE._serialized_start=425
_USERUPDATE._serialized_end=539
_USERDEL._serialized_start=541
_USERDEL._serialized_end=582
_LOGIN._serialized_start=584
_LOGIN._serialized_end=622
# @@protoc_insertion_point(module_scope)
import paho.mqtt.client as mqtt import paho.mqtt.client as mqtt
from django.conf import settings from django.conf import settings
from .utils import parse_proto from .utils import parse_proto
from .signals import mqtt_message_received from chat.consumers import send_websocket_message
from django.core.cache import cache
from device_data_op.models import TableXproAllDevinfo
# *******************************************************
from channels.layers import get_channel_layer, channel_layers
from asgiref.sync import async_to_sync
def send_websocket_message(message, group_name="chat_mqtt"):
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
group_name,
{"type": "chat.message", "message": message}
)
# *******************************************************
def on_connect(mqtt_client, userdata, flags, rc): def on_connect(mqtt_client, userdata, flags, rc):
if rc == 0: if rc == 0:
print('Connected successfully') print('Connected successfully')
mqtt_client.subscribe('django/mqtt') mqtt_client.subscribe([('/1/0/0/6', 2),
('/1/1/0/6', 2),
('/1/1/1/6', 2)])
else: else:
print('Bad connection. Code:', rc) print('Bad connection. Code:', rc)
...@@ -29,9 +20,34 @@ def on_message(mqtt_client, userdata, msg): ...@@ -29,9 +20,34 @@ def on_message(mqtt_client, userdata, msg):
# 接收mqtt消息的代码 # 接收mqtt消息的代码
# mqtt_message_received.send(sender=None, message=msg.payload) # mqtt_message_received.send(sender=None, message=msg.payload)
# print(f'Received message on topic: {msg.topic} with payload: {msg.payload}') # print(f'Received message on topic: {msg.topic} with payload: {msg.payload}')
# data = parse_proto(msg.payload) data, device_name = parse_proto(msg.payload)
data = msg.payload.decode('utf-8') # data = msg.payload.decode('utf-8')
print(f'Received message on topic: {msg.topic} with payload: {data}')
send_message(data, device_name)
def send_message(data: dict, device_name: str):
"""
发送 websocket 消息
TODO: 通过不同的 port 发向不同的 group name
"""
send_websocket_message(data) send_websocket_message(data)
dev_info = TableXproAllDevinfo.objects.filter(dev_name=device_name).first()
if "TCP" in dev_info.comunitate_mode.upper():
name = dev_info.tcp_port
elif "UDP" in dev_info.comunitate_mode.upper():
name = dev_info.udp_port_src
print(name)
send_websocket_message(data, group_name=f'chat_{name}')
# cmds = data.get('CMDS')
# if cmds is None:
# return
# if cmds[0] == '$':
# send_websocket_message(data, group_name="chat_acu7m5")
# else:
# send_websocket_message(data, group_name="chat_hwf")
client = mqtt.Client() client = mqtt.Client()
...@@ -44,4 +60,4 @@ client.connect( ...@@ -44,4 +60,4 @@ client.connect(
keepalive=settings.MQTT_KEEPALIVE keepalive=settings.MQTT_KEEPALIVE
) )
print('start mqtt') print('start mqtt')
client.loop_start() client.loop_start()
\ No newline at end of file
import django.dispatch
mqtt_message_received = django.dispatch.Signal(providing_args=['message'])
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, re_path
from . import views from . import views
urlpatterns = [ urlpatterns = [
path('', views.index, name='index'), re_path(r'publish/$', views.publish_message, name='publish'),
path('publish/', views.publish_message, name='publish'), re_path(r'^protocol/(?P<protocol_name>.+)/$', views.cmd_list),
] re_path(r'^cmd/(?P<cmd_name>.+)/$', views.cmd_fields_list),
\ No newline at end of file ]
import json import json
from .auto_generate_python import TDSCmd_pb2, OAM_datastruct_pb2 from .auto_generate_python import TDSCmd_pb2, OAM_datastruct_pb2, Device_datastruct_pb2
from .auto_generate_python.Device_datastruct_pb2 import TDSXDC_Device_cmd
from google.protobuf.json_format import MessageToJson from google.protobuf.json_format import MessageToJson
def parse_proto(data: bytes) -> str: def parse_proto(data: bytes) -> (dict, str):
"""
解析发送过来的 protobuf
:param data: protobuf 的二进制流
:return:
dict: 解析完成的 protobuf
str: 设备名
"""
cmd = TDSCmd_pb2.TDSCmd() cmd = TDSCmd_pb2.TDSCmd()
cmd.ParseFromString(data) cmd.ParseFromString(data)
data = MessageToJson(cmd,
including_default_value_fields=True,
preserving_proto_field_name=True)
return json.dumps(json.loads(data), separators=(',', ':'))
device_cmd = TDSXDC_Device_cmd()
cmd.parameters[0].Unpack(device_cmd)
# data = MessageToJson(device_cmd,
# including_default_value_fields=True,
# preserving_proto_field_name=True)
# device_cmd_dict = json.loads(data)
# print(device_cmd_dict)
data = {item.fieldName: item.value
for item in device_cmd.fields}
# return json.dumps(json.loads(data), separators=(',', ':'))
return data, device_cmd.dev_name
def compose_protobuf_message(param: dict, dst_suid: int) -> bytes:
cmd = TDSCmd_pb2.TDSCmd()
cmd.interface_id = TDSCmd_pb2.IID_Device_Xpro_TX_cmd
cmd.dst_suid = dst_suid
cmd.src_suid = 0x1116_0000
cmd.priority = 100
cmd.ts.GetCurrentTime()
parameters = TDSXDC_Device_cmd()
parameters.DeviceID = param['device_id']
parameters.cmd_name = param['cmd_name']
for param_field in param['fields']:
field = parameters.fields.add()
field.fieldName = param_field['fieldname']
field.value = param_field['value']
cmd.parameters.add().Pack(parameters)
data = cmd.SerializeToString()
return data
from django.http import JsonResponse, HttpResponse from rest_framework import status
from django.middleware.csrf import get_token from rest_framework.response import Response
from django.shortcuts import render, redirect from rest_framework.decorators import api_view
from django.dispatch import receiver from .utils import compose_protobuf_message
from device_data_op.models import (TableDevCmdNamePoll,
TableAllDevCmdDefine,
TableXproAllDevinfo)
from device_data_op.serializers import (TableDevCmdNamePollSerializer,
TableAllDevCmdDefineSerializer)
from mqtt.mqtt import client as mqtt_client from mqtt.mqtt import client as mqtt_client
from mqtt.signals import mqtt_message_received
MESSAGE = b""
@api_view(['GET'])
def cmd_list(request, protocol_name: str):
"""
返回传入协议的所有发出指令名
"""
cmd_lists = TableDevCmdNamePoll.objects.filter(protocol_name=protocol_name).all()
serializer = TableDevCmdNamePollSerializer(cmd_lists, many=True)
ret_data = [data['cmd_name'] for data in serializer.data
if data['cmd_type'] == 'TX']
return Response(data=ret_data, status=status.HTTP_200_OK)
@api_view(['GET'])
def cmd_fields_list(request, cmd_name: str):
"""
返回传入指令所需要的字段
"""
cmd_fields = TableAllDevCmdDefine.objects.filter(cmd_name=cmd_name).all()
serializer = TableAllDevCmdDefineSerializer(cmd_fields, many=True)
ret_data = [data['fieldname'] for data in serializer.data]
return Response(data=ret_data, status=status.HTTP_200_OK)
@api_view(['POST'])
def publish_message(request): def publish_message(request):
# request_data = json.loads(request.body) """
topic = request.POST['topic'] 发送指令到 device
msg = request.POST['msg']
rc, mid = mqtt_client.publish(topic, msg)
return JsonResponse({'code': rc})
:param request:
{
"type": "device",
"station_id": "XX1",
"device_id": 1,
"cmd_name": "HY_ACU7M5_PositionSet",
"fields": [
{
"fieldname": "Xaxis",
"value": "120"
},
{
"fieldname": "Yaxis",
"value": "60"
}
]
}
"""
def index(request): if request.data['station_id'] == "XX1":
global MESSAGE topic = "/1/1/1/3"
token = get_token(request) dst_suid = 0x1113_0000
return render(request, 'index.html', {'token': token, 'msg': MESSAGE.decode('utf-8')}) elif request.data['station_id'] == "XX0":
topic = "/1/1/0/3"
dst_suid = 0x1103_0000
else:
return Response(status=status.HTTP_400_BAD_REQUEST)
message = compose_protobuf_message(request.data, dst_suid)
@receiver(mqtt_message_received) rc, mid = mqtt_client.publish(topic, message)
def show_message(sender, **kwargs): return Response(status=status.HTTP_200_OK)
global MESSAGE
print('Received message:', kwargs['message'])
MESSAGE = kwargs['message']
This diff is collapsed. Click to expand it.
# Generated by Django 3.2.19 on 2023-08-21 01:52
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('protocol_version_manage', '0002_test'),
]
operations = [
migrations.RenameModel(
old_name='AllProtocolChangeLog',
new_name='AllProtocolVersion',
),
migrations.DeleteModel(
name='Test',
),
migrations.RenameField(
model_name='allprotocolversion',
old_name='log',
new_name='vesrions_path',
),
migrations.AlterModelTable(
name='allprotocolversion',
table='AllProtocolVersion',
),
]
# Generated by Django 3.2.19 on 2023-08-21 02:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('protocol_version_manage', '0003_auto_20230821_0952'),
]
operations = [
migrations.RemoveField(
model_name='allprotocolversion',
name='id',
),
migrations.RemoveField(
model_name='currentdevversion',
name='id',
),
migrations.AlterField(
model_name='allprotocolversion',
name='protocol_name',
field=models.TextField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='currentdevversion',
name='protocol_name',
field=models.TextField(primary_key=True, serialize=False),
),
]
# Generated by Django 3.2.19 on 2023-08-21 05:22
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('protocol_version_manage', '0004_auto_20230821_1019'),
]
operations = [
migrations.RenameField(
model_name='allprotocolversion',
old_name='vesrions_path',
new_name='version_paths',
),
]
...@@ -22,11 +22,41 @@ class AllDevCmdDefineAndVersion(models.Model): ...@@ -22,11 +22,41 @@ class AllDevCmdDefineAndVersion(models.Model):
lua_script_out = models.TextField() # Field name made lowercase. lua_script_out = models.TextField() # Field name made lowercase.
version = models.TextField() version = models.TextField()
def __eq__(self, __value: object) -> bool:
if not isinstance(__value, AllDevCmdDefineAndVersion):
return False
if (self.cmd_name == __value.cmd_name and
self.cmd_type == __value.cmd_type and
self.fieldindex == __value.fieldindex and
self.fieldname == __value.fieldname and
self.fieldsize == __value.fieldsize and
self.value == __value.value and
self.minvalue == __value.minvalue and
self.maxvalue == __value.maxvalue and
self.datatype == __value.datatype and
self.operation_in == __value.operation_in and
self.operation_in_num == __value.operation_in_num and
self.operation_out == __value.operation_out and
self.operation_out_num == __value.operation_out_num and
self.operabo_in == __value.operabo_in and
self.operabo_out == __value.operabo_out and
self.lua_script_in == __value.lua_script_in and
self.lua_script_out == __value.lua_script_out):
return True
return False
class Meta: class Meta:
db_table = 'AllDevCmdDefineAndVersion' db_table = 'AllDevCmdDefineAndVersion'
class AllProtocolDefinAndVersion(models.Model): class AllProtocolDefinAndVersion(models.Model):
"""
version 格式
版本号的列表
["20230708", "20230709", "20230710"]
"""
id = models.AutoField(primary_key=True) # Field name made lowercase. id = models.AutoField(primary_key=True) # Field name made lowercase.
protocol_name = models.TextField() # Field name made lowercase. protocol_name = models.TextField() # Field name made lowercase.
cmd_name = models.TextField() # Field name made lowercase. cmd_name = models.TextField() # Field name made lowercase.
...@@ -36,13 +66,26 @@ class AllProtocolDefinAndVersion(models.Model): ...@@ -36,13 +66,26 @@ class AllProtocolDefinAndVersion(models.Model):
cmd_explain = models.TextField() # Field name made lowercase. cmd_explain = models.TextField() # Field name made lowercase.
version = models.TextField() version = models.TextField()
def __eq__(self, __value: object) -> bool:
if not isinstance(__value, AllProtocolDefinAndVersion):
return False
if (self.protocol_name == __value.protocol_name and
self.cmd_name == __value.cmd_name and
self.cmd_type == __value.cmd_type and
self.encode == __value.encode and
self.timing_cmd_cycle_period == __value.timing_cmd_cycle_period and
self.cmd_explain == __value.cmd_explain):
return True
return False
class Meta: class Meta:
db_table = 'AllProtocolDefinAndVersion' db_table = 'AllProtocolDefinAndVersion'
class CurrentDevVersion(models.Model): class CurrentDevVersion(models.Model):
id = models.AutoField(primary_key=True) # Field name made lowercase. protocol_name = models.TextField(primary_key=True) # Field name made lowercase.
protocol_name = models.TextField() # Field name made lowercase.
version = models.TextField() version = models.TextField()
class Meta: class Meta:
...@@ -50,9 +93,16 @@ class CurrentDevVersion(models.Model): ...@@ -50,9 +93,16 @@ class CurrentDevVersion(models.Model):
class AllProtocolVersion(models.Model): class AllProtocolVersion(models.Model):
id = models.AutoField(primary_key=True) """
protocol_name = models.TextField() versions_path 格式
vesrions_path = models.TextField() 版本号:版本原始文件所在的路径
{
"vesrion": "20230708",
"path": "/path/to/file"
}
"""
protocol_name = models.TextField(primary_key=True)
version_paths = models.TextField()
class Meta: class Meta:
db_table = 'AllProtocolVersion' db_table = 'AllProtocolVersion'
......
from .models import (CurrentDevVersion, AllDevCmdDefineAndVersion,
AllProtocolDefinAndVersion, AllProtocolVersion)
from rest_framework import serializers
class AllProtocolVersionSerializer(serializers.ModelSerializer):
class Meta:
model = AllProtocolVersion
fields = '__all__'
class AllDevCmdDefineAndVersionSerializer(serializers.ModelSerializer):
class Meta:
model = AllDevCmdDefineAndVersion
fields = '__all__'
class AllProtocolDefinAndVersionSerializer(serializers.ModelSerializer):
class Meta:
model = AllProtocolDefinAndVersion
fields = '__all__'
class CurrentDevVersionSerializer(serializers.ModelSerializer):
class Meta:
model = CurrentDevVersion
fields = '__all__'
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^protocol_version_manage/init/$', views.init),
re_path(r'^protocol_version_manage/change_protocol_version/$', views.change_protocol_version),
re_path(r'^protocol_version_manage/add_protocol_version/$', views.add_protocol_version),
re_path(r'^protocol_version_manage/update_protocol_version/$', views.update_protocol_version),
re_path(r'^protocol_version_manage/file_upload/$', views.raw_file_upload),
re_path(r'^protocol_version_manage/file_download/(?P<protocol_name>.+)/(?P<version>.+)/$',
views.raw_file_download),
re_path(r'^all_protocol_version/$', views.AllProtocolVersionViewSet.as_view({'get': 'list'})),
]
from django.shortcuts import render import os
from rest_framework.decorators import api_view import json
import urllib.parse
from django.conf import settings
from django.http import FileResponse
from rest_framework.decorators import api_view, parser_classes
from rest_framework.parsers import MultiPartParser
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
# Create your views here. from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
from .models import (AllDevCmdDefineAndVersion, AllProtocolDefinAndVersion,
AllProtocolVersion, CurrentDevVersion)
from .serializers import (AllDevCmdDefineAndVersionSerializer, AllProtocolDefinAndVersionSerializer,
AllProtocolVersionSerializer, CurrentDevVersionSerializer)
from .services import (init_protocol_version_manage, update_device_protocol_and_cmds,
add_protocol_version_manage, update_protocol_version_manage)
@api_view(['POST'])
def init(request):
"""
初始化协议版本信息(用的很少,大概)
"""
protocol_name = request.data.get('protocol_name')
if protocol_name is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
all_protocol_version = AllProtocolVersion.objects.filter(protocol_name=protocol_name).first()
try:
if all_protocol_version is None:
# 该协议为空,即没有协议版本信息
init_protocol_version_manage(protocol_name)
all_protocol_version = AllProtocolVersion.objects.filter(protocol_name=protocol_name).first()
# 该协议不为空,即有协议版本信息
current_protocol_version = CurrentDevVersion.objects.filter(protocol_name=protocol_name).first()
data = json.loads(all_protocol_version.version_paths)
res_data = {
'version_paths': data,
'current_version': current_protocol_version.version
}
except:
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return Response(data=res_data, status=status.HTTP_200_OK)
@api_view(['POST'])
def change_protocol_version(request):
version = request.data.get('version')
protocol_name = request.data.get('protocol_name')
if protocol_name is None or version is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
return update_device_protocol_and_cmds(protocol_name, version)
@api_view(['POST'])
def add_protocol_version(request):
version = request.data.get('version')
protocol_name = request.data.get('protocol_name')
cmds = request.data.get('cmds')
if (protocol_name is None or
cmds is None or
version is None):
return Response(status=status.HTTP_400_BAD_REQUEST)
return add_protocol_version_manage(protocol_name, version, cmds)
@api_view(['POST'])
def update_protocol_version(request):
version = request.data.get('version')
protocol_name = request.data.get('protocol_name')
cmds = request.data.get('cmds')
if (protocol_name is None or
version is None or
cmds is None):
return Response(status=status.HTTP_400_BAD_REQUEST)
return update_protocol_version_manage(protocol_name, version, cmds)
class AllProtocolVersionViewSet(GenericViewSet, ListModelMixin):
queryset = AllProtocolVersion.objects.all()
serializer_class = AllProtocolVersionSerializer
@api_view(['POST'])
@parser_classes([MultiPartParser])
def raw_file_upload(request):
file_obj = request.FILES.get('file')
protocol_name = request.data.get('protocol_name')
version = request.data.get('version')
if protocol_name is None or version is None:
return Response(status=status.HTTP_400_BAD_REQUEST)
# 构建文件夹路径和文件路径
folder_path = os.path.join(settings.BASE_DIR, 'protocol_raw_files', protocol_name, version)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
file_path = os.path.join(folder_path, file_obj.name)
# 更新协议版本信息,将文件路径保存下来
protocol_versions = AllProtocolVersion.objects.filter(protocol_name=protocol_name).first()
version_path_list = json.loads(protocol_versions.version_paths)
for version_path in version_path_list:
if version_path['version'] == version:
if version_path.get('path', None) is not None:
try:
os.remove(version_path['path'])
except Exception as e:
print(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
version_path['path'] = file_path
break
# 将上传来的文件保存下来
try:
with open(file_path, 'wb') as f:
for chunk in file_obj.chunks():
f.write(chunk)
except Exception as e:
print(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
# 将路径保存下来
protocol_versions.version_paths = json.dumps(version_path_list)
protocol_versions.save()
return Response(data={'path': file_path}, status=status.HTTP_200_OK)
@api_view(['GET'])
@parser_classes([MultiPartParser])
def raw_file_download(request, protocol_name, version):
try:
protocol_versions = AllProtocolVersion.objects.filter(protocol_name=protocol_name).first()
for version_path in json.loads(protocol_versions.version_paths):
if version_path['version'] == version:
file_path = version_path['path']
break
file_name = urllib.parse.quote(os.path.basename(file_path))
response = FileResponse(open(file_path, 'rb'))
except Exception as e:
print(e)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
response['Content-Disposition'] = 'attachment; filename=' + file_name
response['Content-Type'] = 'multipart/form-data'
response['filename'] = file_name
return response
[tool.poetry]
name = "vue-django"
version = "0.1.0"
description = ""
authors = ["ZutJoe <zhout50@163.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.9"
django = "3.2.19"
djangorestframework = "^3.14.0"
channels = {extras = ["daphne"], version = "^4.0.0"}
drf-yasg = "^1.21.7"
paho-mqtt = "^1.6.1"
protobuf = "3.20.1"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
...@@ -35,6 +35,7 @@ INSTALLED_APPS = [ ...@@ -35,6 +35,7 @@ INSTALLED_APPS = [
'chat', 'chat',
'device_data_op', 'device_data_op',
'protocol_version_manage', 'protocol_version_manage',
'device_communication',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
...@@ -51,7 +52,6 @@ INSTALLED_APPS = [ ...@@ -51,7 +52,6 @@ INSTALLED_APPS = [
MIDDLEWARE = [ MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
...@@ -145,12 +145,14 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' ...@@ -145,12 +145,14 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
ASGI_APPLICATION = 'vue_django.asgi.application' ASGI_APPLICATION = 'vue_django.asgi.application'
MQTT_SERVER = '192.168.0.89' # mqtt 设置
MQTT_SERVER = '192.168.0.176'
MQTT_PORT = 1883 MQTT_PORT = 1883
MQTT_KEEPALIVE = 60 MQTT_KEEPALIVE = 60
MQTT_USER = "" MQTT_USER = ""
MQTT_PASSWORD = "" MQTT_PASSWORD = ""
# channel 的 websocket 设置
CHANNEL_LAYERS = { CHANNEL_LAYERS = {
'default': { 'default': {
'BACKEND': 'channels.layers.InMemoryChannelLayer', 'BACKEND': 'channels.layers.InMemoryChannelLayer',
...@@ -175,5 +177,5 @@ CORS_ALLOW_HEADERS = [ ...@@ -175,5 +177,5 @@ CORS_ALLOW_HEADERS = [
'token' 'token'
] ]
CORS_ALLOWED_ORIGINS = [ CORS_ALLOWED_ORIGINS = [
"http://localhost:5173", # 您的前端应用地址 "http://127.0.0.1:5173", # 您的前端应用地址
] ]
...@@ -15,7 +15,7 @@ Including another URLconf ...@@ -15,7 +15,7 @@ Including another URLconf
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path, include, re_path from django.urls import path, include, re_path
from .views import index, test from .views import index, test, upload, download
from django.conf import settings from django.conf import settings
from django.views.static import serve from django.views.static import serve
...@@ -35,11 +35,14 @@ schema_view = get_schema_view( ...@@ -35,11 +35,14 @@ schema_view = get_schema_view(
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path("", index), path("", index),
# path("test/", test), path("test/upload/", upload),
path("test/download/", download),
path("mqtt/", include("mqtt.urls")), path("mqtt/", include("mqtt.urls")),
path("chat/", include("chat.urls")), path("chat/", include("chat.urls")),
path("op/", include("device_data_op.urls")), path("op/", include("device_data_op.urls")),
path("api/", include("download_db.urls")), path("api/", include("download_db.urls")),
path("api/", include("protocol_version_manage.urls")),
path("api/", include("device_communication.urls")),
re_path(r'^assets/(?P<path>.*)/$', serve, {'document_root': settings.STATIC_ROOT}), re_path(r'^assets/(?P<path>.*)/$', serve, {'document_root': settings.STATIC_ROOT}),
......
import os
import urllib.parse
from django.conf import settings
from django.http import FileResponse
from django.shortcuts import render from django.shortcuts import render
from rest_framework.decorators import api_view from rest_framework.decorators import api_view, parser_classes
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.parsers import MultiPartParser
from rest_framework import status
def index(request): def index(request):
...@@ -11,3 +19,41 @@ def index(request): ...@@ -11,3 +19,41 @@ def index(request):
def test(request): def test(request):
if request.method == 'GET': if request.method == 'GET':
return Response({"message": "Hello, World!"}) return Response({"message": "Hello, World!"})
@api_view(['POST'])
@parser_classes([MultiPartParser])
def upload(request):
file_obj = request.FILES.get('file')
protocol_name = request.data.get('protocol_name')
version = request.data.get('version')
print(protocol_name)
print(version)
print(file_obj.name)
folder_path = os.path.join(settings.BASE_DIR, 'protocol_raw_files', protocol_name, version)
if not os.path.exists(folder_path):
os.makedirs(folder_path)
with open(f'./protocol_raw_files/{protocol_name}/{version}/{file_obj.name}', 'wb+') as destination:
for chunk in file_obj.chunks():
destination.write(chunk)
return Response(status=status.HTTP_200_OK)
@api_view(['GET'])
def download(request):
protocol_name = request.GET.get('protocol_name')
version = request.GET.get('version')
file_path = os.path.join(settings.BASE_DIR, 'protocol_raw_files', protocol_name, version)
for root, _, files in os.walk(file_path):
file_path = os.path.join(root, files[1])
# 适配中文
file_name = urllib.parse.quote(os.path.basename(file_path))
response = FileResponse(open(file_path, 'rb'))
response['Content-Disposition'] = 'inline; filename=' + file_name
response['Content-Type'] = 'multipart/form-data'
response['filename'] = file_name
return response
return Response(status=status.HTTP_200_OK)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment