• 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.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 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
                    • 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
                      • 1
                      • 2
                      • 1 / 2
                      1 / 2
                      • First post
                        6/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