98 lines
3.2 KiB
JavaScript
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;
|
|
}
|