Nota: cFos Charging Manager è in grado di leggere la maggior parte degli inverter solari utilizzando SunSpec (tipo di dispositivo "SunSpec Solar Inverter / Meter"). In questo caso, non è necessario creare una propria definizione di contatore.
Il cFos Charging Manager consente di creare definizioni di contatori personalizzate per supportare contatori che non fanno parte del repertorio standard. Attualmente ne esistono tre tipi: Contatori Modbus, contatori HTTP/JSON e contatori MQTT/JSON. I file di definizione di questi contatori sono molto simili. I contatori Modbus leggono i loro dati via Modbus da registri specifici, mentre i contatori HTTP/JSON recuperano i loro dati tramite richiesta HTTP e analizzano JSON come risposta. Per i contatori MQTT/JSON, il cFos Charging Manager si iscrive agli argomenti MQTT e analizza i messaggi pubblicati sotto l'argomento come JSON. Per il parsing, il cFos Charging Manager utilizza un piccolo "linguaggio di interrogazione". Ecco la documentazione delle funzionalità MQTT di cFos Charging Manager.
Oltre a una serie di variabili predefinite, come corrente e tensione, i contatori definiti dall'utente possono leggere anche variabili sconosciute definite dall'utente, interrogare gli ingressi e impostare le uscite. La lettura delle variabili e l'impostazione delle uscite consentono di valutare le formule. In combinazione con le variabili del Charging Manager e le uscite globali del Charging Manager descritte di seguito, si tratta di una funzione potente, che consente persino di eseguire alcune attività di automazione domestica e di controllare dispositivi esterni come le batterie di accumulo. Se riuscite a controllare le attività con questo sistema, vi preghiamo di fornirci un feedback. Siamo molto interessati a ciò che le persone controllano con il Charging Manager cFos e questo ci aiuta a sviluppare ulteriormente il Charging Manager in base alle esigenze dei clienti.
Ecco un semplice esempio di definizione per Modbus che legge un singolo registro per la potenza attiva. È possibile modificare facilmente il numero di registro per la propria applicazione specifica:
Esempio di definizione per un singolo registro.
Ecco un esempio di definizione per Modbus e uno per HTTP/JSON:
Scarica la definizione di esempio per il contatore Modbus
Scarica la definizione di esempio per il misuratore HTTP/JSON
Il Charging Manager è già dotato di alcuni file di questo tipo, ma è possibile caricare i propri file in "Configurazione del sistema" e cancellarli nuovamente.
Qui troverete la maggior parte delle definizioni di contatori che forniamo:
Scarica le definizioni dei contatori forniti
Se avete creato il vostro file dei contatori e potrebbe essere utile per altri utenti, vi saremmo molto grati se poteste metterlo a nostra disposizione. In tal caso lo forniremo con le future versioni del Charging Manager.
Scaricare le definizioni dei contatori per altri contatoriLe definizioni dei contatori sono file JSON con un oggetto JSON globale che ha proprietà e sotto-oggetti. 'rtype' determina il tipo di operazione di lettura: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' determina il tipo di dispositivo: 0 = Altro dispositivo, 1 = Contatore, 2 = Inverter, 4 = Accumulatore.
È possibile specificare i numeri in decimale o in esadecimale con il prefisso 0x. Sono consentiti anche commenti a riga singola con //.
Si consiglia di far passare i file di definizione attraverso un validatore JSON5, ad esempio questo validatore JSON5 È necessario aver letto il capitolo Formule per capire quali valori possono essere utilizzati nelle formule del seguente riferimento.
silence_period, in msec. determinato, la durata della pausa prima di un accesso Modbus RTU, in modo che il dispositivo riconosca l'inizio di un messaggio.
silence_same_slave, true: la pausa viene osservata anche in caso di più accessi allo stesso dispositivo.
retries: il numero di tentativi se il dispositivo non risponde.
rcv_timeout: in msec. il tempo massimo di attesa per ogni accesso fino alla risposta del dispositivo.
modbus_read: Il numero di funzione del comando di lettura Modbus, di solito 3 o 4.
modbus_read_max_registers: Il numero massimo di registri che possono essere letti alla volta.
modbus_allow_gaps: true = Le aree di registro non utilizzate possono essere lette in un'operazione di lettura.
connect_timeout: in msec. il tempo massimo di attesa per una connessione TCP.
delay_after_connect: in msec. Fare una pausa dopo che la connessione è stata stabilita prima di inviare il primo comando.
upd_delay: in msec. determina l'intervallo in cui un dispositivo può essere letto. Alcuni dispositivi sono sovraccaricati se vengono interrogati troppo spesso.
manufacturer: stringa, nome del produttore. Viene visualizzato nelle informazioni estese della piastrella.
delay_accumulated: true = i valori accumulati (kWh) vengono interrogati solo ogni 3 secondi o se la potenza è sufficiente. false = questi valori vengono sempre interrogati.
ui_addr: URL, se diverso dall'indirizzo del dispositivo per richiamare l'interfaccia web.
reserved: Array con valori che vengono interpretati come 0 (utile se il dispositivo supporta determinati valori a seconda del modello).
Se si omettono le proprietà sopra elencate, il cFos Charging Manager assume valori predefiniti che funzionano bene nella maggior parte dei casi.
Nella definizione JSON, il passo successivo è la definizione delle variabili che lo strumento utilizza per leggere o calcolare i valori di corrente, tensione, ecc. Il Charging Manager conosce le seguenti variabili:
type_designation, version, firmware_version, serial: Queste formano il nome del modello come mostrato nelle informazioni estese della piastrella. Vengono interrogate una volta quando si imposta o si resetta il misuratore.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: Il cFos Charging Manager cerca di calcolare i valori di tensione_l1..l3, corrente_l1..l3 firmata, power_w e power_va a partire da questi. Non è necessario specificare tutte le variabili. Il Charging Manager di cFos cerca di calcolare i valori dalle variabili esistenti.
import_wh, export_wh: il Charging Manager utilizza queste variabili per visualizzare import_wh e export_wh. Per i contatori unidirezionali (ad esempio, gli inverter), si dovrebbe sempre definire solo import_wh. Export_wh deve essere definito solo per i contatori bidirezionali (come gli accumulatori o i contatori di riferimento della rete).
soc: se disponibile, lo stato di carica di un accumulatore viene visualizzato in % nel riquadro.
Inoltre, è possibile definire altre variabili con nomi diversi che vengono lette a ogni aggiornamento o calcolate con formule. Se si definiscono variabili che iniziano con CM., ad esempio CM._set_price, i valori assegnati vengono memorizzati nelle variabili globali del Gestore della carica (vedere sotto) e possono essere interrogati di conseguenza.
Variabili con *: Se si definiscono variabili che iniziano con *, vengono visualizzate nell'interfaccia utente nel riquadro del contatore sotto le informazioni estese, ad esempio la temperatura di una batteria di accumulo.
L'oggetto si chiama come il nome della variabile elencata sopra e ha le seguenti proprietà: fixed: Stringa con un valore fisso.
Utile se, ad esempio, non è possibile determinare alcun valore, ad esempio per la designazione del tipo o la tensione. expr: Stringa, la variabile non viene letta ma valutata come formula. type: Se non fixed o expr, il tipo di variabile: int16, uint16, int32, uint32, float, int64, string. Questo è importante per Modbus, per leggere i registri nel formato corretto. uint16 e uint32 sono tipi che possono accettare solo numeri positivi.
Con JSON/HTTP, di solito si può usare float. resolution: float, il valore letto viene moltiplicato per 'resolution'. I valori di tensione devono essere espressi in volt, le correnti in milliampere, la potenza in watt, l'energia in wattora (Wh).
Con una 'risoluzione' negativa è possibile invertire un valore se ha segno opposto. once: bool (true o false), se true, il valore viene letto una sola volta all'inizializzazione del dispositivo, altrimenti periodicamente. address: number (Modbus) or string (HTTP/JSON), il numero di registro Modbus o l'URL HTTP del valore da leggere. query:
String, per HTTP JSON la specifica nel linguaggio di interrogazione del Charging Manager con cui trova il valore da leggere nella risposta JSON. order: String, per Modbus l'ordine dei byte, "hl" o "lh", in cui è presente il valore. length: number, per Modbus la lunghezza di una stringa in registri. Per le variabili 'version' e 'firmware_version', 'length' viene utilizzato per trasformare le versioni numeriche in stringhe con punti. Per 'length' sono ammessi i valori 2 o 4, che danno luogo ai formati di versione a.b e a.b.c.d. Con 'lunghezza' 2 e tipo 'int16' o 'uint16', il Charging Manager separa il byte basso e alto con un punto, con 'int32' o 'uint32' la parola bassa e alta, con 'int64' la dword bassa e alta. Per 'lenth' 4 e 'int32' o 'uint32', il Charging Manager divide il valore in 4 byte separati da un punto.
Per 'int64' le 4 parole corrispondono. regex: Stringa. Se viene specificata un'espressione regolare, non è necessario che la risposta del contatore sia in JSON. Come risultato viene valutata l'intera corrispondenza dell'espressione regolare o il primo gruppo. Utilizzare questa opzione solo se il dispositivo non restituisce JSON.
Ecco l'elenco delle caratteristiche delle nostre espressioni regolari: qualsiasi carattere: . classi denominate:
\d \s \w \D \S \W classi anonime: [a-z0-9_], [^0-9], [^\d] gruppi con alternative: (ab|cd|ef) gruppi non catturati: (?:ab|cd) (avido) una volta o nessuna: a?, a???
(avido ) molti o nessuno: a*, a*?
(avido) una o più volte: a+, a+? inizio stringa: ^ fine stringa: $
Il Charging Manager può interrogare fino a 32 valori di ingresso da diversi registri o elementi JSON per dispositivo. La proprietà "Inputs" è un array JSON. È necessario definire le seguenti proprietà per ciascun ingresso:
indirizzo: indirizzo (registro Modbus o URL).
contare: Numero di bit di ingresso che verranno letti con questa richiesta.
query: Per HTTP/JSON, linguaggio di interrogazione per trovare il valore nella risposta.
Il cFos Charging Manager legge tutti gli ingressi così definiti ad ogni aggiornamento e colloca i bit internamente in un array, che può essere interrogato con le formule Input1..InputN....
Il Charging Manager può commutare fino a 32 uscite per dispositivo. Le uscite sono definite in "outputs" come array JSON di oggetti di uscita. Tutte le uscite vengono commutate alla fine di ogni ciclo di aggiornamento se lo stato della rispettiva uscita è cambiato.
Per ogni uscita, è necessario definire le seguenti proprietà nell'oggetto di uscita:
indirizzo: URL HTTP con metodo HTTP opzionale, ad esempio GET http://www.example.com?output1=${var1}. Per impostare i registri Modbus, è possibile utilizzare l'API HTTP del Charging Manager di cFos. Il Charging Manager rileva gli accessi corrispondenti su localhost e reindirizza la richiesta al gestore interno, quindi non è necessaria l'autorizzazione come per gli accessi esterni all'API HTTP. Se l'URL è vuoto dopo tutte le sostituzioni, non viene impostato alcun output. Ad esempio, si possono cambiare gli output solo se esistono determinate variabili (vedere formule: funzione exists()). Nell'indirizzo si possono specificare anche ${indirizzo} e ${id}. Si tratta dell'indirizzo corrente del dispositivo e dell'ID Modbus definiti nelle impostazioni. L'indirizzo e l'id sono utilizzati principalmente per utilizzare l'API Modbus (vedere sotto).
body: corpo HTTP opzionale per POST o PUT.
Nell'URL e nel corpo è possibile utilizzare formule ${expr} che fanno riferimento a variabili globali di Charging Manager o al rispettivo contatore. La formula 'expr' viene valutata quando si imposta l'output e sostituita nel testo dell'URL o del corpo. Se, nell'esempio precedente, http://www.example.com?output1=1 imposta l'output e http://www.example.com?output1=0 lo cancella, è possibile definire una variabile 'var1' e impostarla a 1 o 0 come desiderato. In questo modo, è possibile scrivere anche valori numerici per controllare le prestazioni della memoria nei registri Modbus che sono stati precedentemente memorizzati in una variabile mediante una formula.
Se invece di passare un valore numerico nell'URL è necessario sostituire un testo con un altro a seconda della formula, come nel caso delle prese Shelly WLAN, si può scrivere in questo modo: ${if expr`testo1`testo2}. L'apostrofo è un backtick (codice ASCII 96). Se 'expr' != 0, viene inserito il testo1, altrimenti il testo2. Per la presa Shelly WLAN, l'URL si presenta come segue: http://<ip-addr>/relay/0?turn=${if expr`on'off}, cioè se expr != 0, il Charging Manager chiama http://<ip-addr>/relay/0?turn=on, altrimenti http://<ip-addr>/relay/0?turn=off.
Se si inserisce un percorso relativo come URL, il Charging Manager prende l'indirizzo configurato per il rispettivo dispositivo. Se si inserisce 'localhost' come dominio, il Charging Manager prende l'indirizzo del dispositivo su cui è in esecuzione. Se rileva un accesso alla propria API, utilizza il gestore interno invece di eseguire un accesso HTTP completo, in modo da non dover memorizzare un nome utente e una password nella definizione del contatore. Un URL che inizia con un * farà sì che il Charging Manager esegua sempre un accesso HTTP completo.
Azzeramento delle uscite: Oltre a un array "uscite", è possibile definire un array denominato "reset", strutturato come l'array "uscite". Questo può essere utilizzato per ripristinare le uscite ai valori iniziali quando il dispositivo viene disattivato. In questo modo, in combinazione con le variabili definite dall'utente e con "once": true, è possibile riportare l'unità allo stato iniziale.
Scrivere periodicamente le uscite: Per alcuni dispositivi, le uscite devono essere scritte periodicamente, altrimenti il dispositivo ripristina i valori di "default". Ad esempio, la memoria Kostal utilizza nuovamente le sue regole predefinite se il controllo della memoria non è stato scritto attivamente per un certo periodo di tempo. Per impostare periodicamente le uscite, è possibile anteporre all'indirizzo #xxx#, dove xxx indica ogni quanti secondi viene riscritta l'uscita, anche se il valore da scrivere è rimasto invariato. Ad esempio, se l'indirizzo è /cnf?cmd=set_cm_vars&name=test&val=42, si può usare #30#/cnf?cmd=set_cm_vars&name=test&val=42 per garantire che questo valore venga scritto ogni 30 secondi.
Attualmente, i nomi dei membri e gli operatori "." e "[]" possono essere utilizzati nelle espressioni di ricerca "query", ad esempio:
test | Elemento denominato "test" |
nome1.nome2 | Elemento denominato "nome2" nell'oggetto figlio "nome1" |
nome[idx] | Elemento "idx" dell'elemento oggetto "nome". "idx" può essere un numero, ad esempio per gli array, o una stringa |
nome["u2"] | L'elemento "u2" dell'elemento oggetto "nome" corrisponde a "nome.u2" |
name[{"el1": "v1", "el2": 3}].value | Selezionare l'elemento dell'array che soddisfa la condizione della notazione dell'oggetto e valutare l'elemento denominato 'valore'. In questo caso, ad esempio, nell'array 'nome', viene selezionato l'elemento che ha come elementi oggetto 'el1' con valore 'v1' ed 'el2' con valore 3 e quindi il valore dell'elemento 'valore' viene restituito da questo oggetto. |
È possibile creare variabili nella configurazione di Charging Manager. È possibile utilizzare come valore un valore fisso o una formula. Al termine di ogni ciclo di aggiornamento, il Charging Manager ricalcola il valore di queste variabili, se necessario. È quindi possibile utilizzarli in (determinati) parametri del Charging Manager, nelle Regole di tariffazione o per controllare le uscite. Si può anche scrivere Ex.member o Mx.member come variabili. In questo caso, Exe Mxsono l'ID del dispositivo di una wallbox o di un contatore impostato nel Charging Manager. member è una variabile "definita dall'utente" che viene memorizzata nel dispositivo corrispondente. Alcune variabili possono avere un significato particolare: Per KEBA "out1" è un'uscita di commutazione, per i contatori ABB B23 "out1" e "out2" sono uscite di commutazione (per i modelli che lo supportano). Un 1 attiva l'uscita, uno 0 la disattiva nuovamente.
Se si dispone di apparecchi che devono essere accesi in determinate condizioni, ma che poi rimangono in funzione per un certo periodo di tempo (ad es. lavatrice, lavastoviglie), è possibile definire la variabile come un "trigger". La formula della variabile è la condizione per la quale la variabile viene impostata su 1. Dopo un tempo regolabile, la variabile viene quindi impostata su 1. Dopo un tempo impostabile, la variabile viene nuovamente impostata su 0. Una "condizione di retrigger" consente di prolungare il tempo fino allo spegnimento (cioè all'impostazione della variabile su 0) finché la condizione è soddisfatta.
A scopo di test, è possibile visualizzare le variabili del Charging Manager e del contatore, ad esempio i prezzi Awattar correnti:
Nella configurazione del Charging Manager, è possibile configurare le uscite globali come descritto sopra nella definizione del contatore alla voce "Uscite". Vengono impostati alla fine di ogni ciclo di aggiornamento se il loro stato è cambiato. Se si desidera controllare le uscite di commutazione nei dispositivi definiti dall'utente, si raccomanda la convenzione di cui sopra (vedere Variabili del gestore di carica): Nel contatore definito dall'utente si impostano variabili con i nomi "out1", "out2", ecc. e si impostano uscite nel contatore definito dall'utente che commutano l'uscita in base al valore di queste variabili.
L'API Modbus del Charging Manager viene utilizzata per controllare i dispositivi Modbus con qualsiasi indirizzo Modbus RTU o TCP (accessibile dal Charging Manager). Per Modbus RTU, inserire COMx,bd,8,p,s come indirizzo, dove x è il numero della porta COM, bd è la velocità di trasmissione, p è la parità ('N', 'E' o 'O') e s è il numero di bit di stop (1 o 2), come nella configurazione dei singoli dispositivi. Per Modbus TCP, il destinatario è l'indirizzo IP del dispositivo nella rete del Charging Manager, compreso il numero di porta.
L'URL (per HTTP GET) dell'API Modbus è:
/cnf?cmd=modbus_get o /cnf?cmd=modbus_set
Il cFos Charging Manager supporta i seguenti parametri di interrogazione aggiuntivi:
addr: L'indirizzo del dispositivo Modbus RTU o TCP di cui sopra.
func: Numero della funzione Modbus, ad esempio per la lettura 3 o 4, per la scrittura 6 o 16.
id: ID dispositivo del dispositivo Modbus.
reg: Numero del registro Modbus. Il valore può essere indicato in decimale o in esadecimale (con prefisso 0x).
val: numero, valore da scrivere nel registro. Omettere in lettura.
tipo: 'w' 16bit (predefinito), d = 32bit, f = float, q = 64bit, s = stringa.
cnt: numero, la lunghezza massima della stringa in registri; omettere per altri tipi o impostare a 1.
order: stringa, l'ordine dei byte, "hl" o "lh".
Nota: se il vostro 'contatore' ha principalmente attività di controllo, potete selezionare l'opzione 'Nascondi dispositivo' nelle impostazioni di questo riquadro in modo che questo dispositivo non appaia nella pagina iniziale.
Nota: alcuni contatori letti via HTTP richiedono un nome utente/password come autorizzazione. È possibile specificarlo nell'indirizzo per l'accesso HTTP, ad esempio con http://username:password@192.168.2.111.
Se il nome utente o la password contengono una "@", è necessario sostituirla con "%40".