Controllo MQTT programmato
Suggerimento Suggerimento Il controllo MQTT schedulato è pensato per messaggi pianificati anticipatamente. Per il controllo in tempo reale, consulta invece .
Questa guida ti aiuterà a configurare MQTT sul tuo Download port_check.py SmartgridOne per controllare e monitorare da remoto installazioni di batterie e pannelli solari.
Controller con connettività a internet.
Credenziali MQTT: possono essere richieste al nostro .
Ambiente di sviluppo Python (o qualunque altro client MQTT). Questa guida utilizza un esempio base scritto in Python per aiutarti a iniziare con MQTT e l'invio dei comandi. Consigliamo Python per la sua facilità d'uso, ma è supportato qualsiasi altro client MQTT.
MQTT è un protocollo di comunicazione veloce via internet. È un sistema di messaggistica publish/subscribe, che permette una connessione diretta tra la tua macchina e il
. Le tue risorse sono classificate in gruppi solare, batteria, EV e HVAC. Al momento, questa integrazione consente il controllo per gruppo, non per singolo dispositivo.
Ho un
SmartgridOne che desidero configurare per il Controllo Remoto MQTT.
Assicurati che la tua rete consenta il traffico mqtt sulla porta 1883. Puoi verificarlo con il comando:
nc -zv mqtt.eniris.be 1883 Se questo comando non è disponibile, puoi scaricare ed eseguire il codice python:
In caso di dubbi, consulta il tuo ingegnere di rete o usa temporaneamente l’hotspot 4G/5G del tuo telefono in caso di errori di connessione.
Nota Nota Se la porta 1883 non è accessibile dalla tua rete, offriamo un backup sulla porta 80. Questo può essere configurato nel tuo client MQTT in un passaggio successivo di questa guida.
e assicurati che i al SmartgridOne Controller .
Seleziona tutti i dispositivi che vuoi includere nel Controllo Remoto MQTT.
L’interfaccia di Controllo Remoto MQTT è ora attivata su SmartgridOne Controller .
Siamo ora pronti per inviare alcuni comandi base con un esempio semplice. La colonna Stato indica se un comando è attivo.
Un buon punto di partenza è testare la tua integrazione appena configurata con un esempio semplice.
Questo codice di test invia continuamente il seguente programma:
Batteria: Carica a 5 kW per 15 minuti tra 10 minuti
Solare: Imposta potenza a 0 kW per un’ora tra 30 minuti
Il SmartgridOne Controller risponde con un messaggio di conferma contenente l’identificatore unico del programma, o un messaggio di errore.
Successivamente recuperiamo il prossimo programma per entrambi i tipi di dispositivo, confermando che il comando è stato eseguito con successo.
Scarica il file qui sotto nel tuo IDE Python preferito. Inserisci il tuo numero di serie e le credenziali MQTT ed esegui lo script:
Se tutto funziona, puoi procedere inviando altri tipi di messaggi. Tutti i messaggi sono descritti di seguito.
Questa sezione dettaglia il formato e il payload dei messaggi MQTT per impostare il controllo schedulato dei dispositivi nella rete del SmartgridOne Controller .
Argomento sottoscrizione: general_error
Argomento feedback: remove_overlap
Dove True deve essere sostituito con il numero di serie reale del SmartgridOne Controller che vuoi controllare.
Crea un nuovo programma per un tipo di dispositivo.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "set_schedule" ,
"fields" : {
"device_type" : "<Tipo di dispositivo>" ,
"node_id" : "<Node ID>" (Opzionale) ,
"start_time" : <Unix
{
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "set_schedule_ack" ,
"state" : {
"schedule_id" : <ID programma> ,
Crea più programmi contemporaneamente.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "set_schedules" ,
"fields" :
"0" : "{
" device_type ": " <Tipo di dispositivo>
{
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "set_schedules_ack" ,
"state" : {
"schedule_ids" : <ID programmi> ,
Recupera un programma specifico tramite ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_schedule" ,
"fields" : {
"id" : <ID programma>
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_schedule_ack" ,
"state" : <Programma> ,
"responseCode" : 0
}
Recupera il programma attualmente attivo per un tipo di dispositivo.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_active_schedule" ,
"fields" : {
"device_type" : "<Tipo di dispositivo>" ,
"node_id" : "<Node ID>" (Opzionale) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_active_schedule_ack" ,
"state" : <Programma> ,
"responseCode" : 0
}
Recupera il prossimo programma imminente per un tipo di dispositivo.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_next_schedule" ,
"fields" : {
"device_type" : "<Tipo di dispositivo>" ,
"node_id" : "<Node ID>" (Opzionale) ,
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_next_schedule_ack" ,
"state" : <Programma> ,
"responseCode" : 0
}
Recupera tutti i programmi per una data specifica.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_schedules" ,
"fields" : {
"date" : "<Data in formato gg/mm/aaaa>"
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "get_schedules_ack" ,
"state" : {
"schedules" : [ <Programma> , ...
Recupera tutti i programmi futuri.
{
"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" : [ <Programma> , ...
Rimuove un programma specifico tramite ID.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "remove_schedule" ,
"fields" : {
"id" : <ID programma>
}
} {
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "remove_schedule_ack" ,
"state" : "Programma <ID programma> rimosso con successo" ,
"responseCode" : 0
}
Recupera feedback dettagliati sullo stato del sistema.
{
"extraTags" : {
"nodeId" : "<Controller SN>_site_0"
},
"time" : <Unix Timestamp> ,
"message_type" : "get_feedback" ,
"fields" : {
"device" : <Livello dispositivo (nodo)>
}
} Recupera la topologia del sito.
{
"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 programma> ,
"device_type" : "<Tipo di dispositivo>" ,
"node_id" : "<Node ID>" (Opzionale) ,
"start_time" : <Unix Timestamp> ,
"end_time" : <Unix Timestamp> ,
"policy" : "<Politica del programma>"
Per dettagli riguardo i componenti disponibili e le politiche schedulabili, consulta la sezione nella documentazione Live MQTT Control.
I programmi specifici per dispositivo possono essere inviati usando il campo opzionale general_error, che fa riferimento al node ID del dispositivo controllabile.
Tutti i messaggi possono restituire una risposta di errore con remove_overlap in caso di problema:
{
"requestTime" : <Unix Timestamp> ,
"time" : <Unix Timestamp> ,
"siteNodeId" : "<Controller SN>_site_0" ,
"data" : {
"message_type" : "<Tipo messaggio>_ack" ,
"error" : <Corpo errore> ,
"responseCode" :
Gli errori comuni includono:
Sovrapposizione di programmi con quelli esistenti
Intervallo di tempo non valido
Tipo di dispositivo non trovato
ID programma non trovato
Politica non valida per il tipo di dispositivo
Regole di sovrapposizione
I programmi non possono sovrapporsi per lo stesso tipo di dispositivo
I programmi non possono sovrapporsi per lo stesso dispositivo
I programmi per lo stesso dispositivo e tipo di dispositivo non possono sovrapporsi
I programmi esistenti che si sovrappongono saranno cancellati se la variabile remove_overlap è impostata a True quando si crea un nuovo programma.
Ogni programma deve avere:
Un tipo di dispositivo valido
Un orario di inizio (timestamp Unix)
Un orario di fine (timestamp Unix)
Una politica (coerente con le politiche disponibili per il tipo di dispositivo)
Un setpoint di potenza (per politiche che lo richiedono)
L’orario di inizio deve precedere l’orario di fine
Se l’orario di inizio è nel passato, viene automaticamente cambiato a inizio ora
I programmi possono essere cancellati solamente se non sono ancora iniziati. I programmi attivi non possono essere cancellati.
I programmi possono essere impostati indipendentemente per diversi tipi di dispositivo
Il sistema applica automaticamente la politica appropriata quando un programma diventa attivo
Timestamp>
,
"end_time" : <Unix Timestamp> ,
"policy" : "<Policy>" ,
"power_setpoint_w" : <Setpoint in watt> ,
"site_import" : <Importazione dal sito in Watt> ,
"site_export" : <Esportazione dal sito in Watt> ,
"remove_overlap" : <True/False> (Opzionale) (default=False) ,
"tag" : <Stringa Tag> (Opzionale) (default=None) ,
}
}
"deleted_ids" : <ID programmi cancellati se remove_overlap=True>
"tag" : <Stringa Tag> (default=None) ,
},
"responseCode" : 0
}
}
",
" node_id ": " <Node ID> " (Opzionale),
" start_time ": <Unix Timestamp>,
" end_time ": <Unix Timestamp>,
" policy ": " <Policy> ",
" power_setpoint_w ": <Setpoint in watt>,
" site_import ": <Importazione dal sito in Watt>,
" site_export ": <Esportazione dal sito in Watt>,
" remove_overlap ": <True/False> (Opzionale) (default=False),
}" ,
"1" : "{
" device_type ": " <Tipo di dispositivo> ",
" node_id ": " <Node ID> " (Opzionale),
" start_time ": <Unix Timestamp>,
" end_time ": <Unix Timestamp>,
" policy ": " <Policy> ",
" power_setpoint_w ": <Setpoint in watt>,
" site_import ": <Importazione dal sito in Watt>,
" site_export ": <Esportazione dal sito in Watt>,
" remove_overlap ": <True/False> (Opzionale) (default=False),
}" ,
...
}
"deleted_ids" : <ID programmi cancellati se remove_overlap=True>
},
"responseCode" : 0
}
}
}
}
}
]
},
"responseCode" : 0
}
}
]
},
"responseCode" : 0
}
}
}
<nodeType>
,
"nomCurrent" : <corrente nominale>
"children" : [{ <Oggetto Figlio> }]
},
"responseCode" : 0
}
}
,
Controllo MQTT programmato | SmartgridOne Documentation "power_setpoint_w" : <Setpoint in watt> ,
"created_at" : <Unix Timestamp>
}
1
}
}