MagicMirror² v2.5.0 is available! For more information about this release, check out this topic.

include npm module like firebase module into our own MM module



  • How to include npm module like firebase module into our own MM module?
    i tried include module using const firebase = require(‘firebase’). But keep getting error


  • Module Developer

    @kevung
    You need node_helper.js to include node modules to your MM module. MM module itself is front-end javascript thus it cannot access your system resources. node_helper.js can help your job for handling system (e.g. File I/O, using node_modules, execution another process, etc.)



  • @sean said in include npm module like firebase module into our own MM module:

    i tried node helper. below code is working. But once i added const firebase = require (‘firebase’) on top then error appeared.

    var NodeHelper = require("node_helper")
    
    module.exports = NodeHelper.create({
      start: function() {
        this.countDown = 10000000
      },
      socketNotificationReceived: function(notification, payload) {
        switch(notification) {
          case "DO_YOUR_JOB":
            this.sendSocketNotification("I_DID", (this.countDown - payload))
            break
        }
      },
    })
    

    The error is

    WARNING! Could not load config file. Starting with default configuration. Error found: Error: Failed to load gRPC binary module because it was not installed for the current system
    Expected directory: electron-v2.0-linux-arm-glibc
    Found: [node-v59-linux-arm-glibc]
    This problem can often be fixed by running "npm rebuild" on the current system
    Original error: Cannot find module '/home/pi/MagicMirror/modules/MMM-hellotsuhan/node_modules/grpc/src/node/extension_binary/electron-v2.0-linux-arm-glibc/grpc_node.node'
    

    I tried npm rebuild. but still not working


  • Module Developer

    @kevung
    I know what it is.
    MagicMirror standalone(kiosk) mode is running on Electron - frontend GUI framework. Unfortunately, it has its own node.js and chrome engine. Your current node module might not be compatible with Electron version. So you should re-build node modules for matching proper Electron.
    Normally electron-rebuild will be a help.

    In SERVERONLY mode, with Chrome browser as frontend, you might not get this error.


  • Module Developer

    @kevung

    cd ~/MagicMirror/modules/MMM-hellotsuhan
    npm install --save-dev electron-rebuild
    ./node_modules/.bin/electron-rebuild
    

    This could be the solution. or not. 😃



  • Thanks bro!😄 this work for me!! after did below code then success to run the code already.

    cd ~/MagicMirror/modules/MMM-hellotsuhan
    npm install --save-dev electron-rebuild
    ./node_modules/.bin/electron-rebuild
    

    Now my node_helper.js is :

    const firebase = require ('firebase')
    var NodeHelper = require("node_helper")
    let countdown;
    var ref;
    var config = {
        apiKey: "AIzaSyAxi_kFKM3lxMZ9gnBMhwoPa7pxKX_e1BI",
        authDomain: "customerservice-ee487.firebaseapp.com",
        databaseURL: "https://customerservice-ee487.firebaseio.com",
        projectId: "customerservice-ee487",
        storageBucket: "customerservice-ee487.appspot.com",
        messagingSenderId: "466622230094"
    };
    if (!firebase.apps.length) {
        firebase.initializeApp(config);
    }
    module.exports = NodeHelper.create({
        start: function() {
           ref = firebase.app().database().ref().child('countdown');
           r ef.once('value').then(function (snap) {
             console.log('snap.val()', snap.val());
             countdown=snap.val();
           });
      },
      socketNotificationReceived: function(notification, payload) { 
          switch(notification) {
             case "DO_YOUR_JOB":   
               ref.once('value').then(function (snap) {
                  console.log('snap.val()', snap.val());
    	      countdown=snap.val();
    	  });
              this.sendSocketNotification("I_DID", countdown - payload);      
    	  break
          }
      }, 	
    })
    

    My MMM-hellotsuhan.js

    Module.register("MMM-hellotsuhan",{
        start: function (){
            this.count = 0
        },
        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: function(notification, payload, sender) { 
            switch(notification) {
    	    case "DOM_OBJECTS_CREATED":
    	        var timer = setInterval(()=>{
    	            this.sendSocketNotification("DO_YOUR_JOB", this.count)
    	            this.count++
    	        }, 1000)
    	        break
    	    }
        },
        socketNotificationReceived: function(notification, payload) {
            switch(notification) {
    	    case "I_DID":
    	        var elem = document.getElementById("COUNT")
    	        elem.innerHTML = "Count:" + payload
    	        break
    	   }
            },
    });	
    


  • btw Thanks for the great tutorial for developing module from @Sean !!
    Head first developing MM module for extreme beginners


  • Module Developer

    @kevung
    I think you’d better define config in module js instead node_helper.js to be able to be redefined by user in config.js. You can move config values with sendSocketNotification.



  • @sean ok will try it out later 🙂