Contatori definiti dall'utente

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 due tipi: Contatori Modbus e Contatori HTTP/JSON. I file di definizione di questi contatori sono molto simili. I contatori Modbus leggono i dati via Modbus da registri specifici, mentre i contatori HTTP/JSON recuperano i dati tramite richiesta HTTP e analizzano JSON come risposta. Il cFos Charging Manager utilizza un piccolo "linguaggio di interrogazione" per l'analisi.

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 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 contatori

Struttura di un file di definizione:

Le definizioni dei contatori sono file JSON con un oggetto JSON globale che ha proprietà e oggetti figli. 'rtype' determina il tipo di operazione di lettura: 0 = Modbus, 1 = HTTP/JSON. I numeri possono essere specificati facoltativamente in decimale o in esadecimale con il prefisso 0x. Inoltre, sono consentiti i 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, è necessario aver letto il capitolo Formule nel seguente riferimento.

Le definizioni Modbus hanno un oggetto 'rtu' con le seguenti proprietà:

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.

Queste proprietà globali si applicano a Modbus TCP e RTU:

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.

Per Modbus TCP e HTTP/JSON esiste un oggetto 'tcp' con le seguenti proprietà:

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.

Entrambi i tipi di definizione (Modbus e HTTP/JSON) hanno le seguenti proprietà aggiuntive:

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.
riservato: 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 il contatore 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 interrogati una volta quando si imposta o si resetta il contatore.
tensione_l1..tensione_l3, corrente_l1..corrente_l3, potenza_w, potenza_var, potenza_va, potenza_w_l1..potenza_w_l3, potenza_w_l1_meno..power_w_l3_minus, power_w_import, power_w_export: il gestore di carica cFos cerca di calcolare i valori di tensione_l1..l3, corrente firmata_l1..l3, power_w e power_va da questi. Non è necessario specificare tutte le variabili. Il cFos Charging Manager cerca di calcolare i valori dalle variabili esistenti.
import_wh, export_wh, import_wh_l1..import_wh_l3, export_wh_l1..export_wh_l3: Il Charging Manager utilizza queste variabili per calcolare import_wh e export_wh. Non è necessario specificare tutte le variabili. Il cFos Charging Manager cerca di calcolare i valori dalle variabili esistenti.

Inoltre, è possibile definire altre variabili con nomi diversi che vengono lette o calcolate con formule a ogni aggiornamento.

Definizione di una variabile:

L'oggetto prende il nome dalla variabile elencata sopra e ha le seguenti proprietà:
fixed: stringa con 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 della variabile: int16, int32, float, int64, string. Questo è importante per Modbus per leggere i registri nel formato corretto. Per JSON/HTTP di solito si possono prendere i 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). La "risoluzione" negativa consente di invertire un valore se è di segno opposto.
indirizzo: numero (Modbus) o stringa (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. Con le variabili 'version' e 'firmware_version', 'length' viene usato per trasformare le versioni numeriche in stringhe con punti. Per "lunghezza" sono ammessi valori di 2 o 4, che si traducono nei formati a.b e a.b.c.d.. Per la 'lunghezza' 2 e il tipo 'int16' il Charging Manager separa il byte basso e alto con un punto, per l'int32 la parola bassa e alta, per l'int64 la parola bassa e alta. Per 'lenth' 4 e 'int32', il Charging Manager divide il valore in 4 byte separati da un punto. Per 'int64', le 4 parole corrispondono.

Definizione degli ingressi:

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....

Definizione di uscite:

Il Charging Manager può commutare fino a 32 uscite per unità. Tutte le uscite vengono commutate alla fine di ogni ciclo di aggiornamento se lo stato della rispettiva uscita è cambiato.
È necessario definire le seguenti proprietà per ogni ingresso:
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 di cFos Charging Manager. 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 alle API HTTP.
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'uscita e http://www.example.com?output1=0 la cancella, è possibile definire una variabile 'var1' e impostarla a 1 o a 0 come desiderato. 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 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 ha il seguente aspetto: 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 nome utente e password nella definizione del contatore. Un URL che inizia con un * fa sì che il Charging Manager esegua sempre un accesso HTTP completo.

Definizione di query langage:

Attualmente, i nomi dei membri e gli operatori "." e "[]" possono essere utilizzati nelle espressioni di ricerca "query", ad esempio:

testElemento denominato "test"
nome1.nome2Elemento 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}].valueSelezionare 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.

Variabili di Global Charging Manager:

È 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.

Uscite del gestore di carica globale:

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.

API Modbus globale del Charging Manager:

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".