Read the statement by Michael Teeuw here.
include npm module like firebase module into our own MM module
-
@kevung
You neednode_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
-
@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.
Normallyelectron-rebuild
will be a help.In SERVERONLY mode, with Chrome browser as frontend, you might not get this error.
-
cd ~/MagicMirror/modules/MMM-hellotsuhan npm install --save-dev electron-rebuild ./node_modules/.bin/electron-rebuild
This could be the solution. or not. :D
-
Thanks bro!:smiling_face_with_open_mouth_smiling_eyes: 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 -
@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 =)