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.
    • T Offline
      tyho
      last edited by tyho

      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?

      strawberry 3.141S 1 Reply Last reply Reply Quote 0
      • strawberry 3.141S Offline
        strawberry 3.141 Project Sponsor Module Developer @tyho
        last edited by

        @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

          Great! it’s working! thanks!

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

            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

              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 Reply Quote 0
              • T Offline
                tyho @alexyak
                last edited by

                @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 Reply Quote 0
                • A Offline
                  alexyak @tyho
                  last edited by

                  @tyho What I meant is you need to add socketNotificationReceived to your module notification.js.

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

                    @alexyak i can’t get it to work. it tested:
                    It sends sockets notifications from notifications.js to node_helper.js. But not from node_helper.js back to notifications.js.

                    Even if i put it in the start function of the node_helper.js:

                    start: function() { 
                      this.sendSocketNotification("autosleep", {});
                      }, 
                    

                    it won’t get received it my notification.js:

                    socketNotificationReceived: function(notification) {
                       if (notification === "autosleep") {
                    	  alert("autosleep received");
                    		awake = 0;
                            		}
                       	},
                    

                    any idea? is it even possible to use it backwards?

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