• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

Ability to change color by physical button?

Scheduled Pinned Locked Moved Unsolved Requests
13 Posts 3 Posters 7.3k Views 3 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
    Snoevit
    last edited by Jun 13, 2016, 1:00 PM

    Sorry if i put this post in the wrong category.

    I have just started to fine-polish the last pieces in the config on my MagicMirror when my better half comes screaming " I want an whiteboard!"
    Then the idea came to me that instead of making a mirror, i just use a ordinary glas and use it as an whiteboard. But i dont want it to have a white background all the time…

    So my question is, is it doable by an physical button/switch to “invert” the colors on the hole layot ?

    So that the handwritted “Whiteboard-text” is almost hidden when in “MagicMirror-Mode” (Original layot) and with the press of a button or switch the hole layout is inverting, making the background white and text black.

    I have NO prior knowledge of programming, but i am not afraid to try. But i might need a push in the right direction first :P

    My first idea involved a script like this:

    ´Push button´
    Making it activate a script that replaces ´/css/main.css´ with ´/css/main2.css´ and thereafter sends a ´refresh´command.
    Sort of…
    ( This is my programing abilities ;) )

    Am i reaching for the stars here or is it something that is doable? Maybe there is another solution?

    1 Reply Last reply Reply Quote 0
    • S Offline
      strawberry 3.141 Project Sponsor Module Developer
      last edited by strawberry 3.141 Jun 13, 2016, 2:35 PM Jun 13, 2016, 2:34 PM

      you could go for a button like this https://www.adafruit.com/products/367 and hook it on the gpio pins.

      then you should write your own module where you can control your pins e.g. like this module https://github.com/paviro/MMM-PIR-Sensor

      instead of shutting down your tv you could change classes of the document to change the design

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

      1 Reply Last reply Reply Quote 0
      • S Offline
        Snoevit
        last edited by Jun 15, 2016, 10:44 AM

        Thank you Strawberry!
        I will give it a go :)

        1 Reply Last reply Reply Quote 0
        • S Offline
          Snoevit
          last edited by Jun 15, 2016, 3:06 PM

          Yeah… I have no idea what the heck i am doing^^,
          This is way over my league.
          Is there any good beginner guides for me? :p
          I have been looking thru the PIR-Sensor module (and other) whilst reading the “Module Dev. Docu.” trying to understand.

          1 Reply Last reply Reply Quote 0
          • S Offline
            strawberry 3.141 Project Sponsor Module Developer
            last edited by strawberry 3.141 Jun 15, 2016, 3:10 PM Jun 15, 2016, 3:09 PM

            https://www.raspberrypi.org/learning/physical-computing-with-python/ maybe this can help you to understand how the gpio pins work, but it’s a different programmin language as in this project

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

            1 Reply Last reply Reply Quote 0
            • S Offline
              Snoevit
              last edited by Jun 15, 2016, 3:19 PM

              The python-button part is something i tried before, its the other language i have great difficulties with. (The one that MagicMirror is coded in.) since i dont understand The language, i cant read it and change/re-write what is needed for my idea to work. Ive been trying for 4h now.

              1 Reply Last reply Reply Quote 0
              • S Offline
                strawberry 3.141 Project Sponsor Module Developer
                last edited by Jun 15, 2016, 3:20 PM

                if you post your code in here we may can assist you a little bit

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

                1 Reply Last reply Reply Quote 0
                • S Offline
                  Snoevit
                  last edited by Jun 15, 2016, 3:29 PM

                  I dont have any code. All this time i have been trying to understand what i am trying to do. If we look at The code from PIR-sensor, i dont know wich line are doing what. I have no clue on how and where to start. I cant see to understand The “building” of a module. All The “this. File” and what not dont make Any sense to me.
                  I need a How-to guide for toddlers :P

                  1 Reply Last reply Reply Quote 0
                  • S Offline
                    strawberry 3.141 Project Sponsor Module Developer
                    last edited by strawberry 3.141 Jun 15, 2016, 3:56 PM Jun 15, 2016, 3:54 PM

                    i hope the following lines can help you to understand it a bit more and that it is explained correctly.

                    this references the module itself

                    so in the module you can do this.sendSocketNotification(…) which will call the function sendsocketnotification of your module (this)

                    also you can follow this guide to develop a module https://github.com/MichMich/MagicMirror/tree/master/modules

                    /* Magic Mirror
                     * Module: MMM-PIR-Sensor
                     *
                     * By Paul-Vincent Roll http://paulvincentroll.com
                     * MIT Licensed.
                     */
                    
                    /* registers a module with the name MMM-PIR-Sensor in the magic mirror system*/
                    Module.register('MMM-PIR-Sensor',{
                    	
                            /*config part*/
                    	defaults: {
                    		sensorPIN: 22, /*number of pin can be different for raspberry pi version e.g. https://raspilab.files.wordpress.com/2014/08/gpiosb.png*/
                    		relayPIN: false, /*this is for using relais in this module not needed because you can also set the hdmi output off*/
                    		powerSaving: true,
                    		relayOnState: 1, /*not important because you're not using relays*/
                    	},
                    	
                            /*here you receive messages which you send via node_helper.js*/
                    	socketNotificationReceived: function(notification, payload) {
                    		if (notification === "USER_PRESENCE"){
                                            /*when you receive the notification user_presence from your node_helper you send a global message with this notification to every module in magic mirror so they can handle this event as well*/
                    			this.sendNotification(notification, payload)
                    		}
                    	},
                    	
                            /*this method got fired when the core is starting your module
                    	start: function() {
                                    /* the following 6 lines can be removed if you don't want to use relais. The functionality of these lines is to set relayoffstate depending on the relayonstate defined in the configt section above*/
                    		if (this.config.relayOnState == 1){
                    			this.config.relayOffState = 0
                    		}
                    		else if (this.config.relayOnState == 0){
                    			this.config.relayOffState = 1
                    		}
                                    /*here you send a notification to your node_helper.js*/
                    		this.sendSocketNotification('CONFIG', this.config);
                                     /*here you print some information to the console, which you can't se without enabling the developer console in the electronh wrapper during runtime*/
                    		Log.info('Starting module: ' + this.name);
                    	}
                    });
                    

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

                    1 Reply Last reply Reply Quote 0
                    • S Offline
                      strawberry 3.141 Project Sponsor Module Developer
                      last edited by Jun 15, 2016, 4:21 PM

                      i was to late to edit :pensive:

                      'use strict';
                      
                      /* Magic Mirror
                       * Module: MMM-PIR-Sensor
                       *
                       * By Paul-Vincent Roll http://paulvincentroll.com
                       * MIT Licensed.
                       */
                      
                      /*import dependencies*/
                      const NodeHelper = require('node_helper');
                      const gpio = require('wiring-pi');
                      const exec = require('child_process').exec;
                      
                      module.exports = NodeHelper.create({
                        /*this method got fired when the core is starting your module helper*/
                        start: function () {
                          this.started = false
                        },
                        /*this function will activate your monitor by enabling hdmi output or sending a signal to the relais via gpio pin*/
                        activateMonitor: function () {
                          /* you don't need the following 3 lines, which would set a signal to the relais specified in the config section of your module of the file above*/
                          if (this.config.relayPIN != false) {
                            gpio.digitalWrite(this.config.relayPIN, this.config.relayOnState)
                          }
                          /*after removing the previous 3 lines you also need to change "else if" to "if". the following lines run a command in a child process in the background to enable the hdmi output*/
                          else if (this.config.relayPIN == false){
                            exec("/opt/vc/bin/tvservice -p", null);
                          }
                        },
                      /*this function will deactivate your monitor by disabling hdmi output or sending a signal to the relais via gpio pin*/
                        deactivateMonitor: function () {
                      /* you don't need the following 3 lines, which would set a signal to the relais specified in the config section of your module of the file above*/
                          if (this.config.relayPIN != false) {
                            gpio.digitalWrite(this.config.relayPIN, this.config.relayOffState)
                          }
                       /*after removing the previous 3 lines you also need to change "else if" to "if". the following lines run a command in a child process in the background to disable the hdmi output*/
                          else if (this.config.relayPIN == false){
                            exec("/opt/vc/bin/tvservice -o", null);
                          }
                        },
                        /*here you receive messages which you send via modulename.js*/
                        socketNotificationReceived: function(notification, payload) {
                          const self = this;
                          /*the following part runs when you receive the notification from your module l. 33 on github "this.sendSocketNotification('CONFIG', this.config);"*/
                          if (notification === 'CONFIG' && this.started == false) {
                            
                            const self = this
                            this.config = payload
                            
                            //Setup pins
                            exec("echo '" + this.config.sensorPIN.toString() + "' > /sys/class/gpio/export", null); /*motion sensor pin*/
                            exec("echo 'in' > /sys/class/gpio/gpio" + this.config.sensorPIN.toString() + "/direction", null); /*relais pin*/
                            /*fllowing lines not important if you're not using relais*/
                            if (this.config.relayPIN) {
                              exec("echo '" + this.config.relayPIN.toString() + "' > /sys/class/gpio/export", null);
                              exec("echo 'out' > /sys/class/gpio/gpio" + this.config.relayPIN.toString() + "/direction", null);
                              exec("echo '1' > /sys/class/gpio/gpio" + this.config.relayPIN.toString() + "/value", null);
                            }
                            
                            //Set gpio-mode
                            gpio.setup('sys');
                            
                            //Detected movement
                            /*when you detect a movement with your sensor it will run the callback "function(delta){...}"*/
                            gpio.wiringPiISR(this.config.sensorPIN, gpio.INT_EDGE_BOTH, function(delta) {
                              if (gpio.digitalRead(self.config.sensorPIN) == 1) {
                                /* motion detected send the notification to your module*/
                                self.sendSocketNotification("USER_PRESENCE", true);
                                if (self.config.powerSaving){
                                  /*activate the monitor again to show the user data on your screen*/
                                  self.activateMonitor()
                                }
                              }
                              //No movement
                              else if (gpio.digitalRead(self.config.sensorPIN) == 0) {
                                /*send your module the notification tha there is no user present and deactivate the monitor*/
                                self.sendSocketNotification("USER_PRESENCE", false);
                                if (self.config.powerSaving){
                                  self.deactivateMonitor()
                                }
                              }
                            });
                           
                          this.started = true
                          };
                        }
                        
                      });
                      

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

                      1 Reply Last reply Reply Quote 0
                      • 1
                      • 2
                      • 1 / 2
                      1 / 2
                      • First post
                        10/13
                        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