github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/doc/content/ru/docs/javascript/_index.md (about)

     1  
     2  ---
     3  title: "Javascript"
     4  linkTitle: "Javascript"
     5  date: 2021-11-19
     6  description: >
     7    
     8  ---
     9  
    10  Программная логика и приложения в проекте **Smart Home** разрабатываются с использованием языка JavaScript, CoffeeScript и TypeScript. 
    11  JavaScript - это широко используемый язык программирования, который обеспечивает гибкость и мощность в создании 
    12  интерактивных компонентоа.
    13  
    14  Проект **Smart Home** использует JavaScript для написания всех основных компонентов, которые управляют умным домом.
    15  Это включает логику управления устройствами, обработку данных, взаимодействие с внешними API, создание пользовательского 
    16  интерфейса и многое другое.
    17  
    18  В проекте **Smart Home** вы можете использовать JavaScript для создания правил автоматизации, настройки расписаний, 
    19  обработки данных с датчиков, управления освещением, отоплением, системой безопасности и многими другими аспектами вашего
    20  умного дома. JavaScript обеспечивает простоту взаимодействия с устройствами и системами, а также позволяет создавать
    21  пользовательские интерфейсы для управления всеми функциями вашего дома.
    22  
    23  Благодаря гибкости и популярности JavaScript, вы можете легко настроить и расширить проект **Smart Home** в соответствии 
    24  с вашими потребностями и предпочтениями. Вам предоставляется возможность использовать широкий спектр инструментов и 
    25  библиотек JavaScript, чтобы адаптировать проект под ваши уникальные требования и расширить его функциональность.
    26  
    27  Независимо от ваших навыков в программировании, JavaScript предоставляет мощный инструментарий для разработки программной
    28  логики и приложений в проекте **Smart Home**.
    29  
    30  ### Область видимости и scope
    31  
    32  {{< figure src="/smart-home/img/scrips-scope.svg" >}}
    33  
    34  Система скриптов для Smart Home предоставляет гибкую и мощную среду для автоматизации, однако важно учесть различные
    35  области видимости при проектировании программной архитектуры. Существует пять скоупов, в которых могут выполняться
    36  скрипты:
    37  
    38  Для начала давайте посмотрим картину в целом. У нас есть пять скоупов где исполняются скрипты:
    39  * **Entity**
    40    * **General Scope**
    41      * при старте entity выполняется единожды:
    42        * `function init(): void;`
    43      * выполняется метод entityAction, когда, выполняется действие, если не указан в **Action Scope**:
    44        * `function entityAction(entityId: string, actionName: string, params: { [key: string]: any }): void;`
    45    * **Action Scope**
    46      * выполняется метод entityAction, когда, выполняется действие:
    47        * `function entityAction(entityId: string, actionName: string, params: { [key: string]: any }): void;`
    48  * **Task**
    49    * **Trigger Scope**
    50      * выполняется один из следующих методов в зависимости от типа триггера и события:
    51        * `function automationTriggerStateChanged(msg: TriggerStateChangedMessage): boolean;`
    52        * `function automationTriggerAlexa(msg: TriggerAlexaTimeMessage): boolean;`
    53        * `function automationTriggerTime(msg: TriggerTimeMessage): boolean;`
    54        * `function automationTriggerSystem(msg: TriggerSystemMessage): boolean;`
    55    * **Condition Scope**
    56      * выполняется метод automationCondition, когда отработает триггер:
    57        * `function automationCondition(entityId: string): boolean;`
    58    * **Action Scope**
    59      * выполняется метод automationAction, когда automationCondition вернет true:
    60        * `function automationAction(entityId: string): void;`
    61  
    62  ### Примеры
    63  
    64  Мы написали скрипт описывающий логику, обработчик событий и автоматизацию. 
    65  
    66  ```javascript
    67  // Неправильная реализация скрипта с тремя скопами
    68  
    69  // General scope
    70  // ##################################
    71  var init, entityAction, automationTriggerStateChanged;
    72  
    73  let entityState;
    74  
    75  // Entity - General Scope
    76  init = function () {
    77    // Инициализация сущности
    78    entityState = 'off';
    79  }
    80  
    81  // Action scope
    82  // ##################################
    83  
    84  entityAction = function (entityId, actionName, args) {
    85    console.log(entityState); // Неправильно
    86  };
    87  
    88  //  automation
    89  //  ##################################
    90  automationTriggerStateChanged = function (msg) {
    91    console.log(entityState); // Неправильно
    92  };
    93  ```
    94  
    95  ```javascript
    96  // Правильная реализация скрипта с тремя скопами
    97  
    98  // General scope
    99  // ##################################
   100  var init, entityAction, automationTriggerStateChanged;
   101  
   102  let entityState;
   103  let storageKey = entityState + ENTITY_ID;
   104  
   105  // Entity - General Scope
   106  init = function () {
   107    // Инициализация сущности
   108    entityState = 'off';
   109  
   110    Storage.push(storageKey, entityState);
   111  }
   112  
   113  // Action scope
   114  // ##################################
   115  
   116  entityAction = function (entityId, actionName, args) {
   117    const entityState = Storage.getByName(storageKey);
   118    console.log(entityState);
   119  };
   120  
   121  //  automation
   122  //  ##################################
   123  automationTriggerStateChanged = function (msg) {
   124    const entityState = Storage.getByName(storageKey);
   125    console.log(entityState);
   126  };
   127  ```