• 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 4.2k 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 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
                  • T Offline
                    telmini
                    last edited by Jan 27, 2021, 6:59 PM

                    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
                    • T Offline
                      tatianobusatto
                      last edited by Jul 5, 2022, 5:28 AM

                      Hi, I’m trying something similar. Have you managed to solve your issue using this fuction loadJSON? If not, did you find any solution to update config.js “dinamicaly”?

                      S 1 Reply Last reply Jul 5, 2022, 10:14 AM 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