Consejo Consejo El control MQTT programado está pensado para mensajes programados con anticipación. Para control en vivo, 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 (u otro cliente MQTT). Esta guía usa un ejemplo básico escrito en Python para comenzar con MQTT y el envío de comandos. Recomendamos Python por su facilidad de uso, pero cualquier otro cliente MQTT es compatible.
MQTT es un protocolo de comunicación rápido sobre internet. Es un sistema de mensaje publicar/suscribir, que permite una conexión directa entre su máquina y el
. Sus activos están clasificados en grupos de solar, batería, vehículo eléctrico (EV) y HVAC. Por el momento, 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 el tráfico MQTT sobre el puerto 1883. Puede verificarlo usando el comando:
nc -zv mqtt.eniris.be 1883 Si este comando no está disponible, puede descargar y ejecutar alternativamente el código Python:
En caso de duda, consulte a su ingeniero de red o utilice temporalmente el hotspot 4G/5G de su teléfono cuando ocurran errores de conexión.
Nota Nota Si el puerto 1883 no es 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 al SmartgridOne Controller .
Seleccione todos los dispositivos que desee 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 le indica si algún comando está activo.
Un buen primer paso sería probar la 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 confirmación que contiene el identificador único del horario, o un mensaje de error.
Luego obtenemos el siguiente horario para ambos tipos de dispositivos, confirmando que el comando fue exitoso.
Por favor, descargue el archivo a continuación en su IDE de Python preferido. Complete su número serial y credenciales MQTT y ejecute el script:
Si lo anterior es exitoso, puede continuar enviando otros tipos de mensajes. Todos los mensajes se describen a continuación.
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 SmartgridOne Controller .
Tema de suscripción: general_error
Tema de retroalimentación: remove_overlap
Donde True debe reemplazarse por el número serial real del SmartgridOne Controller que desea controlar.
Crea un nuevo horario 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 del horario>
Crea múltiples horarios nuevos.
{
"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 horarios>
Recupera un horario específico por ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_schedule" ,
"fields" : {
"id" : <ID del horario>
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_schedule_ack" ,
"state" : <Horario> ,
"responseCode" : 0
}
Recupera el horario 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>" (Opcional) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_active_schedule_ack" ,
"state" : <Horario> ,
"responseCode" : 0
}
Recupera el siguiente horario 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>" (Opcional) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_next_schedule_ack" ,
"state" : <Horario> ,
"responseCode" : 0
}
Recupera todos los horarios 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" : [ <Horario> , ...
Recupera todos los horarios futuros.
{
"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" : [ <Horario> , ...
Elimina un horario específico por ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "remove_schedule" ,
"fields" : {
"id" : <ID del horario>
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "remove_schedule_ack" ,
"state" : "Horario <ID del horario> eliminado exitosamente" ,
"responseCode" : 0
}
Recupera informació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 del horario> ,
"device_type" : "<Tipo de dispositivo>" ,
"node_id" : "<ID del nodo>" (Opcional) ,
"start_time" : <Unix Timestamp> ,
"end_time" : <Unix Timestamp> ,
"policy"
Para detalles sobre los componentes disponibles y las políticas que pueden programarse, consulte la sección en la documentación Live MQTT Control.
Los horarios específicos de dispositivo pueden enviarse usando el campo opcional general_error, que se refiere al ID del nodo del dispositivo controlable.
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" : "<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:
Horarios que se solapan con horarios existentes
Rango de tiempo inválido
Tipo de dispositivo no encontrado
ID de horario no encontrado
Política inválida para el tipo de dispositivo
Reglas de solapamiento
Los horarios no pueden solaparse para el mismo tipo de dispositivo
Los horarios no pueden solaparse para el mismo dispositivo
Los horarios para el mismo dispositivo y tipo de dispositivo no pueden solaparse
Los horarios existentes que se solapan serán eliminados si la variable remove_overlap se establece en True al crear un nuevo horario.
Cada horario 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 para el tipo de dispositivo)
Un punto de ajuste 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 comenzar ahora
Los horarios solo pueden eliminarse si aún no han comenzado. Los horarios activos no pueden eliminarse.
Los horarios pueden establecerse para diferentes tipos de dispositivos de forma independiente
El sistema aplica automáticamente la política apropiada cuando un horario se activa
Timestamp>
,
"end_time" : <Unix Timestamp> ,
"policy" : "<Policy>" ,
"power_setpoint_w" : <Punto de ajuste en vatios> ,
"site_import" : <Importación del sitio en vatios> ,
"site_export" : <Exportación del sitio en vatios> ,
"remove_overlap" : <True/False> (Opcional) (por defecto=False) ,
"tag" : <Cadena de etiqueta> (Opcional) (por defecto=None) ,
}
}
,
"deleted_ids" : <IDs de horarios eliminados si remove_overlap=True> ,
"tag" : <Cadena de etiqueta> (por defecto=None)
},
"responseCode" : 0
}
}
node_id
": "
<Node
ID>
" (Opcional),
" start_time ": <Unix Timestamp>,
" end_time ": <Unix Timestamp>,
" policy ": " <Policy> ",
" power_setpoint_w ": <Punto de ajuste en vatios>,
" site_import ": <Importación del sitio en vatios>,
" site_export ": <Exportación del sitio en vatios>,
" remove_overlap ": <True/False> (Opcional) (por defecto=False),
}" ,
"1" : "{
" device_type ": " <Device Type> ",
" node_id ": " <Node ID> " (Opcional),
" start_time ": <Unix Timestamp>,
" end_time ": <Unix Timestamp>,
" policy ": " <Policy> ",
" power_setpoint_w ": <Punto de ajuste en vatios>,
" site_import ": <Importación del sitio en vatios>,
" site_export ": <Exportación del sitio en vatios>,
" remove_overlap ": <True/False> (Opcional) (por defecto=False),
}" ,
...
}
,
"deleted_ids" : <IDs de horarios eliminados si remove_overlap=True>
},
"responseCode" : 0
}
}
}
}
}
]
},
"responseCode" : 0
}
}
]
},
"responseCode" : 0
}
}
}
<nodeType>
,
"nomCurrent" : <corriente nominal> ,
"children" : [{ <Objeto hijo> }]
},
"responseCode" : 0
}
}
:
"<Política del horario>"
,
Control MQTT programado | SmartgridOne Documentation "power_setpoint_w" : <Punto de ajuste en vatios> ,
"created_at" : <Unix Timestamp>
}
:
1
}
}