把这段代码转化为python代码(package service import ( "encoding/json" "errors" "fmt" "gin-syudy/api/device/req" "gin-syudy/define" "gin-syudy/models" "gin-syudy/mqtt" "gin-syudy/tools/resp" "gin-syudy/utils" mq "github.com/eclipse/paho.mqtt.golang" "github.com/gin-gonic/gin" "log" "net/http" "strconv" "time" ) // DeviceController 控制设备 // @BasePath /api/v1 // @Description 启动对应设备 // @Tags 启动设备 // @param identity query string false "Identity" // @param controllerId query string false "controllerId" // @param controlState query string false "controlState" // @Success 200 {object} resp.Response "{"code":200,"data":[...]}" // @Failure 502 {object} resp.Response "{"code":502,"data":[...]}" // @Router /api/v1/device/start [Post] func DeviceController(c *gin.Context) { device := new(models.DeviceBasic) write := new(mqtt.Write) device.Identity = c.Query("identity") id, _ := strconv.Atoi(c.Query("controllerId")) fmt.Println(id) state, _ := strconv.Atoi(c.Query("controllerState")) fmt.Println(state) write.Id = uint32(id) write.State = uint32(state) if device.Identity == "" { resp.RespFail(c, http.StatusBadGateway, errors.New("必填参数为空"), resp.FoundFail) return } deviceBasic := device.GetTopicByIdentity() subTopic := "Device/" + deviceBasic.ItemName + "/" + deviceBasic.BridgeName + "/control" + deviceBasic.Secret fmt.Println(subTopic) sendTopic := "Host/" + deviceBasic.ItemName + "/" + deviceBasic.BridgeName + "/control" + deviceBasic.Secret fmt.Println(sendTopic) dataChan := make(chan *mqtt.StartDataResp, 1) mqtt.SubscribeMessage(subTopic, func(client mq.Client, message mq.Message) { fmt.Printf("MESSAGE : %s\n", message.Payload()) fmt.Printf("TOPIC : %s\n", message.Topic()) subscribeStartData := new(mqtt.StartDataResp) err := json.Unmarshal(message.Payload(), &subscribeStartData) if err != nil { resp.RespFail(c, http.StatusBadGateway, err, "回调函数格式不正确") return } dataChan <- subscribeStartData }) startData := new(mqtt.StartData) startData.SampTime = time.Now().String() startData.CommandID = utils.GetUUid() startData.Write = write data, _ := json.Marshal(startData) err := mqtt.SendMessage(sendTopic, data) if err != nil { resp.RespFail(c, http.StatusBadGateway, err, resp.FoundFail) return } responseMessage := <-dataChan err, _ = mqtt.Unsubscribe(sendTopic) if err != nil { resp.RespFail(c, http.StatusBadGateway, err, "取消订阅失败") return } resp.RespOK(c, responseMessage, "控制成功") })
时间: 2024-04-15 13:04:23 浏览: 139
IDEA遇到Internal error. Please refer to http://jb. gg/ide/critical-startup-errors的问题及解决办法
以下是将给定的 Go 代码翻译为 Python 的代码:
```python
import json
import logging
import time
from http import HTTPStatus
import paho.mqtt.client as mqtt
from flask import jsonify, request
from service.models import DeviceBasic
from service.mqtt import SendMessage, SubscribeMessage, Unsubscribe
from service.tools.resp import RespFail, RespOK
from service.utils import GetUUid
# DeviceController
# 控制设备
# @BasePath /api/v1
# @Description 启动对应设备
# @Tags 启动设备
# @param identity query string false "Identity"
# @param controllerId query string false "controllerId"
# @param controlState query string false "controlState"
# @Success 200 {object} resp.Response "{"code":200,"data":[...]}"
# @Failure 502 {object} resp.Response "{"code":502,"data":[...]}"
# @Router /api/v1/device/start [Post]
def DeviceController():
device = DeviceBasic()
device.identity = request.args.get('identity', '')
id = int(request.args.get('controllerId', 0))
logging.debug(f"id: {id}")
state = int(request.args.get('controllerState', 0))
logging.debug(f"state: {state}")
write = Write()
write.id = id
write.state = state
if not device.identity:
RespFail(HTTPStatus.BAD_GATEWAY, errors=["必填参数为空"])
return
deviceBasic = device.GetTopicByIdentity()
subTopic = f"Device/{deviceBasic.ItemName}/{deviceBasic.BridgeName}/control{deviceBasic.Secret}"
logging.debug(f"subTopic: {subTopic}")
sendTopic = f"Host/{deviceBasic.ItemName}/{deviceBasic.BridgeName}/control{deviceBasic.Secret}"
logging.debug(f"sendTopic: {sendTopic}")
dataChan = []
def on_message(client, userdata, message):
logging.debug(f"MESSAGE : {message.payload}")
logging.debug(f"TOPIC : {message.topic}")
subscribeStartData = mqtt.StartDataResp()
try:
subscribeStartData = json.loads(message.payload)
except json.JSONDecodeError as e:
RespFail(HTTPStatus.BAD_GATEWAY, errors=[f"回调函数格式不正确: {str(e)}"])
return
dataChan.append(subscribeStartData)
mqtt.SubscribeMessage(subTopic, on_message)
startData = mqtt.StartData()
startData.SampTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
startData.CommandID = GetUUid()
startData.Write = write
data = json.dumps(startData, default=lambda obj: obj.__dict__, ensure_ascii=False)
err = SendMessage(sendTopic, data.encode())
if err:
RespFail(HTTPStatus.BAD_GATEWAY, errors=[err])
return
responseMessage = dataChan[0]
err = Unsubscribe(sendTopic)
if err:
RespFail(HTTPStatus.BAD_GATEWAY, errors=[f"取消订阅失败: {err}"])
return
RespOK(responseMessage, message="控制成功")
```
阅读全文