Coder Social home page Coder Social logo

mmm-pir-sensor's Introduction

MMM-PIR-Sensor

This an extension for the MagicMirror. It can monitor a PIR motion sensor and put your mirror to sleep if nobody uses it by turning off HDMI output or by turning off the mirror via a relay.

Installation

  1. Navigate into your MagicMirror's modules folder and execute git clone https://github.com/paviro/MMM-PIR-Sensor.git. A new folder will appear navigate into it.
  2. Execute npm install to install the node dependencies.
  3. Add your user (pi?) to the gpio group by executing sudo usermod -a -G gpio pi.
  4. Execute sudo chmod u+s /opt/vc/bin/tvservice && sudo chmod u+s /bin/chvt to allow turning on/off the hdmi output.
  5. Reboot your Pi.

Using the module

To use this module, add it to the modules array in the config/config.js file:

modules: [
	{
		module: 'MMM-PIR-Sensor',
		config: {
			// See 'Configuration options' for more information.
		}
	}
]

Configuration Options

The following properties can be configured:

Option Description
sensorPin The pin your PIR-sensor is connected to.

Possible values: int
Default value: 22
Note: Please use BCM-numbering.
sensorState Invert the GPIO-state that triggers user presence. For example, a 0 value would tell the mirror to trigger user presence when the GPIO pin receives 0 value.

Possible values: int (0 or 1)
Default value: 1
powerSaving Should the monitor be turned off if no user is present? (via HDMI or relay)

Possible values: boolean
Default value: true
powerSavingDelay Additional software side delay (in seconds) before the monitor will be turned off.

Possible values: int
Default value: 0
relayPin If you want to use a relay to turn of the mirror provide the pin here. If no pin is provided HDMI is turned off instead.

Possible values: int
Default value: false
Note: Please use BCM-numbering.
relayState GPIO-state your relay is turned on.

Possible values: int (0 or 1)
Default value: 1
alwaysOnPin If you would like to use a GPIO pin to trigger power-saving mode. Ideal for users who want to have a physical switch that controls whether or not to use the motion sensor.

Possible values: int
Default value: false
Note: Please use BCM-numbering.
alwaysOnState GPIO-state to trigger always-on.

Possible values: int (0 or 1)
Default value: 1
alwaysOffPin If you would like to use a GPIO pin to trigger sleep mode. Ideal for users who want to have a physical switch to shut off the screen (perhaps the mirror is too bright at night).

Possible values: int
Default value: false
Note: Please use BCM-numbering.
alwaysOffState GPIO-state to trigger always-off.

Possible values: int (0 or 1)
Default value: 1
powerSavingNotification To display a notification before to switch screen off

Possible values: boolean
Default value: false
Note: Need the default module "alert" to be declared on config.js file.
powerSavingMessage Message notification to display before to switch screen off

Default value: "Monitor will be turn Off by PIR module"
preventHDMITimeout When powerSaving is On: time, in minutes, after which- while HDMI is off- the screen will be briefly turned on and off again, periodically. This is to avoid older HDMI screens from automatically turning Off due to "No Signal".
Possible values: 0-10
Default value: 0
Note:0 value means that this feature is turned off.
supportCEC When powerSaving is On: support CEC to turn monitor ON or OFF as well, not just the HDMI circuit in the RPI.
Possible values: boolean
Default value: false
presenceIndicator When module position is defined, thus it is visible, display an indicator when USER_PRESENCE is detected.
Possible values: Font Awesome icons [See here](https://fontawesome.com/icons?d=gallery)
Default value: fa-bullseye
Note: Not displayed if set to null
presenceIndicatorColor The color of presenceIndicator, if defined.
Possible values: color value
Default value: red
Note: presenceIndicator is not displayed if this parameter is set to null
presenceOffIndicator When module position is defined, thus it is visible, display an indicator when USER_PRESENCE is not detected.
Possible values: Font Awesome icons [See here](https://fontawesome.com/icons?d=gallery)
Default value: null
Note: Not displayed if set to null
presenceOffIndicatorColor The color of presenceOffIndicator, if defined.
Possible values: color value
Default value: dimgray
Note: presenceOffIndicator is not displayed if this parameter is set to null
runSimulator Turn on a simulator that will send USER_PRESENCE ON every 20 seconds, and USER_PRESENCE OFF one second after that.
This is handy when you want to work on the configuration of the mirror without having to stand up in front of it in order to test.
Possible values: boolean
Default value: false
Note: Don't forget to turn this one off when using the actual IR sensor!

Example

To use this module, add it to the modules array in the config/config.js file:

modules: [
	{
		module: 'MMM-PIR-Sensor', 
		position: "top_center", // Remove this line to avoid having an visible indicator
		config: {
			sensorPin: 23,
			powerSavingDelay: 60, // Turn HDMI OFF after 60 seconds of no motion, until motion is detected again
			preventHDMITimeout: 4, // Turn HDMI ON and OFF again every 4 minutes when power saving, to avoid LCD/TV timeout
			supportCEC: true, 
			presenceIndicator: "fa-eye", // Customizing the indicator
			presenceOffIndicator: "fa-eye", // Customizing the indicator
			presenceIndicatorColor: "#f51d16", // Customizing the indicator
			presenceOffIndicatorColor: "#2b271c" // Customizing the indicator
		}
	}
]

Developer Notes

This module broadcasts a USER_PRESENCE notification with the payload beeing true or false you can use it to pause or disable your module.

Dependencies

The MIT License (MIT)

Copyright © 2016 Paul-Vincent Roll

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

The software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.

mmm-pir-sensor's People

Contributors

abbondanzo avatar agp42 avatar eric-h-st avatar fdahms avatar fixing-it avatar flyingchipmunk avatar janloebel avatar jc21 avatar jopyth avatar patrick-remy avatar paviro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mmm-pir-sensor's Issues

PIR-Sensor needs initial movement once to work - Workaround

Hi paviro,

as the PIR-Sensor needs initial movement once to work a found a workaround for my scenario.

My scenario:
I start my MM with a timer on my power outlet.
So i want the monitor off after start. Because the PIR needs movement once to work, it stays on until first person passes the sensor (no matter which value i have in powerSavingDelay: 60).

My workaround:
I did following additions (around line 139) in node_helper.js

this.started = true;
self.deactivateMonitor();//addition AxLED

Explanation:
MM starts and shows up for seconds, until module MMM-PIR-Sensor is loaded. Then the monitor gets deactived. If a person passes the PIR it activates the monitor.

Maybe this could be integrated in future version of your module, maybe chooseable by parameters in config.js. As i dont know what you planned with your module i didnt make a pull request.

Regards

AxLED

Monitor repeatedly turning back on after "HDMI OFF" status

Hi - I downloaded the latest build. My PIR sensor works great to wake up from the HDMI OFF state on my LCD. However, even if I'm away from the IR, the monitor indefinitely loops back from HDMI OFF to being awake. I have my timer set to 15 seconds - I wonder if that's too long and causing a conflict with my LCD hardware?

MMM-PIR-Sensor is x Commits behind

Hi guys,

I am not much of a pro, but my Mirror says on top of the screen that my MMM-PIR- Sensor is 26 commits behind... what do I have to do resolve that? And what does it actually do? Is it like an update?

Best
Clemens

npm install doesn't work with --only=prod

With all my magicmirror modules I run npm install with '--only=prod' to help keep the space usage to a minimal.

With the current package.json entry of electron-rebuild in the devDependencies section this will cause a failure... "sh: 1: electron-rebuild: not found"

Propose moving electron-rebuild out of devDependencies since it's required in non-dev environment installs.

tvservice call to Powering on HDMI fails

/opt/vc/bin/tvservice --preferred && chvt 6 && chvt 7
Powering on HDMI with preferred settings
[E] Failed to power on HDMI with preferred settings

Causing monitor to never turn back on.

Related to #25

Monitor doesn't turn off

Hey there,
my monitor doesn't turn off. Is tested the PIR with an other skript and it works just fine, but when activating the module nothing happens. Waited for 10 minutes. I hope you can help me!
Thnx

ReferenceError: pir is not defined

Hi, I got the error when try to use this module :

pi@raspberrypi:~/.pm2/logs $ tail -25 mm-error-0.log
Missing error handler on socket.
ReferenceError: pir is not defined
at Class.socketNotificationReceived (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:54:7)
at Socket. (/home/pi/MagicMirror/modules/node_modules/node_helper/index.js:98:10)
at emitTwo (events.js:106:13)
at Socket.emit (events.js:191:7)
at Socket.onevent (/home/pi/MagicMirror/node_modules/socket.io/lib/socket.js:335:8)
at Socket.socket.onevent (/home/pi/MagicMirror/modules/node_modules/node_helper/index.js:91:13)
at Socket.onpacket (/home/pi/MagicMirror/node_modules/socket.io/lib/socket.js:295:12)
at Client.ondecoded (/home/pi/MagicMirror/node_modules/socket.io/lib/client.js:193:14)
at Decoder.Emitter.emit (/home/pi/MagicMirror/node_modules/component-emitter/index.js:134:20)
at Decoder.add (/home/pi/MagicMirror/node_modules/socket.io-parser/index.js:247:12)
pi@raspberrypi:~/MagicMirror/modules/MMM-PIR-Sensor $ grep -r pir *
node_helper.js: this.pir = new Gpio(this.config.sensorPIN, 'in', 'both');
node_helper.js: pir.watch(function(err, value) {
pi@raspberrypi:~/MagicMirror/modules/MMM-PIR-Sensor $

What I have to do with this variable?
Thanks,

Cannot install

Getting the following error when trying to install:


> [email protected] install /home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll
> node-gyp rebuild

make: Entering directory '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build'
  CXX(target) Release/obj.target/epoll/src/epoll.o
In file included from ../src/epoll.cc:15:0:
../../nan/nan.h:48:3: error: #error This version of node/NAN/v8 requires a C++11 compiler
In file included from ../src/epoll.cc:11:0:
/home/pi/.node-gyp/9.11.2/include/node/v8.h:335:1: error: expected unqualified-id before ‘using’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:840:1: error: expected unqualified-id before ‘using’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4170:29: error: function definition does not declare parameters
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4224:13: error: ‘OwnedBuffer’ in ‘struct v8::TransferrableModule’ does not name a type
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4224:47: error: ISO C++ forbids declaration of ‘buff’ with no type [-fpermissive]
/home/pi/.node-gyp/9.11.2/include/node/v8.h: In static member function ‘static v8::WasmCompiledModule::CallerOwnedBuffer v8::WasmCompiledModule::AsCallerOwned(const int&)’:
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4225:18: error: request for member ‘first’ in ‘buff’, which is of non-class type ‘const int’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4225:36: error: request for member ‘second’ in ‘buff’, which is of non-class type ‘const int’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4225:42: error: could not convert ‘{<expression error>, <expression error>}’ from ‘<brace-enclosed initializer list>’ to ‘v8::WasmCompiledModule::CallerOwnedBuffer {aka std::pair<const unsigned char*, unsigned int>}’
/home/pi/.node-gyp/9.11.2/include/node/v8.h: At global scope:
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4234:50: error: variable ‘v8::WasmModuleObjectBuilderStreaming v8::final’ has initializer but incomplete type
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4235:2: error: expected primary-expression before ‘public’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4235:2: error: expected ‘}’ before ‘public’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4235:2: error: expected ‘,’ or ‘;’ before ‘public’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4243:38: error: expected constructor, destructor, or type conversion before ‘;’ token
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4245:2: error: expected unqualified-id before ‘private’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4248:36: error: expected unqualified-id before ‘const’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4248:36: error: expected ‘)’ before ‘const’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4250:68: error: expected ‘)’ before ‘&&’ token
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4253:46: error: ‘v8::WasmModuleObjectBuilderStreaming& v8::operator=(const v8::WasmModuleObjectBuilderStreaming&)’ must be a nonstatic member function
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4255:41: error: ‘v8::WasmModuleObjectBuilderStreaming& v8::operator=(v8::WasmModuleObjectBuilderStreaming&&)’ must be a nonstatic member function
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4268:15: error: ‘Buffer’ was not declared in this scope
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4268:21: error: template argument 1 is invalid
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4268:21: error: template argument 2 is invalid
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4268:40: error: invalid type in declaration before ‘;’ token
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4272:41: error: variable ‘WasmModuleObjectBuilder final’ has initializer but incomplete type
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4273:2: error: expected primary-expression before ‘public’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4273:2: error: expected ‘}’ before ‘public’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4273:2: error: expected ‘,’ or ‘;’ before ‘public’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4277:3: error: ‘MaybeLocal’ does not name a type
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4279:2: error: expected unqualified-id before ‘private’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4287:27: error: expected unqualified-id before ‘const’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4287:27: error: expected ‘)’ before ‘const’
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4288:50: error: expected ‘)’ before ‘&&’ token
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4289:68: error: ‘WasmModuleObjectBuilder& operator=(const WasmModuleObjectBuilder&)’ must be a nonstatic member function
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4290:63: error: ‘WasmModuleObjectBuilder& operator=(WasmModuleObjectBuilder&&)’ must be a nonstatic member function
/home/pi/.node-gyp/9.11.2/include/node/v8.h:4294:1: error: expected declaration before ‘}’ token
/home/pi/.node-gyp/9.11.2/include/node/v8.h:3367:19: warning: inline function ‘void* v8::Object::GetAlignedPointerFromInternalField(int)’ used but never defined [enabled by default]
/home/pi/.node-gyp/9.11.2/include/node/v8.h:488:18: warning: inline function ‘void v8::PersistentBase<T>::Reset() [with T = v8::Promise]’ used but never defined [enabled by default]
cc1plus: warning: unrecognized command line option "-Wno-unused-local-typedefs" [enabled by default]
epoll.target.mk:95: recipe for target 'Release/obj.target/epoll/src/epoll.o' failed
make: *** [Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/pi/.nvm/versions/node/v9.11.2/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:180:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:209:12)
gyp ERR! System Linux 4.1.19-v7+
gyp ERR! command "/home/pi/.nvm/versions/node/v9.11.2/bin/node" "/home/pi/.nvm/versions/node/v9.11.2/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll
gyp ERR! node -v v9.11.2
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pi/.npm/_logs/2018-09-15T12_35_33_167Z-debug.log```

Adding delay option

Hi there,
at the moment I didn't went trought the code, I just install and configure it, wich works perfeclty.
Anyway I just wonder if it's simple to implement a delay option to keep monitor ON during a configurable amount of time.
Just to allow it switching on and off all time ;)

Screen turns on on every server request.

I got PIR Sensor working fine but unfortunately screen also turn on with every server request I get on the Pi. I am also using my pi as a web host for WordPress.

Do you know how to avoid the screen turning on on every call of my WordPress page? And in the same way keep PIR running?

Config values

My config looks like this...

config: {
// See 'Configuration options' for more information.
}

Per the documentation will the module run with the default values or do I need to add lines for
sensorPIN: '22'
and
powerSaving: true

I'm asking because if I don't put the lines in, the PIR sensor does not work. If I do put the values in, I get all kinds of socket errors in the terminal

epoll compiled for the wrong version of Node?

Hi, i've tried reinstallng and rebuilding epoll, with no success. Has anyone else run in to this issue? Seems like the only problem i'm running in to.

Thanks!

Error: The module '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/Release/epoll.node'
0|mm | was compiled against a different Node.js version using
0|mm | NODE_MODULE_VERSION 48. This version of Node.js requires
0|mm | NODE_MODULE_VERSION 53. Please try re-compiling or re-installing
0|mm | the module (for instance, using npm rebuild ornpm install).
0|mm | at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
0|mm | at Object.Module._extensions..node (module.js:598:18)
0|mm | at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
0|mm | at Module.load (module.js:488:32)
0|mm | at tryModuleLoad (module.js:447:12)
0|mm | at Function.Module._load (module.js:439:3)
0|mm | at Module.require (module.js:498:17)
0|mm | at require (internal/module.js:20:19)
0|mm | at bindings (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bindings/bindings.js:76:44)
0|mm | at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/epoll.js:1:192)

error [email protected] postinstall: `electron-rebuild -e ../../node_modules/electron`

npm_debug.log:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'install' ]
2 info using [email protected]
3 info using [email protected]
4 silly loadCurrentTree Starting
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 silly install normalizeTree
8 silly loadCurrentTree Finishing
9 silly loadIdealTree Starting
10 silly install loadIdealTree
11 silly cloneCurrentTree Starting
12 silly install cloneCurrentTreeToIdealTree
13 silly cloneCurrentTree Finishing
14 silly loadShrinkwrap Starting
15 silly install loadShrinkwrap
16 silly loadShrinkwrap Finishing
17 silly loadAllDepsIntoIdealTree Starting
18 silly install loadAllDepsIntoIdealTree
19 silly loadAllDepsIntoIdealTree Finishing
20 silly loadIdealTree Finishing
21 silly currentTree [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├─┬ [email protected]
21 silly currentTree │ └── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├─┬ [email protected]
21 silly currentTree │ └── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├─┬ [email protected]
21 silly currentTree │ └── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├─┬ [email protected]
21 silly currentTree │ └── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree ├── [email protected]
21 silly currentTree └── [email protected]
22 silly idealTree [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├─┬ [email protected]
22 silly idealTree │ └── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├─┬ [email protected]
22 silly idealTree │ └── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├─┬ [email protected]
22 silly idealTree │ └── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├─┬ [email protected]
22 silly idealTree │ └── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree ├── [email protected]
22 silly idealTree └── [email protected]
23 silly generateActionsToTake Starting
24 silly install generateActionsToTake
25 silly generateActionsToTake Finishing
26 silly diffTrees action count 0
27 silly decomposeActions action count 0
28 silly runTopLevelLifecycles Starting
29 silly install runPreinstallTopLevelLifecycles
30 silly preinstall [email protected] /home/pi/MagicMirror/modules/MMM-PIR-Sensor/Magic-Mirror-Module-PIR-Sensor-7df6035f
31 info lifecycle [email protected]preinstall: [email protected]
32 silly lifecycle [email protected]
preinstall: no script for preinstall, continuing
33 silly executeActions Starting
34 silly install executeActions
35 silly doSerial global-install 0
36 silly doParallel fetch 0
37 verbose correctMkdir /home/pi/.npm/_locks correctMkdir not in flight; initializing
38 verbose lock using /home/pi/.npm/_locks/staging-5e07f9416d2b59b2.lock for /home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/.staging
39 silly doParallel extract 0
40 silly doParallel preinstall 0
41 silly doReverseSerial remove 0
42 silly doSerial move 0
43 silly doSerial finalize 0
44 silly doSerial build 0
45 silly doSerial global-link 0
46 silly doParallel update-linked 0
47 silly doSerial install 0
48 silly doSerial postinstall 0
49 verbose unlock done using /home/pi/.npm/_locks/staging-5e07f9416d2b59b2.lock for /home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/.staging
50 silly executeActions Finishing
51 silly rollbackFailedOptional Starting
52 silly rollbackFailedOptional Finishing
53 silly install runPostinstallTopLevelLifecycles
54 silly build [email protected]
55 info linkStuff [email protected]
56 silly linkStuff [email protected] has /home/pi/MagicMirror/modules as its parent node_modules
57 verbose linkBins [email protected]
58 verbose linkMans [email protected]
59 silly install [email protected] /home/pi/MagicMirror/modules/MMM-PIR-Sensor/Magic-Mirror-Module-PIR-Sensor-7df6035f
60 info lifecycle [email protected]install: [email protected]
61 silly lifecycle [email protected]
install: no script for install, continuing
62 silly postinstall [email protected] /home/pi/MagicMirror/modules/MMM-PIR-Sensor/Magic-Mirror-Module-PIR-Sensor-7df6035f
63 info lifecycle [email protected]postinstall: [email protected]
64 verbose lifecycle [email protected]
postinstall: unsafe-perm in lifecycle true
65 verbose lifecycle [email protected]postinstall: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
66 verbose lifecycle [email protected]
postinstall: CWD: /home/pi/MagicMirror/modules/MMM-PIR-Sensor
67 silly lifecycle [email protected]postinstall: Args: [ '-c', 'electron-rebuild -e ../../node_modules/electron' ]
68 silly lifecycle [email protected]
postinstall: Returned: code: 255 signal: null
69 info lifecycle [email protected]~postinstall: Failed to exec postinstall script
70 verbose stack Error: [email protected] postinstall: electron-rebuild -e ../../node_modules/electron
70 verbose stack Exit status 255
70 verbose stack at EventEmitter. (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:255:16)
70 verbose stack at emitTwo (events.js:106:13)
70 verbose stack at EventEmitter.emit (events.js:191:7)
70 verbose stack at ChildProcess. (/usr/lib/node_modules/npm/lib/utils/spawn.js:40:14)
70 verbose stack at emitTwo (events.js:106:13)
70 verbose stack at ChildProcess.emit (events.js:191:7)
70 verbose stack at maybeClose (internal/child_process.js:920:16)
70 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:230:5)
71 verbose pkgid [email protected]
72 verbose cwd /home/pi/MagicMirror/modules/MMM-PIR-Sensor
73 error Linux 4.9.35-v7+
74 error argv "/usr/bin/node" "/usr/bin/npm" "install"
75 error node v6.14.3
76 error npm v3.10.10
77 error code ELIFECYCLE
78 error [email protected] postinstall: electron-rebuild -e ../../node_modules/electron
78 error Exit status 255
79 error Failed at the [email protected] postinstall script 'electron-rebuild -e ../../node_modules/electron'.
79 error Make sure you have the latest version of node.js and npm installed.
79 error If you do, this is most likely a problem with the Magic-Mirror-Module-PIR-Sensor package,
79 error not with npm itself.
79 error Tell the author that this fails on your system:
79 error electron-rebuild -e ../../node_modules/electron
79 error You can get information on how to open an issue for this project with:
79 error npm bugs Magic-Mirror-Module-PIR-Sensor
79 error Or if that isn't available, you can get their info via:
79 error npm owner ls Magic-Mirror-Module-PIR-Sensor
79 error There is likely additional logging output above.
80 verbose exit [ 1, true ]

Turning off my monitor or nothing to show

Hello, Thanks for this cool module. I think it should be a default module inside.

But I'm facing a problem. When I activate this module, app starts as expected then 5 sec later my monitor is turning off and says me "no signal" and I think this is expected. Then I moving in front of the sensor and monitor say nothing and doesn't show anything. I'm not sure what is wrong and no idea how can fix or find the issue. Need help pls.

LED-Status Display

Is it possible to add an output for the LED?
So it shows the status of the PIR. As soon as the PIR recognize something the LED should shine. If there is no recognition then the LED shouldn't Shine

MMM-PIR-Sensor is not working

Hy Paviro,

i have a problem with your module.

My PIR Sensor is working -> i have tested it. I have connected it to GPIO-Pin 7 (GPIO4).

This is my config from MMM-PIR-Sensor in MagicMirror config file:

{
module: 'MMM-PIR-Sensor',
classes: 'default jeder',
config: {
// See 'Configuration options' for more information.
sensorPIN: 4
}
},

And this are the ERRORS from pm2 logs:

0|mm | { Error: EBUSY: resource busy or locked, write
0|mm | at Error (native)
0|mm | at Object.fs.writeSync (fs.js:786:20)
0|mm | at Object.fs.writeFileSync (fs.js:1353:24)
0|mm | at new Gpio (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/onoff/onoff.js:88:8)
0|mm | at Class.socketNotificationReceived (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:47:18)
0|mm | at Socket. (/home/pi/MagicMirror/modules/node_modules/node_helper/index.js:98:10)
0|mm | at emitTwo (events.js:106:13)
0|mm | at Socket.emit (events.js:191:7)
0|mm | at /home/pi/MagicMirror/node_modules/socket.io/lib/socket.js:503:12
0|mm | at _combinedTickCallback (internal/process/next_tick.js:67:7) errno: -16, code: 'EBUSY', syscall: 'write' }

I don't know what i doing wrong and i have searched many hours in the web but without any positive solution. You are my last chance. Please help me.

Thanks in advance

Sample Code

Do you have a sample config code that you could share? I keep getting an error and I just can't figure out where it's coming from. Thanks for the module. It's going to top off my MMM nicely.

Struggling to get it to work.

I had this module working with the last version of MM, since that updated, it threw in a few niggles for me to sort out, then after your update it doesn't seem to work anymore.

I can get the status of the screen using vcgencmd display_power,
and can turn it on and off manually in the CLI using the command lines
vcgencmd display_power 1
vcgencmd display_power 0

I also have a python script showing that the PIR is working.

It just doesn't all seem to talk to each other.

I've tried removing it, and re-installing - any ideas???

Update: Tried the fixes in #49 and #54 - issue has changed and now is screen is black when MM starts, HDMI is still turned on.

Update: I've managed to get MM displaying again, it was an OpenGL issue, not yours. pm2 logs still not showing any errors though

powerSavingDelay not working

powerSavingDelay not working!
my config:
{
module: 'MMM-PIR-Sensor',
config: {
powerSavingDelay: 30,
sensorPIN: "3",
},
},
After restart MMM, monitor is blank (no signal) - it's OK.
if i'm closed pin GPIO 3 (pin 15 in rpi3) - monitor turn on - and I can see MMM screen. It's OK.
After i'm open pin GPIO 3, about 9-10 sec monitor turn off! always!!!
regardless of the parameter powerSavingDelay settings!

Installs fine but nothing happens (doesnt shut down)

I tried running this command and get this response whether PIR is activated or not
pi@raspberrypi:~ $ sudo /opt/vc/bin/tvservice -s
state 0x120005 [DVI DMT (58) RGB full 16:10], 1680x1050 @ 60.00Hz, progressive

npm install failed on pi zero

[email protected] postinstall /home/pi/MagicMirror/modules/MMM-PIR-Sensor
electron-rebuild -e ../../node_modules/electron

/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/src/rebuild.js:81
depKeys.push(...Object.keys(rootPackageJson.dependencies || {}));
^^^

SyntaxError: Unexpected token ...
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:414:25)
at Object.Module._extensions..js (module.js:442:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Module.require (module.js:366:17)
at require (module.js:385:17)
at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/src/cli.js:17:19)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)

npm ERR! Linux 4.14.50+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v4.2.1
npm ERR! npm v2.14.7
npm ERR! code ELIFECYCLE
npm ERR! [email protected] postinstall: electron-rebuild -e ../../node_modules/electron
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script 'electron-rebuild -e ../../node_modules/electron'.
npm ERR! This is most likely a problem with the Magic-Mirror-Module-PIR-Sensor package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! electron-rebuild -e ../../node_modules/electron
npm ERR! You can get their info via:
npm ERR! npm owner ls Magic-Mirror-Module-PIR-Sensor
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /home/pi/MagicMirror/modules/MMM-PIR-Sensor/npm-debug.log

Monitor can't wake up

Every time a mouvement is detected 2 events (1 : value=1, 2 : value=0) are send through the watch function l63 in node_helper.js file. So it always ends up by stating that user_presence == false and thus deactivating the monitor.

I managed to make it work by adding a an attribute "powered" set to true by default in config.

and making

if(value == valueOn) { if(self.config.powered) { self.deactivateMonitor(); } else { self.activateMonitor(); } }

but that's really some quick and dirty code, am I the only having this pair of 2 events for one movement?

Updated to latest raspbian

Hi Paviro,

i made an update to latest raspbian. since this the screen wont turn black. Sensor still working but hdmi isnt turned off. I dunno why. Any ideas? commands still working itself. sensor still giving the Signal but Nothing happens.

Question not Issue - Behaviour when HDMI output is stopped

Hi,

My apologies if I am posting this in the wrong place but I am about to buy a second hand BenQ monitor (http://www.benq.co.uk/product/monitor/g2420hdbl) with DVI-D input and I wanted to check a couple of things.

  1. I am using a convertor (https://www.amazon.es/gp/product/B00JM9NHAU/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) to switch from the HDMI ouput of the raspberry Pi to the DVI-D input of the BenQ g2420hdbl monitor. Can you see this causing a problem?

  2. When the HDMI Output from the Raspberry Pi is stopped (but the cable still attached) will the monitor enter sleep mode or display the "No Signal" message?

Once again, my apologies if this is not the right place for this sort of query.

Al the best and thanks for making the effort to share your work,
Steve

Is there a way to leave the monitor on for x minutes when movement is detected?

First off, awesome module, I think it is definitely my favourite one thus far!

I've found that most sensors are more sensitive to movement rather than actual presence. If someone stands still in front of the sensor, it will detect 0 after a few seconds. Is there a way to leave the monitor on for a few minutes, and if no movement is detected then turn the monitor off?

I have the idea out in pseudocode but am not certain how to implement it myself:

if (relayOnState == 0 && timer > 300){ turn_monitor_off(); } else if (relayOnState == 1) { timer.reset(); turn_monitor_on(); }

Thanks heaps :)

How to use sensor

Could you give some insight into how to connect the sensor to the pi? I see that the pins labeled 22 on the bottom of the pi have 2 pins, but then there are 3 on the sensor for ground, output, and power. I have zero experience with hardware stuff so I'm not sure which 2 should be used and which pins they should be connected to on the pi. Thank you!

MM v2.2.1 error at starting

Heyho,
when running the MMM-PIR-Sensor Module on the new 2.2.1 MM Version i got following error message at npm start dev

Initializing new module helper ...
Module helper loaded: MMM-temp-ds18b20
No helper found for module: weatherforecast.
Initializing new module helper ...
Module helper loaded: newsfeed
App threw an error during load
Error: Module version mismatch. Expected 50, got 54.
    at Error (native)
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
    at Object.Module._extensions..node (module.js:583:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)
    at Module.require (module.js:483:17)
    at require (internal/module.js:20:19)
    at bindings (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bindings/bindings.js:76:44)
Whoops! There was an uncaught exception...
Error: Module version mismatch. Expected 50, got 54.
    at Error (native)
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
    at Object.Module._extensions..node (module.js:583:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)
    at Module.require (module.js:483:17)
    at require (internal/module.js:20:19)
    at bindings (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bindings/bindings.js:76:44)

module not working PLEASE HELP

Hi this module use to work very well before.I just reinstalled the magic mirror and it is not working.
PLEASE HELP

git clone https://github.com/paviro/MMM-PIR-Sensor.git
pi@raspberrypi:/MagicMirror/modules $ cd MMM-PIR-Sensor
pi@raspberrypi:
/MagicMirror/modules/MMM-PIR-Sensor $ npm install

npm WARN prefer global [email protected] should be installed with -g

[email protected] install /home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll
node-gyp rebuild

make: Entering directory '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build'
CXX(target) Release/obj.target/epoll/src/epoll.o
SOLINK_MODULE(target) Release/obj.target/epoll.node
COPY Release/epoll.node
make: Leaving directory '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build'

[email protected] postinstall /home/pi/MagicMirror/modules/MMM-PIR-Sensor
electron-rebuild -e ../../node_modules/electron-prebuilt

An unhandled error occurred inside electron-rebuild
Unable to find electron-prebuilt's version number, either install it or specify an explicit version

Error: Unable to find electron-prebuilt's version number, either install it or specify an explicit version
at _callee$ (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/cli.js:74:17)
at tryCatch (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/regenerator-runtime/runtime.js:63:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/regenerator-runtime/runtime.js:337:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/regenerator-runtime/runtime.js:96:21)
at GeneratorFunctionPrototype.tryCatcher (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bluebird/js/release/util.js:16:23)
at PromiseSpawn._promiseFulfilled (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bluebird/js/release/generators.js:97:49)
at /home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bluebird/js/release/generators.js:201:15
at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/cli.js:197:4)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)

npm ERR! Linux 4.4.34-v7+
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! node v6.9.4
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! [email protected] postinstall: electron-rebuild -e ../../node_modules/electron-prebuilt
npm ERR! Exit status 255
npm ERR!
npm ERR! Failed at the [email protected] postinstall script 'electron-rebuild -e ../../node_modules/electron-prebuilt'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the Magic-Mirror-Module-PIR-Sensor package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! electron-rebuild -e ../../node_modules/electron-prebuilt
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs Magic-Mirror-Module-PIR-Sensor
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls Magic-Mirror-Module-PIR-Sensor
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /home/pi/MagicMirror/modules/MMM-PIR-Sensor/npm-debug.log


npm-debug.zip

blank screen after adding the module

Hi
After adding the module Iam getting a blank screen.
See the error log below.

/home/pi/.pm2/logs/mm-error.log last 15 lines:
0|mm | at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:148:3)
0|mm | at Module._compile (module.js:571:32)
0|mm | at Object.Module._extensions..js (module.js:580:10)
0|mm | at Module.load (module.js:488:32)
0|mm | { Error: Cannot find module 'onoff'
0|mm | at Module._resolveFilename (module.js:470:15)
0|mm | at Function.Module._resolveFilename (/home/pi/MagicMirror/node_modules/electron/dist/resources/electron.asar/common/reset-search-paths.js:35:12)
0|mm | at Function.Module._load (module.js:418:25)
0|mm | at Module.require (module.js:498:17)
0|mm | at require (internal/module.js:20:19)
0|mm | at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:11:14)
0|mm | at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:148:3)
0|mm | at Module._compile (module.js:571:32)
0|mm | at Object.Module._extensions..js (module.js:580:10)
0|mm | at Module.load (module.js:488:32) code: 'MODULE_NOT_FOUND' }

Monior wakes up But screen is black

I've updated my Magic Mirror to the newest version.
Bevor eveything was great and worked.
Now I got the problem that after sleeping the Monitor turns on but the screen is black.
I changed nothing more. Dou you have some ideas, whats wrong?
Thank you

If i check with tvservice -s
I got these answer when it's on:
state 0x120006 [DVI DMT (83) RGB full 16:9], 1600x900 @ 60.00Hz, progressive
and if it's off these:
state 0x120002 [TV is off]

Not working as expected

The behavior that I see with this module is my monitor constantly flashing on and off when the sensor detects any movement, and instantly turns off when no motion is detected.

I modified the source code to include a 20 sec timer. If there's any motion detected, the timer is reset. The monitor turns off once the timer goes off. This resulted in the kind of behavior I was expecting.

I'm wondering if there's something wrong with my setup or sensor which is resulting in the former behavior.

MagicMirror doesn't start with this module

Hi,
i'm totally new to the MagicMirror. When I added this module, there's always this error:

WARNING! Could not load config file. Starting with default configuration. Error found: Error: Cannot find module 'onoff'.

I installed wiring-pi in the MagicMirror Folder with "npm install wiring-pi".

Has anybody an idea?

thanks

After Installation, version error

Hey,

I want to use this module. After I go through your installation steps. I only see a black screen on the mirror and nothing happens. Also the console show a version error (see screenshot)

magic bug

Unfortunatelly I am not a NodeJS or npm expert,... so maybe I have done something wrong.

Uncaught Exception when adding module

Hi,
I get an uncaught exception when I add your module to the config. The PIR sensor is connected correctly (tested with script) and works well when I use the node serveronly - way of starting and browse it with a browser but when using electron and pm2 it gives me the following error:
mm-0 (out): Whoops! There was an uncaughtexception...`

Seems like there are permissions missing?!
I followed your guide to install the module, so can you say what I am missing?

HDMI -> DVI

Hi, I have connected my Screen with a HDMI -> DVI cable. Will this still work with this setup, or do I need a HDMI -> HDMI connection?

error since updating magic mirror to version 01.07.2018

get the following error message when npm install:
pi@raspberrypi:~/MagicMirror/modules/MMM-PIR-Sensor $ npm install

[email protected] postinstall /home/pi/MagicMirror/modules/MMM-PIR-Sensor
electron-rebuild -e ../../node_modules/electron

⠋ Searching dependency tree
An unhandled error occurred inside electron-rebuild
Could not detect abi for version 2.0.3 and runtime electron. Updating "node-abi" might help solve this issue if it is a new release of electron

Error: Could not detect abi for version 2.0.3 and runtime electron. Updating "node-abi" might help solve this issue if it is a new release of electron
at Object.getAbi (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/node-abi/index.js:30:9)
at new Rebuilder (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/src/rebuild.js:64:28)
at rebuildWithOptions (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/src/rebuild.js:310:23)
at Object.doRebuild [as rebuild] (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/src/rebuild.js:317:16)
at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/src/cli.js:114:33)
at next (native)
at fulfilled (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/electron-rebuild/lib/src/cli.js:5:58)

npm ERR! Linux 4.14.50-v7+
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install"
npm ERR! node v6.14.3
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! [email protected] postinstall: electron-rebuild -e ../../node_modules/electron
npm ERR! Exit status 255
npm ERR!
npm ERR! Failed at the [email protected] postinstall script 'electron-rebuild -e ../../node_modules/electron'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the Magic-Mirror-Module-PIR-Sensor package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! electron-rebuild -e ../../node_modules/electron
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs Magic-Mirror-Module-PIR-Sensor
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls Magic-Mirror-Module-PIR-Sensor
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /home/pi/MagicMirror/modules/MMM-PIR-Sensor/npm-debug.log
npm-debug.log

Starting Magic Mirror
App threw an error during load
Error: The module '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/Release/epoll.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using npm rebuild or npm install).
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:172:20)
at Object.Module._extensions..node (module.js:671:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:172:20)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:504:12)
at Function.Module._load (module.js:496:3)
at Module.require (module.js:586:17)
at require (internal/module.js:11:18)
at bindings (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bindings/bindings.js:81:44)
at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/epoll.js:1:192)
Whoops! There was an uncaught exception...
Error: The module '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/Release/epoll.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 48. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using npm rebuild or npm install).
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:172:20)
at Object.Module._extensions..node (module.js:671:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:172:20)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:504:12)
at Function.Module._load (module.js:496:3)
at Module.require (module.js:586:17)
at require (internal/module.js:11:18)
at bindings (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bindings/bindings.js:81:44)
at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/epoll.js:1:192)
MagicMirror will not quit, but it might be a good idea to check why this happened. Maybe no internet connection?
If you think this really is an issue, please open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
Launching application.

Thanks for your help.

Problem with MM update 2.1.2

Hi,

After the last updating of MM in 2.1.2 i have an issue like this:

WARNING! Could not load config file. Starting with default configuration. Error found: Error: The module '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/Release/epoll.node’
was compiled against a different Node.js version using
NODE_MODULE_VERSION 50. This version of Node.js requires
NODE_MODULE_VERSION 53. Please try re-compiling or re-installing
the module (for instance, using npm rebuild ornpm install).
0

how i can fix it ?

thanks

Signal to HDMI

I'm attempting to use a 42" LG TV as my mirror. Unfortunately, the Sensor senses no movement it shuts off the HDMI port which puts the TV into a mode where it senses no signal, thus my TV bounces a screensaver around the screen that says "No Signal".

Is there a way to either (A) use a PiCam to detect the motion so it keep the screen in an always-on state or can a black screensaver be used instead of turning off the HDMI to again keep the screen in an always-on state?

Question - Will Monitor Power Off or just show "No HDMI Connected"?

Hi I am working on building my magic mirror, and I think this plugin is the only module able to power off the display when no one is nearby, correct?

With my particular monitor, its settings are locked and the button to unlock them is broken, so no way to change it to power off.

If this module shuts down HDMI connection from the rpi to my monitor, the monitor will display "No HDMI Connected" screen, does that sound right? Any idea to work around this? Thanks

uncaught exception on MM 2.3.1

Hi there

MM2 tells me this:

Whoops! There was an uncaught exception...
{ Error: EINVAL: invalid argument, write
at Object.fs.writeSync (fs.js:675:3)
at Object.fs.writeFileSync (fs.js:1285:24)
at new Gpio (/root/MagicMirror/modules/MMM-PIR-Sensor/node_modules/onoff/onoff.js:28:10)
at Class.socketNotificationReceived (/root/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:52:18)
at Socket. (/root/MagicMirror/modules/node_modules/node_helper/index.js:113:11)
at Socket.emit (events.js:182:13)
at /root/MagicMirror/node_modules/socket.io/lib/socket.js:513:12
at process._tickCallback (internal/process/next_tick.js:172:11) errno: -22, syscall: 'write', code: 'EINVAL' }
MagicMirror will not quit, but it might be a good idea to check why this happened. Maybe no internet connection?
If you think this really is an issue, please open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues

I am completely new to node, npm etc. so I do not have any clue what I should provide you to fix this bug. I am not even sure if it is a bug... Thanks for assisting me.

node -v: v10.0.0

uname -a: Linux homeautomation 4.13.0-37-generic #42-Ubuntu SMP Wed Mar 7 14:13:23 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

complete output of node serveronly:

Starting MagicMirror: v2.3.1
Loading config ...
Loading module helpers ...
No helper found for module: MMM-SwissCommute.
Initializing new module helper ...
Module helper loaded: MMM-PIR-Sensor
No helper found for module: alert.
Initializing new module helper ...
Module helper loaded: updatenotification
No helper found for module: clock.
Initializing new module helper ...
Module helper loaded: newsfeed
All module helpers loaded.
Starting server on port 1843 ...
Server started ...
Connecting socket for: MMM-PIR-Sensor
Connecting socket for: updatenotification
Connecting socket for: newsfeed
Starting module: newsfeed
Sockets connected & modules started ...

Ready to go! Please point your browser to: http://0.0.0.0:1843
Whoops! There was an uncaught exception...
{ Error: EINVAL: invalid argument, write
at Object.fs.writeSync (fs.js:675:3)
at Object.fs.writeFileSync (fs.js:1285:24)
at new Gpio (/root/MagicMirror/modules/MMM-PIR-Sensor/node_modules/onoff/onoff.js:28:10)
at Class.socketNotificationReceived (/root/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:52:18)
at Socket. (/root/MagicMirror/modules/node_modules/node_helper/index.js:113:11)
at Socket.emit (events.js:182:13)
at /root/MagicMirror/node_modules/socket.io/lib/socket.js:513:12
at process._tickCallback (internal/process/next_tick.js:172:11) errno: -22, syscall: 'write', code: 'EINVAL' }
MagicMirror will not quit, but it might be a good idea to check why this happened. Maybe no internet connection?
If you think this really is an issue, please open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
Create new news fetcher for url: https://www.heise.de/security/rss/news-atom.xml - Interval: 300000

Error: Module version mismatch. Expected 49, got 48.

App threw an error during load
Error: Module version mismatch. Expected 49, got 48.
at Error (native)
at process.module.(anonymous function) as dlopen
at Object.Module._extensions..node (module.js:568:18)
at Object.module.(anonymous function) as .node
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/wiring-pi/lib/exports.js:1:97)
Error: Module version mismatch. Expected 49, got 48.
at Error (native)
at process.module.(anonymous function) as dlopen
at Object.Module._extensions..node (module.js:568:18)
at Object.module.(anonymous function) as .node
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Module.require (module.js:468:17)
at require (internal/module.js:20:19)
at Object. (/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/wiring-pi/lib/exports.js:1:97)

Unless I am reading this wrong this is expecting a Node module version that is not released yet?

The current module release is 48 https://nodejs.org/en/download/releases/

I have tried node version v6.3.0, 6.3.1, and 5.12.0.

I have followed all of your suggestions here even though that a downgrade to a previous version and not an upgrade to an unreleased version.. #2

I have tried reinstalling electron, rebuilding it, removing the module folder and re cloning it. I'm at a loss.

The only other instance of this I could find is here don/node-eddystone-beacon#40 Electron-rebuild seemed to work in their case. Not so much for me.

Got any suggestions? Much appreciated.

-Jason.

Nothing Happening - Monitor not turning off

Hello all, I am new to programming and this is my first project. I have been unable to get this module working. I went through the installation steps many times over again to try and fix the issue. I am not getting errors. My sensor is working fine as I tested it earlier. Whenever I start up Magic Mirror nothing happens in regards to this module. It's just the regular Magic Mirror screen and the LED I am using show that the sensor detects movement when I wave my hand but no change in the display.

EACCES /sys/class/gpio/export

After installing this module and following the README I got this error message:

0|mm       | { Error: EACCES: permission denied, open '/sys/class/gpio/export'
0|mm       |     at Error (native)
0|mm       |     at Object.fs.openSync (fs.js:640:18)
0|mm       |     at Object.module.(anonymous function) [as openSync] (ELECTRON_ASAR.js:173:20)
0|mm       |     at Object.fs.writeFileSync (fs.js:1343:33)
0|mm       |     at new Gpio (/home/patrick/MagicMirror/modules/MMM-PIR-Sensor/node_modules/onoff/onoff.js:88:8)
0|mm       |     at Class.socketNotificationReceived (/home/patrick/MagicMirror/modules/MMM-PIR-Sensor/node_helper.js:44:18)
0|mm       |     at Socket.<anonymous> (/home/patrick/MagicMirror/modules/node_modules/node_helper/index.js:98:10)
0|mm       |     at emitTwo (events.js:106:13)
0|mm       |     at Socket.emit (events.js:191:7)
0|mm       |     at /home/patrick/MagicMirror/node_modules/socket.io/lib/socket.js:503:12
0|mm       |   errno: -13,
0|mm       |   code: 'EACCES',
0|mm       |   syscall: 'open',
0|mm       |   path: '/sys/class/gpio/export' }

For me, it seems that the README is wrong, because the given command creates a new user gpio with primary group pi. Instead of adding the pi user to gpio group.
Add your user (pi?) to the gpio group by executing sudo useradd -g pi gpio.

After realizing, I also added my user to the gpio group by executing sudo usermod -a -G gpio pi and it worked. Deleting the previously created user gpio (via sudo userdel -r gpio) prompts no error message.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.