MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    VoiceControl module

    Scheduled Pinned Locked Moved Utilities
    79 Posts 27 Posters 106.6k Views 29 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A Offline
      alexyak
      last edited by

      Try to put a call in your start method of the module (notification.js) to establish the connection with node_helper. Something like that:

      this.sendSocketNotification(“CONNECT”, {});

      1 Reply Last reply Reply Quote 0
      • A Offline
        alexyak
        last edited by

        I’ve updated the VoiceControl module to display a list of commands on the mirror:

        0_1472851592256_Screen Shot 2016-09-02 at 5.23.53 PM.png

        [ card : alexyak/voicecontrol ]

        1 Reply Last reply Reply Quote 0
        • A Offline
          alexyak
          last edited by alexyak

          [card:alexyak/voicecontrol]

          1 Reply Last reply Reply Quote 0
          • B Offline
            brumoeller
            last edited by

            This is a really cool module. Does anyone know a good microphone that will work for the whole room? The mic I have only works when you are close.

            1 Reply Last reply Reply Quote 0
            • G Offline
              gismo2006
              last edited by

              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

              J 1 Reply Last reply Reply Quote 0
              • J Offline
                Jopyth Moderator @gismo2006
                last edited by Jopyth

                @gismo2006 This part has to go into mm-music-player.js. This is where you receive the notification. Then instead of this.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();
                

                Helpful sticky: How to troubleshoot

                1 Reply Last reply Reply Quote 0
                • G Offline
                  gismo2006
                  last edited by

                  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

                  J 1 Reply Last reply Reply Quote 0
                  • J Offline
                    Jopyth Moderator @gismo2006
                    last edited by

                    @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.

                    Helpful sticky: How to troubleshoot

                    1 Reply Last reply Reply Quote 0
                    • G Offline
                      gismo2006
                      last edited by

                      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

                      1 Reply Last reply Reply Quote 1
                      • T Offline
                        tyho
                        last edited by

                        @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.

                        1 Reply Last reply Reply Quote 1
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • 6
                        • 7
                        • 8
                        • 1 / 8
                        • First post
                          Last post
                        Enjoying MagicMirror? Please consider a donation!
                        MagicMirror created by Michael Teeuw.
                        Forum managed by Sam, technical setup by Karsten.
                        This forum is using NodeBB as its core | Contributors
                        Contact | Privacy Policy