Control MQTT Programado
Consejo
El control MQTT programado está diseñado para mensajes programados con anticipación. Para control en tiempo real, consulte Control MQTT en vivo.
Esta guía le ayudará a configurar MQTT en su SmartgridOne Controller para controlar y monitorear de forma remota instalaciones de baterías y paneles solares.
Esta guía le ayudará a configurar MQTT en su SmartgridOne Controller para controlar y monitorear de forma remota instalaciones de baterías y paneles solares.
Configuración inicial (Punto de partida para nuevos usuarios)
Tengo un SmartgridOne Controller que me gustaría configurar para Control Remoto MQTT.
Antes de continuar, asegúrese de que su red y dispositivos estén listos siguiendo la guía Configuración MQTT.
1. Add the MQTT external signal



2. Enable MQTT remote signal
Seleccione todos los dispositivos que desee incluir en el Control Remoto MQTT.

3. Remote signal is added
The MQTT Remote Control interface has now been activated on the SmartgridOne Controller.
We are now ready to send some basics commands using a simple example. The Status column tells you if any command is active.
Script de demostración en Python
A good first starting point would be to test your newly setup integration with a simple example.
Este código de prueba envía continuamente el siguiente programa:
- Batería: Cargar a 5 kW durante 15 minutos dentro de 10 minutos
- Solar: Establecer potencia a 0 kW durante una hora dentro de 30 minutos
El SmartgridOne Controller responde con un mensaje de reconocimiento que contiene el identificador único del programa, o un mensaje de error.
Luego obtenemos el siguiente programa para ambos tipos de dispositivos, confirmando que el comando fue exitoso.
Por favor descargue el archivo abajo en su IDE de Python preferido. Complete su número de serie y credenciales MQTT y ejecute el script:
Cuando lo anterior sea exitoso, puede continuar enviando otros tipos de mensajes. Todos los mensajes se describen a continuación.
MQTT Documentation for Sending Commands
Esta sección detalla el formato de mensajes MQTT y los requisitos de carga útil para configurar el control programado de dispositivos dentro de la red del SmartgridOne Controller.
Temas MQTT
- Tema de suscripción:
general_error - Tema de retroalimentación:
remove_overlap
Donde True debe reemplazarse con el número de serie real del SmartgridOne Controller que desea controlar.
Tipos de mensaje MQTT
1. Establecer programa (set_schedule)
Crea un nuevo programa para un tipo de dispositivo.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optional) (default=False),
"tag": <Tag String> (Optional) (default=None),
}
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
"tag": <Tag String> (default=None),
},
"responseCode": 0
}
}2. Establecer programas (general_error)
Crea múltiples programas nuevos.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optional) (default=False),
}",
"1": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optional) (default=False),
}",
...
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <Schedule IDs>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
},
"responseCode": 0
}
}3. Obtener programa (general_error)
Recupera un programa específico por ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}Respuesta:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}4. Obtener programa activo (general_error)
Recupera el programa activo actualmente para un tipo de dispositivo.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}5. Obtener siguiente programa (general_error)
Recupera el siguiente programa próximo para un tipo de dispositivo.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}6. Obtener programas (general_error)
Recupera todos los programas para una fecha específica.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}7. Obtener programas futuros (general_error)
Recupera todos los programas futuros.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}8. Eliminar programa (general_error)
Elimina un programa específico por ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Schedule <Schedule ID> removed successfully",
"responseCode": 0
}
}9. Obtener retroalimentación del sitio (general_error)
Recupera retroalimentación detallada sobre el estado del sistema.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Device (node) level>
}
}Respuesta (Éxito):
Estructura de Carga Útil de Retroalimentación
10. Topología del sitio (general_error)
Obtiene la topología del sitio.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}Respuesta (Éxito):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"isControllable": <boolean>,
"nodeType": <nodeType>,
"nomCurrent": <nominalCurrent>
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}Formato estándar de respuesta de programa
{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}Tipos de componentes y políticas
Para más detalles sobre componentes disponibles y políticas que pueden programarse, consulte la sección Componentes y Políticas MQTT en la documentación de Control MQTT en vivo.
Los programas específicos para dispositivos pueden enviarse utilizando el campo opcional general_error, que hace referencia al ID del nodo del dispositivo controlable.
Manejo de errores
Todos los mensajes pueden devolver una respuesta de error con remove_overlap cuando ocurre un error:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}Cuando ocurre un error no relacionado, el tipo de mensaje será (general_error).
Errores comunes incluyen:
- Superposición de programas con programas existentes
- Rango de tiempo inválido
- Tipo de dispositivo no encontrado
- ID de programa no encontrado
- Política inválida para el tipo de dispositivo
Reglas de gestión de programas
- Reglas de superposición
- Los programas no pueden superponerse para el mismo tipo de dispositivo
- Los programas no pueden superponerse para el mismo dispositivo
- Los programas para el mismo dispositivo y tipo no pueden superponerse
- Los programas existentes que superpongan serán eliminados si la variable
remove_overlapse establece enTrueal crear un nuevo programa.
- Cada programa debe tener:
- Un tipo de dispositivo válido
- Una hora de inicio (timestamp Unix)
- Una hora de fin (timestamp Unix)
- Una política (que coincida con las políticas disponibles del tipo de dispositivo)
- Un setpoint de potencia (para políticas que lo requieran)
- La hora de inicio debe ser anterior a la hora de fin
- Si la hora de inicio está en el pasado, se cambia automáticamente para que comience ahora
- Los programas solo pueden eliminarse si aún no han comenzado. No se pueden eliminar programas activos.
- Los programas pueden establecerse para diferentes tipos de dispositivos de forma independiente
- El sistema aplica automáticamente la política adecuada cuando un programa se activa
