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.

    Unable to sendSocketNotification from node_helper to Module

    Scheduled Pinned Locked Moved Development
    5 Posts 2 Posters 4.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.
    • J Offline
      jc21
      last edited by

      Hi community, I’m pulling my hair out trying to get this one working.

      I’ve got my MMM-IFTTT module nearly completed, except for a small hickup.

      In the node_helper.js I’m sending a socket notification that is not getting through to the UI. It was working at some stage before nesting it in another function, so I assume it’s a scope issue. I’ve tried debugging everything everywhere, even using this.io to send it the hard way.

      I’m using the new ES6 anonymous function syntax, ie:

      this.expressApp.post('/IFTTT', (req, res) => {
      

      which should keep the this reference from outside of the function and all my console logging suggests it does, however I think that the io reference is not the same one somehow, and despite the this.io.of(this.name).emit(notification, payload); succeeding in the node helper library, the notification simply doesn’t show in the UI dev console.

      This is also apparent when trying the var self = this; method, using the self object even immediately doesn’t send through the socket.

      Any help on this scope stuff would be appreciated! Thanks in advance.

      Raspbian Jessie
      Node version: v6.6.0
      
      strawberry 3.141S 1 Reply Last reply Reply Quote 0
      • strawberry 3.141S Offline
        strawberry 3.141 Project Sponsor Module Developer @jc21
        last edited by

        @jc21 did you try the common way?

        this.sendSocketNotification('MSG', 'Hello World');
        

        and in the module itself

        socketNotificationReceived: function(notification, payload){
            if(notification === 'MSG'){
                Log.info(payload);
            }
        }
        

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

        1 Reply Last reply Reply Quote 0
        • J Offline
          jc21
          last edited by

          I dumbed the module right down:

          node_helper.js

          const NodeHelper = require('node_helper');
          
          module.exports = NodeHelper.create({
              start: function() {
                  console.log('[IFTTT] Starting node_helper');
          
                  var self = this;
                  setTimeout(function () {
                      self.sendSocketNotification('MSG', {message: 'test'});
                  }, 10000);
              }
          });
          

          MMM-IFTTT.js

          //...
              socketNotificationReceived: function(notification, payload) {
                  if (notification === 'MSG'){
                      Log.info(payload);
                  }
              },
          //...
          

          Still not getting the log in dev console :(

          strawberry 3.141S 1 Reply Last reply Reply Quote 0
          • strawberry 3.141S Offline
            strawberry 3.141 Project Sponsor Module Developer @jc21
            last edited by

            @jc21 If I’m right you must start the connection from the module, but can’t test it right now

            MMM-IFTTT.js

            start: function() {
                    this.sendSocketNotification('START', {message: 'start connection'});
            },
            
            socketNotificationReceived: function(notification, payload) {
                    if (notification === 'MSG'){
                        Log.info(payload);
                    }
                },
            

            node_helper.js

            const NodeHelper = require('node_helper');
            
            module.exports = NodeHelper.create({
                start: function() {
                    console.log('[IFTTT] Starting node_helper');
                },
            
                socketNotificationReceived: function(notification, payload) {
                    if (notification === 'START'){
                        setTimeout(() => {
                            this.sendSocketNotification('MSG', {message: 'test'});
                         }, 10000);
                    }
                },
            });
            

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

            1 Reply Last reply Reply Quote 1
            • J Offline
              jc21
              last edited by

              Wow that is not obvious or documented.

              However, that worked :) Thanks heaps!

              1 Reply Last reply Reply Quote 1

              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

              With your input, this post could be even better 💗

              Register Login
              • 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