Documentatión

Contadores definidos por el usuario

Nota: El gestor de carga cFos puede leer la mayoría de los inversores de energía solar que utilizan SunSpec (tipo de dispositivo "Inversor de energía solar / Medidor SunSpec"). En este caso, no es necesario crear una definición de contador propia.

CFos Charging Manager le permite crear sus propias definiciones de contadores para admitir contadores que no están disponibles en el repertorio estándar. Actualmente existen tres tipos: Contadores Modbus, Contadores HTTP/JSON y Contadores MQTT/JSON. Los archivos de definición para estos contadores son muy similares. Los contadores Modbus leen sus datos de ciertos registros vía Modbus, mientras que los contadores HTTP/JSON recuperan sus datos vía petición HTTP y leen en JSON como respuesta. Para los contadores MQTT/JSON, el cFos Charging Manager se suscribe a temas MQTT y lee los mensajes publicados bajo el tema como JSON. El cFos Charging Manager utiliza un pequeño "Lenguaje de Consulta" para la lectura. Aquí está la documentación de las capacidades MQTT en el cFos Charging Manager.

Además de una serie de variables predefinidas, como la corriente y la tensión, los contadores definidos por el usuario también pueden leer variables desconocidas y definidas por el usuario, consultar entradas y ajustar salidas. La lectura de variables y la configuración de salidas permiten analizar fórmulas. En combinación con las variables del Gestor de carga y las salidas globales del Gestor de carga que se describen a continuación, se trata de una potente función que permite incluso realizar determinadas tareas de domótica y controlar dispositivos externos, como unidades de almacenamiento de baterías. Si realiza tareas de control con esto, por favor, dénos su opinión. Nos interesa mucho lo que nuestros clientes controlan con el Gestor de Carga cFos y nos ayuda a seguir desarrollando el Gestor de Carga de acuerdo con las necesidades de los clientes.

He aquí un ejemplo sencillo de definición para Modbus que lee un único registro para la potencia activa. Puede modificar fácilmente el número de registro para su aplicación específica:
Ejemplo de definición para un único registro.

Aquí hay un ejemplo de definición para Modbus y otro para HTTP/JSON:
Descargue la definición de muestra para el contador Modbus
Descargue la definición de ejemplo para el medidor HTTP/JSON

El Charging Manager ya viene con algunos archivos de este tipo, pero usted puede cargar sus propios archivos en "Configuración del sistema" y también borrarlos de nuevo.
Aquí encontrará la mayoría de las definiciones de contadores que ofrecemos:
Descargar las definiciones de los contadores suministrados

Si has creado tu propio archivo de contadores y puede ser relevante para otros usuarios, te agradeceríamos que lo pusieras a nuestra disposición. Entonces lo entregaremos con futuras versiones del Charging Manager.

Descargue las definiciones de los contadores adicionales

Estructura de un archivo de definición:

Las definiciones de contador son archivos JSON con un objeto JSON global que tiene propiedades y subobjetos. rtype' determina el tipo de operación de lectura: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. mtype' determina el tipo de dispositivo: 0 = Otro dispositivo, 1 = Contador, 2 = Inversor, 4 = Almacenamiento en batería.

Puede especificar números en decimal o hexadecimal con el prefijo '0x'. También se permiten comentarios de una sola línea utilizando '//'.

Recomendamos pasar los ficheros de definición por un validador JSON5, por ejemplo este validador JSON5 Es imprescindible haber leído el capítulo Fórmulas para entender qué valores se pueden utilizar en las fórmulas de la siguiente referencia.

Las definiciones de Modbus tienen un objeto 'rtu' con las siguientes propiedades:




silence_period, en mseg: Determina la duración de la pausa antes de un acceso Modbus RTU para que el dispositivo reconozca el inicio de un mensaje. silence_same_slave, true: La pausa también se mantiene para múltiples accesos al mismo dispositivo. retries: El número de reintentos si el dispositivo no responde. rcv_timeout: en mseg: El tiempo máximo de espera hasta que el dispositivo responde, por acceso.

Estas propiedades globales se aplican a Modbus TCP y RTU:

modbus_read:

El número de función del comando Modbus de lectura, normalmente 3 ó 4. modbus_read_max_registers: El número máximo de registros que se pueden leer a la vez. modbus_allow_gaps: true = se pueden leer áreas de registro no utilizadas en una operación de lectura.

Para Modbus TCP y HTTP/JSON hay un objeto 'tcp' con las siguientes propiedades:


connect_timeout: en mseg: Tiempo máximo de espera para una conexión TCP. delay_after_connect: en mseg: Pausa después de establecer la conexión antes de enviar el primer comando.

Ambos tipos de definición (Modbus y HTTP/JSON) tienen las siguientes propiedades adicionales:

upd_delay: en mseg: Determina el intervalo en el que se puede leer un dispositivo.
Algunos dispositivos se sobrecargan si se consultan con demasiada frecuencia. manufacturer: String, nombre del fabricante.


Se muestra en la información ampliada de la ficha. delay_accumulated: true = Los valores acumulados (kWh) sólo se consultan cada 3 segundos o si hay potencia suficiente. false = Estos valores se consultan siempre. ui_addr: URL, si es diferente de la dirección del dispositivo para llamar a la interfaz web. reserved: Matriz con valores que se interpretan como 0 (útil si el dispositivo admite ciertos valores según el modelo).

Si omite las propiedades listadas arriba, el Gestor de Carga cFos utiliza valores por defecto, que funcionan bien en la mayoría de los casos.

El siguiente paso en la definición JSON es la definición de variables que el medidor utiliza para leer o calcular valores de corriente, tensión, etc.
El Gestor de Carga reconoce las siguientes variables: designación_tipo, versión, versión_firmware, serie: Estas forman la designación del modelo, como se muestra en la información extendida de la ficha.
Se consultan una vez al configurar o reiniciar el contador. voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: El Gestor de Carga cFos intenta calcular a partir de estos valores para voltage_l1..l3, signed current_l1..l3, power_w y power_va. No es necesario especificar todas las variables.
El Gestor de carga cFos intenta calcular los valores a partir de las variables existentes. import_wh, export_wh: El Gestor de carga utiliza estas variables para mostrar import_wh y export_wh. Para contadores unidireccionales (por ejemplo, inversores), sólo debe definir import_wh.

Sólo para contadores bidireccionales (como acumuladores o contadores de referencia de red) debe definirse export_wh. soc: Si está disponible, el estado de carga de un acumulador de baterías se muestra aquí en % en el mosaico.
También puede definir otras variables con nombres diferentes, que se leen con cada actualización o se calculan mediante fórmulas. Si se definen variables que empiezan por 'CM.', por ejemplo CM._set_price, los valores asignados se almacenan en las variables globales del Gestor de Carga (ver más abajo) y pueden consultarse en consecuencia.
Variables con *: Si se definen variables que empiezan por '*', éstas se muestran en la interfaz de usuario, en el mosaico del contador, bajo la información ampliada, por ejemplo, la temperatura de una unidad de almacenamiento de baterías.
Nota: Sólo se pueden utilizar números y las letras a-z y A-Z como nombres de variables.

Definición de una variable:


El objeto recibe el nombre de la variable indicada anteriormente y tiene las siguientes propiedades: fixed: Cadena con un valor fijo.
Útil si, por ejemplo, no se puede determinar ningún valor, por ejemplo para designación_tipo o tensión. expr: Cadena.
La variable no se lee, sino que se evalúa como una fórmula. type: Si no es fixed o expr, el tipo de la variable: int16, uint16, int32, uint32, float, int64, string. Esto es importante para Modbus con el fin de leer los registros en el formato correcto. uint16 y uint32 son tipos que sólo pueden aceptar números positivos.
Con JSON/HTTP, normalmente se puede utilizar float. resolución: float. El valor leído se multiplica por 'resolution'. Los valores de tensión deben estar en voltios, los de corriente en miliamperios, los de potencia en vatios y los de energía en vatios-hora (Wh).
Con 'resolución' negativa se puede invertir un valor si tiene el signo contrario. once: bool (verdadero o falso).
Si es verdadero, el valor sólo se lee una vez cuando se inicializa el dispositivo; en caso contrario, se lee periódicamente. address: número (Modbus) o cadena (HTTP/JSON).
El número de registro Modbus o la URL HTTP del valor a leer. query: Cadena.
Para HTTP JSON, la especificación en el lenguaje de consulta del Gestor de Carga con la que encuentra el valor a leer en la respuesta JSON. order: String. Para Modbus, el orden de bytes, "hl" o "lh", en el que está presente el valor. length: número. Para Modbus, la longitud de una cadena en registros; para las variables "version" y "firmware_version", "length" se utiliza para convertir versiones numéricas en cadenas con puntos. Se permiten valores de 2 ó 4 para 'length', que dan como resultado los formatos de versión a.b, y a.b.c.d. Con 'length' 2 y tipo 'int16' o 'uint16', el Gestor de Carga separa byte bajo y alto con un punto, con 'int32' o 'uint32' palabra baja y alta, con 'int64' dword bajo y alto. Para 'lenth' 4 e 'int32' o 'uint32', el Gestor de Cargos divide el valor en 4 bytes separados por un punto.
Para 'int64' las 4 palabras correspondientemente. regex: Cadena. Si se especifica una expresión regular, no es necesario que la respuesta del contador esté en JSON. Se evalúa como resultado la coincidencia completa de la expresión regular o el primer grupo. Utilícelo sólo si el dispositivo no devuelve JSON.

Esta es la lista de características de nuestras expresiones regulares: any char: . named classes:



\d \s \w \D \S \W clases anónimas: [a-z0-9_], [^0-9], [^\d] grupos con alternativas: (ab|cd|ef) grupos no capturados: (?:ab|cd) (codicioso ) una vez o ninguna: a?, a???
(codicioso) muchas o ninguna: a*, a*?


(codicioso ) una o más veces: a+, a+? inicio de cadena: ^ fin de cadena: $

Definición de las entradas:

El Gestor de carga puede solicitar hasta 32 valores de entrada por dispositivo a partir de varios registros o elementos JSON. La propiedad "Entradas" es una matriz JSON.
Debe definir las siguientes propiedades para cada entrada: address: Dirección (registro Modbus o URL).
count:
Número de bits de entrada que se leen con esta petición. query: Para HTTP/JSON, lenguaje de consulta para encontrar el valor en la respuesta.

El Gestor de Carga cFos lee todas las entradas definidas de este modo con cada actualización y almacena los bits internamente en una matriz, que luego se puede consultar en fórmulas, Input1..InputN.

Definición de salidas:

El Gestor de Carga puede conmutar hasta 32 salidas por dispositivo. Las salidas se definen en "salidas" como una matriz JSON de objetos de salida. Todas las salidas se conmutan al final de cada ciclo de actualización si el estado de la salida respectiva ha cambiado.

Debe definir las siguientes propiedades en el objeto de salida para cada salida: dirección: URL HTTP con método HTTP opcional, por ejemplo, GET http://www.example.com?output1=${var1}. Para configurar los registros Modbus, puede utilizar la API HTTP del Gestor de carga cFos. El gestor de carga reconoce los accesos adecuados en localhost y redirige la solicitud al gestor interno para que no necesite autorización como con los accesos API HTTP externos. Si la URL está vacía después de todas las sustituciones, no se establece ninguna salida. Por ejemplo, sólo puede cambiar las salidas si existen determinadas variables (consulte las fórmulas: función exists()). También puede especificar ${address} y ${id} en la dirección. Esta es la dirección del dispositivo actual y Modbus ID como se define en la configuración.
'address' e 'id' se utilizan principalmente para utilizar la API Modbus (ver más abajo). body: Cuerpo HTTP opcional para POST o PUT.
En la URL y en el cuerpo, puede utilizar ${expr} para utilizar fórmulas que hagan referencia a variables globales del gestor de carga o del contador correspondiente. La fórmula 'expr' se evalúa cuando se establece la salida y se sustituye en el texto de la URL o el cuerpo. Si, en el ejemplo anterior, http://www.example.com?output1=1 establece la salida y http://www.example.com?output1=0 la borra, puede definir una variable 'var1' y establecerla en 1 o 0 según sea necesario. De esta forma, también puedes escribir valores numéricos para controlar el rendimiento de la memoria en los registros Modbus, que previamente habrás almacenado en una variable mediante una fórmula.
Si, en lugar de pasar un valor numérico, necesita sustituir un texto de la URL por otro en función de la fórmula, por ejemplo, para las tomas WLAN de Shelly, puede escribirlo de la siguiente forma: ${if expr`text1`text2}. El "apóstrofo" es un "backtick" (código ASCII 96). Si 'expr' != 0, se utiliza text1, en caso contrario text2. Para la toma WLAN de Shelly, la URL tiene el siguiente aspecto, por ejemplo: http://<ip-addr>/relay/0?turn=${if expr`on`off}, es decir, si expr != 0, el gestor de carga llama a http://<ip-addr>/relay/0?turn=on, de lo contrario a http://<ip-addr>/relay/0?turn=off.

Si introduce una ruta relativa como URL, el gestor de carga utilizará la dirección configurada para el dispositivo correspondiente. Si introduce "localhost" como dominio, el gestor de carga toma la dirección del dispositivo en el que se está ejecutando. Si reconoce el acceso a su propia API, utiliza el manejador interno en lugar de ejecutar un acceso HTTP completo para que no tenga que introducir un nombre de usuario y una contraseña en la definición del contador. Una URL que empiece por '*' hace que el Gestor de cobros ejecute siempre un acceso HTTP completo.

Restablecer salidas: Además de una matriz de "salidas", también puede definir una matriz denominada "resets" que está estructurada como la matriz de "salidas". Esto permite restablecer los valores iniciales de las salidas cuando se desactiva el dispositivo. Esto se puede utilizar en combinación con variables definidas por el usuario y "once": true para restablecer el dispositivo a su estado inicial.
Escribir salidas periódicamente: Para algunos dispositivos, las salidas deben escribirse periódicamente, de lo contrario el dispositivo restablecerá los valores a "por defecto". Por ejemplo, la memoria Kostal vuelve a sus reglas por defecto si el control de memoria no se ha escrito activamente durante un tiempo. Para ajustar las salidas periódicamente, puede anteponer a la dirección #xxx#, donde xxx indica cuántos segundos se reescribe la salida, aunque el valor a escribir haya permanecido igual. Por ejemplo, si la dirección es /cnf?cmd=set_cm_vars&name=test&val=42, puede utilizar #30#/cnf?cmd=set_cm_vars&name=test&val=42 para asegurarse de que este valor se escribe cada 30 segundos.

Definición del lenguaje de consulta:

Actualmente, los nombres de los miembros y los operadores "." y "[]" pueden utilizarse en las expresiones de búsqueda "query", ejemplos:

pruebaElemento llamado "test"
nombre1.nombre2Elemento llamado "nombre2" en objeto hijo "nombre1"
nombre[idx]Elemento "idx" del elemento objeto "nombre". "idx" puede ser un número, por ejemplo, para matrices o una cadena
nombre["u2"]Elemento "u2" del elemento objeto "nombre", corresponde a "nombre.u2"
name[{"el1": "v1", "el2": 3}].valueSe selecciona el elemento del array que cumple la condición de la notación de objeto y se evalúa el elemento denominado 'valor'. Aquí, por ejemplo, en el array 'nombre', se selecciona el elemento que tiene como objeto los elementos 'el1' con valor 'v1' y 'el2' con valor 3 y luego se devuelve el valor del elemento 'valor' de este objeto.

Variables del Gestor global de cobros:

Puede crear variables en la configuración del Gestor de cobros. Puede utilizar un valor fijo o una fórmula como valor. Al final de cada ciclo de actualización, el gestor de tarificación recalcula el valor de estas variables si es necesario. A continuación, puede utilizarlas en (determinados) parámetros del Gestor de cobros, reglas de tarificación o para controlar las salidas. También puede escribir Ex.member o Mx.member como variable. En este caso, Exy Mxson el ID de dispositivo de una Wallbox o un contador configurado en el Gestor de carga. 'miembro' es una variable "definida por el usuario" que se guarda en el dispositivo correspondiente. Algunas de las variables pueden tener un significado especial: Para KEBA, 'out1' es una salida de conmutación, para los contadores ABB B23, 'out1' y 'out2' son salidas de conmutación (para los modelos que lo soportan). Un 1 activa la salida, un 0 la desactiva de nuevo.

Si tienes electrodomésticos que deben encenderse en determinadas condiciones, pero luego funcionan durante un tiempo (por ejemplo, lavadora, lavavajillas), también puedes definir la variable como "activador". Entonces la fórmula de la variable es la condición con la que la variable se pone a 1. Después de un tiempo ajustable, se vuelve a poner a 0. Una "condición de reactivación" permite prolongar una y otra vez el tiempo hasta la desconexión (es decir, la puesta a 0 de la variable) siempre que se cumpla la condición.

Nota: Sólo se pueden utilizar números y las letras a-z y A-Z como nombres de variables.

Para realizar pruebas, puede visualizar las variables del gestor de tarificación y del contador, por ejemplo, los precios actuales de Awattar:


                        Visualización de las variables del contador

Salidas del Gestor Global de Cargas:

En la configuración del Gestor de cargas, puede configurar salidas globales como se describe anteriormente en la definición del contador en "Salidas". Éstas se configuran al final de cada ciclo de actualización si su estado ha cambiado. Si desea controlar salidas de conmutación en dispositivos definidos por el usuario, se recomienda seguir la convención anterior (véase Variables del Gestor de carga): Se establecen variables con los nombres "out1", "out2", etc. en el contador definido por el usuario y se establecen salidas en el contador definido por el usuario que conmutan la salida en función del valor de estas variables.

API Modbus global del gestor de carga:

La API Modbus del Gestor de cobros se utiliza para controlar dispositivos Modbus que tengan cualquier dirección Modbus RTU o TCP (accesible desde el Gestor de cobros). Al igual que en la configuración de los dispositivos individuales, introduzca COMx,bd,8,p,s como dirección para Modbus RTU, donde x es el número de puerto COM, bd la velocidad en baudios, p la paridad ('N', 'E' u 'O') y s el número de bits de parada (1 ó 2). Para Modbus TCP, la dirección es la dirección IP del dispositivo en la red de Charging Manager, incluido el número de puerto.



La URL (para HTTP GET) de la API Modbus es: /cnf?cmd=modbus_get o /cnf?cmd=modbus_set El Gestor de carga cFos admite los siguientes parámetros de consulta adicionales: addr:


La dirección de dispositivo Modbus RTU o TCP mencionada anteriormente. func: Número de función Modbus, por ejemplo, para lectura 3 o 4, para escritura 6 o 16. id: ID de dispositivo del dispositivo Modbus. reg: El número de registro Modbus.
El valor se puede especificar en decimal o hexadecimal (con el prefijo 0x). val: número: Valor que se escribirá en el registro.
Omitir al leer. type: 'w' 16bit (por defecto), d = 32bit, f = float, q = 64bit, s = string.

c nt: número: La longitud máxima de la cadena en los registros, omitir para otros tipos o poner a 1. order: Cadena: El orden de bytes, ya sea "hl" o "lh".

Nota: Si su "contador" tiene principalmente tareas de control, puede marcar la opción "Ocultar dispositivo" en la configuración de este mosaico para que este dispositivo no aparezca en la página de inicio.

Nota: Algunos contadores que se leen vía HTTP requieren un nombre de usuario/contraseña como autorización. Puede especificarlo en la dirección para el acceso HTTP, por ejemplo, con http://username:password@192.168.2.111. Si su nombre de usuario o contraseña contiene una "@", debe sustituirla por "%40".