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.

    Making my first module: issue with notifications

    Scheduled Pinned Locked Moved Unsolved Troubleshooting
    notificationsmodulemagicmirror
    8 Posts 2 Posters 1.2k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Offline
      sdetweil
      last edited by

      did u open anther browser window with the MM loaded into it? it will start another instance of the the module.js (with its own counter)

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      R 1 Reply Last reply Reply Quote 0
      • R Offline
        rico24 Module Developer @sdetweil
        last edited by

        @sdetweil Thank you!
        It was because I opened one tab and then closed it, open a new one but the timer was still running indeed. When in the future I want to do something with the mechanisme I need to solve this ;)

        Now I now how notifications work in practice, I can finish my own module :)

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

          @rico24 u can also look at my sample module, which accesses config, does notifications,. etc

          https://github.com/sdetweil/SampleModule

          to fix the problem, you need to send the module identifier in the payload, and have different counters, stored by identifier… when u send back from the helper EVERY module gets notified at once,
          so they need to look at the identifier returned to make sure the message is for them, and ignore others

          Sam

          How to add modules

          learning how to use browser developers window for css changes

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

            this is what that would look like… as u want pages insulated from each other as well as module instances

            module

            /* Magic Mirror
             * Module: name of module
             * 
             */
            
            //Register module
            Module.register("MMM-DutchGarbageCalendar", {
              defaults: {
                    foo: "I'm alive!"
              },
            	ourpage: Math.ceil(Math.random() * 100),	
            	count:{},
              
              //Start function
              start: function (){
              this.count[this.ourpage] = 0
            },
              
              
             //getDom Function
              getDom: function() {
              var element = document.createElement("div")
              element.className = "myContent"
              element.innerHTML = "Hello, World! " + this.config.foo
              var subElement = document.createElement("p")
              subElement.id = "COUNT"
              element.appendChild(subElement)
              return element
            },
            
            
            //NotificationReceived 
            notificationReceived: function(notification, payload, sender) {
                    switch(notification) {
                            case "DOM_OBJECTS_CREATED":
                                    var timer = setInterval(()=>{
            		        Log.log("send socket notificationR: DO_YOUR_JOB:"+this.count[this.ourpage])
            			this.sendSocketNotification("DO_YOUR_JOB", {identifier: this.identifier+this.ourpage, value:this.count[this.ourpage]})
                                            this.count[this.ourpage]++;
                                    }, 5000)
                                    break
                    }
            },
             
             //socketNotificationReceived
            socketNotificationReceived: function(notification, payload) {
                    switch(notification) {
                            case "I_DID":
            			if(payload.identifier== this.identifier+this.ourpage){
            				var elem = document.getElementById("COUNT")
            				elem.innerHTML = "Count:" + payload.value
            				Log.log("socketReceived:" + JSON.stringify(payload))
            			}
            			else
            		        	Log.log("notification not for us");
                                    break
                    }
            },
            })
            
            

            helper

            var NodeHelper = require('node_helper');
            var request = require('request');
            module.exports = NodeHelper.create({
            		initial_counter:10000,
            
                    start: function() {
            					this.countDown = {} 				
            				},
            
                    socketNotificationReceived: function(notification, payload) {
                            console.log("Payload: =" + JSON.stringify(payload));
                            switch(notification){
                                    case "DO_YOUR_JOB":
                              		if(!this.countDown.hasOwnProperty(payload.identifier+this.ourpage)){
            					this.countDown[payload.identifier]=this.initial_counter;
            				}
            				let return_payload={identifier: payload.identifier, value:(this.countDown[payload.identifier] - payload.value)}
                                            this.sendSocketNotification("I_DID",return_payload )
                                            console.log("Payload 2: = " + JSON.stringify(return_payload));
                                            break
                            }
                    },
            });
            

            Sam

            How to add modules

            learning how to use browser developers window for css changes

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

              @rico24 and here is an updated node_helper, that rejects connecting clients if they don’t send the right kind of identifier (ends with a digit)

              var NodeHelper = require('node_helper');
              var request = require('request');
              module.exports = NodeHelper.create({
              		initial_counter:10000,
              
                      start: function() {
              			this.countDown = {} 				
              	},
              	isDigit: function(x){
              			return (x>='0' && x< ='9')  // watch out for spaces after < , forum hides it all
              	},
                      socketNotificationReceived: function(notification, payload) {
                              console.log("Payload: =" + JSON.stringify(payload));
                              switch(notification){
                                      case "DO_YOUR_JOB":
              				if(this.isDigit(payload.identifier.slice(-1))){
              					if(!this.countDown.hasOwnProperty(payload.identifier+this.ourpage)){
              				           this.countDown[payload.identifier]=this.initial_counter;
              					}
              				let return_payload={identifier: payload.identifier, value:(this.countDown[payload.identifier] - payload.value)}									 
                                          this.sendSocketNotification("I_DID",return_payload )
              			        console.log("Payload 2: = " + JSON.stringify(return_payload));
              			}
              			else
              				this.sendSocketNotification("I_DID_REJECTED_INVALID_IDENTIFIER",payload )
                                              break
                              }
                      },
              });
              

              Sam

              How to add modules

              learning how to use browser developers window for css changes

              1 Reply Last reply Reply Quote 1
              • 1 / 1
              • First post
                Last post
              Enjoying MagicMirror? Please consider a donation!
              MagicMirror created by Michael Teeuw.
              Forum managed by Sam, technical setup by Karsten.
              This forum is using NodeBB as its core | Contributors
              Contact | Privacy Policy
                OSZAR »