Consejo Consejo El control programado MQTT está destinado para mensajes programados con anticipación. Para control en tiempo real, consulte en su lugar.
Esta guía le ayudará a configurar MQTT en su Download port_check.py SmartgridOne para controlar y monitorear remotamente instalaciones de baterías y paneles solares.
Controller con conectividad a internet.
Credenciales MQTT: Puede solicitarlas a nuestro .
Entorno de desarrollo Python (o cualquier otro cliente MQTT). Esta guía usa un ejemplo básico escrito en Python para comenzar con MQTT y envío de comandos. Recomendamos usar Python por su facilidad, pero se soporta cualquier cliente MQTT.
MQTT es un protocolo de comunicación rápido a través de internet. Es un sistema de mensajes de publicación/suscripción, que permite una conexión directa entre su máquina y el
. Sus activos están clasificados en grupos de solar, batería, EV y HVAC. Actualmente, esta integración permite control por grupo, no por dispositivo.
Tengo un
SmartgridOne que quiero configurar para Control Remoto MQTT.
Asegúrese de que su red permita tráfico MQTT sobre el puerto 1883. Puede hacer esto con el comando:
nc -zv mqtt.eniris.be 1883 Si este comando no está disponible, puede alternativamente descargar y ejecutar el código Python:
En caso de duda, consulte a su ingeniero de redes o use temporalmente el punto de acceso 4G/5G de su teléfono si ocurren errores de conexión.
Nota Nota Cuando el puerto 1883 no está accesible desde su red, ofrecemos un respaldo en el puerto 80. Esto puede configurarse en su cliente MQTT en un paso posterior de este manual.
y asegúrese de que los al SmartgridOne Controller .
Seleccione todos los dispositivos que desea incluir en el Control Remoto MQTT.
La interfaz de Control Remoto MQTT ha sido activada en el SmartgridOne Controller .
Ahora estamos listos para enviar comandos básicos usando un ejemplo sencillo. La columna Estado indica si algún comando está activo.
Un buen punto de partida es probar su integración recién configurada con un ejemplo simple.
Este código de prueba envía continuamente la siguiente programación:
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 acuse de recibo conteniendo el identificador único del programa, o un mensaje de error.
Luego recuperamos el próximo horario para ambos tipos de dispositivos, confirmando que el comando fue exitoso.
Por favor descargue el archivo abajo en su IDE Python preferido. Complete su número de serie y credenciales MQTT y ejecute el script:
Si lo anterior tiene éxito, puede continuar enviando otros tipos de mensajes. Todos los mensajes se describen a continuación.
Esta sección detalla el formato de mensajería MQTT y los requerimientos del payload para configurar control programado de dispositivos dentro de la red del SmartgridOne Controller .
Tema para suscribirse: general_error
Tema para retroalimentación: remove_overlap
Donde True debe ser reemplazado por el número de serie real del SmartgridOne Controller que desea controlar.
Crea una nueva programación 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>" (Opcional) ,
"start_time" : <Unix
{
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "set_schedule_ack" ,
"state" : {
"schedule_id" : <ID de programación>
Crea varias programaciones nuevas.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "set_schedules" ,
"fields" :
"0" : "{
" device_type ": " <Device Type> ",
"
{
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "set_schedules_ack" ,
"state" : {
"schedule_ids" : <IDs de programación>
Recupera una programación específica por ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_schedule" ,
"fields" : {
"id" : <ID de programación>
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_schedule_ack" ,
"state" : <Programming> ,
"responseCode" : 0
}
Recupera la programación actualmente activa 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>" (Opcional) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_active_schedule_ack" ,
"state" : <Programming> ,
"responseCode" : 0
}
Recupera la próxima programación 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>" (Opcional) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_next_schedule_ack" ,
"state" : <Programming> ,
"responseCode" : 0
}
Recupera todas las programaciones para una fecha específica.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_schedules" ,
"fields" : {
"date" : "<Cadena de fecha con formato dd/mm/yyyy>"
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_schedules_ack" ,
"state" : {
"schedules" : [ <Programming> , ...
Recupera todas las programaciones futuras.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_future_schedules" ,
"fields" : {}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_future_schedules_ack" ,
"state" : {
"schedules" : [ <Programming> , ...
Elimina una programación específica por ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "remove_schedule" ,
"fields" : {
"id" : <ID de programación>
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "remove_schedule_ack" ,
"state" : "Programación <ID de programación> eliminada con éxito" ,
"responseCode" : 0
}
Obtiene retroalimentación detallada del estado del sistema.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_feedback" ,
"fields" : {
"device" : <Nivel de dispositivo (nodo)>
}
} Obtiene la topología del sitio.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_topology" ,
"fields" : {}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_topology_ack" ,
"state" : {
"nodeId" : <nodeId> ,
"nodeType" :
{
"id" : <ID de programación> ,
"device_type" : "<Tipo de dispositivo>" ,
"node_id" : "<ID del nodo>" (Opcional) ,
"start_time" : <Unix Timestamp> ,
"end_time" : <Unix Timestamp> ,
"policy"
Para detalles sobre componentes disponibles y políticas que se pueden programar, consulte la sección en la documentación de Live MQTT Control.
Las programaciones específicas para dispositivos pueden enviarse usando el campo opcional general_error, refiriéndose al ID del nodo del dispositivo controlable.
Todos los mensajes pueden retornar 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" : "<Tipo de mensaje>_ack" ,
"error" : <Cuerpo del error> ,
"responseCode"
Cuando ocurre un error no relacionado, el tipo de mensaje será (general_error).
Errores comunes incluyen:
Superposición de programación con horarios existentes
Rango de tiempo inválido
Tipo de dispositivo no encontrado
ID de programación no encontrado
Política inválida para tipo de dispositivo
Reglas de superposición
Las programaciones no pueden superponerse para el mismo tipo de dispositivo
Las programaciones no pueden superponerse para el mismo dispositivo
Las programaciones para el mismo dispositivo y tipo de dispositivo no pueden superponerse
Las programaciones existentes y superpuestas serán eliminadas si la variable remove_overlap está establecida a True al crear una nueva programación.
Cada programación debe tener:
Un tipo de dispositivo válido
Una hora de inicio (marca de tiempo Unix)
Una hora de finalización (marca de tiempo Unix)
Una política (que coincida con las políticas disponibles para el tipo de dispositivo)
Una consigna de potencia (para políticas que la requieran)
La hora de inicio debe ser anterior a la hora de finalización
Si la hora de inicio está en el pasado, se cambia automáticamente para comenzar ahora
Las programaciones solo pueden eliminarse si no han comenzado. Las programaciones activas no pueden eliminarse.
Las programaciones pueden establecerse para diferentes tipos de dispositivos de manera independiente
El sistema aplica automáticamente la política apropiada cuando una programación se vuelve activa
Timestamp>
,
"end_time" : <Unix Timestamp> ,
"policy" : "<Policy>" ,
"power_setpoint_w" : <Consigna en vatios> ,
"site_import" : <Importación del sitio en vatios> ,
"site_export" : <Exportación del sitio en vatios> ,
"remove_overlap" : <True/False> (Opcional) (predeterminado=False) ,
"tag" : <Cadena de etiqueta> (Opcional) (predeterminado=None) ,
}
}
,
"deleted_ids" : <IDs de programación eliminados si remove_overlap=True> ,
"tag" : <Cadena de etiqueta> (predeterminado=None) ,
},
"responseCode" : 0
}
}
node_id
": "
<Node
ID>
" (Opcional),
" start_time ": <Unix Timestamp>,
" end_time ": <Unix Timestamp>,
" policy ": " <Policy> ",
" power_setpoint_w ": <Consigna en vatios>,
" site_import ": <Importación del sitio en vatios>,
" site_export ": <Exportación del sitio en vatios>,
" remove_overlap ": <True/False> (Opcional) (predeterminado=False),
}" ,
"1" : "{
" device_type ": " <Device Type> ",
" node_id ": " <Node ID> " (Opcional),
" start_time ": <Unix Timestamp>,
" end_time ": <Unix Timestamp>,
" policy ": " <Policy> ",
" power_setpoint_w ": <Consigna en vatios>,
" site_import ": <Importación del sitio en vatios>,
" site_export ": <Exportación del sitio en vatios>,
" remove_overlap ": <True/False> (Opcional) (predeterminado=False),
}" ,
...
}
,
"deleted_ids" : <IDs de programación eliminados si remove_overlap=True>
},
"responseCode" : 0
}
}
}
}
}
]
},
"responseCode" : 0
}
}
]
},
"responseCode" : 0
}
}
}
<nodeType>
,
"nomCurrent" : <nominalCurrent> ,
"children" : [{ <ChildObject> }]
},
"responseCode" : 0
}
}
:
"<Política de programación>"
,
Control MQTT programado | SmartgridOne Documentation "power_setpoint_w" : <Consigna en vatios> ,
"created_at" : <Unix Timestamp>
}
:
1
}
}