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

Config modules from external file (JSON)

Scheduled Pinned Locked Moved Troubleshooting
config modulesjsonfile
14 Posts 3 Posters 3.0k Views 3 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.
  • T Offline
    telmini
    last edited by Jan 25, 2021, 11:37 PM

    Hi.

    I want to define my modules [] in a separate JSON file and then have config.js read from that file and populate it.

    Is it possible? something like this

    var config = 
    {
      address: "0.0.0.0",
      electronOptions: {},
      ipWhitelist: [],
      language: "pt",
      modules: loadJSON("configuration.json"),
      paths: {
        modules: "modules",
        vendor: "vendor"
      },
      useHttps: false,
      httpsPrivateKey: "",
      httpsCertificate: ""
    };
    
    function loadJSON(filePath){
       try {
            var fs = require('fs');
            var path = require('path');
            var filename = path.resolve(__dirname, filePath);
            var jsonFile = JSON.parse(fs.readFileSync(filename));
            return jsonFile;
          } catch (e) {
             console.error(e);
              return [];
          }  
    }
    
    

    Thank you

    S 1 Reply Last reply Jan 26, 2021, 12:32 AM Reply Quote 0
    • S Offline
      sdetweil @telmini
      last edited by Jan 26, 2021, 12:32 AM

      @telmini the browser side also reads config.js but cannot use file (fs.) operations due to browser security

      if u can read files u can read ANY files

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      1 Reply Last reply Reply Quote 0
      • T Offline
        telmini
        last edited by Jan 27, 2021, 5:00 PM

        So, I tried this, as seen on another example in this thread

        config.js:

        var config =
        {
          address: "0.0.0.0",
          electronOptions: {},
          ipWhitelist: [],
          language: "pt",
          logLevel: ["LOG", "WARN", "ERROR", "DEBUG"],
          modules: loadJSON("./modules.json"),
          paths: {
            modules: "modules",
            vendor: "vendor"
          },
          useHttps: false,
          httpsPrivateKey: "",
          httpsCertificate: ""
        };
        
        
        function loadJSON(filePath){
          if (typeof module !== "undefined") {
                return require(filePath);
            } else {
            var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
            var xhr = new XMLHttpRequest();
        		xhr.overrideMimeType("application/json");
        		xhr.open("GET", filePath, true);
        		xhr.onreadystatechange = function () {
        			if (xhr.readyState === 4 && xhr.status === 200) {
        				// needs error handler try/catch at least
        				let fileinfo = null;
        				try {
        					fileinfo = JSON.parse(xhr.responseText);
        				} catch (exception) {
        					// nothing here, but don't die
        					Log.error(" loading json file =" + file + " failed");
        				}
        				return fileinfo;
        			}
        		};
        		xhr.send(null);
          }
        }
        

        modules.json

        [{
              "module": "currentweather",
              "position": "top_left",
              "config": {
                "location": "Lisboa",
                "locationID": "2267057",
                "appid": "314d9c29c18fd11e79034c56e1348f4c",
                "iconTable": {
                  "01d": "wi-day-sunny",
                  "02d": "wi-day-cloudy",
                  "03d": "wi-cloudy",
                  "04d": "wi-cloudy-windy",
                  "09d": "wi-showers",
                  "10d": "wi-rain",
                  "11d": "wi-thunderstorm",
                  "13d": "wi-snow",
                  "50d": "wi-fog",
                  "01n": "wi-night-clear",
                  "02n": "wi-night-cloudy",
                  "03n": "wi-night-cloudy",
                  "04n": "wi-night-cloudy",
                  "09n": "wi-night-showers",
                  "10n": "wi-night-rain",
                  "11n": "wi-night-thunderstorm",
                  "13n": "wi-night-snow",
                  "50n": "wi-night-alt-cloudy-windy"
                }
              }
          }]
        

        And this is the output:
        ![0_1611766820659_output.png](Uploading 100%)

        output

        1 Reply Last reply Reply Quote 0
        • T Offline
          telmini
          last edited by Jan 27, 2021, 5:03 PM

          So, it can detect that the json file has the “currentweather” module, but then fails to load it properly.

          Any help?

          S 1 Reply Last reply Jan 27, 2021, 5:06 PM Reply Quote 0
          • S Offline
            sdetweil @telmini
            last edited by Jan 27, 2021, 5:06 PM

            @telmini u have a bad path

            /js/ /modules
            

            note modules is off the mm root just like js

            /modules/modulename
            /js/mm_core_filename.js
            

            Sam

            How to add modules

            learning how to use browser developers window for css changes

            1 Reply Last reply Reply Quote 0
            • T Offline
              telmini
              last edited by Jan 27, 2021, 5:19 PM

              @telmini said in Config modules from external file (JSON):

              loadJSON(“./modules.json”)

              But that bug/crash is inside Magic Mirror code. Or is related to the path defined here “loadJSON(”./modules.json")"?

              S 1 Reply Last reply Jan 27, 2021, 5:21 PM Reply Quote 0
              • S Offline
                sdetweil @telmini
                last edited by Jan 27, 2021, 5:21 PM

                @telmini i do not know, screen is hard to read. got enoent file not found. path is wrong.

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                1 Reply Last reply Reply Quote 0
                • T Offline
                  telmini
                  last edited by Jan 27, 2021, 5:26 PM

                  Sorry, this is the output.

                  > magicmirror@2.11.0 start /home/pi/MagicMirror
                  > DISPLAY="${DISPLAY:=:0}" ./node_modules/.bin/electron js/electron.js
                  
                  [2021-01-27 16:55:09.858] [LOG]    Starting MagicMirror: v2.11.0
                  [2021-01-27 16:55:09.878] [LOG]    Loading config ...
                  [2021-01-27 16:55:09.892] [LOG]    Loading module helpers ...
                  [2021-01-27 16:55:09.896] [LOG]    Error: ENOENT: no such file or directory, access '/home/pi/MagicMirror/js/../modules/default/currentweather/node_helper.js'
                      at Object.accessSync (fs.js:202:3)
                      at Object.fs.accessSync (electron/js2c/asar.js:491:38)
                      at Object.fs.accessSync (electron/js2c/asar.js:491:38)
                      at loadModule (/home/pi/MagicMirror/js/app.js:124:7)
                      at loadNextModule (/home/pi/MagicMirror/js/app.js:166:5)
                      at loadModules (/home/pi/MagicMirror/js/app.js:177:3)
                      at /home/pi/MagicMirror/js/app.js:223:4
                      at loadConfig (/home/pi/MagicMirror/js/app.js:72:4)
                      at App.start (/home/pi/MagicMirror/js/app.js:211:3)
                      at Object.<anonymous> (/home/pi/MagicMirror/js/electron.js:115:7) {
                    errno: -2,
                    syscall: 'access',
                    code: 'ENOENT',
                    path: '/home/pi/MagicMirror/js/../modules/default/currentweather/node_helper.js'
                  }
                  [2021-01-27 16:55:09.924] [LOG]    No helper found for module: currentweather.
                  [2021-01-27 16:55:09.926] [LOG]    All module helpers loaded.
                  [2021-01-27 16:55:10.246] [LOG]    Starting server on port 8080 ... 
                  [2021-01-27 16:55:10.256] [INFO]   You're using a full whitelist configuration to allow for all IPs
                  [2021-01-27 16:55:10.268] [LOG]    Server started ...
                  [2021-01-27 16:55:10.268] [LOG]    Sockets connected & modules started ...
                  [2021-01-27 16:55:10.428] [LOG]    Launching application.
                  ^[$
                  
                  

                  I don’t understand why it’s trying to go to this path

                  Error: ENOENT: no such file or directory, access’/home/pi/MagicMirror/js/…/modules/default/currentweather/node_helper.js’

                  S 2 Replies Last reply Jan 27, 2021, 5:32 PM Reply Quote 0
                  • S Offline
                    sdetweil @telmini
                    last edited by Jan 27, 2021, 5:32 PM

                    @telmini because its looking for the (optional) node_helper.js of a module.
                    this one, currentweather doesnt use one

                    Sam

                    How to add modules

                    learning how to use browser developers window for css changes

                    1 Reply Last reply Reply Quote 0
                    • S Offline
                      sdetweil @telmini
                      last edited by Jan 27, 2021, 5:33 PM

                      @telmini so the returncode is right but its not fatal in mm view.

                      Sam

                      How to add modules

                      learning how to use browser developers window for css changes

                      1 Reply Last reply Reply Quote 0
                      • 1
                      • 2
                      • 1 / 2
                      1 / 2
                      • First post
                        1/14
                        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