From b3bf144ef16f7426c37410406bf22a7fa725b0e4 Mon Sep 17 00:00:00 2001 From: Howard Durdle Date: Wed, 7 Aug 2019 15:36:42 +0100 Subject: [PATCH] options to switch between miles and km --- MMM-BMWConnected.js | 23 +++++++++++++++++------ README.md | 12 ++++++++++++ debug.png | Bin 0 -> 33437 bytes node_helper.js | 9 ++++++++- 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 debug.png diff --git a/MMM-BMWConnected.js b/MMM-BMWConnected.js index b0df180..830ffe5 100644 --- a/MMM-BMWConnected.js +++ b/MMM-BMWConnected.js @@ -3,7 +3,9 @@ Module.register('MMM-BMWConnected', { defaults: { apiBase: "www.bmw-connecteddrive.co.uk", refresh: 15, - vehicleAngle: 300 + vehicleAngle: 300, + distance: "miles", + debug: false }, getStyles: function () { @@ -55,6 +57,12 @@ Module.register('MMM-BMWConnected', { }, getDom: function () { + + var distanceSuffix = "mi"; + if (this.config.distance === "km") { + distanceSuffix = "km"; + } + var wrapper = document.createElement("div"); if (this.config.email === "" || this.config.password === "") { @@ -68,7 +76,6 @@ Module.register('MMM-BMWConnected', { return wrapper; } - var info = this.bmwInfo; var carContainer = document.createElement("div"); @@ -86,7 +93,7 @@ Module.register('MMM-BMWConnected', { var mileage = document.createElement("span"); mileage.classList.add("mileage"); mileage.appendChild(this.faIconFactory("fa-road")); - mileage.appendChild(document.createTextNode(info.mileage + " mi")); + mileage.appendChild(document.createTextNode(info.mileage + " " + distanceSuffix)); carContainer.appendChild(mileage); wrapper.appendChild(carContainer); @@ -138,13 +145,13 @@ Module.register('MMM-BMWConnected', { var elecRange = document.createElement("span"); elecRange.classList.add("elecRange"); elecRange.appendChild(this.faIconFactory("fa-charging-station")); - elecRange.appendChild(document.createTextNode(info.electricRange + " mi")); + elecRange.appendChild(document.createTextNode(info.electricRange + " " + distanceSuffix)); carContainer.appendChild(elecRange); var fuelRange = document.createElement("span"); fuelRange.classList.add("fuelRange"); fuelRange.appendChild(this.faIconFactory("fa-gas-pump")); - fuelRange.appendChild(document.createTextNode(info.fuelRange + " mi")); + fuelRange.appendChild(document.createTextNode(info.fuelRange + " " + distanceSuffix)); carContainer.appendChild(fuelRange); wrapper.appendChild(carContainer); @@ -155,7 +162,11 @@ Module.register('MMM-BMWConnected', { var updated = document.createElement("span"); updated.classList.add("updated"); updated.appendChild(this.faIconFactory("fa-info")); - updated.appendChild(document.createTextNode("last updated " + moment(info.updateTime).fromNow())); + var lastUpdateText = "last updated " + moment(info.updateTime).fromNow(); + if (this.config.debug) { + lastUpdateText += " [" + info.unitOfLength + "]"; + } + updated.appendChild(document.createTextNode(lastUpdateText)); carContainer.appendChild(updated); wrapper.appendChild(carContainer); diff --git a/README.md b/README.md index 485ae35..dcb2edc 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,10 @@ The module has a few configuration options: vehicleAngle The angle of rotation for the car image.

Default: 300
Between 0 and 350 in increments of 10. + + + distance + The unit of distance used for mileage and range.

Default: miles
Can be: miles or km. @@ -71,6 +75,14 @@ The module has a few configuration options: If possible the module will pull an image of your car from BMW's API. I only have one BMW, so can't test the placement/graphics of other vehicles. I'd love to see what it looks like if you try it. Tweet images to me at https://twitter.com/hdurdle +## Help + +If you have a moment, please set debug to true in the config and see what text appears in [ ] after the last updated time. I'm trying to see what the BMW API returns for countries that use KM instead of miles. I might be able to avoid making it a config option and pull it direct from the API. Tweet images and comments to me at https://twitter.com/hdurdle + +![Debug Screenshot](debug.png "Debug Screenshot") + +Also, if you can offer translations for the few bits of direct text ("last updated") for your language, let me know (along with where the placeholder should go in your language!). + ## Thanks Hat tip to [Nils Schneider](https://github.com/Lyve1981/BMW-ConnectedDrive-JSON-Wrapper) for the library code for performing the BMW authentication dance. \ No newline at end of file diff --git a/debug.png b/debug.png new file mode 100644 index 0000000000000000000000000000000000000000..67dd4c523c051933e70b0cfbede90693649d7473 GIT binary patch literal 33437 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 D8<#t@ literal 0 HcmV?d00001 diff --git a/node_helper.js b/node_helper.js index 472c6b9..fc8e51f 100644 --- a/node_helper.js +++ b/node_helper.js @@ -54,9 +54,16 @@ module.exports = NodeHelper.create({ connectorStatus: attributes.connectorStatus, vin: vin, chargingLevelHv: Number(attributes.chargingLevelHv).toFixed(), - imageUrl: null + imageUrl: null, + unitOfLength: attributes.unitOfLength } + if (self.config.distance === "km") { + self.bmwInfo.electricRange = Number(attributes.beRemainingRangeElectricKm).toFixed(); + self.bmwInfo.fuelRange = Number(attributes.beRemainingRangeFuelKm).toFixed(); + } + + var getImagesUri = '/api/vehicle/image/v1/' + vin + "?startAngle=0&stepAngle=10&width=640" bmwrequest.call(self.config.apiBase, getImagesUri, '', token, tokenType, function (data) { try {