Read the statement by Michael Teeuw here.
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!?
-
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 -
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
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!
-
-
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.
-
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! -
Excellent! Thanks for the code above, worked beautifully… :-)
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