Roomtemperature with DS18B20



  • 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!?


  • MagicMirror Creator

    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


  • MagicMirror Creator

    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);
    }
    ...
    


  • 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:



  • 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.



  • 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!



  • @Chiggo

    This sounds awesome…

    Is this downloadable from github?



  • @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.



  • @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



  • This post is deleted!

Log in to reply
 

Looks like your connection to MagicMirror Forum was lost, please wait while we try to reconnect.