Read the statement by Michael Teeuw here.
Motion Detector and OSX
-
hi everyone!
I succesfully run MM2 on a macmini late 2009. Currently im testing some modules and so far so good except for one module Motion detector. I was looking on the code on node_helper.js and found the line with the command “vcgencmd display_power 0”.
In OSX not work but “pmset displaysleepnow” to put the screen on sleep does the trick and " caffeinate -u -t 1" to wake up.
So i replace the commandif (result) { 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"); } }); }to
if (result) { exec("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"); } }); }Its looks like work but im getting this message on console log “pmset displaysleepnow blocked by app electron.js” and the screen keeps alive.
Is there a way to solve this?
Or maybe toggling the body to hide to get the black screen?Thanks in advance and sorry for my bad english :)
-
@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
-
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 -
@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(); } } }); -
Finally figured it out, this module now can put the screen off and on (osx el capitan).
Here is the modification for node_helpder.jsconst 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:
-
Icant post the entire code so, link to pastebin :)
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login