Appearance
MQTT
Настройки драйвера
ts
export const MQTTSettingsSchema = z.object({
settings: z.object({
/** IP-адрес MQTT-брокера. */
IP: nonEmptyString(t("shared_text.ip_required")),
/** Порт MQTT-брокера. */
Port: nonEmptyString(t("shared_text.port_required")),
/** Логин для авторизации на брокере (пустая строка — без авторизации). */
Login: z.string(),
/** Пароль для авторизации на брокере (пустая строка — без авторизации). */
Password: z.string(),
/** Явная подписка на топики при подключении. */
ExplicitSubscribe: z.boolean(),
}),
});Настройки связи по доступу
Настройки всегда хранятся в БД целиком — доступ связи (чтение/запись) определяет только видимость полей в редакторе и состав запроса, уходящего на контроллер.
| Настройка | Чт. | Зап. |
|---|---|---|
| тема | ✓ | ✓ |
| таймаут, сек | ✓ | — |
| обработка удерживаемых сообщений | ✓ | — |
| приоритет | — | ✓ |
| без локальной доставки | — | ✓ |
| сохранить в опубликованном виде | — | ✓ |
Типы
ts
export interface IMQTTDriverSettingsProps {
/** тема MQTT (подписка для чтения, публикация для записи) */
[EDriverSettingsType.TEXTAREA]: string;
/** таймаут ожидания ответа брокера, секунд */
[EDriverSettingsType.TIMEOUT_SEC]: string;
/** уровень QoS 0–2 */
[EDriverSettingsType.QOS]: string;
/** не получать собственные публикации (no-local) */
[EDriverSettingsType.NO_LOCAL_FLAG]: boolean;
/** пересылать сообщение с исходным флагом retain */
[EDriverSettingsType.RETAIN_AS_PUBLISHED]: boolean;
/** политика retain при подписке: 0 — всегда, 1 — только новая, 2 — не запрашивать */
[EDriverSettingsType.RETAIN_HANDLING]: string;
}Стратегия импорта
О том что такое стратегия импорта можно почитать здесь Таб импорта в драйверах
Зависимость objectType от поля type
ts
const getObjectSettingsTypeFromMQTT = (
type: string,
): { type: EObjectType; settings: any } | undefined => {
switch (type) {
case "AI":
return { type: EObjectType.ANALOG_INPUT, settings: defaultAnalogInputSettings };
case "AO":
return { type: EObjectType.ANALOG_OUTPUT, settings: defaultAnalogOutputSettings };
case "DI":
return { type: EObjectType.DIGITAL_INPUT, settings: defaultDigitalInputSettings };
case "DO":
return { type: EObjectType.DIGITAL_OUTPUT, settings: defaultDigitalOutputSettings };
case "M":
return { type: EObjectType.MODE_OBJECT, settings: defaultModeObjectSettings };
default:
return undefined;
}
};
ts
const getObjectDisplayFromMQTT = (
type: string,
csvRow: ICSVObject,
): ObjectDisplay | null => {
let displayToImport: ObjectDisplay | null = null;
switch (type) {
case "AI":
displayToImport = { ...defaultAnalogInputObjectDisplay };
break;
case "AO":
displayToImport = { ...defaultAnalogOutputObjectDisplay };
break;
case "DI":
displayToImport = { ...defaultDigitalInputObjectDisplay };
break;
case "DO":
displayToImport = { ...defaultDigitalOutputObjectDisplay };
break;
case "M":
displayToImport = { ...defaultModeObjectDisplay };
break;
default:
return null;
}
if (displayToImport.name !== csvRow["#keyname"]) displayToImport.isNameTech = false;
displayToImport.name = csvRow["name_translated"] || "";
displayToImport.description = csvRow["description_translated"] || "";
displayToImport.unit = bacnetUnitCodeReverseMap[csvRow["unit-code"]];
return displayToImport;
};Зависимость driverSettings от additionalData
ts
async updateDriverData({ additionalInfo, currentObject }): Promise<{
objectsToUpdate?: UpdateObjectDto;
}> {
// Обновляем настройки самого драйвера (не driverLink)
const driverSettings = { ...currentObject.settings };
if (additionalInfo?.IP) {
driverSettings.IP = additionalInfo.IP;
}
if (additionalInfo?.PORT) {
driverSettings.Port = additionalInfo.PORT;
}
if (additionalInfo?.LOGIN) {
driverSettings.Login = additionalInfo.LOGIN;
}
if (additionalInfo?.PASSWORD) {
driverSettings.Password = additionalInfo.PASSWORD;
}
const updatedObject: UpdateObjectDto = {
id: currentObject.id,
settings: {
...currentObject.settings,
...driverSettings,
},
};
return {
objectsToUpdate: updatedObject,
};
},Зависимость driverLink.type от settable
ts
const getDriverLinkTypeFromSettable = (settable: string | undefined): EDriverLinkType => {
// Если settable === "Y" - WRITE, иначе READ
return !!settable && settable === "Y" ? EDriverLinkType.WRITE : EDriverLinkType.READ;
};Настройки связи по доступу
Настройки всегда хранятся в БД целиком — доступ связи (чтение/запись) определяет только видимость полей в редакторе и состав запроса, уходящего на контроллер.
| Настройка | Чт. | Зап. |
|---|---|---|
| тема | ✓ | ✓ |
| таймаут, сек | ✓ | — |
| обработка удерживаемых сообщений | ✓ | — |
| приоритет | — | ✓ |
| без локальной доставки | — | ✓ |
| сохранить в опубликованном виде | — | ✓ |
Mentioned In
None yet.