MagicMirror Forum

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • Donate
    • Discord
    MagicMirror² v2.24.0 is available! For more information about this release, check out this topic.

    How to use the 'node_helper', 'serialport'

    Development
    2
    23
    2242
    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.
    • N
      nhpunch last edited by

      const NodeHelper = require('node_helper')
      const Serialport = require("serialport");
      
      module.exports = NodeHelper.create({
      
        start: function () {
        },
      
        socketNotificationReceived: function (notification, payload) {
          const self = this
      
          if (notification === 'CONFIG') {
            self.config = payload
            
          var serialport = new Serialport('/dev/ttyACM0', {   
      		baudRate: 9600
      		});
      
          var led = 0;
      
            serialport.open(function () {
              console.log('connect...');
              serialport.on('data', function(data) { // 아두이노로부터 전달된 데이터
                console.log('data received: ' + data);
              });
      
              setInterval( function() { // 2초마다 아두이노에게 문자열을 전송하는 예
                led = !led;
                serialport.write(led==true ? "1" : "0", function(err, result){
                  if(err){
                   console.log(err);
                  }
                });
              }, 5000);
            });
          }
        }, 
      })
      

      this is node_helper

      Module.register('MMM-Serial-Notifications', {
        defaults: {
        },
      
        getScripts: function() {
      		return ["modules/MMM-Serial-Notifications/js/jquery.js"];
      	},
      	getStyles: function() {
      		return ["mm-MMM-Serial-Notifications-style.css"];
      	},
        start: function () {
          Log.info("Starting module: " + this.name);
          this.sendSocketNotification('CONFIG', this.config)
        },	
        socketNotificationReceived: function (notification, payload) {	
      	this.sendNotification(notification, payload)
      
        },
      
      	getDom: function() {
      		var wrapper = document.createElement("div");
      		var button = document.createElement("div");
      		var text = document.createElement("span");
      		var overlay = document.createElement("div");
      		var hidden = true;
      
      		overlay.className = "paint-it-black";
      		button.className = "hide-toggle";
      		button.appendChild(text);
      		text.innerHTML = "ON";
      
      		var led = 0;
          wrapper.appendChild(button);
      		wrapper.appendChild(overlay);$(button).on("click", function(){
      			if(hidden){
      				$(overlay).fadeIn(1000);
      				$(button).fadeTo(1000, 0.3);
      				$(text).html('OFF');
      				hidden = false;  
      				serialport.write('0');
      			}else{
      				$(overlay).fadeOut(1000);
      				$(button).fadeTo(1000, 1);  
      				$(text).html('ON');
      				hidden = true;
      				serialport.write('1');
      			}
      		});
      		return wrapper;
      	}
      });
      

      this is module

      I want to send ‘1’, ‘0’ to Arduino by pressing the button

      Now the node_helper is communicating in setInterval

      but, can not use serialport.write in a module

      How do I use the serialport in the module?

      Or, how do I create a button event in the node_helper?

      I am a very beginner. Please let me know. :disappointed_but_relieved_face:

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

        @nhpunch u cannot talk to hardware in module, you do that in node_helper.

        if you split the mirror into two parts server and client… node_helper runs on the server,
        module runs in the client browser…(even in the same machine)

        here is a package u can install to enable code to talk to serial port in node helper

        https://www.npmjs.com/package/serialport
        

        button would be in the module. you can use an html button, or more advanced div and span
        then when u get the button action in the module, you sendSocketNotification() a message to the node_helper… then node_helper then talks serial port to your arduino.

        Sam

        Create a working config
        How to add modules

        N 1 Reply Last reply Reply Quote 0
        • N
          nhpunch @sdetweil last edited by

          @sdetweil

          Thank you very much for your reply.

          You said that hardware and modules did not communicate, but communication is possible.

            serialport.open(function () {
                  console.log('connect...');
                  serialport.on('data', function(data) { // 아두이노로부터 전달된 데이터
                    console.log('data received: ' + data);
                  });
          
                  setInterval( function() { // 2초마다 아두이노에게 문자열을 전송하는 예
                    led = !led;
                    serialport.write(led==true ? "1" : "0", function(err, result){
                      if(err){
                       console.log(err);
                      }
                    });
                  }, 5000);
                });
          
          

          In this code, it is possible to send a string to Arduino

          What I’m wondering is how to do sendSocketNotification ().

          I referenced https://github.com/MichMich/MagicMirror/tree/master/modules but did not understand

          Please let me know how to send it. Then I will be very thankful🙏🏻

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

            @nhpunch there are two parts of a MagicMirror module

            1. node_helper, runs on server, can use require(…some other library…)
            2. module_name.js, runs in browser, manages data presented on screen, cannot use require(…)

            so, the two parts can talk to each other by sending socket messages, using the supplied function
            sendSocketNotification(some_id_string, some_data_packet)

            the receiver of the message gets called at the function socketNotificationReceived(some_id_string, some_data_packet)

            get my sample module that has both parts, and uses timer,

            https://github.com/sdetweil/SampleModule
            

            also see the developers doc here

            https://github.com/MichMich/MagicMirror/tree/master/modules
            

            my sample implements all the functions so you can see them…
            not all are needed… so u can comment out the ones u don’t need to use

            config for my sample, to add to config.js is

              {
                module: "SampleModule",
                position: "center",
                config: {
                  message: "this is a test from config entry"
                }
              },
            

            Sam

            Create a working config
            How to add modules

            N 1 Reply Last reply Reply Quote 0
            • N
              nhpunch @sdetweil last edited by

              @sdetweil

              I was really grateful and ran the sample code.

              But I do not know what to send as a module to do what I want.

              Can you help me with my module and node_helper?

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

                @nhpunch sorry, i don’t understand

                Sam

                Create a working config
                How to add modules

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

                  @sdetweil you make up your own messages…

                  so, you have a push button on the screen (done by module_name,js)… when push button,
                  send button name and 1 to node helper… when it gets 1, it uses serial port to send to arduino.

                  when u let up on button , you send 0…

                  write out what you WANT the system to do… (design)

                  then implement THAT design

                  Sam

                  Create a working config
                  How to add modules

                  N 1 Reply Last reply Reply Quote 0
                  • N
                    nhpunch @sdetweil last edited by

                    @sdetweil

                    I’m doing what you said, but I do not know how to send it to the node_helper when the button is pressed.

                    I’m so sorry.

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

                      @nhpunch this.sendSocketNotification(…,…)

                      from the doc

                      this.sendSocketNotification(notification, payload)

                      notification String - The notification identifier.
                      payload AnyType - Optional. A notification payload.

                      If you want to send a notification to the node_helper, use the sendSocketNotification(notification, payload). Only the node_helper of this module will receive the socket notification.

                      Example:

                      this.sendSocketNotification('SET_CONFIG', this.config);
                      

                      you’ll see in the sample that this is used twice… once by the module_name.js to send the config over to the node_helper and once by the node_helper to send a new text string to the module_name.js to display

                      its also used in your module, from the first post above

                        start: function () {
                          Log.info("Starting module: " + this.name);
                          this.sendSocketNotification('CONFIG', this.config)
                        },
                      

                      Sam

                      Create a working config
                      How to add modules

                      1 Reply Last reply Reply Quote 0
                      • N
                        nhpunch last edited by

                        @sdetweil

                        I did my best, but I did not succeed.

                        I’m a real idiot.

                        Can you take a look at my code?

                        S 1 Reply Last reply Reply Quote 0
                        • 1
                        • 2
                        • 3
                        • 1 / 3
                        • First post
                          Last post
                        Enjoying MagicMirror? Please consider a donation!
                        MagicMirror created by Michael Teeuw.
                        Forum managed by Paul-Vincent Roll and Rodrigo Ramírez Norambuena.
                        This forum is using NodeBB as its core | Contributors
                        Contact | Privacy Policy