So after setting up the Snowboy Voice Control module, the camera module, and the motion detector module (all working perfectly), I got a little ambitious. I trained a model for the keywords “Wake Up” and “Go to sleep”, added the keywords to voicecontrol.js, then expanded the node_helper.js file inside the Motion Detector module to act when the WAKE_UP and GO_TO_SLEEP notifications are broadcast, but it’s not working and I’m not sure why. Could use a little help – what have I missed?
My understanding is that voicecontrol.js registers the keywords, Snowboy detects them using the .pmdls in the MM root, then broadcasts the notification to all existing modules, which is why I decided to append to the end of the motion detector module since the action is inherently the same (switch off the monitor, switch on the monitor, given some conditional element) rather than building a separate module.
Only supplying the pertinent code blocks here for brevity as the rest seems to be working, but can supply all if it will help.
voicecontrol.js (defines the keyword, their broadcast notification, and front end elements)
models: [
{
keyword: "Show Camera",
description: "Say 'Show Camera' to display camera",
file: "showCamera.pmdl",
message: "SHOW_CAMERA"
},
{
keyword: "Hide Camera",
description: "Say 'Hide Camera' to hide camera",
file: "hideCamera.pmdl",
message: "HIDE_CAMERA"
},
{
keyword: "Selfie",
description: "Say 'Selfie' when camera is visible",
file: "selfie.pmdl",
message: "SELFIE"
},
{
keyword: "Wake Up",
description: "Say 'Wake Up' to turn on the mirror",
file: "wakeUp.pmdl",
message: "WAKE_UP"
},
{
keyword: "Go To Sleep",
description: "Say 'Go To Sleep' to turn off the mirror",
file: "goToSleep.pmdl",
message: "GO_TO_SLEEP"
},
]
motion detector node_helper.js (catches the notification, supposed to execute the monitor on/off action)
// Subclass socketNotificationReceived received.
socketNotificationReceived: function (notification, payload) {
const self = this;
if (notification === 'MOTION_DETECTED' && this.started == false) {
const self = this;
this.started = true;
this.activateMonitor();
}
if (notification === 'WAKE_UP' && this.started == false) {
const self = this;
this.started = true;
this.activateMonitor();
}
if (notification === 'DEACTIVATE_MONITOR' && this.started == false) {
const self = this;
this.started = true;
this.deactivateMonitor();
}
if (notification === 'GO_TO_SLEEP' && this.started == false) {
const self = this;
this.started = true;
this.deactivateMonitor();
}
}
NOTE: Originally, I set it up like below to be more concise, but after running npm start
on the mirror, it would load up momentarily, then shut down the monitor almost immediately (without any interaction whatsoever) and no keyboard command or voice command would bring it back up (had to unplug and reboot to bring it back). Therefore, I opted for separate conditional statements as above – which doesn’t deactivate the monitor immediately, but also doesn’t work given the voice prompt, soooooooo…:
// Subclass socketNotificationReceived received.
socketNotificationReceived: function (notification, payload) {
const self = this;
if (notification === 'MOTION_DETECTED' && this.started == false ||
'WAKE_UP && this.started == false) {
const self = this;
this.started = true;
this.activateMonitor();
}
if (notification === 'DEACTIVATE_MONITOR' && this.started == false
'GO_TO_SLEEP' && this.started == false) {
const self = this;
this.started = true;
this.deactivateMonitor();
}
}
Any guidance in my logic would be appreciated! Thanks!