Add MQTT publish request and response models, and implement publish route
- Introduced MQTTPublishRequest and MQTTPublishResponse models for handling MQTT message publishing. - Implemented a new POST route for publishing MQTT messages, including error handling and logging. - Enhanced the StandaloneAutoRecorder with improved logging during manual recording start. - Updated the frontend to include an MQTT Debug Panel for better monitoring and debugging capabilities.
This commit is contained in:
@@ -334,3 +334,21 @@ class SuccessResponse(BaseModel):
|
||||
message: str
|
||||
data: Optional[Dict[str, Any]] = None
|
||||
timestamp: str = Field(default_factory=lambda: datetime.now().isoformat())
|
||||
|
||||
|
||||
class MQTTPublishRequest(BaseModel):
|
||||
"""MQTT publish request model"""
|
||||
|
||||
topic: str = Field(..., description="MQTT topic to publish to")
|
||||
payload: str = Field(..., description="Message payload")
|
||||
qos: int = Field(default=0, ge=0, le=2, description="Quality of Service level (0-2)")
|
||||
retain: bool = Field(default=False, description="Whether to retain the message")
|
||||
|
||||
|
||||
class MQTTPublishResponse(BaseModel):
|
||||
"""MQTT publish response model"""
|
||||
|
||||
success: bool
|
||||
message: str
|
||||
topic: str
|
||||
payload: str
|
||||
|
||||
@@ -7,7 +7,7 @@ from typing import Dict
|
||||
from fastapi import FastAPI, HTTPException, Query
|
||||
from ...core.state_manager import StateManager
|
||||
from ...mqtt.client import MQTTClient
|
||||
from ..models import MQTTStatusResponse, MQTTEventsHistoryResponse, MQTTEventResponse
|
||||
from ..models import MQTTStatusResponse, MQTTEventsHistoryResponse, MQTTEventResponse, MQTTPublishRequest, MQTTPublishResponse
|
||||
|
||||
|
||||
def register_mqtt_routes(
|
||||
@@ -70,3 +70,33 @@ def register_mqtt_routes(
|
||||
logger.error(f"Error getting MQTT events: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
@app.post("/mqtt/publish", response_model=MQTTPublishResponse)
|
||||
async def publish_mqtt_message(request: MQTTPublishRequest):
|
||||
"""Publish an MQTT message (for testing/debugging)"""
|
||||
try:
|
||||
if not mqtt_client.is_connected():
|
||||
raise HTTPException(status_code=503, detail="MQTT client is not connected")
|
||||
|
||||
success = mqtt_client.publish_message(
|
||||
topic=request.topic,
|
||||
payload=request.payload,
|
||||
qos=request.qos,
|
||||
retain=request.retain
|
||||
)
|
||||
|
||||
if success:
|
||||
logger.info(f"Published MQTT message: {request.topic} -> {request.payload}")
|
||||
return MQTTPublishResponse(
|
||||
success=True,
|
||||
message=f"Message published successfully to {request.topic}",
|
||||
topic=request.topic,
|
||||
payload=request.payload
|
||||
)
|
||||
else:
|
||||
raise HTTPException(status_code=500, detail="Failed to publish MQTT message")
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Error publishing MQTT message: {e}")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user