Commit 8c324a58 by 周田

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

parent 2030137d
...@@ -2,6 +2,8 @@ import paho.mqtt.client as mqtt ...@@ -2,6 +2,8 @@ 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 chat.consumers import send_websocket_message 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): def on_connect(mqtt_client, userdata, flags, rc):
...@@ -18,25 +20,34 @@ def on_message(mqtt_client, userdata, msg): ...@@ -18,25 +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}') 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 消息 发送 websocket 消息
TODO: 通过不同的 port 发向不同的 group name
""" """
send_websocket_message(data) send_websocket_message(data)
cmds = data.get('CMDS') dev_info = TableXproAllDevinfo.objects.filter(dev_name=device_name).first()
if cmds is None: if "TCP" in dev_info.comunitate_mode.upper():
return name = dev_info.tcp_port
if cmds[0] == '$': elif "UDP" in dev_info.comunitate_mode.upper():
send_websocket_message(data, group_name="chat_acu7m5") name = dev_info.udp_port_src
else: print(name)
send_websocket_message(data, group_name="chat_hwf") 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()
......
...@@ -4,7 +4,14 @@ from .auto_generate_python.Device_datastruct_pb2 import TDSXDC_Device_cmd ...@@ -4,7 +4,14 @@ 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) -> dict: 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)
...@@ -20,7 +27,7 @@ def parse_proto(data: bytes) -> dict: ...@@ -20,7 +27,7 @@ def parse_proto(data: bytes) -> dict:
data = {item.fieldName: item.value data = {item.fieldName: item.value
for item in device_cmd.fields} for item in device_cmd.fields}
# return json.dumps(json.loads(data), separators=(',', ':')) # 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: 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