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 en el repertorio estándar. Actualmente existen tres tipos: Contadores Modbus, contadores HTTP/JSON y contadores MQTT/JSON. Los archivos de definición de estos contadores son muy similares. Los contadores Modbus leen sus datos vía Modbus desde registros específicos, mientras que los contadores HTTP/JSON obtienen sus datos vía petición HTTP y parsean JSON como respuesta. Para los contadores MQTT/JSON, el gestor de carga cFos se suscribe a temas MQTT y analiza los mensajes publicados en el tema como JSON. Para el análisis sintáctico, el Gestor de Carga cFos utiliza un pequeño "lenguaje de consulta". 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 definidas por el usuario, consultar entradas y establecer salidas. La lectura de las variables y la fijación de las salidas permiten la evaluación de las 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 función muy potente que permite incluso ciertas tareas de domótica y el control de dispositivos externos como el almacenamiento de baterías. Si se da cuenta de las tareas de control con esto, por favor dénos su opinión. Nos interesa mucho lo que la gente controla con el Charging Manager de cFos y nos ayuda a seguir desarrollando el Charging Manager según 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 contadores son archivos JSON con un objeto JSON global que tiene propiedades y objetos hijos. 'rtype' determina el tipo de operación de lectura: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. Los números pueden especificarse opcionalmente en decimal o hexadecimal con el prefijo 0x. Además, se permiten comentarios de una sola línea utilizando //. Te recomendamos que pases tus archivos de definición por un validador JSON5, por ejemplo este validador JSON5

Definitivamente deberías 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. determinado, 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 se observa también con varios 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 por acceso hasta que el dispositivo responde.

Estas propiedades globales se aplican a Modbus TCP y RTU:

modbus_read: El número de función del comando de lectura de Modbus, normalmente 3 o 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: es mseg. el tiempo máximo de espera para una conexión TCP.
delay_after_connect: en mseg. Haga una 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 suficiente potencia. 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 anteriormente, el Gestor de Carga cFos toma valores por defecto que funcionan bien en la mayoría de los casos.

En la definición JSON, el siguiente paso es la definición de variables que el medidor utiliza para leer o calcular valores de corriente, voltaje, etc. Las siguientes variables son utilizadas por el Gestor de Carga. El Gestor de Carga conoce las siguientes variables:
type_designation, version, firmware_version, serial: Estas forman el nombre 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 los valores de voltage_l1..l3, signed current_l1..l3, power_w y power_va a partir de ellos. 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), siempre debe definir sólo import_wh. Export_wh sólo debe definirse para contadores bidireccionales (como acumuladores o contadores de referencia de red).

soc: Si está disponible, el Estado de Carga de un acumulador de baterías se muestra en % en el mosaico.
Además, puede definir otras variables con diferentes nombres que se leen con cada actualización o se calculan mediante fórmulas. Si se definen variables que comienzan 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 define variables que empiezan por *, se muestran en la interfaz de usuario en el mosaico del contador bajo la información ampliada, por ejemplo, la temperatura de un almacenamiento de batería.

Definición de una variable:

El objeto recibe el nombre de la variable indicada anteriormente y tiene las siguientes propiedades:
fixed: Cadena con 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, int32, float, int64, string. Esto es importante para Modbus con el fin de leer los registros en el formato correcto. Para JSON/HTTP normalmente se puede tomar float.
resolution: float, el valor leído se multiplica por 'resolution'. Los valores de tensión deben estar en voltios, las corrientes en miliamperios, la potencia en vatios, la energía en vatios-hora (Wh). Con 'resolución' negativa, se puede invertir un valor si tiene el signo contrario.
once: bool (true o false), si es true, el valor se lee una sola vez al inicializar el dispositivo, si no, 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: String, 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, ya sea "hl" o "lh", en el que está presente el valor. length: número, para Modbus la longitud de una cadena en registros. Con las variables 'version' y 'firmware_version', 'length' se utiliza para convertir versiones numéricas en cadenas con puntos. Se permiten valores de 2 o 4 para 'length', que dan como resultado los formatos de versión a.b, y a.b.c.d. Para 'length' 2 y tipo 'int16' el Gestor de Carga separa byte bajo y alto por punto, para int32 palabra baja y alta, para 'int64' dword bajo y alto. Para 'lenth' 4 e 'int32', el Gestor de Carga divide el valor en 4 bytes separados por un punto. Para 'int64' las 4 palabras por consiguiente.
regex: Cadena. Si se especifica una expresión regular, no es necesario que la respuesta del contador esté en JSON. Como resultado, se evalúa 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) muchos o ninguno: 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 consultar hasta 32 valores de entrada de diferentes registros o elementos JSON por dispositivo. La propiedad "Inputs" es un array JSON. Debe definir las siguientes propiedades para cada entrada:
dirección: Dirección (registro Modbus o URL).
cuenta: Número de bits de entrada que se leerán 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 esta manera con cada actualización y coloca los bits internamente en una matriz, que luego puede ser consultada con 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.
Para cada salida, debe definir las siguientes propiedades en el objeto de salida:
address: HTTP URL with optional HTTP method, e.g. GET http://www.example.com?output1=${var1}. Para configurar los registros Modbus, puede utilizar la API HTTP del Gestor de carga cFos. El Charging Manager detecta los accesos coincidentes en localhost y redirige la solicitud al gestor interno, por lo que no necesita autorización como con los accesos externos HTTP API. 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 (véase fórmulas: función exists()). En la dirección se puede especificar adicionalmente ${address} y ${id}. Esta es la dirección actual del dispositivo y el ID Modbus como se define en la configuración. La dirección y el 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 el cuerpo, puede utilizar fórmulas ${expr} que hagan referencia a variables globales de Charging Manager o del contador correspondiente. La fórmula 'expr' se evalúa al establecer 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 lo desee. De esta forma, también puedes escribir valores numéricos para controlar el rendimiento de la memoria en los registros Modbus que previamente hayas almacenado en una variable mediante una fórmula.
Si en lugar de pasar un valor numérico en la URL necesitas sustituir un texto por otro en función de la fórmula, como ocurre con los sockets WLAN de Shelly, puedes escribirlo así: ${if expr`texto1`texto2}. El 'apóstrofo' es un punto y coma (código ASCII 96). Si 'expr' != 0, se inserta text1, en caso contrario text2. En el caso de la toma WLAN de Shelly, la dirección URL es la siguiente: 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; en caso contrario, llama a http://<ip-addr>/relay/0?turn=off.

Si introduce una ruta relativa como URL, el gestor de carga toma 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 detecta un acceso a su propia API, utiliza el manejador interno en lugar de ejecutar un acceso HTTP completo, para que no tenga que almacenar un nombre de usuario y una contraseña en la definición del contador. Una URL que empiece por * hará que el Gestor de Contadores ejecute siempre un acceso HTTP completo.

Restablecer salidas: Además de una matriz de "salidas", también puede definir una matriz llamada "resets" que está estructurada como la matriz de "salidas". Esto se puede utilizar para restablecer las salidas a sus valores iniciales cuando se desactiva el dispositivo. Con esto, en combinación con las variables definidas por el usuario y "once": true, puedes devolver la unidad a su estado inicial.
Escribir salidas periódicamente: Para algunos dispositivos, las salidas deben escribirse periódicamente, de lo contrario el dispositivo restablece los valores a "por defecto". Por ejemplo, la memoria Kostal vuelve a utilizar sus reglas por defecto si el control de memoria no se ha escrito activamente durante un tiempo. Para configurar las salidas periódicamente, puede anteponer a la dirección #xxx#, donde xxx indica cada 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 de 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 Cargas:

Puede crear variables en la configuración del Gestor de Carga. Puede utilizar un valor fijo o una fórmula como valor. Al final de cada ciclo de actualización, el Gestor de Carga recalcula el valor de estas variables si es necesario. A continuación, puede utilizarlos en (ciertos) parámetros del Gestor de Carga, Reglas de Carga o para controlar las salidas. También puedes escribir Ex.member o Mx.member como variables. Aquí, Exy Mxson el ID de dispositivo de una Wallbox o un contador configurado en el Charging Manager. member es una variable "definida por el usuario" que se almacena 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.

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.

Para realizar pruebas, puede visualizar las variables del Gestor de cargas 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 Carga, se pueden configurar las salidas globales tal y como se ha descrito anteriormente en la definición del contador en "Salidas". Se establecen al final de cada ciclo de actualización si su estado ha cambiado. Si desea controlar las salidas de conmutación en los dispositivos definidos por el usuario, se recomienda la convención anterior (véase Variables del gestor de carga): Se establecen variables con 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 Charging Manager se utiliza para controlar los dispositivos Modbus que tienen cualquier dirección Modbus RTU o TCP (accesible desde el Charging Manager). Para Modbus RTU, introduzca COMx,bd,8,p,s como dirección, donde x es el número de puerto COM, bd es la velocidad en baudios, p es la paridad ('N', 'E' u 'O') y s es el número de bits de parada (1 o 2), como en la configuración de los dispositivos individuales. En el caso de Modbus TCP, el destinatario es la dirección IP del dispositivo en la red del gestor de carga, 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 la lectura 3 o 4, para la escritura 6 o 16.
id: ID del dispositivo Modbus.
reg: El número de registro Modbus. El valor puede darse en decimal o en hexadecimal (con el prefijo 0x).
val: número, valor a escribir en el registro. Omitir al leer.
tipo: 'w' 16bit (por defecto), d = 32bit, f = float, q = 64bit, s = string.
cnt: número, la longitud máxima de la cadena en registros, omitir para otros tipos o poner a 1.
order: Cadena, el orden de los 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".