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); 
        }
    }
}