Commit 8c324a58 by 周田

feat:将设备各项参数的websocket 的 group name 换为 port

parent 2030137d
......@@ -2,6 +2,8 @@ import paho.mqtt.client as mqtt
from django.conf import settings
from .utils import parse_proto
from chat.consumers import send_websocket_message
from django.core.cache import cache
from device_data_op.models import TableXproAllDevinfo
def on_connect(mqtt_client, userdata, flags, rc):
......@@ -18,25 +20,34 @@ def on_message(mqtt_client, userdata, msg):
# 接收mqtt消息的代码
# mqtt_message_received.send(sender=None, message=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')
print(f'Received message on topic: {msg.topic} with payload: {data}')
send_message(data)
send_message(data, device_name)
def send_message(data: dict):
def send_message(data: dict, device_name: str):
"""
发送 websocket 消息
TODO: 通过不同的 port 发向不同的 group name
"""
send_websocket_message(data)
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")
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()
......
......@@ -4,7 +4,14 @@ from .auto_generate_python.Device_datastruct_pb2 import TDSXDC_Device_cmd
from google.protobuf.json_format import MessageToJson
def parse_proto(data: bytes) -> dict:
def parse_proto(data: bytes) -> (dict, str):
"""
解析发送过来的 protobuf
:param data: protobuf 的二进制流
:return:
dict: 解析完成的 protobuf
str: 设备名
"""
cmd = TDSCmd_pb2.TDSCmd()
cmd.ParseFromString(data)
......@@ -20,7 +27,7 @@ def parse_proto(data: bytes) -> dict:
data = {item.fieldName: item.value
for item in device_cmd.fields}
# return json.dumps(json.loads(data), separators=(',', ':'))
return data
return data, device_cmd.dev_name
def compose_protobuf_message(param: dict, dst_suid: int) -> bytes:
......
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