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 6.9k 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 Admin
        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 Admin
          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
                        • 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