admin / superadmin или право scripts.edit / scripts.run).{
"alias": "bad_weather_light",
"filename": "bad_weather_light.php",
"path": "/srv/http/smart-home-serv.local/automation/Scopes",
"state": "enabled",
"created_by": "Eugene Sukhodolskiy",
"create_at": "2025-06-02 23:35:11"
}
/api/v1/scripts/actions/listПолучить список action-скриптов.
Требуемое право: scripts.view
{
"status": true,
"data": {
"scripts": [
{
"alias": "script_alias",
"name": "script name",
"state": "enabled",
"description": "script description",
"filename": "TestScriptsScope.php",
"path": "/srv/http/smart-home-serv.local/automation/Scopes",
"created_by": "Eugene Sukhodolskiy",
"params_schema": {
"level": {
"type": "range",
"label": "Яркость, %",
"min": 0,
"max": 100,
"default": 50,
"required": true
}
}
}
],
"total": 1
}
}
/api/v1/scripts/regular/listПолучить список regular-скриптов.
Требуемое право: scripts.view
{
"status": true,
"data": {
"scripts": [
{
"alias": "script_alias",
"name": "script name",
"state": "enabled",
"description": "script description",
"filename": "TestScriptsScope.php",
"path": "/srv/http/smart-home-serv.local/automation/Scopes",
"created_by": "Eugene Sukhodolskiy"
}
],
"total": 1
}
}
/api/v1/scripts/scopes/listПолучить список Scope-классов.
Требуемое право: scripts.view
{
"status": true,
"data": {
"scopes": [
{
"name": "TestScriptsScope",
"filename": "TestScriptsScope.php",
"state": "enabled",
"path": "/srv/http/smart-home-serv.local/automation/Scopes"
}
],
"total": 1
}
}
/api/v1/scripts/scopes/name/{filename}Получить исходный код PHP-файла Scope.
Требуемое право: scripts.view
<?php /* code */ ?>
/api/v1/scripts/scopes/updateОбновить исходный код Scope. Перед записью выполняется проверка синтаксиса (php -l), валидация namespace (ControlScripts\Scopes) и имени класса.
Требуемое право: scripts.edit
{
"name": "LightHubScope",
"source": "<?php\nnamespace ControlScripts\\Scopes;\nclass LightHubScope extends ..."
}
{
"status": false,
"error_alias": "syntax_error",
"failed_fields": ["source"],
"msg": "..."
}
Возможные ошибки: invalid_alias | invalid_source | syntax_error | invalid_namespace | class_name_mismatch | write_failed
/api/v1/scripts/scopes/name/{name}/removeУдалить Scope из системы. Удаляет PHP-файл и связанную запись в БД.
Требуемое право: scripts.edit
/api/v1/scripts/actions/alias/{alias}/enable/api/v1/scripts/actions/alias/{alias}/disableВключить / выключить action-скрипт.
Требуемое право: scripts.edit
/api/v1/scripts/regular/alias/{alias}/enable/api/v1/scripts/regular/alias/{alias}/disableВключить / выключить regular-скрипт.
Требуемое право: scripts.edit
/api/v1/scripts/actions/scope/{name}/enable/api/v1/scripts/actions/scope/{name}/disableВключить / выключить Scope (все его скрипты перестают регистрироваться при следующем старте сервера).
Требуемое право: scripts.edit
/api/v1/scripts/actions/runЗапустить action-скрипт. Проверяется, что скрипт включён (state = enabled). Если у скрипта есть params_schema, параметры валидируются перед вызовом.
Требуемое право: scripts.run
{
"alias": "script_alias",
"params": {}
}
{
"alias": "dim_lights",
"params": {
"level": 80,
"room": "kitchen",
"instant": true
}
}
{
"status": true,
"data": {
"return": {
"result": {},
"exec_time": "0.042 seconds"
}
}
}
Ошибки:
action_script_not_found — alias не существует или скрипт disabledinvalid_params — параметры не прошли валидацию по params_schema (в failed_fields перечислены поля с ошибками)/api/v1/scripts/timers/listПолучить список таймеров (все статусы: pending, executed, cancelled, failed).
Требуемое право: scripts.view
{
"status": true,
"data": {
"timers": [
{
"id": 1,
"timer_alias": "kitchen_auto_off",
"scope_name": "LightHubScope",
"target_type": "action",
"target_alias": "kitchen_light_switcher",
"params": "{}",
"execute_at": "2026-06-08 15:30:00",
"status": "pending",
"created_at": "2026-06-08 15:25:00"
}
],
"total": 1
}
}
/api/v1/scripts/timers/cancelОтменить pending-таймер по timer_alias.
Требуемое право: scripts.edit
{
"timer_alias": "kitchen_auto_off"
}
/api/v1/scripts/place-in-areaПоместить скрипт в область.
Тело: { "target_id": 5, "place_in_area_id": 2 }
/api/v1/scripts/id/{id}/unassign-from-areaОтвязать скрипт от области.
/api/v1/modes/listПолучить список всех системных модов с метаданными (label, description) и текущим состоянием (is_active).
Требуемое право: scripts.view
{
"status": true,
"data": {
"modes": [
{
"tag": "home",
"label": "Дома",
"description": "Основной режим присутствия...",
"is_active": true,
"updated_at": "2026-06-08 14:30:00"
},
{
"tag": "away",
"label": "Не дома",
"description": "Никого нет дома...",
"is_active": false,
"updated_at": "2026-06-08 14:30:00"
}
],
"total": 2
}
}
/api/v1/modes/activeМассив активных тегов модов.
Требуемое право: scripts.view
{
"status": true,
"data": {
"active": ["home", "night"]
}
}
/api/v1/modes/{tag}/enable/api/v1/modes/{tag}/disableАктивировать / деактивировать мод. tag должен соответствовать реестру automation/ModesRegistry.php.
Требуемое право: scripts.edit
Ошибка: invalid_alias (если тег не соответствует ^[a-z0-9_]+$).