-
Notifications
You must be signed in to change notification settings - Fork 2
/
alexa-headless-start.js
107 lines (84 loc) · 3.16 KB
/
alexa-headless-start.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
'use strict';
let spawn = require('child_process').spawn;
let carry = require('carrier').carry;
let fs = require('fs');
// Alexa avs sample app samples path - change this if you have it installed in a different path
let ALEXA_AVS_SAMPLE_APP_SAMPLES_PATH = '/home/pi/Desktop/alexa-avs-sample-app/samples';
let companionServiceScriptArgs = {
name: 'companionService',
workingDirectory: `${ALEXA_AVS_SAMPLE_APP_SAMPLES_PATH}/companionService`,
command: 'npm start'
};
let javaClientScriptArgs = {
name: 'javaClient',
workingDirectory: `${ALEXA_AVS_SAMPLE_APP_SAMPLES_PATH}/javaclient`,
command: 'mvn exec:exec'
};
let wakeWordAgentScriptArgs = {
name: 'wakeWordAgent',
workingDirectory: `${ALEXA_AVS_SAMPLE_APP_SAMPLES_PATH}/wakeWordAgent/src`,
command: './wakeWordAgent -e kitt_ai'
};
let mainLogFileName = 'alexa-headless-start.log';
let logsDirectory = 'logs';
function runScript(scriptArgs, scriptInitializedString, onScriptInitialized) {
try {
log(`Starting ${scriptArgs.name}`, mainLogFileName);
let scriptLogFileName = scriptArgs.name + '.log';
let isScriptInitialized = false;
let scriptProcess = spawn(scriptArgs.command, { cwd: scriptArgs.workingDirectory, shell: true });
scriptProcess.on('error', err => {
log(err, mainLogFileName);
})
scriptProcess.on('close', function (code) {
log(`Script ${scriptArgs.name} exited with code ${code}`, scriptLogFileName);
});
scriptProcess.stderr.on('data', function (data) {
log('stderr: ' + data, scriptLogFileName, true);
});
carry(scriptProcess.stdout, line => {
log(line, scriptLogFileName, true);
if (isScriptInitialized || !line.includes(scriptInitializedString)) {
return;
}
isScriptInitialized = true;
log(`${scriptArgs.name} is initialized`, mainLogFileName);
if (onScriptInitialized) {
onScriptInitialized();
}
});
} catch (err) {
log(err, mainLogFileName);
}
}
function playAlexaHello() {
spawn('aplay', ['resources/hello.wav']);
}
function writeToFile(text, fileName) {
if (!fs.existsSync(logsDirectory)) {
fs.mkdirSync(logsDirectory);
}
fs.appendFileSync(`${logsDirectory}/${fileName}`, text + '\n');
}
function log(log, fileName, shouldSkipConsole) {
let dateString = new Date().toLocaleString();
let logString = `${dateString}: ${log}`;
writeToFile(logString, fileName);
if (shouldSkipConsole) {
return;
}
console.log(logString);
}
function startAlexa() {
log('--------------', mainLogFileName);
log('Starting Alexa', mainLogFileName);
log('--------------', mainLogFileName);
runScript(companionServiceScriptArgs, 'Listening on port 3000',
() => runScript(javaClientScriptArgs, 'Logged in.',
() => runScript(wakeWordAgentScriptArgs, 'Connected to AVS client',
() => playAlexaHello()
)
)
);
}
startAlexa();