• 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 98.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.
  • T Offline
    tyho
    last edited by Jul 29, 2016, 4:37 PM

    where to place “notificationReceived: function” to get a text output on the mirror?

    A 1 Reply Last reply Jul 29, 2016, 4:44 PM Reply Quote 0
    • A Offline
      alexyak @tyho
      last edited by Jul 29, 2016, 4:44 PM

      @tyho said in VoiceControl module:

      notificationReceived

      You can put it in any other module that you would like to react on the voice command and then just call self.updateDom(self.config.animationSpeed);

      1 Reply Last reply Reply Quote 0
      • T Offline
        tyho
        last edited by Jul 29, 2016, 11:13 PM

        Wow! @alexyak nice work. I got it running. and i am playing around with it.

        1 question:
        I want to display the commands i said for 3 seconds.

        If i say a command i can get the text with:
        this.config.text = “going to sleep…”;
        this.updateDom(this.config.animationSpeed);

        Is there a way to auto reset it to default/hide after a few seconds? (i am trying this for hours already ^^)

        A 1 Reply Last reply Jul 30, 2016, 1:26 AM Reply Quote 0
        • A Offline
          alexyak @tyho
          last edited by Jul 30, 2016, 1:26 AM

          @tyho, you can use setTimeout function to wait a for few seconds and then reset the text value. Something like that:

          var self = this;
          setTimeout(function(){
          self.config.text = “”;
          self.updateDom …
          }, 3000);

          1 Reply Last reply Reply Quote 0
          • T Offline
            tyho
            last edited by tyho Jul 30, 2016, 9:02 AM Jul 30, 2016, 8:59 AM

            thanks again it’s working :)

            i made a notification.js:

            notificationReceived: function(notification, payload, sender) {
            		var self = this;
            				if (notification === "go_to_sleep"){
                        		this.config.text = "going to sleep...";
            					this.updateDom(this.config.animationSpeed);
            					setTimeout(function(){
            						self.config.text = "";
            						self.updateDom(self.config.animationSpeed);
            					}, 3000);
                    		}
            				if (notification === "wake_up"){
                        		this.config.text = "waking up...";
            					this.updateDom(this.config.animationSpeed);
            					setTimeout(function(){
            						self.config.text = "";
            						self.updateDom(self.config.animationSpeed);
            					}, 3000);
                    		}
                },
            
            

            i have made a node_helper.js:

            const NodeHelper = require('node_helper');
            const exec = require('child_process').exec;
            
            module.exports = NodeHelper.create({
              start: function () {
            	      this.started = false
              }, 
             
              socketNotificationReceived: function(notification, payload) {
                if (notification === 'go_to_sleep' && this.started == false) {
                        exec("/opt/vc/bin/tvservice -o", null);
            	}
            	    if (notification === 'wake_up' && this.started == false) {
                        exec("/opt/vc/bin/tvservice -p", null);
            	}
              }
            }); 
            

            It shows the command i speak for 3 seconds. But i can’t get the node helper working to actualy turn on and off my monitor. How can i bind this 2 modules? Or do i have to include it as a separate js file?

            S 1 Reply Last reply Jul 30, 2016, 9:08 AM Reply Quote 0
            • S Offline
              strawberry 3.141 Project Sponsor Module Developer @tyho
              last edited by Jul 30, 2016, 9:08 AM

              @tyho try this.sendSocketNotification('go_to_sleep', {}); in notification.js otherwise the node_helper doesnt’t get any msg and will not perform any action

              Please create a github issue if you need help, so I can keep track

              1 Reply Last reply Reply Quote 0
              • T Offline
                tyho
                last edited by Jul 30, 2016, 9:25 AM

                Great! it’s working! thanks!

                1 Reply Last reply Reply Quote 0
                • T Offline
                  tyho
                  last edited by Jul 31, 2016, 8:11 PM

                  I still have a little problem. I want to register that if the monitor is on or off. It’s working very well except on the autosleep function that is loaded in the node_helper.

                  My notification.js

                  var awake = 1;
                  Module.register("notification",{
                  
                  	// Default module config.
                  	defaults: {
                  		text: "",
                  		animationSpeed: 500,
                  	},
                  	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);
                          		}
                  				if (notification === "autosleep"){
                  					awake = 0;
                  					callback(awake);
                          		}
                      },
                  	
                  	// Override dom generator.
                  	getDom: function() {
                  		var wrapper = document.createElement("div");
                  		wrapper.innerHTML = this.config.text;
                  		return wrapper;
                  	}
                  });
                  
                  

                  and my node_helper.js

                  'use strict';
                  const NodeHelper = require('node_helper');
                  const exec = require('child_process').exec;
                  var timer;
                  function initialize() {
                  
                  }
                  (function(){
                  	initialize();
                  			autosleep();
                  })();
                  function autosleep(){
                  	  timer=setTimeout(function(){
                  		  	var self = this;
                  				exec("/opt/vc/bin/tvservice -o", null);
                  				self.sendSocketNotification('autosleep');
                  			},  10*60*1000);
                  	  }
                  
                  module.exports = NodeHelper.create({
                    start: function () {  
                    }, 
                   
                    socketNotificationReceived: function(notification) {
                  
                      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);
                  			autosleep();
                  	}
                    }
                  });
                  

                  what i want is: if the autosleep function turns my monitor off, the variable awake in the notification.js set to 0.

                  any other suggestion on junky code are also welcome ^^

                  1 Reply Last reply Reply Quote 0
                  • A Offline
                    alexyak
                    last edited by alexyak Jul 31, 2016, 8:40 PM Jul 31, 2016, 8:34 PM

                    If you override socketNotificationReceived in your module then you should receive the message from node_helper and can reset your flag appropriately.

                    T 1 Reply Last reply Jul 31, 2016, 9:33 PM Reply Quote 0
                    • T Offline
                      tyho @alexyak
                      last edited by Jul 31, 2016, 9:33 PM

                      @alexyak how to override that module? I already call it with notifications === ‘autosleep’. And that notification gets send by the node_helper right? what am i missing?

                      A 1 Reply Last reply Jul 31, 2016, 10:27 PM Reply Quote 0
                      • 1
                      • 2
                      • 3
                      • 4
                      • 5
                      • 6
                      • 7
                      • 8
                      • 1 / 8
                      1 / 8
                      • First post
                        8/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