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.

    Motion Detector and OSX

    Scheduled Pinned Locked Moved Solved Troubleshooting
    6 Posts 2 Posters 1.1k Views 2 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.
    • S Offline
      sdetweil
      last edited by sdetweil

      @0v3rNuLL said in Motion Detector and OSX:

      pmset displaysleepnow blocked by app electron.js

      there is an npm module to work around that it appears

      https://electronjs.org/docs/api/power-save-blocker

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      0 1 Reply Last reply Reply Quote 1
      • 0 Offline
        0v3rNuLL
        last edited by

        hi sdetweil!

        I try on node_helper.js located on MMM-MotionDetector at the begining and did not work still getting display slep prevented by electron

        here is the part i change

        //////Original code/////
        
        const NodeHelper = require("node_helper");
        const exec = require("child_process").exec;
        ///////////////////
        
        const { powerSaveBlocker } = require('electron');
        
        const id = powerSaveBlocker.start('prevent-app-suspension'); 
        
        console.log(powerSaveBlocker.isStarted(id));
        
        powerSaveBlocker.stop(id)
        

        Its the correct place ?

        Sorry but im totally new on node.
        Thanks in advance

        S 1 Reply Last reply Reply Quote 0
        • S Offline
          sdetweil @0v3rNuLL
          last edited by sdetweil

          @0v3rNuLL said in Motion Detector and OSX:

          complete node helper

          const NodeHelper = require("node_helper");
          const exec = require("child_process").exec;
          const { powerSaveBlocker } = require('electron');
          
          module.exports = NodeHelper.create({
          	start: function () {
          		this.started = false;
          		this.isMonitorOn(function(result) {
          			console.log("MMM-MotionDetector: monitor on " + result);
          		});
          	},
          
          	activateMonitor: function () {
          		this.isMonitorOn(function(result) {
          			if (!result) {
          				let id = powerSaveBlocker.start('prevent-app-suspension'); 
          				if(powerSaveBlocker.isStarted(id))
          			           powerSaveBlocker.stop(id)		
          				exec("vcgencmd display_power 1", function(err, out, code) {
          					if (err) {
          						console.error("MMM-MotionDetector: error activating monitor: " + code);
          					} else {
          						console.log("MMM-MotionDetector: monitor has been activated");
          					}
          				});
          			}
          		});
          		this.started = false;
          	},
          
          	deactivateMonitor: function () {
          		this.isMonitorOn(function(result) {
          			if (result) {
          				let id = powerSaveBlocker.start('prevent-app-suspension'); 
          				if(powerSaveBlocker.isStarted(id))
          			           powerSaveBlocker.stop(id)	
          				exec("vcgencmd display_power 0", function(err, out, code) {
          					if (err) {
          						console.error("MMM-MotionDetector: error deactivating monitor: " + code);
          					} else {
          						console.log("MMM-MotionDetector: monitor has been deactivated");
          					}
          				});
          			}
          		});
          		this.started = false;
          	},
          
          	isMonitorOn: function(resultCallback) {
          		exec("vcgencmd display_power", function(err, out, code) {
          			if (err) {
          				console.error("MMM-MotionDetector: error calling monitor status: " + code);
          				return;
          			}
          
          			console.log("MMM-MotionDetector: monitor " + out);
          			resultCallback(out.includes("=1"));
          		});
          	},
          
          	// Subclass socketNotificationReceived received.
          	socketNotificationReceived: function (notification, payload) {
          		if (notification === "MOTION_DETECTED" && this.started === false) {
          			console.log("MMM-MotionDetector: MOTION_DETECTED, score " + payload.score);
          			this.started = true;
          			this.activateMonitor();
          		}
          		if (notification === "DEACTIVATE_MONITOR" && this.started === false) {
          			console.log("MMM-MotionDetector: DEACTIVATE_MONITOR");
          			this.started = true;
          			this.deactivateMonitor();
          		}
          	}
          });
          

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          1 Reply Last reply Reply Quote 1
          • 0 Offline
            0v3rNuLL
            last edited by

            Finally figured it out, this module now can put the screen off and on (osx el capitan).
            Here is the modification for node_helpder.js

            const NodeHelper = require("node_helper");
            
            const exec = require("child_process").exec;
            
            var cmd=require('node-cmd'); // install node-cmd (npm install node-cmd) first and add excute command osx style then change exec to cmd.get <-- return the result to analize
            
            module.exports = NodeHelper.create({
            	start: function () {
            		this.started = false;
            		this.isMonitorOn(function(result) {
            			console.log("MMM-MotionDetector: monitor on " + result);
            		});
            	},
            
            	activateMonitor: function () {
            		this.isMonitorOn(function(result) {
            			if (!result) {
            				cmd.get('caffeinate -u -t 1', function(err, out, code) {
            					if (err) {
            						console.error("MMM-MotionDetector: error activating monitor: " + code);
            					} else {
            						console.log("MMM-MotionDetector: monitor has been activated");
            					}
            				});
            			}
            		});
            		this.started = false;
            	},
            
            	deactivateMonitor: function () {
            		this.isMonitorOn(function(result) {
            			if (result) {
            				cmd.get('pmset displaysleepnow', function(err, out, code) {
            
            					
            					if (err) {
            						console.error("MMM-MotionDetector: error deactivating monitor: " + code);
            					} else {
            						console.log("MMM-MotionDetector: monitor has been deactivated");
            					}
            				});
            			}
            		});
            		this.started = false;
            	},
            
            	isMonitorOn: function(resultCallback) {
            
            
            
            		cmd.get('pmset -g powerstate IODisplayWrangler | tail -1 | cut -c29', function(err, out, code) {
            			console.log("MMM-MotionDetector: monitor " + out);
            
            			if (err) {
            				console.error("MMM-MotionDetector: error calling monitor status: " + code);
            				return;
            			}
            
            			console.log("MMM-MotionDetector: monitor " + out);
            		resultCallback(out.includes("4")); // <4 is off
            		});
            	},
            
            	// Subclass socketNotificationReceived received.
            	socketNotificationReceived: function (notification, payload) {
            		if (notification === "MOTION_DETECTED" && this.started === false) {
            			console.log("MMM-MotionDetector: MOTION_DETECTED, score " + payload.score);
            			this.started = true;
            			this.activateMonitor();
            		}
            		if (notification === "DEACTIVATE_MONITOR" && this.started === false) {
            			console.log("MMM-MotionDetector: DEACTIVATE_MONITOR");
            			this.started = true;
            			this.deactivateMonitor();
            		}
            	}
            });
            
            
            

            This can be marked as SOLVED :slightly_smiling_face:

            1 Reply Last reply Reply Quote 0
            • 0 Offline
              0v3rNuLL @sdetweil
              last edited by

              Icant post the entire code so, link to pastebin :)

              node_helper.js

              1 Reply Last reply Reply Quote 0
              • 1 / 1
              • 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