Newer
Older
smart-home-server / docs / script-api.md

API для написания скриптов

  • Скрипт должен быть написан на php
  • Скрипт может находиться где угодно, при добавлении скрипта можно указать директорию где его нужно искать.
  • Скрипт сам должен обеспечитьвать подключение дополнительных файлов, если это необходимо.
  • Скрипт свободен в своей реализации
  • Скрипты подключаться сразу все, а потом уже запускаются по очереди. Порядок запуска - как-нибудь :)
  • Взаимодействия между скриптами желательно вести через ивенты.

Основные положения. INIT

  • Файл скрипта должен содержать как минимум одну функцию, название которой должно формироваться по следующему принципу: script_[filename]_init, именно эта функция и будет точкой входа скрипта. Её основная задача - зарегистрировать всё, что нужно, подписаться на ивенты и передать управление дальше
  • Основная фукция должна принимать 2 параметра: $server - ссылка на само приложение сервера, $params - произвольный набор параметров.
  • Система ожидает, что функция вернёт результат выполнения.

Пример

    <?php
    function script_example_init($server, $params) {
        // something...

        return true; // result of executing
    }

Основные положения. INVOKE

  • Скрипт может быть вызван принудительно через rest api, в таком случае будет вызвана определённая функция из файла скрипта.
  • Функция должна называться по схожему принципу script_[filename]_invoke
  • Эта функция принимает всё те же 2 параметра: $server - ссылка на само приложение сервера, $params - произвольный набор параметров. Параметры должны быть переданы при вызове через RESP API
  • Эта функция должна вернуть ассоциативный массив с минимум одним ключём status выполнения скрипта (true|false)
  • Если функция хочет что-то вернуть в ответ на запрос REST API, она должна в return включить поле response

Пример

    <?php
    function script_example_invoke($server, $params) {
        // something...

        return [
            "status" => true, // result of executing
            "response" => [
                // ...
            ]
        ]; 
    }

Основные положения. EVENTS

  • Скрипт может работать с ивентами. Он может подписаться на ивент, или стригерить существующий ивент, или зарегистрировать свой, на который потом смогут подписаться другие скрипты.
  • Регистрацию ивентов нужно проводить при инициализации скрипта.
  • Подписываться на ивенты нужно при инициализации скрипта.
  • Запуск обработчика ивента не произойдёт в момент вызова тригера ивента. Вместо этого нужно передать колбек функцию тригера, которая будет вызвана как только ивент станет доступным в системе, ведь на момент тригера он ещё может быть не зарегистрированным.

Пример регистрации ивента

    <?php
    function script_example_init($server, $params) {
        $server -> events -> add("name_of_event");
        return true; 
    }

Пример тригера ивента

    <?php
    function script_example_invoke($server, $params) {
        $server -> events -> trigger("name_of_event", $data);
        return true; 
    }

Пример подписки обработчика события

    <?php
    function script_example_init($server, $params) {
        $server -> events -> new_handler("name_of_event", function($event) {
            var_dump($event -> data);
        });
        return true; 
    }