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.8k 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.
    • S Away
      sdetweil @telmini
      last edited by

      @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
      • telminiT Offline
        telmini
        last edited by

        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
        • telminiT Offline
          telmini
          last edited by

          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 Reply Quote 0
          • S Away
            sdetweil @telmini
            last edited by

            @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
            • telminiT Offline
              telmini
              last edited by

              @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 Reply Quote 0
              • S Away
                sdetweil @telmini
                last edited by

                @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
                • telminiT Offline
                  telmini
                  last edited by

                  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 Reply Quote 0
                  • S Away
                    sdetweil @telmini
                    last edited by

                    @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 Away
                      sdetweil @telmini
                      last edited by

                      @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
                      • telminiT Offline
                        telmini
                        last edited by

                        It could probably be that the XmlHttpRequest is async and the page is already loaded when the request has finished executing.

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