Modules/devices/devices structure inc php
Материал из MajorDoMo инфо
ᐂ В корневой раздел ᐃ В директорию расположения файла
<?php // Инициализация массива типов устройств $this->device_types = array( // Определение типа устройства "rooms" (комнаты) 'rooms' => array( // Класс, связанный с этим типом устройства 'CLASS' => 'Rooms', // Описание типа устройства 'DESCRIPTION' => 'Rooms/Locations', // Свойства устройства 'PROPERTIES' => array( // Температура в комнате 'temperature' => array('DESCRIPTION' => 'Temperature'), // Влажность в комнате 'humidity' => array('DESCRIPTION' => 'Humidity'), // Присутствие человека в комнате 'SomebodyHere' => array('DESCRIPTION' => 'Somebody in the room'), // Задержка перед выключением света при отсутствии активности 'IdleDelay' => array('DESCRIPTION' => LANG_DEVICES_MOTION_TIMEOUT, '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdRoomIdleDelay'), // Автоматическое выключение света при отсутствии активности 'turnOffLightsOnIdle' => array('DESCRIPTION' => LANG_DEVICES_TURNOFF_LIGHTS_ON_IDLE, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdRoomIdleTurnoffLights'), ), // Методы, связанные с этим типом устройства 'METHODS' => array( // Обработка активности в комнате 'onActivity' => array('DESCRIPTION' => 'Rooms Activity'), // Обработка отсутствия активности в комнате 'onIdle' => array('DESCRIPTION' => 'Rooms Idle'), // Обновление статуса активности в комнате 'updateActivityStatus' => array('DESCRIPTION' => 'Update activity status') ) ), // Определение типа устройства "general" (общие устройства) 'general' => array( // Класс, связанный с этим типом устройства 'CLASS' => 'SDevices', // Описание типа устройства 'DESCRIPTION' => 'General Devices Class', // Свойства устройства 'PROPERTIES' => array( // Статус устройства 'status' => array('DESCRIPTION' => LANG_DEVICES_STATUS, 'KEEP_HISTORY' => 365, 'ONCHANGE' => 'statusUpdated', 'DATA_KEY' => 1), // Устройство активно 'alive' => array('DESCRIPTION' => 'Alive'), // Таймаут активности устройства 'aliveTimeout' => array('DESCRIPTION' => LANG_DEVICES_ALIVE_TIMEOUT, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdAliveTimeout'), // Связанная комната 'linkedRoom' => array('DESCRIPTION' => 'LinkedRoom'), // Время последнего обновления 'updated' => array('DESCRIPTION' => 'Updated Timestamp'), // Устройство работает от батареи 'batteryOperated' => array('DESCRIPTION' => LANG_DEVICES_BATTERY_OPERATED, '_CONFIG_TYPE' => 'yesno', 'ONCHANGE' => 'batteryLevelUpdated'), // Уровень заряда батареи 'batteryLevel' => array('DESCRIPTION' => LANG_DEVICES_BATTERY_LEVEL, 'ONCHANGE' => 'batteryLevelUpdated'), // Предупреждение о низком уровне заряда батареи 'batteryWarning' => array('DESCRIPTION' => LANG_DEVICES_BATTERY_WARNING), ), // Методы, связанные с этим типом устройства 'METHODS' => array( // Обновление статуса устройства 'statusUpdated' => array('DESCRIPTION' => 'Status updated event'), // Логическое действие 'logicAction' => array('DESCRIPTION' => 'Logic Action'), // Обновление статуса активности устройства 'keepAlive' => array('DESCRIPTION' => 'Alive update'), // Обновление уровня заряда батареи 'batteryLevelUpdated' => array('DESCRIPTION' => 'Battery level updated'), ), // Внедрения, связанные с этим типом устройства 'INJECTS' => array( // Режимы работы устройства 'OperationalModes' => array( // Активация экономического режима 'EconomMode.activate' => 'econommode_activate', // Деактивация экономического режима 'EconomMode.deactivate' => 'econommode_deactivate', // Активация режима "Никто не дома" 'NobodyHomeMode.activate' => 'nobodyhomemode_activate', // Деактивация режима "Никто не дома" 'NobodyHomeMode.deactivate' => 'nobodyhomemode_deactivate', // Активация ночного режима 'NightMode.activate' => 'nightmode_activate', // Активация режима темноты 'DarknessMode.activate' => 'darknessmode_activate', // Деактивация режима темноты 'DarknessMode.deactivate' => 'darknessmode_deactivate', // Проверка состояния системы 'System.checkstate' => 'system_checkstate', ), ) ), // Определение типа устройства "controller" (контролируемые устройства) 'controller' => array( // Класс, связанный с этим типом устройства 'CLASS' => 'SControllers', // Родительский класс для этого типа устройства 'PARENT_CLASS' => 'SDevices', // Описание типа устройства 'DESCRIPTION' => 'Controllable device', // Свойства устройства 'PROPERTIES' => array( // Экономичный режим 'groupEco' => array('DESCRIPTION' => LANG_DEVICES_GROUP_ECO, '_CONFIG_TYPE' => 'yesno', '_CONFIG_RESTRICTIONS' => 1, '_CONFIG_HELP' => 'SdGroupEco'), // Включение экономического режима 'groupEcoOn' => array('DESCRIPTION' => LANG_DEVICES_GROUP_ECO_ON, '_CONFIG_TYPE' => 'yesno', '_CONFIG_RESTRICTIONS' => 1, '_CONFIG_HELP' => 'SdGroupEcoOn'), // Режим восхода солнца 'groupSunrise' => array('DESCRIPTION' => LANG_DEVICES_GROUP_SUNRISE, '_CONFIG_TYPE' => 'yesno', '_CONFIG_RESTRICTIONS' => 1, '_CONFIG_HELP' => 'SdGroupSunrise'), // Режим заката солнца 'groupSunset' => array('DESCRIPTION' => LANG_DEVICES_GROUP_SUNSET, '_CONFIG_TYPE' => 'yesno', '_CONFIG_RESTRICTIONS' => 1, '_CONFIG_HELP' => 'SdGroupSunset'), // Ночной режим 'groupNight' => array('DESCRIPTION' => LANG_DEVICES_GROUP_NIGHT, '_CONFIG_TYPE' => 'yesno', '_CONFIG_RESTRICTIONS' => 1, '_CONFIG_HELP' => 'SdGroupNight'), // Присутствие активности 'isActivity' => array('DESCRIPTION' => LANG_DEVICES_IS_ACTIVITY, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdIsActivity'), // Тип нагрузки 'loadType' => array('DESCRIPTION' => LANG_DEVICES_LOADTYPE, '_CONFIG_TYPE' => 'select', '_CONFIG_HELP' => 'SdLoadType', '_CONFIG_OPTIONS' => 'light=' . LANG_DEVICES_LOADTYPE_LIGHT . ',heating=' . LANG_DEVICES_LOADTYPE_HEATING . ',vent=' . LANG_DEVICES_LOADTYPE_VENT . ',curtains=' . LANG_DEVICES_LOADTYPE_CURTAINS . ',gates=' . LANG_DEVICES_LOADTYPE_GATES . ',power=' . LANG_DEVICES_LOADTYPE_POWER), // Иконка устройства 'icon' => array('DESCRIPTION' => LANG_IMAGE, '_CONFIG_TYPE' => 'style_image', '_CONFIG_HELP' => 'SdIcon'), ), // Методы, связанные с этим типом устройства 'METHODS' => array( // Включение устройства 'turnOn' => array('DESCRIPTION' => LANG_DEVICES_TURN_ON, '_CONFIG_SHOW' => 1), // Выключение устройства 'turnOff' => array('DESCRIPTION' => LANG_DEVICES_TURN_OFF, '_CONFIG_SHOW' => 1), // Переключение устройства 'switch' => array('DESCRIPTION' => 'Switch'), ) ), // Определение типа устройств "group" (группы устройств) 'group' => array( 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SGroups', 'PROPERTIES' => array( // Системное имя группы 'groupName' => array('DESCRIPTION' => 'Group system name'), ), 'METHODS' => array( // Включение группы устройств 'turnOn' => array('DESCRIPTION' => LANG_DEVICES_TURN_ON), // Выключение группы устройств 'turnOff' => array('DESCRIPTION' => LANG_DEVICES_TURN_OFF), // Переключение группы устройств 'switch' => array('DESCRIPTION' => 'Switch'), // Обновление статуса группы устройств 'statusUpdated' => array('DESCRIPTION' => 'Status Updated'), ) ), // Определение типа устройства "relay" (реле) 'relay' => array( 'TITLE' => LANG_DEVICES_RELAY, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SRelays' ), // Определение типа устройства "vacuum" (пылесос) 'vacuum' => array( 'TITLE' => LANG_DEVICES_VACUUM, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SVacuums', 'METHODS' => array( // Пауза пылесоса 'pause' => array('DESCRIPTION' => 'Pause', '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "media" (медиа устройства) 'media' => array( 'TITLE' => LANG_DEVICES_MEDIA, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SMedias', // Свойства медиа устройства 'PROPERTIES' => array( // Громкость медиа устройства 'volume' => array('DESCRIPTION' => 'Volume'), // Номер источника для медиа устройства 'source_num' => array('DESCRIPTION' => 'Source number'), // Номер канала для медиа устройства 'channel_num' => array('DESCRIPTION' => 'Channel number'), ), // Методы медиа устройства 'METHODS' => array( // Пауза медиа устройства 'pause' => array('DESCRIPTION' => 'Pause', '_CONFIG_SHOW' => 1), // Установка источника для медиа устройства 'setSource' => array('DESCRIPTION' => 'Set source'), // Установка канала для медиа устройства 'setChannel' => array('DESCRIPTION' => 'Set channel'), // Установка громкости для медиа устройства 'setVolume' => array('DESCRIPTION' => 'Set volume'), ) ), // Определение типа устройства "tv" (телевизор) 'tv' => array( 'TITLE' => LANG_DEVICES_TV, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'STVs', // Свойства телевизора 'PROPERTIES' => array( // Громкость телевизора 'volume' => array('DESCRIPTION' => 'Volume'), // Номер источника для телевизора 'source_num' => array('DESCRIPTION' => 'Source number'), // Номер канала для телевизора 'channel_num' => array('DESCRIPTION' => 'Channel number'), ), // Методы телевизора 'METHODS' => array( // Пауза телевизора 'pause' => array('DESCRIPTION' => 'Pause', '_CONFIG_SHOW' => 1), // Установка источника для телевизора 'setSource' => array('DESCRIPTION' => 'Set source'), // Установка канала для телевизора 'setChannel' => array('DESCRIPTION' => 'Set channel'), // Установка громкости для телевизора 'setVolume' => array('DESCRIPTION' => 'Set volume'), ) ), // Определение типа устройства "thermostat" (термостат) 'thermostat' => array( 'TITLE' => LANG_DEVICES_THERMOSTAT, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SThermostats', // Свойства термостата 'PROPERTIES' => array( // Статус реле термостата 'relay_status' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_RELAY_STATUS, 'KEEP_HISTORY' => 365, 'DATA_KEY' => 1), // Текущая температура 'value' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_CURRENT_TEMP, 'ONCHANGE' => 'valueUpdated', 'KEEP_HISTORY' => 365, 'DATA_KEY' => 1), // Текущее целевое значение температуры 'currentTargetValue' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_CURRENT_TARGET_TEMP, 'DATA_KEY' => 1, '_CONFIG_DEFAULT' => 22), // Нормальное целевое значение температуры 'normalTargetValue' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_NORMAL_TEMP, '_CONFIG_TYPE' => 'text', 'ONCHANGE' => 'valueUpdated', '_CONFIG_HELP' => 'SdThermostat', '_CONFIG_DEFAULT' => 22), // Экономичное целевое значение температуры 'ecoTargetValue' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_ECO_TEMP, '_CONFIG_TYPE' => 'text', 'ONCHANGE' => 'valueUpdated', '_CONFIG_HELP' => 'SdThermostat', '_CONFIG_DEFAULT' => 18), // Пороговое значение температуры 'threshold' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_THRESHOLD, '_CONFIG_TYPE' => 'text', 'ONCHANGE' => 'valueUpdated', '_CONFIG_HELP' => 'SdThermostat'), // Режим работы термостата (Normal Close/Normal Open) 'ncno' => array('DESCRIPTION' => LANG_DEVICES_NCNO, '_CONFIG_TYPE' => 'select', '_CONFIG_OPTIONS' => 'nc=Normal Close (Heating),no=Normal Open (Cooling)', '_CONFIG_HELP' => 'SdThermostat'), // Отключение термостата 'disabled' => array('DESCRIPTION' => 'Disabled'), ), // Методы термостата 'METHODS' => array( // Установка целевой температуры 'setTargetTemperature' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_SET_TARGET_TEMPERATURE, '_CONFIG_SHOW' => 1, '_CONFIG_REQ_VALUE' => 1), // Обновление значения температуры 'valueUpdated' => array('DESCRIPTION' => 'Value Updated'), // Обновление статуса устройства 'statusUpdated' => array('DESCRIPTION' => 'Status Updated'), // Увеличение целевой температуры 'tempUp' => array('DESCRIPTION' => 'Increase target temperature'), // Уменьшение целевой температуры 'tempDown' => array('DESCRIPTION' => 'Descrease target temperature'), // Включение/выключение термостата 'switchEnable' => array('DESCRIPTION' => 'Switch Enable'), // Включение термостата 'enable' => array('DESCRIPTION' => 'Enable'), // Выключение термостата 'disable' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_MODE . ': ' . LANG_DEVICES_THERMOSTAT_MODE_OFF, '_CONFIG_SHOW' => 1), // Включение термостата в нормальный режим 'turnOn' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_MODE . ': ' . LANG_DEVICES_THERMOSTAT_MODE_NORMAL, '_CONFIG_SHOW' => 1), // Включение термостата в экономичный режим 'turnOff' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_MODE . ': ' . LANG_DEVICES_THERMOSTAT_MODE_ECO, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "ac" (кондиционер) 'ac' => array( 'TITLE' => LANG_DEVICES_AC, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SAirConditioners', // Свойства кондиционера 'PROPERTIES' => array( // Текущая температура 'value' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_CURRENT_TEMP, 'ONCHANGE' => 'valueUpdated', 'KEEP_HISTORY' => 365, 'DATA_KEY' => 1), // Текущее целевое значение температуры 'currentTargetValue' => array('DESCRIPTION' => LANG_DEVICES_THERMOSTAT_CURRENT_TARGET_TEMP, 'DATA_KEY' => 1, 'KEEP_HISTORY' => 365, '_CONFIG_DEFAULT' => 22), // Шаг изменения температуры 'tempStep' => array('DESCRIPTION' => LANG_DEVICES_AC_TEMP_STEP, '_CONFIG_TYPE' => 'text'), // Скорость вентилятора 'fanSpeed' => array('DESCRIPTION' => 'Fan Speed', '_CONFIG_DEFAULT' => 'auto', 'ONCHANGE' => 'fanSpeedUpdated'), // Режимы работы вентилятора 'fanSpeedModes' => array('DESCRIPTION' => LANG_DEVICES_AC_FAN_SPEED, '_CONFIG_TYPE' => 'multi_select', '_CONFIG_OPTIONS' => 'high=' . LANG_DEVICES_AC_FAN_SPEED_HIGH . ',medium=' . LANG_DEVICES_AC_FAN_SPEED_MEDIUM . ',low=' . LANG_DEVICES_AC_FAN_SPEED_LOW . ',auto=' . LANG_DEVICES_AC_FAN_SPEED_AUTO, '_CONFIG_DEFAULT' => 'high,medium,low,auto', 'ONCHANGE' => 'configUpdated', 'ONCHANGE' => 'fanSpeedUpdated'), // HTML для режимов работы вентилятора 'fanSpeedModesHTML' => array('DESCRIPTION' => 'FanSpeedModes HTML'), // Режим работы термостата 'thermostat' => array('DESCRIPTION' => 'Thermostat', '_CONFIG_DEFAULT' => 'auto', 'ONCHANGE' => 'thermostatUpdated'), // Режимы работы термостата 'thermostatModes' => array('DESCRIPTION' => LANG_DEVICES_AC_THERMOSTAT, '_CONFIG_TYPE' => 'multi_select', '_CONFIG_OPTIONS' => 'fan_only=' . LANG_DEVICES_AC_THERMOSTAT_FAN_ONLY . ',heat=' . LANG_DEVICES_AC_THERMOSTAT_HEAT . ',cool=' . LANG_DEVICES_AC_THERMOSTAT_COOL . ',dry=' . LANG_DEVICES_AC_THERMOSTAT_DRY . ',auto=' . LANG_DEVICES_AC_THERMOSTAT_AUTO, '_CONFIG_DEFAULT' => 'fan_only,heat,cool,dry,auto', 'ONCHANGE' => 'configUpdated'), // HTML для режимов работы термостата 'thermostatModesHTML' => array('DESCRIPTION' => 'ThermostatModes HTML'), ), // Методы кондиционера. 'METHODS' => array( // Установка целевой температуры 'setTargetTemperature' => array('DESCRIPTION' => 'Set target temperature'), // Установка режима работы термостата 'setThermostatMode' => array('DESCRIPTION' => 'Set thermostat mode'), // Установка режима работы вентилятора 'setFanSpeedMode' => array('DESCRIPTION' => 'Set fan speed mode'), // Обновление конфигурации 'configUpdated' => array('DESCRIPTION' => 'Config updated'), // Обновление скорости вентилятора 'fanSpeedUpdated' => array('DESCRIPTION' => 'Fan Speed updated'), // Обновление режима работы термостата 'thermostatUpdated' => array('DESCRIPTION' => 'Thermostat updated'), // Увеличение целевой температуры 'tempUp' => array('DESCRIPTION' => 'Increase target temperature'), // Уменьшение целевой температуры 'tempDown' => array('DESCRIPTION' => 'Descrease target temperature'), ) ), // Определение типа устройства "dimmer" (диммер) 'dimmer' => array( 'TITLE' => LANG_DEVICES_DIMMER, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SDimmers', 'PROPERTIES' => array( // Текущий уровень яркости 'level' => array('DESCRIPTION' => 'Current brightness level', 'ONCHANGE' => 'levelUpdated', 'DATA_KEY' => 1), // Последний сохраненный уровень 'levelSaved' => array('DESCRIPTION' => 'Latest level saved'), // Уровень яркости (рабочий) 'levelWork' => array('DESCRIPTION' => 'Brightness level (work)', 'ONCHANGE' => 'levelWorkUpdated'), // Минимальный рабочий уровень 'minWork' => array('DESCRIPTION' => LANG_DEVICES_DIMMER_MIN_WORK, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdDimmerMinMax'), // Максимальный рабочий уровень 'maxWork' => array('DESCRIPTION' => LANG_DEVICES_DIMMER_MAX_WORK, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdDimmerMinMax'), // Переключение уровня яркости 'switchLevel' => array('DESCRIPTION' => LANG_DEVICES_DIMMER_SWITCH_LEVEL, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdDimmerSwitchLevel'), // Установка максимального уровня включения 'setMaxTurnOn' => array('DESCRIPTION' => LANG_DEVICES_DIMMER_SET_MAX, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdDimmerSetMax'), ), // Методы димера 'METHODS' => array( // Установка уровня яркости 'setLevel' => array('DESCRIPTION' => LANG_DEVICES_DIMMER_SET_TARGET_LEVEL, '_CONFIG_SHOW' => 1, '_CONFIG_REQ_VALUE' => 1), // Обновление статуса устройства 'statusUpdated' => array('DESCRIPTION' => 'Status Updated'), // Обновление уровня яркости 'levelUpdated' => array('DESCRIPTION' => 'Level Updated'), // Обновление рабочего уровня яркости 'levelWorkUpdated' => array('DESCRIPTION' => 'Level Work Updated'), // Включение устройства 'turnOn' => array('DESCRIPTION' => LANG_DEVICES_TURN_ON, '_CONFIG_SHOW' => 1), // Выключение устройства 'turnOff' => array('DESCRIPTION' => LANG_DEVICES_TURN_OFF, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "rgb" (RGB-контроллер) 'rgb' => array( 'TITLE' => LANG_DEVICES_RGB, 'PARENT_CLASS' => 'SControllers', 'CLASS' => 'SRGB', // Свойства RGB-контроллера 'PROPERTIES' => array( // Текущий цвет 'color' => array('DESCRIPTION' => 'Current color', 'ONCHANGE' => 'colorUpdated', 'DATA_KEY' => 1), // Сохраненный цвет 'colorSaved' => array('DESCRIPTION' => 'Saved color'), // Текущая яркость 'brightness' => array('DESCRIPTION' => 'Current brightness', 'ONCHANGE' => 'colorUpdated'), ), // Методы RGB-контроллера 'METHODS' => array( // Обновление цвета 'colorUpdated' => array('DESCRIPTION' => 'Color Updated'), // Установка цвета 'setColor' => array('DESCRIPTION' => 'Color Set'), // Включение устройства 'turnOn' => array('DESCRIPTION' => LANG_DEVICES_TURN_ON, '_CONFIG_SHOW' => 1), // Выключение устройства 'turnOff' => array('DESCRIPTION' => LANG_DEVICES_TURN_OFF, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "motion" (датчик движения) 'motion' => array( 'TITLE' => LANG_DEVICES_MOTION, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SMotions', // Свойства датчика движения 'PROPERTIES' => array( // Датчик присутствия ли это 'isPresenceSensor' => array('DESCRIPTION' => LANG_DEVICES_MOTION_PRESENCE, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdMotionPrecence'), // Игнорировать движение, когда "никто не дома" 'ignoreNobodysHome' => array('DESCRIPTION' => LANG_DEVICES_MOTION_IGNORE, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdIgnoreNobodysHome'), // Сбросить состояние датчика движения 'resetNobodysHome' => array('DESCRIPTION' => LANG_DEVICES_MOTION_RESET, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdResetNobodysHome'), // Таймаут датчика движения 'timeout' => array('DESCRIPTION' => LANG_DEVICES_MOTION_TIMEOUT, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdMotionTimeout'), // Заблокирован ли датчик движения 'blocked' => array('DESCRIPTION' => 'Is blocked'), ), // Методы датчика движения 'METHODS' => array( // Обнаружение движения 'motionDetected' => array('DESCRIPTION' => 'Motion Detected'), // Блокировка датчика движения 'blockSensor' => array('DESCRIPTION' => LANG_BLOCK_SENSOR, '_CONFIG_SHOW' => 1), // Разблокировка датчика движения 'unblockSensor' => array('DESCRIPTION' => LANG_UNBLOCK_SENSOR, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "camera" (камера) 'camera' => array( 'TITLE' => LANG_DEVICES_CAMERA, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SCameras', //Свойства камеры 'PROPERTIES' => array( // URL потока видео (низкое качество) 'streamURL' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_STREAM_URL . ' (LQ)', 'ONCHANGE' => 'updatePreview', '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdCameraStreamUrl'), // URL потока видео (высокое качество) 'streamURL_HQ' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_STREAM_URL . ' (HQ)', 'ONCHANGE' => 'updatePreview', '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdCameraStreamUrl'), // Имя пользователя для доступа к камере 'cameraUsername' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_USERNAME, '_CONFIG_TYPE' => 'text'), // Пароль для доступа к камере 'cameraPassword' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_PASSWORD, 'ONCHANGE' => 'updatePreview', '_CONFIG_TYPE' => 'text'), // Транспортный протокол потока видео 'streamTransport' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_STREAM_TRANSPORT, 'ONCHANGE' => 'updatePreview', '_CONFIG_HELP' => 'SdCameraTransport', '_CONFIG_TYPE' => 'select', '_CONFIG_OPTIONS' => 'auto=Auto,udp=UDP,tcp=TCP'), // Тип предварительного просмотра 'previewType' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_PREVIEW_TYPE, 'ONCHANGE' => 'updatePreview', '_CONFIG_HELP' => 'SdCameraPreviewType', '_CONFIG_TYPE' => 'select', '_CONFIG_OPTIONS' => 'static=' . LANG_DEVICES_CAMERA_PREVIEW_TYPE_STATIC . ',slideshow=' . LANG_DEVICES_CAMERA_PREVIEW_TYPE_SLIDESHOW), // Действие при клике на предварительный просмотр 'clickAction' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_PREVIEW_ONCLICK, 'ONCHANGE' => 'updatePreview', '_CONFIG_HELP' => 'SdCameraClickType', '_CONFIG_TYPE' => 'select', '_CONFIG_OPTIONS' => 'enlarge=' . LANG_DEVICES_CAMERA_PREVIEW_ONCLICK_ENLARGE . ',stream=' . LANG_DEVICES_CAMERA_PREVIEW_ONCLICK_ORIGINAL), // URL снимка с камеры 'snapshotURL' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_SNAPSHOT_URL, '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdCameraSnapshotUrl'), // Снимок с камеры 'snapshot' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_SNAPSHOT, 'KEEP_HISTORY' => 365, 'DATA_TYPE' => 5), // Серия снимков с камеры 'series' => array('DESCRIPTION' => LANG_DEVICES_CAMERA_SNAPSHOT, 'KEEP_HISTORY' => 30, 'DATA_TYPE' => 5), // URL предварительного просмотра снимка 'snapshotPreviewURL' => array('DESCRIPTION' => 'Snapshot Preview URL'), // HTML для предварительного просмотра 'previewHTML' => array('DESCRIPTION' => 'Preview HTML',), // HTML для активного состояния 'activeHTML' => array('DESCRIPTION' => 'Active HTML',), // Игнорировать движение, когда "никто не дома" 'ignoreNobodysHome' => array('DESCRIPTION' => LANG_DEVICES_MOTION_IGNORE, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdIgnoreNobodysHome'), // Таймаут датчика движения 'timeout' => array('DESCRIPTION' => LANG_DEVICES_MOTION_TIMEOUT, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdMotionTimeout') ), // Методы камеры 'METHODS' => array( // Обнаружение движения 'motionDetected' => array('DESCRIPTION' => 'Motion Detected'), // Обновление кода предварительного просмотра 'updatePreview' => array('DESCRIPTION' => 'Update preview code'), // Сделать снимок 'takeSnapshot' => array('DESCRIPTION' => 'Take snapshot', '_CONFIG_SHOW' => 1), // Сделать серию снимков 'takeSeries' => array('DESCRIPTION' => 'Takes image series'), ) ), // Определение типа устройства "openclose" (датчик открытия/закрытия) 'openclose' => array( 'TITLE' => LANG_DEVICES_OPENCLOSE, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SOpenClose', // Свойства датчика открытия/закрытия 'PROPERTIES' => array( // Присутствие активности 'isActivity' => array('DESCRIPTION' => LANG_DEVICES_IS_ACTIVITY, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdIsActivity'), // Режим работы датчика (Normal Close/Normal Open) 'ncno' => array('DESCRIPTION' => LANG_DEVICES_NCNO, '_CONFIG_TYPE' => 'select', '_CONFIG_OPTIONS' => 'nc=Normal Close,no=Normal Open'), // Уведомлять о статусе 'notify_status' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY_STATUS, '_CONFIG_TYPE' => 'yesno'), // Уведомлять о не закрытом состоянии 'notify_nc' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY_NOT_CLOSED, '_CONFIG_TYPE' => 'yesno'), // Заблокирован ли датчик 'blocked' => array('DESCRIPTION' => 'Is blocked'), // Сообщение при открытии 'notify_msg_opening' => array('DESCRIPTION' => LANG_DEVICES_MSG_OPENING, '_CONFIG_TYPE' => 'text'), // Сообщение при закрытии 'notify_msg_closing' => array('DESCRIPTION' => LANG_DEVICES_MSG_CLOSING, '_CONFIG_TYPE' => 'text'), // Напоминание о не закрытом состоянии 'notify_msg_reminder' => array('DESCRIPTION' => LANG_DEVICES_MSG_REMINDER, '_CONFIG_TYPE' => 'text'), ), // Методы датчика открытия/закрытия 'METHODS' => array( // Обновление статуса устройства 'statusUpdated' => array('DESCRIPTION' => 'Status updated event'), // Блокировка датчика 'blockSensor' => array('DESCRIPTION' => LANG_BLOCK_SENSOR, '_CONFIG_SHOW' => 1), // Разблокировка датчика 'unblockSensor' => array('DESCRIPTION' => LANG_UNBLOCK_SENSOR, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "openable" (открываемые устройства) 'openable' => array( 'TITLE' => LANG_DEVICES_OPENABLE, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SOpenable', // Свойства открываемых устройств 'PROPERTIES' => array( // Присутствие активности 'isActivity' => array('DESCRIPTION' => LANG_DEVICES_IS_ACTIVITY, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdIsActivity'), // Уведомлять о статусе 'notify_status' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY_STATUS, '_CONFIG_TYPE' => 'yesno'), // Уведомлять о не закрытом состоянии 'notify_nc' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY_NOT_CLOSED, '_CONFIG_TYPE' => 'yesno'), // Поддержка уровня открытия 'support_level' => array('DESCRIPTION' => LANG_DEVICES_OPENABLE_SUPPORT_LEVEL, '_CONFIG_TYPE' => 'yesno'), // Тип открываемого устройства 'openType' => array('DESCRIPTION' => LANG_DEVICES_OPENTYPE, '_CONFIG_TYPE' => 'select', '_CONFIG_HELP' => 'SdOpenType', '_CONFIG_OPTIONS' => 'gates=' . LANG_DEVICES_OPENTYPE_GATES . ',window=' . LANG_DEVICES_OPENTYPE_WINDOW . ',door=' . LANG_DEVICES_OPENTYPE_DOOR . ',curtains=' . LANG_DEVICES_OPENTYPE_CURTAINS . ',shutters=' . LANG_DEVICES_OPENTYPE_SHUTTERS), // Сообщение при открытии 'notify_msg_opening' => array('DESCRIPTION' => LANG_DEVICES_MSG_OPENING, '_CONFIG_TYPE' => 'text'), // Сообщение при закрытии 'notify_msg_closing' => array('DESCRIPTION' => LANG_DEVICES_MSG_CLOSING, '_CONFIG_TYPE' => 'text'), // Напоминание о не закрытом состоянии 'notify_msg_reminder' => array('DESCRIPTION' => LANG_DEVICES_MSG_REMINDER, '_CONFIG_TYPE' => 'text'), // Текущий уровень открытия 'level' => array('DESCRIPTION' => 'Current level', 'ONCHANGE' => 'levelUpdated'), // Последний сохраненный уровень 'levelSaved' => array('DESCRIPTION' => 'Latest level saved'), ), // Методы открываемого устройства 'METHODS' => array( // Обновление статуса устройства 'statusUpdated' => array('DESCRIPTION' => 'Status updated event'), // Установка уровня открытия 'setLevel' => array('DESCRIPTION' => 'Set open level'), // Обновление уровня открытия 'levelUpdated' => array('DESCRIPTION' => 'Level Updated'), // Переключение состояния устройства 'switch' => array('DESCRIPTION' => 'Switch'), // Открытие устройства 'open' => array('DESCRIPTION' => 'Open', '_CONFIG_SHOW' => 1), // Закрытие устройства 'close' => array('DESCRIPTION' => 'Close', '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "leak" (датчик протечки) 'leak' => array( 'TITLE' => LANG_DEVICES_LEAK_SENSOR, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SLeak', //Свойства датчика протечки 'PROPERTIES' => array( // Уведомлять о устранении протечки 'notify_eliminated' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY_ELIMINATED, '_CONFIG_TYPE' => 'yesno'), // Напоминание о протечке 'notify_msg_reminder' => array('DESCRIPTION' => LANG_DEVICES_MSG_REMINDER, '_CONFIG_TYPE' => 'text'), // Заблокирован ли датчик 'blocked' => array('DESCRIPTION' => 'Is blocked'), ), // Методы датчика протечки 'METHODS' => array( // Обновление статуса устройства 'statusUpdated' => array('DESCRIPTION' => 'Status updated event'), // Сигнал тревоги 'alert' => array('DESCRIPTION' => 'Sensor alert'), // Блокировка датчика 'blockSensor' => array('DESCRIPTION' => LANG_BLOCK_SENSOR, '_CONFIG_SHOW' => 1), // Разблокировка датчика 'unblockSensor' => array('DESCRIPTION' => LANG_UNBLOCK_SENSOR, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "smoke" (датчик дыма) 'smoke' => array( 'TITLE' => LANG_DEVICES_SMOKE_SENSOR, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SSmoke', // Свойства датчика дыма 'PROPERTIES' => array( // Уведомлять об устранении задымления 'notify_eliminated' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY_ELIMINATED, '_CONFIG_TYPE' => 'yesno'), // Заблокирован ли датчик 'blocked' => array('DESCRIPTION' => 'Is blocked'), ), // Методы датчика дыма 'METHODS' => array( // Обновление статуса устройства 'statusUpdated' => array('DESCRIPTION' => 'Status updated event'), // Сигнал тревоги 'alert' => array('DESCRIPTION' => 'Sensor alert'), // Блокировка датчика 'blockSensor' => array('DESCRIPTION' => LANG_BLOCK_SENSOR, '_CONFIG_SHOW' => 1), // Разблокировка датчика 'unblockSensor' => array('DESCRIPTION' => LANG_UNBLOCK_SENSOR, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "counter" (счетчик) 'counter' => array( 'TITLE' => LANG_DEVICES_COUNTER, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SCounters', 'METHODS' => array( // Обновление значения данных 'valueUpdated' => array('DESCRIPTION' => 'Data Value updated event'), // Обновление рабочего значения 'valueWorkUpdated' => array('DESCRIPTION' => 'Work Value updated event'), // Обновление статистики 'refreshStats' => array('DESCRIPTION' => 'Refreshes daily/monthly stats', '_CONFIG_SHOW' => 1), // Обнаружение импульса счетчика 'pulseDetected' => array('DESCRIPTION' => 'Meter pulse detection'), ), 'PROPERTIES' => array( // Единица измерения 'unit' => array('DESCRIPTION' => LANG_DEVICES_UNIT, '_CONFIG_TYPE' => 'text'), // Цена за единицу 'price' => array('DESCRIPTION' => 'Price', '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdCounterPrice'), // Количество импульсов 'pulseAmount' => array('DESCRIPTION' => 'Pulse amount (optional)', '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdPulseAmount'), // Значение данных 'value' => array('DESCRIPTION' => 'Data Value', 'ONCHANGE' => 'valueUpdated', 'DATA_KEY' => 1), // Рабочее значение 'valueWork' => array('DESCRIPTION' => 'Work Value', 'ONCHANGE' => 'valueWorkUpdated', 'KEEP_HISTORY' => 0), // Значение за час 'valueHour' => array('DESCRIPTION' => 'Hour Value', 'KEEP_HISTORY' => 365), // Значение за день 'valueDay' => array('DESCRIPTION' => 'Day Value', 'KEEP_HISTORY' => 5 * 365), // Значение за месяц 'valueMonth' => array('DESCRIPTION' => 'Month Value', 'KEEP_HISTORY' => 5 * 365), // Коэффициент преобразования (рабочее-к-данным) 'conversion' => array('DESCRIPTION' => 'Conversion coefficient (work-to-data)', '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdConversion'), ), ), // Определение типа устройства "button" (кнопка) 'button' => array( 'TITLE' => LANG_DEVICES_BUTTON, 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SButtons', 'PROPERTIES' => array( // Иконка устройства 'icon' => array('DESCRIPTION' => LANG_IMAGE, '_CONFIG_TYPE' => 'style_image', '_CONFIG_HELP' => 'SdIcon'), // Присутствие активности 'isActivity' => array('DESCRIPTION' => LANG_DEVICES_IS_ACTIVITY, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdIsActivity'), ), 'METHODS' => array( // Нажатие кнопки 'pressed' => array('DESCRIPTION' => LANG_DEVICES_PRESS, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "sensor" (датчик) 'sensor' => array( 'PARENT_CLASS' => 'SDevices', 'CLASS' => 'SSensors', 'PROPERTIES' => array( // Текущее значение датчика 'value' => array('DESCRIPTION' => 'Current Sensor Value', 'ONCHANGE' => 'valueUpdated', 'KEEP_HISTORY' => 365, 'DATA_KEY' => 1), // Минимальное значение 'minValue' => array('DESCRIPTION' => LANG_DEVICES_MIN_VALUE, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdSensorMinMax'), // Максимальное значение 'maxValue' => array('DESCRIPTION' => LANG_DEVICES_MAX_VALUE, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdSensorMinMax'), // Уведомлять о превышении значений 'notify' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdSensorMinMax'), // Уведомлять о устранении утечки 'notify_eliminated' => array('DESCRIPTION' => LANG_DEVICES_NOTIFY_ELIMINATED, '_CONFIG_TYPE' => 'yesno'), // Основной датчик 'mainSensor' => array('DESCRIPTION' => LANG_DEVICES_MAIN_SENSOR, '_CONFIG_TYPE' => 'yesno', '_CONFIG_HELP' => 'SdMainSensor'), // Нормальное значение 'normalValue' => array('DESCRIPTION' => LANG_DEVICES_NORMAL_VALUE, 'KEEP_HISTORY' => 0), // Направление изменений 'direction' => array('DESCRIPTION' => 'Direction of changes', 'KEEP_HISTORY' => 0), // Таймаут направления изменений 'directionTimeout' => array('DESCRIPTION' => LANG_DEVICES_DIRECTION_TIMEOUT, 'KEEP_HISTORY' => 0, '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdDirectionTimeout', 'ONCHANGE' => 'valueUpdated'), // Заблокирован ли датчик 'blocked' => array('DESCRIPTION' => 'Is blocked'), ), 'METHODS' => array( // Обновление значения 'valueUpdated' => array('DESCRIPTION' => 'Value Updated'), // Сигнал тревоги 'alert' => array('DESCRIPTION' => 'Sensor alert'), // Блокировка датчика 'blockSensor' => array('DESCRIPTION' => LANG_BLOCK_SENSOR, '_CONFIG_SHOW' => 1), // Разблокировка датчика 'unblockSensor' => array('DESCRIPTION' => LANG_UNBLOCK_SENSOR, '_CONFIG_SHOW' => 1), ) ), // Определение типа устройства "sensor_general" (общий датчик) 'sensor_general' => array( 'TITLE' => LANG_DEVICES_GENERAL_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SGeneralSensors', 'PROPERTIES' => array( // Единица измерения 'unit' => array('DESCRIPTION' => LANG_DEVICES_UNIT, '_CONFIG_TYPE' => 'text'), ), ), // Определение типа устройства "sensor_temp" (датчик температуры) 'sensor_temp' => array( 'TITLE' => LANG_DEVICES_TEMP_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'STempSensors' ), // Определение типа устройства "sensor_humidity" (датчик влажности) 'sensor_humidity' => array( 'TITLE' => LANG_DEVICES_HUM_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SHumSensors' ), // Определение типа устройства "sensor_moisture" (датчик влажности почвы) 'sensor_moisture' => array( 'TITLE' => LANG_DEVICES_MOISTURE_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SMoistureSensors' ), // Определение типа устройства "sensor_co2" (датчик CO2) 'sensor_co2' => array( 'TITLE' => LANG_DEVICES_CO2_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SCO2Sensors' ), // Определение типа устройства "sensor_radiation" (датчик радиации) 'sensor_radiation' => array( 'TITLE' => LANG_DEVICES_RADIATION_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SRadiationSensors' ), // Определение типа устройства "sensor_state" (датчик состояния) 'sensor_state' => array( 'TITLE' => LANG_DEVICES_STATE_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SStateSensors' ), // Определение типа устройства "sensor_percentage" (датчик процента) 'sensor_percentage' => array( 'TITLE' => LANG_DEVICES_PERCENTAGE_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SPercentageSensors' ), // Определение типа устройства "sensor_pressure" (датчик давления) 'sensor_pressure' => array( 'TITLE' => LANG_DEVICES_PRESSURE_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SPressureSensors' ), // Определение типа устройства "sensor_power" (датчик мощности) 'sensor_power' => array( 'TITLE' => LANG_DEVICES_POWER_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SPowerSensors', 'PROPERTIES' => array( // Таймаут статуса нагрузки 'loadStatusTimeout' => array('DESCRIPTION' => LANG_DEVICES_LOAD_TIMEOUT, '_CONFIG_TYPE' => 'text', '_CONFIG_HELP' => 'SdLoadTimeout'), ), 'METHODS' => array( // Обновление значения 'valueUpdated' => array('DESCRIPTION' => 'Value Updated'), // Изменение статуса нагрузки 'loadStatusChanged' => array('DESCRIPTION' => 'Load Status Changed'), ) ), // Определение типа устройства "sensor_voltage" (датчик напряжения) 'sensor_voltage' => array( 'TITLE' => LANG_DEVICES_VOLTAGE_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SVoltageSensors' ), // Определение типа устройства "sensor_current" (датчик тока) 'sensor_current' => array( 'TITLE' => LANG_DEVICES_CURRENT_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SCurrentSensors' ), // Определение типа устройства "sensor_light" (датчик освещенности) 'sensor_light' => array( 'TITLE' => LANG_DEVICES_LIGHT_SENSOR, 'PARENT_CLASS' => 'SSensors', 'CLASS' => 'SLightSensors', // Свойства датчика освещенности 'PROPERTIES' => array( // Единица измерения 'unit' => array('DESCRIPTION' => LANG_DEVICES_UNIT, '_CONFIG_TYPE' => 'text'), // Дальше на ГИТе свойства и методы датчика удалены, но тогда датчик не работает, поэтому добавляем: // Минимальное значение за период 'periodMinValue' => array('DESCRIPTION' => 'Minimum value for period', 'ONCHANGE' => 'periodMinValueUpdated', 'KEEP_HISTORY' => 365), // Время периода для расчета минимального значения (секунды) 'periodTime' => array('DESCRIPTION' => 'Period to calculate minimum value (seconds)', '_CONFIG_TYPE' => 'num', '_CONFIG_HELP' => 'SdSensorPeriodTime'), ), // Методы датчика освещенности 'METHODS' => array( // Обновление значения 'valueUpdated' => array('DESCRIPTION' => 'Value Updated', 'CALL_PARENT' => 1), // Обновление минимального значения за период 'periodMinValueUpdated' => array('DESCRIPTION' => 'Period Min value updated'), ), ), ); // Проверка наличия дополнительных модулей // Определение пути к директории дополнительных модулей $addons_dir = dirname(__FILE__) . '/addons'; // Проверка, существует ли директория дополнительных модулей if (is_dir($addons_dir)) { // Получение списка файлов в директории дополнительных модулей $addon_files = scandir($addons_dir); // Перебор каждого файла в списке foreach ($addon_files as $file) { // Проверка, соответствует ли имя файла шаблону для структурных файлов модулей if (preg_match('/\_structure\.php$/', $file)) { // Подключение файла модуля, если он соответствует шаблону require($addons_dir . '/' . $file); } } }