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.

    Head first developing MM module for extreme beginners

    Scheduled Pinned Locked Moved Development
    27 Posts 9 Posters 22.1k Views 12 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.
    • ? Offline
      A Former User
      last edited by

      I cant get the text to appear when I run it, I made the Test.js file in the MagicMirror modules folder and copied in what was posted and put the config in the config.js file but when I run it the screens all black, here’s what happens when I try to run it

      pi@raspberrypi:~/MagicMirror/modules $ cd ~/MagicMirror
      pi@raspberrypi:~/MagicMirror $ npm start dev

      magicmirror@2.8.0 start /home/pi/MagicMirror
      sh run-start.sh “dev”

      Starting MagicMirror: v2.8.0
      Loading config …
      Loading module helpers …
      No helper found for module: MMM-Test.
      All module helpers loaded.
      Starting server on port 8080 …
      Server started …
      Sockets connected & modules started …
      Launching application.
      Shutting down server…
      pi@raspberrypi:~/MagicMirror $

      any help would be greatly appreciated I dont see what I’m missing

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

        It is because there is an error (at least I think so - I am new too) and no instructions on where to put the function.

        1. change the Module.register(“MMM-Timetable”) to Module.register(“MMM-Test”)

        2. The article does not tell you where to put the getDom function when it is first introduced. Replace the getDom: function() {}. with the code shown. In other words, don’t just add it to the file. This article would have benefited from a final section that gave the entire code.

        I think the original author at least expected us to be very familiar with Node.js (fair enough), but alas, I am not so it took a bit of work to figure it out. :-)

        Here it is, for the first part:

        Module.register(“MMM-Test”, {
        defaults: {},
        start: function () {},

        getDom: function() {
        var element = document.createElement(“div”)
        element.className = “myContent”
        element.innerHTML = “Hello, World!”
        return element
        },
        notificationReceived: function() {},
        socketNotificationReceived: function() {},
        })
        _

        cowboysdudeC 1 Reply Last reply Reply Quote 0
        • N Offline
          nrayever
          last edited by

          Shame, code is really messed up. Not helpful to use it as a guide to start developing modules.

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

            @nrayever see my sample module,
            https://github.com/sdetweil/SampleModule

            and follow the module developers doc

            Sam

            How to add modules

            learning how to use browser developers window for css changes

            N 1 Reply Last reply Reply Quote 2
            • N Offline
              nrayever @sdetweil
              last edited by nrayever

              @sdetweil will try it. I don’t have JS experience that is why I have found it difficult to start.

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

                @nrayever sorry cant help develop module if u dont know programming and dont want to learn

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                N 1 Reply Last reply Reply Quote 1
                • cowboysdudeC Offline
                  cowboysdude Module Developer @StuGrunt
                  last edited by

                  @StuGrunt said in Head first developing MM module for extreme beginners:

                  It is because there is an error (at least I think so - I am new too) and no instructions on where to put the function.

                  1. change the Module.register(“MMM-Timetable”) to Module.register(“MMM-Test”)

                  2. The article does not tell you where to put the getDom function when it is first introduced. Replace the getDom: function() {}. with the code shown. In other words, don’t just add it to the file. This article would have benefited from a final section that gave the entire code.

                  I think the original author at least expected us to be very familiar with Node.js (fair enough), but alas, I am not so it took a bit of work to figure it out. :-)

                  Here it is, for the first part:

                  Module.register(“MMM-Test”, {
                  defaults: {},
                  start: function () {},

                  getDom: function() {
                  var element = document.createElement(“div”)
                  element.className = “myContent”
                  element.innerHTML = “Hello, World!”
                  return element
                  },
                  notificationReceived: function() {},
                  socketNotificationReceived: function() {},
                  })
                  _

                  Both of those functions go outside the getDom function pretty much anywhere you want to put them.

                  The socketNotificationReceived function [example below, can be used in either node_helper OR your main.js file. The example below is in my node_helper] :

                  socketNotificationReceived: function(notification, payload) {
                  		if (notification === 'CONFIG') {
                              this.config = payload; 
                          }
                          if (notification === 'GET_CURRENT') {
                              this.getCurrent(payload);
                          }
                          if (notification === 'GET_FORECAST') {
                              if (this.forecast.timestamp === this.getDate() && this.forecast.data !== null) {
                                  this.sendSocketNotification('FORECAST_RESULT', this.forecast.data); 
                                  console.log("Using data we already have");
                              } else { 
                                  this.getForecast();
                  				console.log("Getting new data");
                              }
                          }
                  		
                      }
                  

                  Here is the corresponding one in the main.js

                  socketNotificationReceived: function(notification, payload) {
                          if (notification === "CURRENT_RESULT") {
                              this.processCurrent(payload);
                          }
                          if (notification === "FORECAST_RESULT") {
                              this.processForecasts(payload);
                          }
                  		this.updateDom(this.config.initialLoadDelay);
                      },
                  

                  You can use notificationReceived to receive info from other modules like this:

                  Here are examples of that:

                  notificationReceived: function (notification, payload){ 
                          if (notification === 'CURRENT_RESULT') {
                  			this.processCurrent(payload); 
                          }
                  	},
                  
                  this.sendNotification('CURRENT_RESULT', payload);
                  

                  This is how I send and receive my ‘payload’ from one module to another.
                  The first example is getting my ‘CURRENT_RESULT’ [getting info for a Forecast module from the Current weather module] from the bottom example that is
                  sending out ‘CURRENT_RESULT’…

                  The bottom example will ‘broadcast’ and in reality ANY module can get the data it’s sending out.

                  Hope this helps. It’s a really simple process.

                  1 Reply Last reply Reply Quote 1
                  • S Offline
                    Schmaniel
                    last edited by Schmaniel

                    How can I test the getDom() html output?
                    I don’t want to restart MM every time when I change something just to look if it worked.

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

                      @Schmaniel ctrl-r to reload the screen

                      Sam

                      How to add modules

                      learning how to use browser developers window for css changes

                      1 Reply Last reply Reply Quote 2
                      • N Offline
                        nrayever @sdetweil
                        last edited by

                        @sdetweil … ok.

                        D 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 Sam, technical setup by Karsten.
                        This forum is using NodeBB as its core | Contributors
                        Contact | Privacy Policy