Read the statement by Michael Teeuw here.
VoiceControl module
-
Hi,
@alexyak sorry, but i have a little Problem. Maybe you can help me.
You write on Github in your Readme file, I have to put the code (notificationReceived: function(notification, payload, sender)…) into the module to use it. I like to controll the module Simple music player by @EoF so i clone your github files copy the code into the config.js File train and download a pmdl file. But where should i paste the code notificationReceived: function(notification, payload, sender)… In the config.js File or in the mmm-music-player.js file in folder modules simple music Player?
Sorry i’m new in the coding world, and now a little bit confused :-D
Greets gismo2006
-
@gismo2006 This part has to go into
mm-music-player.js
. This is where you receive the notification. Then instead ofthis.media.play()
you have to do access the play and stop functions of the mm-music-player (which unfortunately is seems a little bit complicated, since they are only elements on the web page).Edit: Maybe the easiest is to give the Play and Stop button an
id
and then ‘fake’ a click event on the the buttons.var playButton = document.getElementById('play-button'); playButton.click();
-
Hi @Jopyth thank you for your helping.
But I think i’m to stupid… :-(
I have copy your first code line into the mm-music-player.js file. But now the module isn’t shown at the mirror. But the mirror shows all other module i installed at the same time… (I use pavrios Facial-Recogination module) If I cut out your line the mirrors behaviour is like it should be. On searching my misstake i found a line called: var playButton = document.createElement(“div”);. I cut this line and put in your line but nothing.
greets gismo
-
@gismo2006 Have you put this into the notificationReceived function, e.g. in line 26?
notificationReceived: function(notification, payload, sender) { if (notification === "PLAY_MUSIC"){ var playButton = document.getElementById('play-button'); playButton.click(); } if (notification === "STOP_MUSIC"){ var stopButton = document.getElementById('stop-button'); stopButton.click(); } },
Also add the id somewhere here, e.g. with
playButton.id = 'play-button'
Same for the stop button.
-
Hey, thank you for your help!
I really like to say many many thank that you spend your time to help me.
I will try it today evening again, because now my little son likes to play whit me. :-)
greets gismo
-
@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.
-
-
Maybe you can help me again?
If I put only one comand like Play everything ist fine. But if I put more than one comand, like Play and Stop the Player is completly confused. Then only a handclap or a any other word is need to start a track or to beginn from beginning again…
greets gismo
-
This post is deleted! -
@alexyak @tyho I was able to get my sleep and wake up function to work using tyho’s code as well as able to find a way to turn the LED on. However, I cannot seem to turn it off once on. I am driving the switch with a gpio pin and transistor. It seems that after the pi executes the action, it wont listen for anything else. Example is if I tell it to turn the LED on, it does so. Then i say go to sleep, and it won’t. I go for the reboot and try again and start with the sleep command first. Then I try to turn the LED on and it won’t do that. Is there a way to have the function in tyho’s node_helper.js loop back again to the beginning? I feel like it get’s stuck once it executes a function. I also have an issue with the screen being yellow and zoomed in when i wake up the mirror after sleep. Don’t think it is a hardware issue, but I haven’t swapped HDMI cables yet.
For reference:
Code for modified node_helper.js:
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();}
if (notification === ‘lights_on’) {
exec(“echo ‘18’ > /sys/class/gpio/export”, null);
exec(“echo ‘out’ > /sys/class/gpio/gpio18/direction”, null);
gpio.setup(‘sys’);
gpio.digitalWrite(18,1);
clearTimeout(timer);
}
if (notification === ‘lights_off’) {
exec(“echo ‘18’ > /sys/class/gpio/export”, null);
exec(“echo ‘out’ > /sys/class/gpio/gpio18/direction”, null);
gpio.setup(‘sys’);
gpio.digitalWrite(18,0);
clearTimeout(timer);
}
},
autosleep: function(){
var self = this;
timer=setTimeout(function(){
exec(“/opt/vc/bin/tvservice -o”, null);
self.sendSocketNotification(“autosleep”, {});
}, 10601000);
}
});Any help is greatly appreciated.