Nota: O cFos Charging Manager pode ler a maioria dos inversores solares usando SunSpec (tipo de dispositivo "SunSpec Solar Inverter / Medidor"). Neste caso, não precisa de criar a sua própria definição de contador.
O cFos Charging Manager permite-lhe criar as suas próprias definições de contadores para suportar contadores que não estão disponíveis no repertório padrão. Existem atualmente três tipos: Contadores Modbus, contadores HTTP/JSON e contadores MQTT/JSON. Os ficheiros de definição para estes contadores são muito semelhantes. Os contadores Modbus lêem os seus dados a partir de determinados registos via Modbus, enquanto os contadores HTTP/JSON obtêm os seus dados através de um pedido HTTP e lêem em JSON na resposta. Para os contadores MQTT/JSON, o gestor de carregamento cFos subscreve tópicos MQTT e lê as mensagens publicadas no tópico como JSON. O gestor de carregamento cFos utiliza uma pequena "linguagem de consulta" para a leitura. Aqui está a documentação das capacidades MQTT no Gestor de Carregamento cFos.
Para além de uma gama de variáveis predefinidas, como a corrente e a tensão, os contadores definidos pelo utilizador também podem ler variáveis desconhecidas e definidas pelo utilizador, consultar entradas e definir saídas. A leitura de variáveis e a definição de saídas permitem a análise de fórmulas. Em combinação com as variáveis do Gestor de Carregamento e as saídas globais do Gestor de Carregamento descritas abaixo, esta é uma caraterística poderosa e permite até certas tarefas de domótica e o controlo de dispositivos externos, como unidades de armazenamento de baterias. Se realizar tarefas de controlo com isto, dê-nos a sua opinião. Estamos muito interessados no que os nossos clientes controlam com o Gestor de carregamento cFos e isso ajuda-nos a desenvolver o Gestor de carregamento de acordo com as necessidades dos clientes.
Aqui está uma simples definição de exemplo para Modbus que lê um único registo para poder activo. Pode facilmente modificar o número de registo para a sua aplicação específica:
Definição de exemplo para um único registo.
Aqui está uma definição de exemplo para Modbus e uma para HTTP/JSON:
Descarregar definição de amostra para o medidor Modbus
Descarregar definição de amostra para o medidor HTTP/JSON
O Gestor de Carregamento já vem com alguns destes ficheiros, mas pode carregar os seus próprios ficheiros em "Configuração do sistema" e também apagá-los novamente.
Aqui encontrará a maior parte das definições dos contadores que fornecemos:
Descarregar as definições dos contadores fornecidos
Se criou o seu próprio ficheiro de contador e este pode ser relevante para outros utilizadores, ficar-lhe-íamos muito gratos se o pudesse colocar à nossa disposição. Então entregá-lo-emos com futuras versões do Gestor de Carregamento.
Descarregar definições de contadores para contadores adicionaisAs definições do contador são ficheiros JSON com um objeto JSON global que tem propriedades e sub-objectos. "rtype" determina o tipo de operação de leitura: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. "mtype" determina o tipo de dispositivo: 0 = Outro dispositivo, 1 = Contador, 2 = Inversor, 4 = Armazenamento de bateria.
Pode especificar números em decimal ou hexadecimal com o prefixo "0x". Também são permitidos comentários de uma linha utilizando '//'.
Recomendamos que passe os seus ficheiros de definição por um validador JSON5, por exemplo, este validador JSON5 Deve ter lido o capítulo Fórmulas para compreender quais os valores que podem ser utilizados nas fórmulas da referência seguinte.
silence_period, em mseg: Determina a duração da pausa antes de um acesso Modbus RTU, de modo a que o dispositivo reconheça o início de uma mensagem. silence_same_slave, true: A pausa também é mantida para acessos múltiplos ao mesmo dispositivo. retries: O número de novas tentativas se o dispositivo não responder. rcv_timeout: em mseg: O tempo máximo de espera até que o dispositivo responda, por acesso.
modbus_read:
O número de função do comando Modbus para leitura, normalmente 3 ou 4. modbus_read_max_registers: O número máximo de registos que podem ser lidos de cada vez. modbus_allow_gaps: true = as áreas de registo não utilizadas podem ser lidas numa operação de leitura.
connect_timeout: em msec: O tempo máximo de espera para uma ligação TCP. delay_after_connect: em msec: Pausa após o estabelecimento da ligação, antes do envio do primeiro comando.
upd_delay: em msec: Determina o intervalo em que um dispositivo pode ser lido.
Alguns dispositivos ficam sobrecarregados se forem consultados com demasiada frequência. manufacturer: String, nome do fabricante.
Este é apresentado nas informações alargadas do mosaico. delay_accumulated: true = Os valores acumulados (kWh) só são consultados de 3 em 3 segundos ou se houver energia suficiente. false = Estes valores são sempre consultados. ui_addr: URL, se diferente do endereço do dispositivo para chamar a interface Web. reserved: Matriz com valores que são interpretados como 0 (útil se o dispositivo suportar determinados valores consoante o modelo).
Se omitir as propriedades acima indicadas, o gestor de carregamento cFos utiliza valores predefinidos, que funcionam bem na maioria dos casos.
O passo seguinte na definição JSON é a definição das variáveis que o aparelho utiliza para ler ou calcular os valores de corrente, tensão, etc.
O gestor de carregamento reconhece as seguintes variáveis: type_designation, version, firmware_version, serial: Estas formam a designação do modelo, tal como aparece na informação alargada do mosaico.
Estas variáveis são consultadas uma vez aquando da configuração ou reinicialização do aparelho. voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: O gestor de carregamento cFos tenta calcular a partir destes valores a tensão_l1..l3, a corrente assinada_l1..l3, a potência_w e a potência_va. Não é necessário especificar todas as variáveis.
O gestor de carregamento cFos tenta calcular os valores a partir das variáveis existentes. import_wh, export_wh: O gestor de carregamento utiliza estas variáveis para apresentar import_wh e export_wh. Para contadores unidireccionais (por exemplo, inversores), só se deve definir import_wh.
Apenas para contadores bidireccionais (como contadores de armazenamento ou de referência à rede) deve ser definido export_wh. soc: Se disponível, o estado de carga de um armazenamento de bateria é apresentado aqui em % no mosaico.
Também é possível definir outras variáveis com nomes diferentes, que são lidas em cada atualização ou calculadas através de fórmulas. Se definir variáveis que comecem por "CM.", por exemplo, CM._set_price, os valores atribuídos são armazenados nas variáveis globais do Gestor de Carregamento (ver abaixo) e podem ser consultados em conformidade.
Variáveis com *: Se definir variáveis que comecem por "*", estas são apresentadas na IU, no mosaico do contador, sob informação alargada, por exemplo, a temperatura de uma unidade de armazenamento de baterias.
Nota: Apenas os números e as letras a-z e A-Z podem ser utilizados como nomes de variáveis.
O objeto tem o mesmo nome que o nome da variável acima indicada e tem as seguintes propriedades: fixed: Cadeia de caracteres com um valor fixo.
Útil se, por exemplo, não for possível determinar um valor, por exemplo, para type_designation ou voltage. expr: Cadeia de caracteres.
A variável não é lida, mas avaliada como uma fórmula. type: Se não for fixed ou expr, o tipo da variável: int16, uint16, int32, uint32, float, int64, string. Isto é importante para o Modbus, a fim de ler os registos no formato correto. uint16 e uint32 são tipos que só podem aceitar números positivos.
Com JSON/HTTP, pode normalmente utilizar float. resolução: float. O valor lido é multiplicado por "resolução". Os valores da tensão devem ser em volts, as correntes em miliamperes, a potência em watts, a energia em watt-hora (Wh).
Com uma 'resolução' negativa, pode inverter um valor se este tiver o sinal oposto. once: bool (verdadeiro ou falso).
Se for verdadeiro, o valor só é lido uma vez quando o dispositivo é inicializado; caso contrário, é lido periodicamente. endereço: número (Modbus) ou cadeia de caracteres (HTTP/JSON).
O número de registo Modbus ou o URL HTTP do valor a ler. query: Cadeia de caracteres.
Para HTTP JSON, a especificação na linguagem de consulta do gestor de carregamento com a qual encontra o valor a ler na resposta JSON. order: String. Para Modbus, a ordem dos bytes, "hl" ou "lh", em que o valor está presente. length: número. Para Modbus, o comprimento de uma cadeia de caracteres em registos; para as variáveis "version" e "firmware_version", "length" é utilizado para transformar versões numéricas em cadeias de caracteres com pontos. São permitidos valores de 2 ou 4 para 'length', que resultam nos formatos de versão a.b, e a.b.c.d. Com 'length' 2 e tipo 'int16' ou 'uint16', o gestor de carregamento separa o byte baixo e o byte alto com um ponto, com 'int32' ou 'uint32' a palavra baixa e a palavra alta, com 'int64' a palavra baixa e a palavra alta. Com 'lenth' 4 e 'int32' ou 'uint32', o gestor de carregamento divide o valor em 4 bytes separados por um ponto.
No caso de 'int64', as 4 palavras são iguais. regex: Cadeia de caracteres. Se for especificada uma expressão regular, a resposta do contador não precisa de estar em JSON. A correspondência completa da expressão regular ou o primeiro grupo é avaliado como o resultado. Utilize-o apenas se o dispositivo não devolver JSON.
Aqui está a lista de caraterísticas das nossas expressões regulares: qualquer caractere: . classes nomeadas:
\d \s \w \D \S \W classes anónimas: [a-z0-9_], [^0-9], [^\d] grupos com alternativas: (ab|cd|ef) grupos não capturados: (?:ab|cd) (greedy) uma vez ou nenhuma: a?, a???
(guloso) muitos ou nenhum: a*, a*?
(greedy) uma ou mais vezes: a+, a+? início da cadeia: ^ fim da cadeia: $
O gestor de carregamento pode pedir até 32 valores de entrada por dispositivo a partir de vários registos ou elementos JSON. A propriedade "Inputs" é uma matriz JSON.
É necessário definir as propriedades seguintes para cada entrada: address: Endereço (registo Modbus ou URL).
count:
Número de bits de entrada que são lidos com este pedido. query: Para HTTP/JSON, linguagem de consulta para encontrar o valor na resposta.
O gestor de carregamento cFos lê todas as entradas assim definidas em cada atualização e armazena os bits internamente numa matriz, que pode depois ser consultada nas fórmulas Input1..InputN.
O gestor de carregamento pode comutar até 32 saídas por equipamento. As saídas são definidas em "outputs" como uma matriz JSON de objectos de saída. Todas as saídas são comutadas no final de cada ciclo de atualização se o estado da respectiva saída tiver mudado.
É necessário definir as seguintes propriedades no objeto de saída para cada saída: endereço: URL HTTP com método HTTP opcional, por exemplo, GET http://www.example.com?output1=${var1}. Para definir os registos Modbus, pode utilizar a API HTTP do Gestor de Carga cFos. O Charging Manager reconhece os acessos adequados no localhost e redirecciona o pedido para o manipulador interno, de modo a que não seja necessária autorização, como acontece com os acessos externos à API HTTP. Se o URL estiver vazio após todas as substituições, não é definida qualquer saída. Por exemplo, só é possível mudar as saídas se existirem determinadas variáveis (ver fórmulas: função exists()). Também pode especificar ${address} e ${id} no endereço. Este é o endereço atual do dispositivo e o ID Modbus, tal como definido nas definições.
'address' e 'id' são utilizados principalmente para utilizar a API Modbus (ver abaixo). body: Corpo HTTP opcional para POST ou PUT.
No URL e no corpo, é possível utilizar fórmulas que fazem referência a variáveis globais do gestor de carregamento ou do respetivo contador utilizando ${expr}. A fórmula "expr" é avaliada quando a saída é definida e substituída no texto do URL ou do corpo. Se, no exemplo acima, http://www.example.com?output1=1 definir a saída e http://www.example.com?output1=0 a eliminar, pode definir uma variável 'var1' e defini-la como 1 ou 0, conforme necessário. Desta forma, também é possível escrever valores numéricos para controlar o desempenho da memória nos registos Modbus, que foram previamente armazenados numa variável através de uma fórmula.
Se, em vez de passar um valor numérico, precisar de substituir um texto no URL por outro, dependendo da fórmula, por exemplo, para tomadas Shelly WLAN, pode escrever isto da seguinte forma: ${if expr`text1`text2}. O "apóstrofo" é um backtick (código ASCII 96). Se 'expr' != 0, text1 é usado, caso contrário text2. Para a tomada WLAN Shelly, o URL tem o seguinte aspeto, por exemplo: http://<ip-addr>/relay/0?turn=${if expr`on`off}, ou seja, se expr != 0, o gestor de carregamento chama http://<ip-addr>/relay/0?turn=on, caso contrário http://<ip-addr>/relay/0?turn=off.
Se introduzir um caminho relativo como URL, o gestor de carregamento utiliza o endereço configurado para o respetivo aparelho. Se introduzir "localhost" como domínio, o gestor de carregamento utiliza o endereço do aparelho em que está a funcionar. Se reconhecer o acesso à sua própria API, utiliza o manipulador interno em vez de executar um acesso HTTP completo, para que não seja necessário introduzir um nome de utilizador e uma palavra-passe na definição do contador. Um URL que comece por um "*" faz com que o gestor de carregamento execute sempre um acesso HTTP completo.
Repor as saídas: Para além de uma matriz "outputs", também pode definir uma matriz denominada "resets" que está estruturada como a matriz "outputs". Isto permite que as saídas sejam repostas nos seus valores iniciais quando o dispositivo é desativado. Isto pode ser utilizado em combinação com variáveis definidas pelo utilizador e "once": true para repor o dispositivo no seu estado inicial.
Escrever as saídas periodicamente: Para alguns dispositivos, as saídas têm de ser escritas periodicamente, caso contrário o dispositivo repõe os valores por defeito. Por exemplo, a memória Kostal volta às suas regras por defeito se o controlo da memória não tiver sido ativamente escrito durante algum tempo. Para definir as saídas periodicamente, pode prefixar o endereço com #xxx#, onde xxx indica quantos segundos a saída é reescrita, mesmo que o valor a ser escrito tenha permanecido o mesmo. Por exemplo, se o endereço for /cnf?cmd=set_cm_vars&name=test&val=42, pode utilizar #30#/cnf?cmd=set_cm_vars&name=test&val=42 para garantir que este valor é escrito de 30 em 30 segundos.
Actualmente, os nomes dos membros e dos operadores "." e "[]" podem ser utilizados nas expressões de pesquisa "consulta", exemplos:
teste | Elemento denominado "teste" |
nome1.nome2 | Elemento chamado "nome2" no objecto infantil "nome1 |
nome[idx] | Elemento "idx" do elemento objecto "nome". "idx" pode ser um número, por exemplo, para arrays ou um fio |
nome["u2"] | O elemento "u2" do elemento objecto "nome", corresponde a "name.u2" |
nome[{"el1": "v1", "el2": 3}].valor | Seleccionar o elemento da matriz que preenche a condição da notação do objecto e avaliar o elemento denominado 'valor'. Aqui, por exemplo, na matriz 'nome', é seleccionado o elemento que tem como elemento objecto 'el1' com valor 'v1' e 'el2' com valor 3 e depois o valor do elemento 'valor' é devolvido a partir deste objecto. |
É possível criar variáveis na configuração do Charging Manager. É possível utilizar um valor fixo ou uma fórmula como valor. No final de cada ciclo de atualização, o gestor de carregamento recalcula o valor destas variáveis, se necessário. É possível utilizá-las em (determinados) parâmetros do gestor de carregamento, regras de carregamento ou para controlar as saídas. Também é possível escrever Ex.member ou Mx.member como uma variável. Neste caso, Exe Mxsão a identificação do aparelho de uma Wallbox ou de um contador configurado no gestor de carregamento. 'member' é uma variável "definida pelo utilizador" que é guardada no aparelho correspondente. Algumas das variáveis podem ter um significado especial: Para a KEBA, 'out1' é uma saída de comutação, para os contadores ABB B23, 'out1' e 'out2' são saídas de comutação (para os modelos que suportam isto). Um 1 liga a saída, um 0 desliga-a novamente.
Se tiver aparelhos que têm de ser ligados em determinadas condições, mas que depois funcionam durante algum tempo (por exemplo, máquina de lavar roupa, máquina de lavar louça), pode também definir a variável como um "accionador". Assim, a fórmula da variável é a condição em que a variável é definida como 1. Após um período de tempo ajustável, é novamente definida para 0. Uma "condição de retractação" permite que o tempo até à desactivação (ou seja, colocar a variável a 0) seja repetidamente prolongado, desde que a condição seja cumprida.
Nota: Apenas os números e as letras a-z e A-Z podem ser utilizados como nomes de variáveis.
Para efeitos de teste, é possível apresentar variáveis do gestor de carregamento e do contador, por exemplo, os preços actuais do Awattar:
Na configuração do gestor de carregamento, é possível configurar as saídas globais como descrito acima na definição do contador em "Saídas". Estas são definidas no final de cada ciclo de atualização se o seu estado tiver mudado. Se quiser controlar as saídas de comutação em aparelhos definidos pelo utilizador, recomenda-se a convenção acima (ver Variáveis do gestor de carregamento): Define variáveis com os nomes "out1", "out2", etc. no contador definido pelo utilizador e define saídas no contador definido pelo utilizador que comutam a saída dependendo do valor destas variáveis.
A API Modbus do gestor de carregamento é utilizada para controlar os equipamentos Modbus que tenham qualquer endereço Modbus RTU ou TCP (acessível a partir do gestor de carregamento). Tal como na configuração dos aparelhos individuais, introduza COMx,bd,8,p,s como endereço para Modbus RTU, em que x é o número da porta COM, bd a velocidade de transmissão, p a paridade ("N", "E" ou "O") e s o número de bits de paragem (1 ou 2). Para Modbus TCP, o endereço é o endereço IP do aparelho na rede do gestor de carregamento, incluindo o número da porta.
O URL (para HTTP GET) da API Modbus é: /cnf?cmd=modbus_get ou /cnf?cmd=modbus_set O gestor de carregamento cFos suporta os seguintes parâmetros de consulta adicionais: addr:
O endereço do dispositivo Modbus RTU ou TCP mencionado acima. func: Número da função Modbus, por exemplo, para leitura 3 ou 4, para escrita 6 ou 16. id: ID do dispositivo Modbus. reg: O número do registo Modbus.
O valor pode ser especificado em decimal ou hexadecimal (com o prefixo 0x). val: número: Valor a escrever no registo.
Omitir durante a leitura. type: 'w' 16bit (predefinição), d = 32bit, f = float, q = 64bit, s = string.
c nt: número: O comprimento máximo da cadeia em registos; omitir para outros tipos ou definir como 1. order: cadeia: A ordem dos bytes, "hl" ou "lh".
Nota: Se o seu 'contador' tiver principalmente tarefas de controlo, pode assinalar a opção 'Ocultar dispositivo' nas definições deste azulejo para que este dispositivo não apareça na página inicial.
Nota: Alguns contadores que são lidos via HTTP requerem um nome de utilizador/palavra-passe como autorização. Pode especificá-lo no endereço para acesso HTTP, por exemplo com _COPY2@192.168.2.111.
Se o seu nome de utilizador ou palavra-chave contiver um "@", deve substituí-lo por "%40".