From b2b86f999307a351bf1473a9d8d6a470753da5f4 Mon Sep 17 00:00:00 2001 From: Christopher Fenner Date: Mon, 24 Jun 2024 11:38:45 +0200 Subject: [PATCH] add uom conversion, thanks to @Duhlin12 --- netatmo.js | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/netatmo.js b/netatmo.js index f63bf94..9cd87f9 100755 --- a/netatmo.js +++ b/netatmo.js @@ -32,6 +32,7 @@ Module.register('netatmo', { fontClassMeasurement: 'xsmall', thresholdCO2Average: 800, thresholdCO2Bad: 1800, + unitOfMeasurementWind: '', mockData: false, }, notifications: { @@ -80,6 +81,12 @@ Module.register('netatmo', { this.sendSocketNotification(this.notifications.DATA) }, this.config.updateInterval * 60 * 1000 + this.config.initialDelay * 1000) }, + updateUnitOfMeasurements (userPreferences) { + if (this.config.unitOfMeasurementWind === ''){ + this.config.unitOfMeasurementWind = this.convertNetatmoWindUOM(userPreferences.windunit) + console.log('Using user preferred unit of measurement for wind values %o', this.config.unitOfMeasurementWind) + } + }, updateModuleList (stationList) { let moduleList = [] @@ -285,7 +292,7 @@ Module.register('netatmo', { return value.toFixed(1)// + ' mm/h' case this.measurement.WIND_STRENGTH: case this.measurement.GUST_STRENGTH: - return value.toFixed(0)// + ' km/h' + return this.convertWindUnit(value, this.config.unitOfMeasurementWind) case this.measurement.WIND_ANGLE: case this.measurement.GUST_ANGLE: return `${this.getDirection(value)} | ${value}`// + '°' @@ -296,6 +303,51 @@ Module.register('netatmo', { return value } }, + convertNetatmoWindUOM (unit) { + switch (unit) { + case 4: + return 'KT' + case 3: + return 'BFT' + case 2: + return 'MS' + case 1: + return 'MPH' + case 0: + default: + return 'KPH' + } + }, + convertWindUnit (value, unit) { + switch (unit) { + case 'MPH': + return (value / 1.609).toFixed(1) + case 'MS': + return (value / 3.6).toFixed(1) + case 'BFT': + return this.convertToBeaufort(value) + case 'KT': + return (value / 1.852).toFixed(1) + case 'KPH': + default: + return value.toFixed(1) + } + }, + convertToBeaufort (value) { + if (value < 1) return 0 + if (value <= 5) return 1 + if (value <= 11) return 2 + if (value <= 19) return 3 + if (value <= 28) return 4 + if (value <= 38) return 5 + if (value <= 49) return 6 + if (value <= 61) return 7 + if (value <= 74) return 8 + if (value <= 88) return 9 + if (value <= 102) return 10 + if (value <= 117) return 11 + return 12 + }, getUnit (measurement) { switch (measurement) { case this.measurement.CO2: @@ -317,7 +369,7 @@ Module.register('netatmo', { return 'mm/h' case this.measurement.WIND_STRENGTH: case this.measurement.GUST_STRENGTH: - return 'km/h' + return this.getWindUnitLabel(this.config.unitOfMeasurementWind) case this.measurement.WIND_ANGLE: case this.measurement.GUST_ANGLE: return '°' @@ -325,6 +377,21 @@ Module.register('netatmo', { return '' } }, + getWindUnitLabel (unit) { + switch (unit) { + case 'MPH': + return 'mph' + case 'MS': + return 'm/s' + case 'BFT': + return 'Bft' + case 'KT': + return 'kt' + case 'KMH': + default: + return 'km/h' + } + }, getDirection (value) { if (value < 11.25) return 'N' if (value < 33.75) return 'NNE' @@ -446,6 +513,7 @@ Module.register('netatmo', { console.log('Devices %o', payload.payloadReturn.devices) const stationList = payload.payloadReturn.devices const userPreferences = payload.payloadReturn.user.administrative + this.updateUnitOfMeasurements(userPreferences) this.updateModuleList(stationList) this.updateDom(this.config.animationSpeed) } else if (payload.status === 'INVALID_TOKEN') {