Files
NODEDC_PLATFORM/packages/external-provider-contract/providers/gelios/v14/telemetry-field-registry.mjs
T

98 lines
3.2 KiB
JavaScript

import { geliosTelemetryFieldRegistryV5 } from "../v12/telemetry-field-registry.mjs";
import {
GELIOS_PROVIDER_PACKAGE_ID,
GELIOS_PROVIDER_PACKAGE_VERSION,
} from "./package.mjs";
const EXPOSED_SURFACES = Object.freeze([
"audit",
"data_product",
"analytics",
"foundry",
]);
const value = structuredClone(geliosTelemetryFieldRegistryV5);
value.id = "gelios.units.current.telemetry.v3";
value.version = "3.0.0";
value.providerPackage = {
id: GELIOS_PROVIDER_PACKAGE_ID,
version: GELIOS_PROVIDER_PACKAGE_VERSION,
};
value.sourceNamespace = "gelios.units.telemetry_parameter";
const existingKeys = new Set(value.entries.map((entry) => entry.sourceKey));
for (const sourceKey of inputKeys()) {
if (existingKeys.has(sourceKey)) continue;
value.entries.push(providerConfiguredNumber(sourceKey));
existingKeys.add(sourceKey);
}
for (const [sourceKey, readingId, label] of [
["GSM_level", "sensor.param.gsm_level", "Уровень GSM"],
["call_btn", "sensor.param.call_btn", "Состояние кнопки вызова"],
["gps_mod", "sensor.param.gps_mod", "Состояние GPS-модуля"],
["gsm", "sensor.param.gsm", "Сигнал GSM"],
["gsm_st", "sensor.param.gsm_st", "Состояние GSM"],
["gyro", "sensor.param.gyro", "Состояние гироскопа"],
["ign_virt", "sensor.param.ign_virt", "Виртуальное зажигание"],
["nav_st", "sensor.param.nav_st", "Состояние навигации"],
["pwr_ext", "sensor.param.pwr_ext", "Внешнее питание"],
["pwr_int", "sensor.param.pwr_int", "Внутреннее питание"],
["sim1_st", "sensor.param.sim1_st", "Состояние SIM 1"],
["sim2_st", "sensor.param.sim2_st", "Состояние SIM 2"],
["v_in", "sensor.param.v_in", "Вход питания"],
]) {
if (existingKeys.has(sourceKey)) continue;
value.entries.push(registryNumber(sourceKey, readingId, label));
existingKeys.add(sourceKey);
}
export const geliosTelemetryFieldRegistryV6 = deepFreeze(value);
function inputKeys() {
return [
...Array.from({ length: 16 }, (_, index) => `in_${index}`),
...Array.from({ length: 16 }, (_, index) => `in${index}`),
];
}
function providerConfiguredNumber(sourceKey) {
return {
id: `gelios.sensor-parameter.${sourceKey.replaceAll("_", "-underscore-")}`,
sourceKey,
status: "approved",
sensitivity: "operational",
valueType: "number",
semanticReading: {
id: `sensor.param.${sourceKey}`,
labelSource: "provider_configured",
unitSource: "provider_configured",
},
allowedSurfaces: [...EXPOSED_SURFACES],
};
}
function registryNumber(sourceKey, readingId, label) {
return {
id: `gelios.telemetry-parameter.${sourceKey.toLowerCase()}`,
sourceKey,
status: "approved",
sensitivity: "operational",
valueType: "number",
semanticReading: {
id: readingId,
labelSource: "registry",
label,
unitSource: "none",
},
allowedSurfaces: [...EXPOSED_SURFACES],
};
}
function deepFreeze(input) {
if (!input || typeof input !== "object" || Object.isFrozen(input)) return input;
Object.freeze(input);
for (const child of Object.values(input)) deepFreeze(child);
return input;
}