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 non disponibili nel 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 da determinati registri via Modbus, mentre i contatori HTTP/JSON recuperano i loro dati tramite richiesta HTTP e leggono in JSON in risposta. Per i contatori MQTT/JSON, il cFos Charging Manager si iscrive ai topic MQTT e legge i messaggi pubblicati sotto il topic come JSON. Il cFos Charging Manager utilizza un piccolo "Query Language" per la lettura. 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 anche leggere variabili sconosciute e definite dall'utente, interrogare gli ingressi e impostare le uscite. La lettura delle variabili e l'impostazione delle uscite consentono di analizzare 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 alcuni compiti di automazione domestica e di controllare dispositivi esterni come le unità di accumulo delle batterie. Se si realizzano attività di controllo con questa funzione, si prega di fornire un feedback. Siamo molto interessati a ciò che i nostri clienti 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. Per capire quali valori possono essere utilizzati nelle formule del seguente riferimento, è necessario aver letto il capitolo Formule.
silence_period, in msec: determina 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 mantenuta anche per accessi multipli allo stesso dispositivo. retries: il numero di tentativi se il dispositivo non risponde. rcv_timeout: in msec: il tempo massimo di attesa fino alla risposta del dispositivo, per ogni accesso.
modbus_read:
Il numero di funzione del comando Modbus per la lettura, 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: pausa dopo che la connessione è stata stabilita prima dell'invio del 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: String, 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 chiamare 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 utilizza valori predefiniti, che funzionano bene nella maggior parte dei casi.
Il passo successivo nella definizione JSON è la definizione delle variabili che il misuratore utilizza per leggere o calcolare i valori di corrente, tensione, ecc.
Il Charging Manager riconosce le seguenti variabili: type_designation, version, firmware_version, serial: Queste formano la designazione del modello, come visualizzato 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 tenta di calcolare da questi valori tensione_l1..l3, corrente_l1..l3 firmata, power_w e power_va. Non è necessario specificare tutte le variabili.
Il Charging Manager di cFos tenta 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 definire solo import_wh.
Solo per i contatori bidirezionali (come quelli di accumulo o di riferimento per la rete) è necessario definire export_wh. soc: se disponibile, lo stato di carica di una batteria di accumulo viene visualizzato qui in % nel riquadro.
È 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 '*', queste vengono visualizzate nell'interfaccia utente nel riquadro del contatore sotto le informazioni estese, ad esempio la temperatura di un'unità di accumulo della batteria.
Nota: come nomi di variabili si possono usare solo numeri e le lettere a-z e A-Z.
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 type_designation o voltage. 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. risoluzione: float. Il valore letto viene moltiplicato per 'risoluzione'. 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 vero, il valore viene letto una sola volta quando il dispositivo viene inizializzato, altrimenti viene letto periodicamente. indirizzo: numero (Modbus) o stringa (HTTP/JSON).
Il numero di registro Modbus o l'URL HTTP del valore da leggere. query: Stringa.
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: numero. Per Modbus, la lunghezza di una stringa in registri; per le variabili "version" e "firmware_version", "length" è usato per trasformare le versioni numeriche in stringhe con punti. Per 'length' sono ammessi valori di 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. Da utilizzare 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ò richiedere fino a 32 valori di input per dispositivo da vari registri o elementi JSON. La proprietà "Inputs" è un array JSON.
Per ogni ingresso è necessario definire le seguenti proprietà: address: indirizzo (registro Modbus o URL).
count:
Numero di bit di ingresso 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 a ogni aggiornamento e memorizza 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 output: 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 riconosce gli accessi idonei su localhost e reindirizza la richiesta al gestore interno, in modo da non richiedere l'autorizzazione come nel caso di 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()). È anche possibile specificare ${indirizzo} e ${id} nell'indirizzo. Si tratta dell'indirizzo corrente del dispositivo e dell'ID Modbus definiti nelle impostazioni.
'indirizzo' e 'id' sono utilizzati principalmente per utilizzare l'API Modbus (vedere sotto). body: corpo HTTP opzionale per POST o PUT.
Nell'URL e nel corpo si può usare ${expr} per utilizzare formule che fanno riferimento a variabili globali del gestore di carica o al rispettivo contatore. La formula 'expr' viene valutata quando l'output viene impostato e sostituito 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 a seconda delle esigenze. In questo modo, è anche possibile scrivere 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, è necessario sostituire un testo nell'URL con un altro a seconda della formula, ad esempio per le prese Shelly WLAN, si può scrivere come segue: ${if expr`testo1`testo2}. L'"apostrofo" è un backtick (codice ASCII 96). Se 'expr' != 0, viene utilizzato il testo1, altrimenti il testo2. Per la presa Shelly WLAN, l'URL ha quindi il seguente aspetto, ad esempio: 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 utilizzerà 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 riconosce l'accesso alla propria API, utilizza il gestore interno invece di eseguire un accesso HTTP completo, in modo da non dover inserire un nome utente e una password nella definizione del contatore. Un URL che inizia con un '*' fa 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". Ciò consente di ripristinare i valori iniziali delle uscite quando il dispositivo viene disattivato. Questo può essere utilizzato in combinazione con variabili definite dall'utente e con "once": true per ripristinare il dispositivo allo stato iniziale.
Scrivere le uscite periodicamente: Per alcuni dispositivi, le uscite devono essere scritte periodicamente, altrimenti il dispositivo ripristina i valori di "default". Ad esempio, la memoria Kostal ritorna alle sue regole predefinite se il controllo della memoria non viene scritto attivamente per un certo periodo di tempo. Per impostare le uscite periodicamente, è possibile anteporre all'indirizzo il prefisso #xxx#, dove xxx indica per quanti secondi l'uscita viene riscritta, 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. Alla fine di ogni ciclo di aggiornamento, il Charging Manager ricalcola il valore di queste variabili, se necessario. È quindi possibile utilizzarle in (determinati) parametri del Charging Manager, nelle regole di tariffazione o per controllare le uscite. È anche possibile scrivere Ex.member o Mx.member come variabile. In questo caso, Exe Mxsono l'ID del dispositivo di un wallbox o di un contatore impostato nel Charging Manager. member" è una variabile "definita dall'utente" che viene salvata nel dispositivo corrispondente. Alcune variabili possono avere un significato speciale: 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.
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.
Nota: come nomi delle variabili si possono usare solo numeri e le lettere a-z e A-Z.
A scopo di test, è possibile visualizzare le variabili del gestore di ricarica 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". Queste vengono impostate 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 Charging Manager): Si impostano variabili con i nomi "out1", "out2", ecc. nel contatore definito dall'utente 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). Come nella configurazione dei singoli dispositivi, inserire COMx,bd,8,p,s come indirizzo per Modbus RTU, 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). Per Modbus TCP, l'indirizzo è 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 Charging Manager cFos 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 del dispositivo Modbus. reg: Il numero del registro Modbus.
Il valore può essere specificato in decimale o in esadecimale (con il prefisso 0x). val: numero: valore da scrivere nel registro.
Omettere in lettura. tipo: 'w' 16bit (default), d = 32bit, f = float, q = 64bit, s = stringa.
c nt: 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".