Para el intercambio automático de datos con otros sistemas, la plataforma Amivisor ofrece la posibilidad de configurar la integración de la API (Interfaz de Programación de Aplicaciones).
La API utiliza el protocolo JSON para la interacción y garantiza una autorización segura.
Primero, analicemos por qué puede ser necesaria la integración de la API, utilizando algunos casos de éxito como ejemplos.
Caso en empresas energéticas: integración vía API con un sistema de facturación.
Las empresas energéticas tienen decenas o cientos de miles de dispositivos de medición, y muchas de ellas han confiado en la plataforma Amivisor para realizar la recolección automática de datos de los medidores inteligentes.
Las lecturas recopiladas deben ser transferidas al sistema de facturación para realizar todos los cálculos necesarios sobre el consumo. Amivisor proporciona esto ya sea mediante la importación/exportación a través de archivos xls o mediante la API. Este segundo método es más preferible, ya que no requiere manipulaciones manuales y funciona completamente en modo automático.
No obstante, no nos limitamos únicamente a la funcionalidad de intercambio de datos recopilados. Entendemos que el personal de las empresas energéticas enfrenta una carga considerable al mantener bases de datos en diferentes sistemas, lo que les hace perder mucho tiempo duplicando información. Por ejemplo, en caso de reemplazo de un medidor, la información debe ser ingresada tanto en el sistema de facturación como en el sistema AMI.
Decidimos eliminar el trabajo duplicado y proporcionamos una integración más estrecha entre Amivisor y sistemas de facturación (por ejemplo Elenet). Los especialistas de las empresas energéticas ingresan todos los datos en Elenet, y la base de datos se sincroniza a través de la API con Amivisor. Si se registran cambios en la base de datos principal, esos mismos cambios se realizan automáticamente en el sistema AMI.
Gracias a esta interacción, se ahorra tiempo al personal en la gestión de bases de datos en los sistemas de información.
Caso en plantas solares: integración de la API con un bot de Telegram.
En este caso, el cliente necesita recibir datos consolidados sobre el consumo y las condiciones meteorológicas. El cliente cuenta con numerosos empleados que requieren acceder a esta información, pero el administrador decidió no otorgar acceso a todos al sistema, sino crear un bot de Telegram que muestra la información necesaria.
El bot obtiene los datos del pronóstico del tiempo a través de un servicio meteorológico, mientras que del sistema Amivisor se extraen los datos de consumo, consumo horario y estado del módem.
La información en el bot se presenta de la siguiente manera:
Aquí también existe la posibilidad de acceder a información más detallada, presentada en las páginas web del cliente:
Gracias a la integración de Amivisor con el servicio meteorológico, los especialistas del cliente pueden no solo conocer la generación de energía eléctrica, sino también elaborar planes precisos de generación de energía para los próximos tres días.
Caso en estaciones de carga de vehículos: como obtener datos vía API
Normalmente, nuestros clientes configuran la integración de la API para enviar datos recopilados de los medidores a otros sistemas. Sin embargo, en algunos casos, ocurre lo contrario.
Un cliente que ofrece servicios de carga de vehículos eléctricos necesitaba un análisis tarifario para reducir los costos de compra de energía eléctrica. Las estaciones de carga instaladas llevan un registro del consumo de energía, pero la funcionalidad interna del software de las estaciones de carga no es suficiente para calcular el costo de compra de energía eléctrica de diferentes proveedores.
Este trabajo fue confiado a la plataforma Amivisor, que a través de la integración por API recibe datos horarios de consumo del sistema del cliente y luego realiza cálculos analíticos sobre las tarifas disponibles de energía eléctrica para seleccionar el esquema de cálculo más rentable.
Gracias al análisis tarifario, nuestro cliente pudo cambiar las tarifas de electricidad en varias estaciones y obtener un ahorro de hasta el 16 %.
Caso centro comercial: cálculos con arrendatarios
En los centros comerciales, los arrendadores emiten facturas a sus arrendatarios. Estas pueden ser facturas por el alquiler de los espacios ocupados y, adicionalmente, pueden emitirse facturas separadas para compensar el costo de la energía eléctrica y el agua.
Varios de nuestros clientes utilizan el sistema Amivisor, integrándolo con diferentes sistemas de facturación para emitir dichas facturas. Sin embargo, queremos destacar el caso de la empresa Gaviota Telecom, que gestiona el consumo de electricidad y agua de más de 1.000 medidores eléctricos e hidráulicos instalados en los locales de los arrendatarios. La cantidad de medidores sigue creciendo, ya que cada vez más arrendadores interesados en automatizar los cálculos con sus arrendatarios recurren a los servicios de nuestro cliente.
Gaviota Telecom se encarga de reemplazar todos los dispositivos de medición por inteligentes y configura la integración vía API con su sistema de facturación. Amivisor proporciona los datos de consumo mensual de cada medidor, lo que permite automatizar completamente el proceso de facturación y control de consumos1.
Caso producción: integración de API para el cálculo de los costes de producción
Un fabricante de productos de higiene personal necesitaba calcular el costo de producción de sus productos. Uno de los componentes más significativos de los costos es la energía eléctrica. En la planta, la producción se realiza por turnos, y para optimizar los gastos energéticos es fundamental visualizar el consumo en cada uno de los tres turnos.
El sistema Amivisor ofrece esta funcionalidad, permitiendo a los especialistas de la empresa comparar el consumo energético entre los diferentes turnos de producción, identificar mejores prácticas de consumo y evitar tiempos muertos o uso ineficiente de los equipos. Sin embargo, el departamento financiero trabaja en un sistema ERP para gestionar todos los recursos de la empresa. Por ello, se organizó una integración vía API con Amivisor, de modo que la información de consumo por turnos se transfiera automáticamente al sistema de gestión de productos, permitiendo calcular la proporción de consumo eléctrico en el costo de producción de cada unidad1.
Caso criptominería
La red de hoteles de minería alquila equipos para la extracción de criptomonedas a sus clientes. Para conocer el consumo, cada equipo está equipado con un medidor eléctrico. Las lecturas de todos los medidores se envían a la plataforma Amivisor. Sin embargo, para la facturación con sus clientes, el hotel de minería utiliza su propio sistema de facturación, al que la información de consumo llega automáticamente a través de una integración API
Ahora, pasemos a la funcionalidad de la API y, en primer lugar, cómo utilizarla:
Autenticación
Para comenzar a trabajar con la API, es necesario obtener acceso al servidor mediante una clave en la página de la aplicación https://app.amivisor.com/user/api.
Aquí también se pueden especificar las direcciones IPV4 desde las cuales se permite la conexión.
Datos para la emisión
La API de Amivisor proporciona la emisión automática de los destintos datos, que puede ser necesario en casos donde necesite recibir automáticamente datos ingresados en el sistema Amivisor, o datos recopilados por el sistema de los medidores:
Información general y listas.
Principalmente esto es necesario para la integración API con sistemas de facturación:
- Lista de contrapartes: incluyendo nombre, números de registro y datos de dirección
- Lista de contratos: incluyendo tipo de contrato (suministro de energía, compra/venta o transmisión de electricidad) y parámetros del contrato (lista de objetos y medidores relacionados con el contrato, potencias contratadas, parámetros tarifarios e información sobre pérdidas de cálculo, tanto fijas como variables)
- Lista de puntos de medida: incluyendo nombre, datos de dirección, parámetros tarifarios, números de cuentas y códigos de intercambio
- Lista de medidores: incluyendo marca y número de serie, ubicación, códigos de intercambio, coeficientes de cálculo, plazos de verificación, nombres de zonas tarifarias y configuraciones de comunicación.
- Resultados del cálculo del costo de electricidad: incluyendo magnitudes físicas calculadas (volumen de consumo eléctrico por zonas tarifarias y potencias), tarifas aplicadas, costo total de electricidad (tanto de compra como de transmisión)
Datos obtenidos de los medidores:
- Lecturas: en un momento específico o durante un período para uno o un grupo de medidores. Al emitir, se puede seleccionar el tipo de lectura (actual o archivada), zonas tarifarias (T1, T2, …, suma) y canal de medición (A+, A-, R+, R-)
- Consumo de electricidad durante un período específico. El consumo puede mostrarse por separado para cada uno de los canales de medición, así como para las lecturas totales o desglosadas por zonas tarifarias del medidor. Al emitir datos sobre el consumo, se pueden transmitir las lecturas iniciales y finales, sobre las cuales se obtuvo dicho consumo.
- Valores instantáneos, tanto totales como por cada fase: frecuencia en la red, voltajes, corrientes, potencias activas, reactivas y totales, y ángulos entre voltajes de fase
- Perfiles de carga por diversos canales de medición (A+, A-, R+, R-). Al emitir datos, se puede especificar el período de integración API deseado, que puede diferir del período de integración programado en el medidor.
- Datos de contabilidad intervalos. Estos datos, al igual que el perfil, pueden emitirse por diversos canales de medición y con la selección del período de integración API deseado. Pero a diferencia del perfil de potencia, pueden contener datos calculados, en caso de que al obtener el perfil de potencia se hayan perdido o sido incorrectos.
Datos para la importación:
En caso de que ya tenga datos en algún sistema, se puede asegurar una rápida implementación del sistema Amivisor, importando los siguientes datos:
- Contrapartes, incluyendo información de registro y otros datos
- Puntos de medida, incluyendo parámetros técnicos y contractuales
- Medidores, incluyendo información técnica y metrológica, así como parámetros de comunicación remota
También puede importar al sistema datos medidos por los medidores. Esto puede ser necesario si los datos de algunos medidores son recopilados por otro sistema (por ejemplo, un programa de fábrica) y se acumulan en el sistema Amivisor para realizar diversos cálculos y generar informes consolidados:
- Lecturas: por zonas tarifarias y canales de medición
- Perfiles de potencia: por canales de medición
En casos donde ya tenga un sistema AMR o AMI implementado, pero desee migrar al sistema Amivisor, puede transferir los parámetros de comunicación remota con los medidores mediante la API, a saber:
- Obtener la lista de tipos de dispositivos de medición disponibles
- Obtener la lista de tipos de conexiones disponibles
- Obtener la lista de tipos de concentradores disponibles
- Obtener la lista de puertos para uso compartido
- Obtener la lista de concentradores
- Obtener la lista de parámetros de comunicación remota
- Configurar la comunicación remota con los medidores
Limitaciones de la integración por API:
- No se admiten parámetros posicionales by-position. Los parámetros deben ser nombrados by-name, es decir, params debe ser un objeto json.
- En llamadas múltiples batch hay un límite de 100 llamadas en una sola solicitud.
- Los métodos de autenticación auth.* no admiten llamadas múltiples.
- No se pueden obtener simultáneamente conjuntos de datos de más de 1000 medidores.
***
Para más información detallada y ejemplos de uso, puede solicitar la documentación.
A continuación se enumeran los conjuntos de datos cuyo intercambio admite la API
Sección | Datos | Parámetro | Valor |
Tarea: integración API de directorios | |||
Entrega de datos | |||
Contraparte | Contraparte ID | id | int |
Nombre completo | fullName | string | |
Nombre corto | name | string | |
Apellido | lastName | null|string | |
Nombre | firstName | null|string | |
Segundo nombre | middleName | null|string | |
Tipo de contraparte | contractorTypeId | int | |
Número de registro | ogrn | null|string | |
Fecha de registro | ogrnDate | null|string | |
Identificación fiscal 1 | Inn | null|date | |
Identificación fiscal 2 | kpp | null|string | |
Dirección de registro | registeredAddress | null|date | |
Dirección postal | postAddress | null|string | |
Correo electrónico | null|date | ||
Número de teléfono | phone | null|string | |
Contrato | Contrato ID | id | int |
Contrato está activado o no | active | boolean | |
Número del contrato | num | string|null | |
ID de tipo del contrato | type | Int | |
Nombre del proveedor | powerCompany | object | |
Nombre del consumidor | company | object | |
Punto de medida (PdM) | Punto de medida ID | id | null|int |
Nombre | name | string | |
Número de cuenta personal | account | int | |
Contraparte | contractor | null|int | |
Dirección completo | addressSiteValue | null|string | |
Ciudad | city | null|string | |
Calle | street | null|string | |
Número de casa | house | null|string | |
Edificio | building | null|string | |
Apartamento | flat | null|string | |
Oficina | office | null|string | |
Información adicional | additionAddr | null|string | |
Tipo del PdM en el esquema | objectType | null|string | |
Identificador del PdM | uniqueDeliveryPointIdentifier | null|string | |
Tensión de calculo | voltageLevel | null|string | |
Carga de calculo | powerLevel | null|string | |
Número de tarifa | priceCategory | null|string | |
Parámetros contractados > | parameters
|
object|null | |
> Contrato del suministro | primaryContract | int|null | |
> Contrato de transmisión | secondaryContract | int|null | |
> ID de tarifa de suministro | priceCategory | int|null | |
> ID de tarifa de transmisión | secondaryPriceCategory
|
int|null | |
> ID de nível de tensión | voltageLevel | int|null | |
> ID de carga de calculo | powerLevel | int|null | |
> Nombre de tarifa base | basePowerCompany | object|null | |
> ID de tarifa base | basePriceCategory | int|null | |
> ID de nível de tensión base | baseVoltageLevel | int|null | |
> ID de carga de calculo base | basePowerLevel | int|null | |
Descripción de medidores conectados al PdM > | meters | object[]|null | |
> Medidor ID | id | int | |
> Número de serie | num | string | |
> Marca del medidor | mark | string|null | |
> Medidor está transito o no | transit | boolean | |
Medidor | Medidor ID | id | int |
Número de serie | num | string | |
Marca del medidor | mark | string | |
Nota | remark | string | |
Punto de medida | object | string | |
Dirección del PdM | address | string | |
Ubicación del medidor | location | null|string | |
Tipo del medidor | type | string | |
Unidad de medida | unit | null|string | |
Coeficiente por corriente | ktt | string | |
Coeficiente por tensión | ktn | string | |
Identificador del medidor | uniqueIdentifierOfInstallationLocation | string | |
Canales de medida activados | measures | string[] | |
Zonas tarifarias > | zones | object[]|null | |
> Zona ID | id | int | |
> Nombre de la zona | name | string | |
Estado de AMR > | ascueState | object|null | |
> AMR configurado y activado | enabled | boolean | |
> Tipo de conexión | connectionType | string | |
> Tipo de conexión ID | connectionTypeId | int | |
> Módem ID | modemId | int | |
> Información sobre encuestas >> | requests | object | |
>> Lectura >>> | readings | object | |
>>> Estado de horario de lecturas | scheduled | boolean | |
>>> Última lectura | lastSuccess | date and time | |
>> Perfil de carga >>> | powerProfile | object | |
>>> Estado de horario de perfil | scheduled | boolean | |
>>> Último corte del perfil | lastSuccess | date and time | |
Capacidad del medidor | digit | string | |
Precisión del medidor | decimal | string | |
Fecha de la instalación | dateSetup | null|date | |
Fecha de deinstalación | dateSetdown | null|date | |
Fecha de verificación | dateCheck | null|date | |
Fecha de fin de la verificación | dateCheckNext | null|date | |
Parámetros de calculo > | parameters | object|null | |
> Pérdidas variables | lossShortCircuit | float|null | |
> Pérdidas constantes | lossIdle | float|null | |
> Pérdidas variables de base | baseLossShortCircuit | float|null | |
> Pérdidas constantes de base | baseLossIdle | float|null | |
Obtención de datos | |||
Puntos de medida | Punto de medida ID | id | null|int |
Nombre | name | string | |
Número de cuenta personal | account | int | |
Contraparte | contractor | null|int | |
Dirección completo | addressSiteValue | null|string | |
Ciudad | city | null|string | |
Calle | street | null|string | |
Número de casa | house | null|string | |
Edificio | building | null|string | |
Apartamento | flat | null|string | |
Oficina | office | null|string | |
Información adicional | additionAddr | null|string | |
Potencia conractada | maxPowerValue | null|float | |
Identificador de departamento | regionId | null|int | |
Categoría del PdM | objectCategory | null|string | |
Barrio | addressSite | null|string | |
Tipo del PdM en el esquema | objectType | null|string | |
Identificador del PdM | uniqueDeliveryPointIdentifier | null|string | |
Tensión de calculo | voltageLevel | null|string | |
Carga de calculo | powerLevel | null|string | |
Número de tarifa | priceCategory | null|string | |
Factor de potencia máximo (Q/P) | maxReactiveToActivePower | null|float | |
Latitud | lat | null|float | |
Longitud | lon | null|float | |
Medidores | Medidor ID | id | null|int |
Punto de medida ID | object | int | |
Número de serie | num | string | |
Marca del medidor | mark | string | |
Nota | remark | string | |
Canales de medida activados | measures | int[] | |
Nombres de las zonas tarifarias | zones | string[] | |
Capacidad del medidor | digit | null|int | |
Precisión del medidor | decimal | null|int | |
Ubicación del medidor | location | null|string | |
Coeficiente por corriente | ktt | int | |
Coeficiente por tensión | ktn | int | |
Pérdidas variables | lossShortCircuit | null|float | |
Pérdidas constantes | lossIdle | null|float | |
Características para el cálculo de pérdidas | lossCharacteristics | null|string | |
Fecha de la instalación | dateSetup | null|date | |
Fecha de verificación | dateCheck | null|date | |
Fecha de fin de la verificación | dateCheckNext | null|date | |
Fecha de la deinstalación | dateSetdown | null|date | |
Nivel de tensión | voltageClass | null|string | |
Nombre de subestación (SE) | substation | null|string | |
Nombre de la conexión SE | substationConnection | null|string | |
Nombre de punto de transformación (PT) | transformerSubstation | null|string | |
Nombre de la conexión PT | transformerSubstationConnection | null|string | |
Número de serie del módem | modemSerialNumber | null|string | |
Número de serie de la pantalla separada del medidor (split) | serialNumberOfDisplayUnit | null|string | |
Contraseña de la acceso por radio | radioInterfacePassword null|string | null|string | |
Núnero SIM1 | phoneNumberSim1 | null|string | |
Número SIM2 | phoneNumberSim2 | null|string | |
Identificador del medidor | uniqueIdentifierOfInstallationLocation | string | |
Notas para empleados | adminRemark | null|string | |
Número del movil de especialista AMR | adminPhone | null|string | |
Contrapartes | Contraparte ID | id | null|int |
Nombre completo | name | string | |
Nombre corto | fullName | string | |
Tipo de contraparte | contractorTypeId | int | |
Número de registro | ogrn | null|string | |
Fecha de registro | ogrnDate | null|date | |
Identificación fiscal 1 | inn | null|string | |
Identificación fiscal 2 | kpp | null|string | |
Dirección de registro | registeredAddress | null|string | |
Dirección postal | postAddress | null|string | |
Correo electrónico | null|string | ||
Número de teléfono | phone | null|string | |
Puntos de medida | objects | null|int[] | |
Transformadores de medida | Medidor ID | counterId | int |
Fases (1, 2, o 3) | phase | int | |
Corriente y tensión (‘current’, ‘voltage’) | type | string | |
Marca | brand | null|string | |
Clase de precisión | accuracyClass | null|string | |
Pertenencia | balanceOwnership | null|string | |
Número de registro | registrationNumber | null|string | |
Número de precinto | sealNumber | null|string | |
Fecha de verificación | dateOfStateInspection | null|date | |
Fecha de fin de la verificación | dateOfNextStateInspection | null|date | |
Tarea: intercambio de datos recibidos de los medidores | |||
Entrega de datos | |||
Lecturas | Medidor ID | meter | int |
Lectura encontrada | reading | object|null | |
Fecha y tiempo de la lectura | date | string | |
Coeficiente por corriente | ktt | string | |
Coeficiente por tensión | ktn | string | |
Lectura A+ | value | float | |
Lectura A- | reverseValue | float | |
Lectura R+ | reactiveValue | float | |
Lectura R- | reactiveReverseValue | float | |
Lecturas por zonas | zones | object[]|null | |
Comsumo 1, calculado por lecturas | Medidor ID | meter | int |
Consumo, kWh | consumption | float|null | |
Consumo por zonas tarifarias, kWh | zones | float[]|null | |
Lecturas iniciales y finales > | readings | object|null | |
> Luctura inicial >> | first | object|null | |
>> Fecha y tiempo de la lectura | date | string | |
>> Coeficiente por corriente | ktt | string | |
>> Coeficiente por tensión | ktn | string | |
>> Lectura A+ | value | float | |
>> Lectura A- | reverseValue | float | |
>> Lectura R+ | reactiveValue | float | |
>> Lectura R- | reactiveReverseValue | float | |
>> Lecturas por zonas | zones | object[]|null | |
> Luctura final >> | last | object|null | |
>> …iguales parametros… | … | … | |
Valor instantáneos | Medidor ID | meter | int |
Parámeter solicitado > | name | string | |
> Tensión de fase | voltage | string | |
> Corriente | current | string | |
> Potencia activa | activePower | string | |
> Potencia reactiva | reactivePower | string | |
> Factor de potencia | powerFactor | string | |
> Ángulo entre tensiones de fase | angle | string | |
> Frequencia | frequency | string | |
Símbolo del parámetro | symbol | string | |
Nombre del parámetro | description | string | |
Unidad de medida | unit | string|null | |
Perfil de carga | Medidor ID | meter | int |
Periodo | period | object | |
Intervalo de promediado | group | int | |
Parámetros de Perfil de carga > | powerProfile.data | object | |
> Podencia activa directa A+ | activePower | string | |
> Podencia activa indirecta A- | reactivePower | string | |
> Podencia reactiva directa R+ | activeReversePower | string | |
> Podencia reactiva indirecta R- | reactiveReversePower | string | |
Consumo por intervalos | El més calculado | month | string |
Punto de medida > | object | object | |
> Punto de medida ID | id | int | |
> Nombre del PdM | name | string | |
> Dirección del PdM | address | string | |
Datos por intervalos de consumo | values | object | |
Medidor > | meter | object[]|null | |
> Medidor ID | id | int | |
> Número de serie | num | string | |
> Marca del medidor | mark | string|null | |
Datos por intervalos de consumo | values | object | |
Obtención de datos | |||
Lecturas | Medidor ID | counterId | int |
Fecha y tiempo de la lectura | date | date | |
Lectura A+ suma por zonas | sum | float | |
Lectura A- suma por zonas | reverseSum | null|float | |
Lectura R+ suma por zonas | reactiveSum | null|float | |
Lectura R- suma por zonas | reactiveReverseSum | null|float | |
Zonas del medidor | zones | object[] | |
Perfil de carga | Medidor ID | counterId | int |
Periodo | date | date | |
Intervalo de promediado | period | int | |
Podencia activa directa A+ | activePower | float | |
Podencia activa indirecta A- | activeReversePower | null|float | |
Podencia reactiva directa R+ | reactivePower | null|float | |
Podencia reactiva indirecta R- | reactiveReversePower | null|float | |
Ajustes de AMR | Una lista de medidores | ascue.availableDevices | object[] |
Una lista de conexiones disponibles | ascue.availableConnections | object[] | |
Una lista de concentradores 1 disponibles | ascue.availableConcentrators | object[] | |
Una lista de puertos disponibles | ascue.availablePorts | object[] | |
Una lista de concentradores 2 disponibles | ascue.availableUspds | object[] | |
Una lista de parametros | ascue.availableParams | object[] | |
Ajuste del medidor | ascue.setup | string | |
Ajustes del medidor | Medidor ID | meterId | int |
Identificador de la puerta | portId | int | |
Identificador del concentrador | uspdId | int | |
Parámetros de despositivo | device | object | |
Parámetros de conexión | connection | object | |
Parámetros de concentrador | сoncentrator | object | |
Tarea: intercambio de los resultados de calculos | |||
Entrega de datos | |||
Resultados de calculos | El més calculado | month | string |
Punto de medida calculado | object | object | |
Medidor connectado al PdM > | meters
|
object[]|null | |
> Pérdidas variables | lossShortCircuit | float|null | |
> Pérdidas constantes | lossIdle | float|null | |
> Lecturas del medidor | readings | object | |
> Parámetros natural del medidor | values | object | |
Parámetros natural del PdM | values | object | |
Valores de suministro | primaryContract | object | |
Valores de transmisión | secondaryContract | object|null |