• 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.

How to use the 'node_helper', 'serialport'

Scheduled Pinned Locked Moved Development
23 Posts 2 Posters 6.7k 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 @nhpunch
    last edited by Jun 10, 2019, 12:49 PM

    @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

    How to add modules

    learning how to use browser developers window for css changes

    N 1 Reply Last reply Jun 10, 2019, 1:47 PM Reply Quote 0
    • N Offline
      nhpunch @sdetweil
      last edited by Jun 10, 2019, 1:47 PM

      @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 Jun 10, 2019, 1:50 PM Reply Quote 0
      • S Offline
        sdetweil @nhpunch
        last edited by Jun 10, 2019, 1:50 PM

        @nhpunch sorry, i don’t understand

        Sam

        How to add modules

        learning how to use browser developers window for css changes

        S 1 Reply Last reply Jun 10, 2019, 1:52 PM Reply Quote 0
        • S Offline
          sdetweil @sdetweil
          last edited by sdetweil Jun 10, 2019, 1:53 PM Jun 10, 2019, 1:52 PM

          @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

          How to add modules

          learning how to use browser developers window for css changes

          N 1 Reply Last reply Jun 10, 2019, 2:07 PM Reply Quote 0
          • N Offline
            nhpunch @sdetweil
            last edited by Jun 10, 2019, 2:07 PM

            @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 Jun 10, 2019, 3:55 PM Reply Quote 0
            • S Offline
              sdetweil @nhpunch
              last edited by sdetweil Jun 10, 2019, 4:24 PM Jun 10, 2019, 3:55 PM

              @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

              How to add modules

              learning how to use browser developers window for css changes

              1 Reply Last reply Reply Quote 0
              • N Offline
                nhpunch
                last edited by Jun 10, 2019, 5:46 PM

                @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 Jun 10, 2019, 5:49 PM Reply Quote 0
                • S Offline
                  sdetweil @nhpunch
                  last edited by Jun 10, 2019, 5:49 PM

                  @nhpunch sure. Make a GitHub repo, and let me know

                  Sam

                  How to add modules

                  learning how to use browser developers window for css changes

                  1 Reply Last reply Reply Quote 0
                  • N Offline
                    nhpunch
                    last edited by nhpunch Jun 10, 2019, 5:56 PM Jun 10, 2019, 5:55 PM

                    https://github.com/nhpunch/sohard
                    

                    I created ‘is_Pushed’ and tried to work by repeating false, true when the button was pressed

                    S 1 Reply Last reply Jun 10, 2019, 6:43 PM Reply Quote 0
                    • S Offline
                      sdetweil @nhpunch
                      last edited by sdetweil Jun 10, 2019, 6:44 PM Jun 10, 2019, 6:43 PM

                      @nhpunch said in How to use the 'node_helper', 'serialport':

                      https://github.com/nhpunch/sohard

                      Ok, the fundamental problem is what happens in getDom()…

                      until getDom() returns this modules contribution to the single web page… that content is NOT IN the DOM… It is just in memory in your module.

                      so the jquery $(button) will not work. ($ means document.) and the content is NOT IN the document… (yet)

                      SO, you could change to use the non jquery

                      button.addEventListener('click', ()=> {
                         	
                         	//$(button).on("click", function(){
                         		if(self.hidden){
                         		//	$(overlay).fadeIn(1000);
                         		//	$(button).fadeTo(1000, 0.3);
                         		//	$(text).html('OFF');
                                                     Log.log("button pushed 'on' ")
                         			self.hidden = false;  
                         			self._isPushed = false;
                         		}else{
                         		//	$(overlay).fadeOut(1000);
                         		//	$(button).fadeTo(1000, 1);  
                         		//	$(text).html('ON');
                                                     Log.log("button pushed 'off' ")
                         			self.hidden = true;
                         			self._isPushed = true;
                         		}
                         	});
                         	return wrapper;
                      

                      but… all the data elements button, overlay and text will be long gone by the time the button is pushed.
                      so you will have to redesign finding them again (document.getElementByID()… or something, a different jquery selector.)

                      OR

                      you can push the jquery code off into a timeout handler (wait a second or 2)…
                      but you will still have to redesign how to find the button… as its data element on the stack of getDom() will be long gone.

                      think of getDom() as a person taking notes… they write it down on their notepad.
                      then LATER they edit a big document and add their text…

                      until they complete that task, you can search thru the big document all u want, the text will NOT be there…

                      when I used the sample above, the button responded…

                      u know you can open the developers window (npm start dev) and select the console window,
                      and messages from the module_name.js will show there

                      message from the node_helper will appear in the terminal window where u issued npm start dev & (note the & at the end to allow the prompt to come back)…

                      Sam

                      How to add modules

                      learning how to use browser developers window for css changes

                      N 1 Reply Last reply Jun 10, 2019, 7:22 PM Reply Quote 0
                      • 1
                      • 2
                      • 3
                      • 1 / 3
                      1 / 3
                      • First post
                        8/23
                        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