• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
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 97.4k 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 Sep 30, 2016, 1:20 PM

    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 Sep 30, 2016, 1:40 PM Reply Quote 0
    • J Offline
      Jopyth Moderator @gismo2006
      last edited by Jopyth Sep 30, 2016, 1:44 PM Sep 30, 2016, 1:40 PM

      @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 Sep 30, 2016, 2:25 PM

        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 Sep 30, 2016, 2:41 PM Reply Quote 0
        • J Offline
          Jopyth Moderator @gismo2006
          last edited by Sep 30, 2016, 2:41 PM

          @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 Sep 30, 2016, 2:57 PM

            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 Oct 1, 2016, 6:51 AM

              @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 Oct 1, 2016, 5:05 PM

                @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 Oct 1, 2016, 7:04 PM

                  @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 Oct 6, 2016, 6:25 AM

                    This post is deleted!
                    1 Reply Last reply Reply Quote 0
                    • S Offline
                      simonsays
                      last edited by Oct 8, 2016, 5:58 AM

                      @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
                      3 / 8
                      • First post
                        24/79
                        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