UNPKG

knxultimate

Version:

KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.

189 lines 5.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const KnxLog_1 = require("../KnxLog"); const utils_1 = require("../utils"); const logger = (0, KnxLog_1.module)('DPT9'); const config = { id: 'DPT9', formatAPDU: (value) => { const apdu_data = Buffer.alloc(2); value = Number(value); if (!isFinite(value)) { logger.warn('cannot write non-numeric or undefined value'); } else { value = (0, utils_1.round)(value, 2); const arr = (0, utils_1.frexp)(value); const mantissa = arr[0]; const exponent = arr[1]; let max_mantissa = 0; let e; for (e = exponent; e >= -15; e--) { max_mantissa = (0, utils_1.ldexp)(100 * mantissa, e); if (max_mantissa > -2048 && max_mantissa < 2047) break; } const sign = mantissa < 0 ? 1 : 0; const mant = mantissa < 0 ? ~(max_mantissa ^ 2047) : max_mantissa; const exp = exponent - e; apdu_data[0] = (sign << 7) + (exp << 3) + (mant >> 8); apdu_data[1] = mant % 256; } return apdu_data; }, fromBuffer: (buf) => { if (buf.length !== 2) { logger.warn('fromBuffer: buf should be 2 bytes long (got %d bytes)', buf.length); return null; } const sign = buf[0] >> 7; const exponent = (buf[0] & 0b01111000) >> 3; let mantissa = 256 * (buf[0] & 0b00000111) + buf[1]; mantissa = sign === 1 ? ~(mantissa ^ 2047) : mantissa; return parseFloat((0, utils_1.ldexp)(0.01 * mantissa, exponent).toPrecision(15)); }, basetype: { bitlength: 16, valuetype: 'basic', desc: '16-bit floating point value', help: `// Send 16-bit floating point value. msg.payload = 25; return msg;`, }, subtypes: { '001': { name: 'Temperature (°C)', desc: 'temperature', unit: '°C', range: [-273, 670760], }, '002': { name: 'Temperature difference (°C)', desc: 'temperature difference', unit: '°C', range: [-670760, 670760], }, '003': { name: 'Kelvin/hour (K/h)', desc: 'kelvin/hour', unit: '°K/h', range: [-670760, 670760], }, '004': { name: 'Lux (lux)', desc: 'lux', unit: 'lux', range: [0, 670760], }, '005': { name: 'Speed (m/s)', desc: 'wind speed', unit: 'm/s', range: [0, 670760], }, '006': { name: 'Pressure (Pa)', desc: 'pressure', unit: 'Pa', range: [0, 670760], }, '007': { name: 'Humidity (%)', desc: 'humidity', unit: '%', range: [0, 670760], }, '008': { name: 'Parts/million (ppm)', desc: 'air quality', unit: 'ppm', range: [0, 670760], }, '009': { name: 'Airflow (m3/h)', desc: 'Airflow', unit: 'm3/h', range: [-671088.64, 670433.28], }, '010': { name: 'Time (s)', desc: 'time(sec)', unit: 's', range: [-670760, 670760], }, '011': { name: 'Time (ms)', desc: 'time(msec)', unit: 'ms', range: [-670760, 670760], }, '020': { name: 'Voltage (mV)', desc: 'voltage', unit: 'mV', range: [-670760, 670760], }, '021': { name: 'Current (mA)', desc: 'current', unit: 'mA', range: [-670760, 670760], }, '022': { name: 'Power density (W/m²)', desc: 'power density', unit: 'W/m²', range: [-670760, 670760], }, '023': { name: 'Kelvin/percent (K/%)', desc: 'Kelvin / %', unit: 'K/%', range: [-670760, 670760], }, '024': { name: 'Power (kW)', desc: 'power (kW)', unit: 'kW', range: [-670760, 670760], }, '025': { name: 'Volume flow (l/h)', desc: 'volume flow', unit: 'l/h', range: [-670760, 670760], }, '026': { name: 'Rain amount (l/m²)', desc: 'rain amount', unit: 'l/m²', range: [-670760, 670760], }, '027': { name: 'Temperature (Fahrenheit)', desc: 'temperature (F)', unit: '°F', range: [-459.6, 670760], }, '028': { name: 'Wind speed (km/h)', desc: 'wind speed (km/h)', unit: 'km/h', range: [0, 670760], }, '029': { name: 'Absolute humidity (g/m3)', desc: 'absolute humidity (g/m3)', unit: 'g/m3', range: [0, 670760], }, '030': { name: 'Concentration (ug/m3)', desc: 'concentration (ug/m3)', unit: 'ug/m3', range: [0, 670760], }, }, }; exports.default = config; //# sourceMappingURL=dpt9.js.map