Controle MQTT Agendado
Dica
O controle MQTT agendado destina-se a mensagens programadas com antecedência. Para controle em tempo real, veja Live MQTT Control em vez disso.
Este guia ajudará você a configurar o MQTT em seu SmartgridOne Controller para controlar e monitorar remotamente instalações de baterias e painéis solares.
Este guia ajudará você a configurar o MQTT em seu SmartgridOne Controller para controlar e monitorar remotamente instalações de baterias e painéis solares.
Configuração Inicial (Ponto de partida para novos usuários)
Eu tenho um SmartgridOne Controller que gostaria de configurar para Controle Remoto MQTT.
Antes de continuar, certifique-se de que sua rede e dispositivos estão prontos seguindo o guia MQTT Setup.
1. Adicionar o sinal externo MQTT



2. Habilitar o sinal remoto MQTT
Selecione todos os dispositivos que deseja incluir no Controle Remoto MQTT.

3. Sinal remoto adicionado
A interface de Controle Remoto MQTT foi agora ativada no SmartgridOne Controller.
Estamos prontos para enviar alguns comandos básicos usando um exemplo simples. A coluna Status indica se algum comando está ativo.
Script de demonstração em Python
Um bom ponto de partida é testar sua integração recém-configurada com um exemplo simples.
Este código de teste faz um trabalho simples de enviar continuamente o seguinte cronograma:
- Bateria: Carregar a 5 kW por 15 minutos em 10 minutos
- Solar: Definir potência para 0 kW por uma hora em 30 minutos
O SmartgridOne Controller responde com uma mensagem de confirmação contendo o identificador único do agendamento ou uma mensagem de erro.
Em seguida, buscamos o próximo agendamento para ambos os tipos de dispositivos, confirmando que o comando foi bem-sucedido.
Por favor, baixe o arquivo abaixo no seu IDE Python preferido. Preencha seu número de série e as credenciais MQTT e execute o script:
Quando o acima tiver sucesso, você pode continuar enviando outros tipos de mensagens. Todas as mensagens estão descritas abaixo.
Documentação MQTT para envio de comandos
Esta seção detalha o formato da mensagem MQTT e os requisitos de payload para configurar o controle agendado dos dispositivos na rede do SmartgridOne Controller.
Tópicos MQTT
- Tópico de Assinatura:
general_error - Tópico de Feedback:
remove_overlap
Onde True deve ser substituído pelo número de série real do SmartgridOne Controller que você pretende controlar.
Tipos de Mensagens MQTT
1. Definir Agendamento (set_schedule)
Cria um novo agendamento para um 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 Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint em watts>,
"site_import": <Importação do Site em Watts>,
"site_export": <Exportação do Site em Watts>,
"remove_overlap": <True/False> (Opcional) (padrão=False),
"tag": <Tag String> (Opcional) (padrão=None),
}
}Resposta (Sucesso):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <IDs de Agendamentos deletados se remove_overlap=True>,
"tag": <Tag String> (padrão=None),
},
"responseCode": 0
}
}2. Definir Agendamentos (general_error)
Cria múltiplos novos agendamentos.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opcional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint em watts>,
"site_import": <Importação do Site em Watts>,
"site_export": <Exportação do Site em Watts>,
"remove_overlap": <True/False> (Opcional) (padrão=False),
}",
"1": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opcional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint em watts>,
"site_import": <Importação do Site em Watts>,
"site_export": <Exportação do Site em Watts>,
"remove_overlap": <True/False> (Opcional) (padrão=False),
}",
...
}Resposta (Sucesso):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <IDs de Agendamentos>,
"deleted_ids": <IDs de Agendamentos deletados se remove_overlap=True>
},
"responseCode": 0
}
}3. Obter Agendamento (general_error)
Recupera um agendamento específico pelo ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}Resposta:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}4. Obter Agendamento Ativo (general_error)
Recupera o agendamento atualmente ativo para um 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),
}
}Resposta (Sucesso):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}5. Obter Próximo Agendamento (general_error)
Recupera o próximo agendamento futuro para um 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),
}
}Resposta (Sucesso):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}6. Obter Agendamentos (general_error)
Recupera todos os agendamentos para uma data específica.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<String de Data no formato dd/mm/yyyy>"
}
}Resposta (Sucesso):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}7. Obter Agendamentos Futuros (general_error)
Recupera todos os agendamentos futuros.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}Resposta (Sucesso):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}8. Remover Agendamento (general_error)
Remove um agendamento específico pelo ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}Resposta (Sucesso):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Agendamento <Schedule ID> removido com sucesso",
"responseCode": 0
}
}9. Obter Feedback do Site (general_error)
Recupera feedback detalhado sobre o estado do sistema.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Nível do dispositivo (node)>
}
}Resposta (Sucesso):
Estrutura do Payload de Feedback
10. Topologia do Site (general_error)
Obtém a topologia do site.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}Resposta (Sucesso):
{
"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 Padrão de Resposta de Agendamento
{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opcional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint em watts>,
"created_at": <Unix Timestamp>
}Tipos de Componentes e Políticas
Para detalhes sobre componentes disponíveis e políticas que podem ser agendadas, consulte a seção MQTT Components and Policies na documentação de Live MQTT Control.
Agendamentos específicos para dispositivos podem ser enviados usando o campo opcional general_error, referindo-se ao node ID do dispositivo controlável.
Tratamento de Erros
Todas as mensagens podem retornar uma resposta de erro com remove_overlap em caso de erro:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Corpo do Erro>,
"responseCode": 1
}
}Quando ocorre um erro não relacionado, o tipo de mensagem será (general_error).
Erros comuns incluem:
- Sobreposição de agendamentos com agendamentos existentes
- Intervalo de tempo inválido
- Tipo de dispositivo não encontrado
- ID de agendamento não encontrado
- Política inválida para o tipo de dispositivo
Regras de Gerenciamento de Agendamentos
- Regras de Sobreposição
- Agendamentos não podem se sobrepor para o mesmo tipo de dispositivo
- Agendamentos não podem se sobrepor para o mesmo dispositivo
- Agendamentos para o mesmo dispositivo e tipo de dispositivo não podem se sobrepor
- Agendamentos existentes e sobrepostos serão deletados se a variável
remove_overlapestiver definida paraTrueao criar um novo agendamento.
- Cada agendamento deve ter:
- Um tipo de dispositivo válido
- Um horário de início (timestamp Unix)
- Um horário de término (timestamp Unix)
- Uma política (compatível com as políticas disponíveis para o tipo de dispositivo)
- Um setpoint de potência (para políticas que o requerem)
- O horário de início deve ser antes do horário de término
- Se o horário de início estiver no passado, ele é automaticamente alterado para iniciar agora
- Agendamentos só podem ser removidos se ainda não tiverem começado. Agendamentos ativos não podem ser removidos.
- Agendamentos podem ser configurados para diferentes tipos de dispositivos de forma independente
- O sistema aplica automaticamente a política apropriada quando um agendamento se torna ativo
