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.9k 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.
    • 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
                • G Offline
                  gismo2006
                  last edited by

                  @Jopyth

                  Thank you everything workes fine. A big thank you!!!

                  greets gismo

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

                    @Jopyth

                    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

                    1 Reply Last reply Reply Quote 0
                    • S Offline
                      simonsays
                      last edited by

                      This post is deleted!
                      1 Reply Last reply Reply Quote 0
                      • S Offline
                        simonsays
                        last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • 6
                        • 7
                        • 8
                        • 3 / 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