@Pierre @simonsays
First of all sorry for the long waiting…
I guess u already have run the voice control module with the speech files (pmdl) from snopwboy and put this in your root.
Here is my config part for the VoiceControl module:
{
module: 'voicecontrol',
config: {
models: [
{
keyword: "gotosleep", // keyword
file: "gotosleep.pmdl", // trained model file name
message: "go_to_sleep" // notification message that's broadcast in the MagicMirror app
},
{
keyword: "wake up", // keyword
file: "Wake_up.pmdl", // trained model file name
message: "wake_up" // notification message that's broadcast in the MagicMirror app
},
]
}
},
{
module: 'notification',
position: 'bottom_right', // This can be any of the regions.
},
Because the voicecontrol module send a notafication to all other modules i wrote a separate module to show text messages for what is happening:
notification.js
/* global Module */
/* Magic Mirror
* Module: notification
*/
var awake = 1;
Module.register("notification",{
// Default module config.
defaults: {
text: "",
animationSpeed: 500,
},
start: function() {
this.sendSocketNotification("CONNECT", {});
},
notificationReceived: function(notification, callback) {
var self = this;
if (notification === "go_to_sleep" && awake === 1){
this.config.text = "going to sleep...";
this.updateDom(this.config.animationSpeed);
setTimeout(function(){
self.sendSocketNotification('go_to_sleep', {});
self.config.text = "";
self.updateDom(self.config.animationSpeed);
}, 1000);
awake = 0;
callback(awake);
}
if (notification === "wake_up" && awake === 0){
this.sendSocketNotification('wake_up', {});
this.config.text = "waking up...";
this.updateDom(this.config.animationSpeed);
setTimeout(function(){
self.config.text = "";
self.updateDom(self.config.animationSpeed);
}, 5000);
awake = 1;
callback(awake);
}
},
socketNotificationReceived: function(notification) {
if (notification === "autosleep") {
awake = 0;
}
},
// Override dom generator.
getDom: function() {
var wrapper = document.createElement("div");
wrapper.innerHTML = this.config.text;
return wrapper;
}
});
In my node helper i put the exec code to turn on and off my monitor.
node_helper.js
'use strict';
const NodeHelper = require('node_helper');
const exec = require('child_process').exec;
var timer;
//function initialize() {
//}
//(function(){
// initialize();
// autosleep();
//})();
module.exports = NodeHelper.create({
start: function() {
this.started = false;
},
socketNotificationReceived: function(notification) {
if (notification === "CONNECT") {
clearTimeout(timer);
this.autosleep();
}
if (notification === 'go_to_sleep') {
exec("/opt/vc/bin/tvservice -o", null);
clearTimeout(timer);
}
if (notification === 'wake_up') {
exec("/opt/vc/bin/tvservice -p", null);
exec("/bin/fbset -depth 8 && /bin/fbset -depth 16 ", null);
exec("/usr/bin/xrefresh",null);
clearTimeout(timer);
this.autosleep();
}
},
autosleep: function(){
var self = this;
timer=setTimeout(function(){
exec("/opt/vc/bin/tvservice -o", null);
self.sendSocketNotification("autosleep", {});
}, 10*60*1000);
}
});
I also put conditions in it so it can only wake up when it’s asleep. There is also a autosleep function thats now on 10 minutes.