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.

    Python in to the magic mirror.

    Scheduled Pinned Locked Moved Solved Troubleshooting
    43 Posts 4 Posters 19.8k Views 4 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.
    • ? Offline
      A Former User @paulvanderheijden90
      last edited by A Former User

      @paulvanderheijden90
      Your node_helper.js is not correct.

      See other’s module as reference.

      Or you can get a hint of executing python script in node_helper.js
      https://github.com/eouia/MMM-GroveGestures/blob/master/node_helper.js
      (I’m using PythonShell instead child_process in that module.)

      P 1 Reply Last reply Reply Quote 0
      • S Offline
        sdetweil @paulvanderheijden90
        last edited by sdetweil

        @paulvanderheijden90 start the mirror in developer mode

        npm start dev
        

        and look at the console tab for errors (red text)

        now in your node_helper spawn data.on() routine, you need to add a sendSocketNotification(:I_DID", some_data) to get the info to the Module.js socketNotificationReceived() method so you can do something to display it (call updateDom(), which will schedule a call to getDom()

        Sam

        How to add modules

        learning how to use browser developers window for css changes

        1 Reply Last reply Reply Quote 0
        • P Offline
          paulvanderheijden90 @Guest
          last edited by

          @sean said in Python in to the magic mirror.:

          @paulvanderheijden90
          Your node_helper.js is not correct.

          Hello Sean,
          Why is it wrong? I copy it from your post earlier.
          I started in Dev mode. I noticed that wenn I add the Node_helper.js module in the MMM-P2000 map the Magic mirror crashes and give only black screen.
          I studyed the Node_helper file. I see in the first line you define the function and in the second line you define the settings for that function. So that’s clear to me. In the next lines you define the stdout of the process and copy it in de Console Log. so that’s also clear for me. So I down’t know why is it not working and crashes.

          I made in the same map ( home/pi/src/ ) a file called test.py Here I defined a string and I write the string to the stdout so as you say before the python project don’t need a separate call. So that should work as well.

          Node_helper.js:
          0_1548328532225_Schermafbeelding 2019-01-24 om 12.08.18.png
          Python project:
          0_1548328572185_Schermafbeelding 2019-01-24 om 12.10.09.png

          I also getting in to the module setup so I changed the MMM-P2000.js and I think it is oke like this.
          First the start function restart every 1000mS the dom function.
          then the getdom Function is now showing the test “Hello World” in the module
          so that should be oke aswell. I

          How do I need to link the socked notification message to the Module string?
          0_1548329124803_Schermafbeelding 2019-01-24 om 12.25.08.png

          S 1 Reply Last reply Reply Quote 0
          • S Offline
            sdetweil @paulvanderheijden90
            last edited by sdetweil

            @paulvanderheijden90 node helper needs to look like this
            see the doc here https://github.com/MichMich/MagicMirror/tree/master/modules#the-node-helper-node_helperjs

            const NodeHelper = require('node_helper');
            
            // any other imports (javascript require)
            
            module.exports = NodeHelper.create({
               // local variables 
                self: 0,
            		pins_loaded:[],
            		pin_index:0,
            		results:{},
            		using_chartjs: true,
            		suspended: false,
            		timer:null,
            
                start: function() {
                    console.log("Starting module: " + this.name);
                    self = this;
                },
             socketNotificationReceived: function(notification, payload) {
                    // usually the module send the config data down to the node_helper
                    if (notification === 'CONFIG') {
                        this.config = payload;
                    }
            
            // any other functions, u need, note, after each function is a ',' (comma)
            }
            });
            

            Sam

            How to add modules

            learning how to use browser developers window for css changes

            1 Reply Last reply Reply Quote 1
            • ? Offline
              A Former User
              last edited by

              node_helper.js is helper script of your module to use various features of NodeJS. your main module script(MMM-P2000.js) is just front-end javascript on Browser(Electron/Chromium). So when you need more features which are not supported on browser level, use node_helper.js

              MMM-P2000.js and node_helper.js can communicate with each other by socketNotification.

              you need to make proper node_helper.js which could be used in MM framework.

              Usual format is

              var NodeHelper = require("node_helper")
              
              module.exports = NodeHelper.create({
                start: function() {
                  // ...
                },
                socketNotificationReceived: function(notification, payload) {
                  // ...
                },
              })
              

              There are two entry points in node_helper.js from your main module .

              start will be called when MM is executed and your module is loaded. Usually you can prepare things here.

              socektNotificationReceived will be called when your main module send socketNotification with sendSocketNotification.

              With this, you can transfer config values, specific datas or order to do something.

              Your current MMM-P2000.js is not so good to use. I recommend you continue to read my https://forum.magicmirror.builders/topic/8534/head-first-developing-mm-module-for-extreme-beginners more.

              1 Reply Last reply Reply Quote 1
              • P Offline
                paulvanderheijden90
                last edited by

                I changed the Node_helper.js:
                0_1548334181951_Schermafbeelding 2019-01-24 om 13.47.25.png

                But the minute I run the Start dev I get white screens. so im not able to debug anything.
                Can I get a hand ?

                0_1548334276267_Schermafbeelding 2019-01-24 om 13.51.05.png

                ? 1 Reply Last reply Reply Quote 0
                • S Offline
                  sdetweil
                  last edited by

                  the spawn stuff needs to be INSIDE the node helper…

                  probably called in Start or in the socketNotificationReceived, when the config is sent down from the module…

                  Sam

                  How to add modules

                  learning how to use browser developers window for css changes

                  P 1 Reply Last reply Reply Quote 0
                  • P Offline
                    paulvanderheijden90 @sdetweil
                    last edited by

                    @sdetweil Thank you for you’re information.
                    I changed it like you said but unfortunly still get the With screens.

                    0_1548335197627_Schermafbeelding 2019-01-24 om 14.05.28.png

                    1 Reply Last reply Reply Quote 0
                    • ? Offline
                      A Former User @paulvanderheijden90
                      last edited by A Former User

                      @paulvanderheijden90
                      If possible, Instead image, post code itself.
                      Anyway, You’d better to read docs more carefully.

                      MMM-P2000.js

                      /// MMM-P2000.js
                      
                      Module.register("MMM-P2000", {
                        getDom: function() {
                          var e = document.createElement("div")
                          e.id = "DISPLAY"
                          return e
                        },
                        notificationReceived: function(notification, payload, sender) {
                          switch(notification) {
                            case "DOM_OBJECTS_CREATED":
                              var timer = setInterval(()=>{
                                this.sendSocketNotification("GIVE_ME_DATA")
                              }, 1000)
                              break
                          }
                        },
                        socketNotificationReceived: function(notification, payload) {
                          switch(notification) {
                            case "HERE_IS_DATA":
                              var e = document.getElementById("DISPLAY")
                              e.innerHTML = payload
                              break
                          }
                        },
                      })
                      

                      node_helper.js

                      /// node_helper.js
                      const spawn = require("child_process").spawn
                      var NodeHelper = require("node_helper")
                      
                      module.exports = NodeHelper.create({
                        socketNotificationReceived: function(notification, payload) {
                          switch(notification) {
                            case "GIVE_ME_DATA":
                              this.job()
                              break
                          }
                        },
                        job: function() {
                          var process = spawn("python", ["/home/pi/src/test.py"])
                          process.stdout.on("data", (data)=>{
                            console.log(data)
                            this.sendSocketNotification("HERE_IS_DATA", data)
                          })
                        }
                      })
                      

                      I didn’t test. I wrote this code with only my brain. so there could be errors, but you can catch the concept.

                      P 2 Replies Last reply Reply Quote 1
                      • P Offline
                        paulvanderheijden90 @Guest
                        last edited by

                        @Sean Thank you very much im going to check the code and see if I can implement it in the magic mirror.
                        Thank you I will let you know

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