Read the statement by Michael Teeuw here.
MMM-Tado wrong units
-
@sdetweil Thank you for the clarification. Now it is clear why there is miscommunication. I use the
unitsfrom the general config settings: https://docs.magicmirror.builders/getting-started/configuration.html#general .To clarify my config looks like this:
var config = { address: "localhost", port: 8080, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "en", timeFormat: 24, units: "metric", modules: [ { module: 'MMM-Tado', position: 'top_right', header: 'My Home', config: { username: 'x', password: 'x', updateInterval: 300000, } }, ] };Notice that the
units-config is outsidemodules-config. And not in the module-config. I think this makes more sense. Because of thisself.config.unitsdoes contain the correct value. I will update the readme about theunits-config, so it will be more clear. -
@WouterEekhout ok, but… i don’t think that is what the USER wanted… their system is in metric, but they wanted your module display to be Fahrenheit, so I would use some other varname, and check to see if they specified that, and use IT over the system value…
or because u have it as a default, if u set it to some invalid value, then check if its what you allow,
then if invalid, use system, otherwise allow users value… -
@sdetweil I disagree, it is unclear if the current config is not working or if he wanted a custom units setting for the app. @Stoffbeuteluwe Can you clarify if you wanted to set a different unit for the app?
-
@WouterEekhout I am from Germany and I need metric unit but Sam helped me to fix and now it’s working for me.
It would be cool to have the choice in module config. Metric or imperial
Thanks to you guys -
@Stoffbeuteluwe what is your main config.js units set to? up near address:
-
@sdetweil it is metric
-
@Stoffbeuteluwe so, the original code should have worked…
-
@sdetweil without your fix it does not work in my case
-
-
@sdetweil Hello, after module update same problem
and your fix don’t work anymore…can you help me again?var config = { address: "0.0.0.0", // Address to listen on, can be: // - "0.0.0.0", "127.0.0.1", "::1" to listen on loopback interface // - another specific IPv4/6 to listen on a specific interface // - "", "0.0.0.0", "::" to listen on any interface // Default, when address config is left out, is "0.0.0.0" port: 8080, ipWhitelist: [], // Set [] to allow all IP addresses // or add a specific IPv4 of 192.168.1.5 : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"], // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"], language: "de", timeFormat: 24, units: "metric", modules: [ -
@Stoffbeuteluwe ok, need an editor for this…
line 26 of MMM-Tado.js, leave alone
change all the other this.config.units to self.config.units
change them all, then change line 26 back to this.
I have opened issue 11
https://github.com/WouterEekhout/MMM-Tado/issues/11 -
@sdetweil no luck…sorry, I have changed 4x this into self
but I am not sure with the line 26/** * Created by Wouter Eekhout on 06/01/2017. */ Module.register("MMM-Tado", { // Default module config. defaults: { username: '', password: '', updateInterval: 300000, }, tadoMe: {}, tadoHomes: [], getStyles: function () { return [ this.file('css/MMM-Tado.css'), ]; }, start: function () { if (this.config.updateInterval < this.defaults.updateInterval){ this.config.updateInterval = this.defaults.updateInterval; } this.config.units = self.config.units; this.sendSocketNotification('CONFIG', this.config); }, // Override dom generator. getDom: function () { let self = this; let wrapper = document.createElement("div"); wrapper.className = "tado-info"; this.tadoHomes.forEach(home => { let homeWrapper = document.createElement("div"); homeWrapper.className = "tado-home"; let logoWrapper = document.createElement("i"); logoWrapper.className = "tado-icon-tado_logo tado-logo"; homeWrapper.appendChild(logoWrapper); let tableWrapper = document.createElement("table"); tableWrapper.className = "tado-table small"; home.zones.forEach(zone => { let rowWrapper = document.createElement("tr"); if (zone.type === "HOT_WATER") { let firstTableDataWrapper = document.createElement("td"); firstTableDataWrapper.className = "tado-table-name"; let zoneNameWrapper = document.createElement("span"); zoneNameWrapper.innerText = zone.name; firstTableDataWrapper.appendChild(zoneNameWrapper); rowWrapper.appendChild(firstTableDataWrapper); let secondTableDateWrapper = document.createElement("td"); secondTableDateWrapper.className = "tado-table-data"; let temperatureWrapper = document.createElement("span"); let temperatureIconWrapper = document.createElement("i"); temperatureIconWrapper.className = "fa fa-thermometer-half"; temperatureWrapper.appendChild(temperatureIconWrapper); if (zone.state.setting.temperature == null) { var temperatureTextWrapper = document.createTextNode(zone.state.setting.power); } else { if (self.config.units === "metric") { var temperatureTextWrapper = document.createTextNode(zone.state.setting.temperature.celsius + "°"); } else { var temperatureTextWrapper = document.createTextNode(zone.state.setting.temperature.fahrenheit + "°"); } } temperatureWrapper.appendChild(temperatureTextWrapper); secondTableDateWrapper.appendChild(temperatureWrapper); rowWrapper.appendChild(secondTableDateWrapper); } else if (zone.type === "HEATING") { let firstTableDataWrapper = document.createElement("td"); firstTableDataWrapper.className = "tado-table-name"; let zoneNameWrapper = document.createElement("span"); zoneNameWrapper.innerText = zone.name; firstTableDataWrapper.appendChild(zoneNameWrapper); rowWrapper.appendChild(firstTableDataWrapper); let secondTableDateWrapper = document.createElement("td"); secondTableDateWrapper.className = "tado-table-data"; //current temperature let temperatureWrapper = document.createElement("span"); temperatureWrapper.className = "bright"; let temperatureIconWrapper = document.createElement("i"); temperatureIconWrapper.className = "fa fa-thermometer-half"; temperatureWrapper.appendChild(temperatureIconWrapper); if (self.config.units === "metric") { var temperatureTextWrapper = document.createTextNode(zone.state.sensorDataPoints.insideTemperature.celsius + "°"); } else { var temperatureTextWrapper = document.createTextNode(zone.state.sensorDataPoints.insideTemperature.fahrenheit + "°"); } temperatureWrapper.appendChild(temperatureTextWrapper); if (zone.state.activityDataPoints.heatingPower.percentage > 0) { //The zone is heating let heatingWrapper = document.createElement("i"); heatingWrapper.className = "fa fa-fire bright"; temperatureWrapper.appendChild(heatingWrapper); } secondTableDateWrapper.appendChild(temperatureWrapper); //target temperature let temperatureTargetWrapper = document.createElement("span"); temperatureTargetWrapper.className = "xsmall"; let temperatureTargetIconWrapper = document.createElement("i"); temperatureTargetIconWrapper.className = "fa fa-thermometer-half"; temperatureTargetWrapper.appendChild(temperatureTargetIconWrapper); if (zone.state.setting.temperature == null) { var temperatureTargetTextWrapper = document.createTextNode(zone.state.setting.power); } else { if (self.config.units === "metric") { var temperatureTargetTextWrapper = document.createTextNode(zone.state.setting.temperature.celsius + "°"); } else { var temperatureTargetTextWrapper = document.createTextNode(zone.state.setting.temperature.fahrenheit + "°"); } } temperatureTargetWrapper.appendChild(temperatureTargetTextWrapper); secondTableDateWrapper.appendChild(temperatureTargetWrapper); let breakLine = document.createElement("br"); secondTableDateWrapper.appendChild(breakLine); let humidityWrapper = document.createElement("span"); let humidityIconWrapper = document.createElement("i"); humidityIconWrapper.className = "fa fa-tint"; humidityWrapper.appendChild(humidityIconWrapper); let humidityTextWrapper = document.createTextNode(zone.state.sensorDataPoints.humidity.percentage + "%"); humidityWrapper.appendChild(humidityTextWrapper); secondTableDateWrapper.appendChild(humidityWrapper); rowWrapper.appendChild(secondTableDateWrapper); } else if (zone.type === "AIR_CONDITIONING") { let firstTableDataWrapper = document.createElement("td"); firstTableDataWrapper.className = "tado-table-name"; let zoneNameWrapper = document.createElement("span"); zoneNameWrapper.innerText = zone.name; firstTableDataWrapper.appendChild(zoneNameWrapper); rowWrapper.appendChild(firstTableDataWrapper); let secondTableDateWrapper = document.createElement("td"); secondTableDateWrapper.className = "tado-table-data"; //current temperature let temperatureWrapper = document.createElement("span"); temperatureWrapper.className = "bright"; let temperatureIconWrapper = document.createElement("i"); temperatureIconWrapper.className = "fa fa-thermometer-half"; temperatureWrapper.appendChild(temperatureIconWrapper); if (self.config.units === "metric") { var temperatureTextWrapper = document.createTextNode(zone.state.sensorDataPoints.insideTemperature.celsius + "°"); } else { var temperatureTextWrapper = document.createTextNode(zone.state.sensorDataPoints.insideTemperature.fahrenheit + "°"); } temperatureWrapper.appendChild(temperatureTextWrapper); if (zone.state.setting.mode === "HEAT") { //The zone is heating let heatingWrapper = document.createElement("i"); heatingWrapper.className = "fa fa-fire bright"; temperatureWrapper.appendChild(heatingWrapper); } else if (zone.state.setting.mode === "COOL") { //The zone is cooling let coolingWrapper = document.createElement("i"); coolingWrapper.className = "fa fa-snowflake bright"; temperatureWrapper.appendChild(coolingWrapper); } secondTableDateWrapper.appendChild(temperatureWrapper); //target temperature let temperatureTargetWrapper = document.createElement("span"); temperatureTargetWrapper.className = "xsmall"; let temperatureTargetIconWrapper = document.createElement("i"); temperatureTargetIconWrapper.className = "fa fa-thermometer-half"; temperatureTargetWrapper.appendChild(temperatureTargetIconWrapper); if (zone.state.setting.temperature == null) { var temperatureTargetTextWrapper = document.createTextNode(zone.state.setting.power); } else { if (self.config.units === "metric") { var temperatureTargetTextWrapper = document.createTextNode(zone.state.setting.temperature.celsius + "°"); } else { var temperatureTargetTextWrapper = document.createTextNode(zone.state.setting.temperature.fahrenheit + "°"); } } temperatureTargetWrapper.appendChild(temperatureTargetTextWrapper); secondTableDateWrapper.appendChild(temperatureTargetWrapper); let breakLine = document.createElement("br"); secondTableDateWrapper.appendChild(breakLine); let humidityWrapper = document.createElement("span"); let humidityIconWrapper = document.createElement("i"); humidityIconWrapper.className = "fa fa-tint"; humidityWrapper.appendChild(humidityIconWrapper); let humidityTextWrapper = document.createTextNode(zone.state.sensorDataPoints.humidity.percentage + "%"); humidityWrapper.appendChild(humidityTextWrapper); secondTableDateWrapper.appendChild(humidityWrapper); rowWrapper.appendChild(secondTableDateWrapper); } else { //don't add it return; } tableWrapper.appendChild(rowWrapper); }); homeWrapper.appendChild(tableWrapper); wrapper.appendChild(homeWrapper); }); return wrapper; }, socketNotificationReceived: function(notification, payload) { if (notification === 'NEW_DATA') { this.tadoMe = payload.tadoMe; this.tadoHomes = payload.tadoHomes; this.updateDom(); } } }); -
@Stoffbeuteluwe weird… i’ll be back on in about 6 hours, do you know how to use the debugger?
ctrl-shift-i on teh keyboard, select the sources tab, navigate the left tree to find the module and filename, click
shows in middle windowscroll down to one of the if (self.config.units lines (make sure u have that type unit in the tado data)
click the number on the start of the line, it should turn bluehit refresh
the code will stop there
mouse over the self and a box will pop up showing what self points to, then config
same… units should say metric -
@Stoffbeuteluwe said in MMM-Tado wrong units:
but I am not sure with the line 26
nothing… it will copy the system units to the module units info
-
@Stoffbeuteluwe I’ve updated the code with the suggestions of @sdetweil . For now I put it into a separate branch. If this solutions works for you, I will push it to the master branch.
Execute the following:
git pull git checkout incorrect_pointer_in_getdomWill you let us know if this solved your problem?
-
@WouterEekhout sorry does not work

Last login: Sat Jun 6 20:48:53 on ttys000 patrickhahn@Patricks-Mini ~ % cd ~/MagicMirror/modules patrickhahn@Patricks-Mini modules % git clone https://github.com/WouterEekhout/MMM-Tado Cloning into 'MMM-Tado'... remote: Enumerating objects: 47, done. remote: Counting objects: 100% (47/47), done. remote: Compressing objects: 100% (39/39), done. remote: Total 152 (delta 22), reused 23 (delta 6), pack-reused 105 Receiving objects: 100% (152/152), 841.64 KiB | 973.00 KiB/s, done. Resolving deltas: 100% (50/50), done. patrickhahn@Patricks-Mini modules % cd MMM-Tado patrickhahn@Patricks-Mini MMM-Tado % npm install npm WARN deprecated simple-oauth2@2.5.2: simple-oauth2 v2 is no longer supported. Please upgrade to v3 for further support npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) npm WARN deprecated wreck@14.2.0: This module has moved and is now available at @hapi/wreck. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. npm WARN deprecated boom@7.3.0: This module has moved and is now available at @hapi/boom. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. npm WARN deprecated bourne@1.1.2: This module has moved and is now available at @hapi/bourne. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. npm WARN deprecated hoek@6.1.3: This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. npm notice created a lockfile as package-lock.json. You should commit this file. added 42 packages from 446 contributors and audited 42 packages in 5.628s 1 package is looking for funding run `npm fund` for details found 1 low severity vulnerability run `npm audit fix` to fix them, or `npm audit` for details patrickhahn@Patricks-Mini MMM-Tado % git pull git checkout incorrect_pointer_in_getdom Already up to date. Branch 'incorrect_pointer_in_getdom' set up to track remote branch 'incorrect_pointer_in_getdom' from 'origin'. Switched to a new branch 'incorrect_pointer_in_getdom' patrickhahn@Patricks-Mini MMM-Tado % -
@sdetweil it says undefined
-
@Stoffbeuteluwe I’m assuming
self.config.unitsis undefined on line 26. If that is the case then MagicMirror is having trouble reading in your global units configuration. Are you experiencing the same problem with other modules?For your information, I am from the Netherlands and I also use the metric units. I tried your configurations settings from the following and it works for me.
@Stoffbeuteluwe said in MMM-Tado wrong units:
@sdetweil Hello, after module update same problem
and your fix don’t work anymore…can you help me again?If you just want to get the module running and forget about problem replace line 26 to the following:
this.config.units = 'metric';Be sure you are on the master branch before replacing.
-
@WouterEekhout Hi my other modules work but this is not working and I don’t know why :thinking_face:
I will try to change the line 26…thanks for you help
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