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.

    Timetable with (almost) static data

    Scheduled Pinned Locked Moved Requests
    16 Posts 5 Posters 8.1k Views 5 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.
    • D Offline
      doubleT Module Developer
      last edited by doubleT

      Node can execute a php – if a php.ini is in the PATH – with this in the node_helper.js :

      const runner = require("child_process");
      runner.exec("php " + proxy + " " + params, function(err, data, stderr) {
      //         ("php timetable.php parameter", function(err, data, stderr) {
          var content = data; // "Clean your room - now!"
          this.workWithTheData(content);
      });
      

      timetable.php :

      < ? php // remove spaces
      $params = explode(",", $argv[1]); // example, you can leave parameters out (see above)
      $content = "Clean your room – now!";
      echo $content;
      ?>
      

      Now that we know we can, let’s talk about if we should: I like it, I use it for a proxy to call APIs while ignoring CORS. BUT I don’t think it makes sense in this case! It’s like using a hammer to fix a loose screw.

      To show a static website in the iframe, HTML is enough. Do you really need server side scripts?

      If you want a csv, use this in the node_helper.js :

      const fs = require("fs"); // before module.exports = ...
      
      getTimeTable: function() {
          var rawdata = fs.readFileSync('modules/my-module/file.json'); // or txt or csv
          var timetable = JSON.parse(rawdata); // in this case
          this.sendSocketNotification("Response", timetable);
      }
      

      EDIT: I know that for users with basic HTML or even PHP knowledge, the iFrame solution is an easy win. Use runner or fs if you want to import data directly into your own module.

      N 1 Reply Last reply Reply Quote 2
      • N Offline
        ninjabreadman @doubleT
        last edited by ninjabreadman

        @doubleT Not exactly. More like making and keeping around a hammer for the occasional tiny nail. Locally loading an HTML file absent a server is more akin to hammering with the handle is a screwdriver. ;)

        Will the existing instance of Server in server.js not serve files in the /modules directory? Like an iframe of /modules/MMM-iframe/sched.html? If not, could you add a /static or similar folder to directories? As you say, seems overkill to (1) run an apache2 instance, but even to (2) create a separate webserver in Node, given that MM already runs one that can be used or modified.

        Apologies all, I’m posting from my phone on vacation, so am speaking before properly testing.

        Problem with config or JavaScript? Copy/paste it into JSHint.
        Check out the detailed walkthroughs on install, config, modules, etc.

        1 Reply Last reply Reply Quote 0
        • D Offline
          doubleT Module Developer
          last edited by

          Actually, I wasn’t really thinking about loading a page and displaying it (in an iFrame) but I rather looked at the questions of loading file contents and suggested the runner.exec child process because php was specifically mentioned (I don’t think PHP is necessary at all).

          If we’re talking about HTML, I’d agree with you (also without testing, though). But for PHP within Node.js: That won’t work, you’d have to have a PHP server running parallel to node and address it, etc. My suggestion (runner.exec child_process) doesn’t run a server but executes that one file with PHP and returns what it parsed.

          N 1 Reply Last reply Reply Quote 1
          • N Offline
            ninjabreadman @doubleT
            last edited by ninjabreadman

            @doubleT D’oh! I totally overlooked the PHP requirement in contemplating a revised approach. Given it’s already written, probably not worth porting the code to native js. ¯\_(ツ)_/¯

            @AxLed could however view the PHP file, save the generated HTML, and then serve the static file (until next semester, anyway!).

            Problem with config or JavaScript? Copy/paste it into JSHint.
            Check out the detailed walkthroughs on install, config, modules, etc.

            1 Reply Last reply Reply Quote 0
            • A Offline
              AxLed Module Developer
              last edited by

              @doubleT and ninjabreadman

              My request was to show a timetable, where i can change the datas in an .csv file.
              The only way i knew to realize this was via php. So thats the reason why i tried this via apache2 an php which worked (somehow).
              If i understood you right, there are to ways to solve my request:
              A. Show the .php page via node
              B. use the node_helper.js to open a .csv file and loop through the datas.

              If i am right, i dont know what do i need for Way A and Way B, as i dont know (right now) how to write a own module.

              I am looking forward hearing from you.

              Best regards

              Axled

              N 1 Reply Last reply Reply Quote 0
              • N Offline
                ninjabreadman @AxLed
                last edited by ninjabreadman

                @AxLed Honestly, I derailed the conversation with other ways it could be accomplished.

                If you have apache2 and php serving up your .csv file, you’ve accomplished what you need to in a way that can easily be updated in future. You already solved the requirement with option A. You could change how you generate the table from the CSV, but that’s a lot of work with no real benefit.

                If you want to post your CSV/HTML, we can maybe recommend ways to help style it, but you’ve already accomplished what you set out to do.

                Problem with config or JavaScript? Copy/paste it into JSHint.
                Check out the detailed walkthroughs on install, config, modules, etc.

                1 Reply Last reply Reply Quote 0
                • D Offline
                  doubleT Module Developer
                  last edited by

                  Or maybe I derailed it when I looked at the question of “how to get the csv” after the thread already went to the iframe solution? :D
                  @AxLed Did you get the php page shown via iframe module?

                  A. Show the .php page via node

                  A. will not be able to show the php page via node – if you mean my suggestion. It will just get all echo’d content from the php file into the js module. So in this case it’s an over-complicated way of receiving the csv file into a module.

                  B. use the node_helper.js to open a .csv file and loop through the datas.

                  The node_helper.js should send the whole package back to the module.js and there it should loop through the datas.

                  If you have the php knowledge to build a page that reads a csv and shows the content, it shouldn’t be too hard to get into the necessary js. To build a module for the MM, the Readme in the module folder is the first step to go to.

                  A 1 Reply Last reply Reply Quote 0
                  • A Offline
                    AxLed Module Developer @doubleT
                    last edited by

                    @doubleT said in Timetable with (almost) static data:

                    @AxLed Did you get the php page shown via iframe module?

                    Yes i did, see my screenshot:
                    0_1517083100346_timetable.JPG
                    Timetable and datas below is a .php Website, which runs local on RPI and is integrated in MM via MMM-iFrame

                    Axled

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      doubleT Module Developer
                      last edited by

                      Ah, true. If that works for you, I’d leave it at that. But then again, it’s always good to learn something new.
                      Do you want to try it yourself and maybe ask for help when you get stuck? Or maybe this would be an excellent case for a tutorial, I could try to do something like that.

                      1 Reply Last reply Reply Quote 0
                      • P Offline
                        pinsdorf Module Developer
                        last edited by pinsdorf

                        @AxLed, I also wanted to show today’s class schedules on my magic mirror. Those weekly schedules, e.g. at school or sports clubs, are very reliable and update only with a low frequency. So it is no big deal to change the config every now and then.

                        I’ve created a module MMM-WeeklySchedule to solve this for me. Feel free to give it a try. Feedback is most welcome.

                        Cheers.

                        alt text

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