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.

    Roomtemperature with DS18B20

    Scheduled Pinned Locked Moved Solved Troubleshooting
    11 Posts 4 Posters 8.0k 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.
    • C Offline
      Chiggo
      last edited by Chiggo

      Hello everybody,

      I am new to this forum and I am trying to display the roomtemperature with a DS18B20 sensor at my MagicMirrorv2.

      I have installed ‘ds18x20’ to get the temperature using node.js, butit seems to be impossible for me, to display this at my MagicMirror.
      I can read the temp using this commands, and it shows the temp at the console.

      var sensor = require('ds18x20');
      var temp = sensor.get('28-00000574c791');
      console.log(temp);
      

      I tried to write a module from exsting code to display the temp at the mirror, but everything it shows is this picture

      Here is the code

      /* global Module */
      /* Magic Mirror
       * Module: MMM-Temperature
       */
      
      Module.register('MMM-Temperature', {
      // Define start sequence.
              start: function() {
                      Log.info("Starting module: " + this.name);
                      // Schedule update interval.
                      var self = this;
                      setInterval(function() {
                              self.updateDom();
                      }, 1000);
      },
      
      // Get temperature.
      tempRead: function() {
              var sensor = require ('ds18x20');
              var temp = sensor.get('28-04163746c8ff');
              return temp;
      },
      
      
      // Override dom generator.
              getDom: function() {
      var temperature = this.tempRead();
      
      var celsius = document.createTextNode(temperature);
      var wrapper = document.createElement("div");
      wrapper.appendChild(celsius);
      return wrapper;
      }
      });
      

      Can someone explain to me, how to get this thing working!?

      1 Reply Last reply Reply Quote 0
      • MichMichM Offline
        MichMich
        last edited by MichMich

        What is important to understand, is the difference between the frontend module, and the node_helper.

        The frontend module (yourmodulename.js) is there to make sure the UI works, the node helper (node_helper.js) allows you to execute commands like you want.

        You need to make a module that contains both.

        Check out this very simple example which is pretty easy for you to adapt:
        https://github.com/MichMich/mmm-systemtemperature

        1 Reply Last reply Reply Quote 0
        • MichMichM Offline
          MichMich
          last edited by

          To point you a bit more in the right direction, the node helper should change to something like:

          ...
          sendTemperature: function() {
          	var temp = sensor.get('28-04163746c8ff');
          	this.sendSocketNotification('TEMPERATURE', temp);
          }
          ...
          
          1 Reply Last reply Reply Quote 0
          • C Offline
            Chiggo
            last edited by

            Thank you for fast reply.

            I will give it a try tomorrow and check if i get it.
            My first steps in JS :sweat_smile:

            1 Reply Last reply Reply Quote 0
            • C Offline
              Chiggo
              last edited by

              Spend some time to figure out what you mean, but i stuck again.
              Now at this point picture

              Here is the MMM-Temperature.js

              Module.register('MMM-Temperature', {
              
                      defaults: {
                              prependString: 'Raumtemperatur: '
                      },
              
              
                      start: function() {
                              this.temperature = 'fetching...';
                              this.sendSocketNotification('CONNECT');
                      },
              
              
                      socketNotificationReceived: function(notification, temp) {
                          if (notification === 'TEMPERATURE') {
                              this.temperature = temp;
                              this.updateDom();
                          }
                      },
              
              
                      // Override dom generator.
                      getDom: function() {
                              var wrapper = document.createElement("div");
                              wrapper.innerHTML = this.config.prependString + this.temperature;
                              return wrapper;
                      },
              
              });
              

              And here is the node_helper.js

              var NodeHelper = require("node_helper");
              var sensor = require('ds18x20');
              
              
               module.exports = NodeHelper.create({
                      start: function function_name () {
                              var self = this;
                              setInterval(function() {
                                      self.sendTemperature();
                              }, 10000);
                      },
              
              
                      sendTemperature: function() {
                              var self = this;
                              var temp = sensor.get('28-04163746c8ff');
                              self.sendSocketNotification('TEMPERATURE', temp);
                      },
               });
              

              It seems that the MMM-Temperature module is not trying to call the node_helper.js
              Not sure why it doesn’t. Or even if, i don’t know why the node_helper.js doesn’t work.

              Maybe this has something to do with the "sendSocketNotification(‘CONNECT’) ???
              It’s never mentioned in the node_helper.

              1 Reply Last reply Reply Quote 0
              • C Offline
                Chiggo
                last edited by

                It works!

                after testing some things PM2 didn’t work anymore, so i recovered from a backup, installed the drivers for the DS18B20 again, copied the scripts back, restarted and it works.

                Don’t know why and how, but it does :smile:

                Solved!

                P 1 Reply Last reply Reply Quote 0
                • P Offline
                  Phate @Chiggo
                  last edited by

                  @Chiggo

                  This sounds awesome…

                  Is this downloadable from github?

                  1 Reply Last reply Reply Quote 0
                  • C Offline
                    Chiggo
                    last edited by

                    @Phate

                    No, it’s not available on GitHub. But with the hints from @MichMich it was pretty easy to realize.

                    To load the drivers for the DS18B20 I followed these instructions https://www.kompf.de/weather/pionewiremini.html

                    To get the DS18B20 working with node.js I installed this https://www.npmjs.com/package/ds18x20

                    And finaly I edited the scripts of the systemtemperature-module and it works.

                    Step-by-Step

                    • Add this line to your /boot/config.txt
                    dtoverlay=w1-gpio,gpiopin=4,pullup=on
                    
                    • Add to your /etc/modules following and reboot the Pi
                    w1-gpio pullup=1 
                    w1-therm
                    
                    • Note the ID of your sensor (go to /sys/bus/w1/devices and list the files, the ID should look something like this 28-04163746c8ff
                    • Got to /MagicMirror/modules and create a folder named MMM-Temperature
                    • Create a file named MMM-Temperature.js and copy the code from my post for this script
                    • Create a file named node_helper.js and copy the code from my post and change the ID of my sensor to yours (it’s in line 16)
                    • Register this module in your /MagicMirror/config/config.js
                    • Restart your MM and you are done :)

                    Hope I could help. Let me know if it works.

                    P 1 Reply Last reply Reply Quote 1
                    • P Offline
                      Phate @Chiggo
                      last edited by Phate

                      @Chiggo

                      Mate. That’s just awesome.

                      Few worry spots but sure I can make that happen.

                      I made sure to order the same temp module so hopefully I shouldn’t have trouble.

                      Thanks mate. Awesome.

                      May have questions tho so will yell out of i do when eBay comes thru lol

                      Thanks again

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

                        This post is deleted!
                        1 Reply Last reply Reply Quote 0
                        • K Offline
                          Kristianson
                          last edited by

                          Excellent! Thanks for the code above, worked beautifully… :-)

                          1 Reply Last reply Reply Quote 0

                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                          With your input, this post could be even better 💗

                          Register Login
                          • 1 / 1
                          • 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