
рдЖрдкрдХреЗ рд▓рд┐рдП
рдХреНрд░рд┐рд╕ рд╣реЙрдХрд┐рдиреНрд╕ рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛
рдЧрдпрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдЕрдкрдиреЗ рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред рдРрдкреНрдкрд▓ рдХреЗ рд╣реЛрдордкреЙрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдШрд░ рдкрд░ рдПрдХ Apple рд╣реЛрдордкреЙрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдШрд░ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдорд╛рд░реНрдЯ рд▓реИрдВрдк) рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдШрд░ рдФрд░ рдмрд╛рд╣рд░ рджреЛрдиреЛрдВ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рд╕рд╣рд╛рдпрдХ рдлреЛрди рдкрд░ рд╣реИ)ред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реИ: рджреЛ рд╕рд╛рд▓ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреЛрд░реНрд╕, "рдореИрдВ рдПрдХ рдкреНрд░реЛ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ ред "
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореБрдЭреЗ рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣рд╛рдпрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ (рди рдХреЗрд╡рд▓ рд╕рд┐рд░реА)ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рдПрдХ рдЖрджрдд рдмрди рдЧрдИред рдЪреВрдВрдХрд┐ рд╣реНрдпреВ рд▓реИрдВрдк рдореЗрдВ рдПрдХ рднреМрддрд┐рдХ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрд╡реЗрджрди рдореЗрдВ рдЖрдкрдХреЛ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдореИрдВрдиреЗ рд╕рд┐рд░реА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдХрд░реНрд╖рд┐рдд рдХрд┐рдпрд╛ред
рддрдм рдореИрдВ рдШрд░ рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЖрд╡рд╛рдЬ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреАрд╡реА рдпрд╛ рдПрдХ рдХрдВрд╕реЛрд▓ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреАрд╡реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд┐рдВрдкрд▓ рдЖрдИрдкреА рдХрдВрдЯреНрд░реЛрд▓ рдХреА рдЦреЛрдЬ рдХреА - рдЯреАрд╕реАрдкреА рдкрд░ рдХрдорд╛рдВрдб рднреЗрдЬрдХрд░ рдЕрдкрдиреЗ рд╕реЛрдиреА рдмреНрд░рд╛рд╡рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ред
рд╕рд┐рд░реА рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВ
2018 рдХреА рджреВрд╕рд░реА рдЫрдорд╛рд╣реА рдореЗрдВ, Apple рдиреЗ рд╕рднреА iOS рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрдХрдЯ рдРрдк рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдлреЛрди (рдпрд╛ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рд╣реИрдВред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЬреЛ рдХрдореА рд╣реИ рд╡рд╣ рдЯреАрд╕реАрдкреА рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИред
рд╕рд╛рде рд╣реА, рдЖрдк Objective-C рдпрд╛ Swift рдореЗрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рд╣реЛрдордкреЙрдб рдХреЛ рджреВрд╕рд░реЗ рд╕рд╣рд╛рдпрдХ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рд╕рд┐рд░реА рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХреЗред
рд╕реЛрдиреА рдмреНрд░рд╛рд╡рд┐рдпрд╛ рдЯреАрд╡реА рдХрдВрдЯреНрд░реЛрд▓
рдЕрдкрдиреЗ рдЯреАрд╡реА рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдореИрдиреБрдЕрд▓ рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдореИрдВрдиреЗ
Node.js Express (Github) рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдореЗрдВ рдореБрдЭреЗ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВрдиреЗ рд╡реЙрд▓реНрдпреВрдо рдЪрд╛рд▓реВ рдХрд░рдХреЗ рд╢реБрд░реБрдЖрдд рдХреАред
рд╕реЗрдЯрдкреЙрд╡рд░рд╕реНрдЯреИрдЯрд╕ рдХрдорд╛рдВрдб рд╡рд╣ рд╕рдм рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред

рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдг * рдФрд░ s рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдерд┐рд░ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд╛рд░ рдЕрд░реНрде рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕реА рдлреЙрд░ рдХрдорд╛рдВрдб (рдЯреАрд╡реА рдкрд░ рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬрдирд╛), рдИ рдлреЙрд░ рдЗрдВрдХреНрд╡рд╛рдпрд░реА (рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореМрдЬреВрджрд╛ рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЙрд▓реНрдпреВрдо), рдП - рдЙрддреНрддрд░ (рдХрдорд╛рдВрдбреНрд╕ рдФрд░ рдЗрдВрдХреНрд╡рд╛рдпрд░реА рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛) рдФрд░ рдПрди рдлреЙрд░ рдиреЛрдЯрд┐рдлрд╝ (рдЗрд╡реЗрдВрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди, рдЬреИрд╕реЗ рд╡реЙрд▓реНрдпреВрдо рдмрдВрдж рдХрд░рдирд╛) )ред
рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ
рд╕реЛрдиреА рдХреЗ JSON-RPC рдкреНрд░рд▓реЗрдЦрди
рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, HTTP рдкрд░ JSON-RPC рдХреА рдкреНрд░рдХреГрддрд┐ рдиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ред
JSON-RPC API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рд░рд▓ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрд╡рд╛ (рд╕рд┐рд╕реНрдЯрдо), рдХрдорд╛рдВрдб (getPowerStatus) рдкреНрд▓рд╕ рдорд╛рдкрджрдВрдбреЛрдВ (рд╕рд╣реА рдпрд╛ рдЧрд▓рдд) рдХреЛ рд▓реЗрдВ рдФрд░ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдмрдирд╛рдПрдВ, рдЬрд┐рд╕реЗ рд╣рдо рддрдм рдЯреАрд╡реА рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВред
let body = JSON.stringify({ method: command, id: ++this.id, params: params, version: "1.0", }); return new Promise((resolve, reject) => { fetch('http://' + this.ip + ':' + this.port + '/sony/' + service, { method: 'post', headers: { 'X-Auth-PSK': this.psk }, body: body, }).then(response => { return response.json(); }).then(response => { if (response.error && (!response.result || response.result.length === 0)) { reject({ code: response.error[0] }); } else { resolve(response.result[0]); } }).catch(error => { reject(error); }); });
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, HTTP рдЕрдиреБрд░реЛрдз рдХреЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдкреВрд░реНрд╡-рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХреНрд╕реЗрд╕рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЯреАрд╡реА рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА HTTP рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдПрдХ рдмрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЧреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдЯреАрд╡реА рд░рд╛рдЙрдЯрд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреВрд░реНрд╡-рд╕рд╛рдЭрд╛ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
Xbox One рдЪрд╛рд▓реВ рдХрд░реЗрдВ
Xbox, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯрдЕрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Microsoft рдиреЗ REST API рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП UDP рдкреИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Node.js рдореЗрдВ рдПрдХ dgram рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдпреВрдПрд╕рдкреА рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рдореБрдЭреЗ рдЕрдВрдд рдореЗрдВ рдорд┐рд▓рд╛ред
turnOn() { let socket = dgram.createSocket('udp4'); let powerPayload = new Buffer('\x00' + String.fromCharCode(this.liveId.length) + this.liveId.toUpperCase() + '\x00'); let powerHeader = Buffer.concat([new Buffer('dd0200', 'hex'), new Buffer(String.fromCharCode(powerPayload.length)), new Buffer('\x00\x00')]); let powerPacket = Buffer.concat([powerHeader, powerPayload]); return this._sendPacket(socket, powerPacket); } _sendPacket(socket, buffer) { return new Promise((resolve, reject) => { socket.send(buffer, 0, buffer.length, Constants.xboxPort, this.ip, function(err) { socket.close(); if (err) { return reject(err); } resolve(); }); }); }
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЖрдИрдбреА рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдпрджрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдореЗрд░реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдХреЛрдб рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ config.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрдХрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореИрдВрдиреЗ рдЕрднреА рдмрдирд╛рдпрд╛ рдерд╛, рдЙрд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "рд░рд╛рд╕реНрдкрдмреЗрд░реА" рд╕рднреА рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдкреА 3 рдореЙрдбрд▓ рдмреА + рдЦрд░реАрджрд╛ рдЬреЛ рд╡рд╛рдИ-рдлрд╛рдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
Raspbian рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ GUI рд╣реИред рдореИрдВ рд╡рд╛рдИ-рдлрд╛рдИ рд╕реЗ рдЬреБрдбрд╝рд╛, рдлрд┐рд░ рдкреНрд░рджрд░реНрд╢рди рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдПрд╕рдПрд╕рдПрдЪ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рдЧрд╛рддрд╛рд░ рд╕рдХреНрд░рд┐рдп рд╣реИ, рдореИрдВрдиреЗ рд╕рд░реНрд╡рд┐рд╕ рдПрдХреНрдЯрд┐рд╡реЗрд╢рди рд╕реЙрдХреЗрдЯ рдХреЛ рд╕рд┐рд╕реНрдЯрдордб рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдпрджрд┐ Node.js рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдП, рддреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рджрд░рдЕрд╕рд▓, рд╕рд┐рд░реА рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрдХрдЯ рдХрд╛рдо рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЪрд░рдг рдерд╛ред рдпрд╣ рджреЗрд╢реА рд╡реЙрдпрд╕ рдХрдорд╛рдВрдб рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╣рдЬ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рдерд╛ рдХрд┐ рд╣реЛрдордкреЙрдб рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдЫ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред

рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рдЪреВрдВрдХрд┐ рдореЗрд░рд╛ рдЯреАрд╡реА рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдпрд╣ рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдФрд░ рдпреВрдЯреНрдпреВрдм рдЬреИрд╕реЗ рдРрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдмрдирд╛рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рд╡реЙрд▓реНрдпреВрдо, рдЯреАрд╡реА рдореЛрдб, рдкреЙрдЬрд╝ рдФрд░ рдкреНрд▓реЗ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдЬреЛрдбрд╝реЗред
рдпрд╣рд╛рдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣рд░ рдЪреАрдЬ рдХреЗ
рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ ред рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдореЙрдбреНрдпреВрд▓рд░ рдмрдирд╛рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЕрдиреНрдп рд╕реНрдорд╛рд░реНрдЯрдЯреАрд╡реА рдореЙрдбрд▓ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ Xbox, рдЯреАрд╡реА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рдПрдЪрдбреАрдПрдордЖрдИ рдкреЛрд░реНрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред
router.post('/turnOnXboxAndTV', function(req, res, next) { Promise.all([ xbox.turnOn(), tv.turnOn() .then(() => new Promise(resolve => setTimeout(resolve, 2000))) .then(() => tv.setInput(config.scripts.xboxInput)), ]).then(() => { res.sendStatus(200); }).catch((error) => { res.status(500).send(error); }); });
рдФрд░ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рд┐рд░реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реИред рдЕрдореЗрдЬрд╝рди рд╕реЗ рдПрдХ рд╣реА рдПрд▓реЗрдХреНрд╕рд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдФрд░ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА API рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдПрд▓реЗрдХреНрд╕рд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд, рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: