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 ```