console.loggerName = 'js.lib'; console.log('Load lib module'); function compare(a, b, operator) { // Hint: a = currentState, b = targetState let logMsg = ''; let returnValue = undefined; try { logMsg = `Quantity comparison of ${a}, ${b} with operator ${operator}`; switch (operator) { case '==': returnValue = a.equal(b); break; case '!=': returnValue = !a.equal(b); break; case '<' : returnValue = a.lessThan(b); break; case '<=': returnValue = a.lessThanOrEqual(b); break; case '>' : returnValue = a.greaterThan(b); break; case '>=': returnValue = a.greaterThanOrEqual(b); break; default: console.error(`${operator} is no valid operator`); return; } } catch(e) { logMsg = `Standard comparison of ${a}, ${b} with operator ${operator}`; switch (operator) { case '==': returnValue = (a == b); break; case '!=': returnValue = !(a == b); break; case '<' : returnValue = (a < b); break; case '<=': returnValue = (a <= b); break; case '>' : returnValue = (a > b); break; case '>=': returnValue = (a >= b); break; } } console.debug(logMsg); return returnValue; } function convertValue(value) { console.debug('Converting value ' + value + ' of type ' + typeof value); if(typeof value === 'string') { if(value.includes(' ')) { let logMsg = ''; let returnValue; try { logMsg = 'Quantity: ' + value; returnValue = Quantity(value); } catch(e) { logMsg = 'Not a Quantity but has a space, leaving as a string: ' + value; returnValue = value; } finally { console.debug(logMsg); return returnValue; } } else if(!isNaN(value)) { console.debug('Number: ' + value) return Number.parseFloat(value); } else if(value == 'UnDefType' || value == 'NULL' || value == 'UNDEF') { console.debug('UnDefType: ' + value); return 'UnDefType'; } console.debug('String: ' + value); return value; } else if(value instanceof DecimalType || value instanceof PercentType) { console.debug('DecimalType or PercentType: ' + value); return value.floatValue(); } else if(value instanceof QuantityType) { console.debug('QuantityType: ' + value); return Quantity(value); } else { console.debug('String: ' + value); return value.toString(); } } function distanceFrom(locationA, locationB) { let lat1 = (locationA.split(',')[0]) * (Math.PI / 180); let lon1 = (locationA.split(',')[1]) * (Math.PI / 180); let lat2 = (locationB.split(',')[0]) * (Math.PI / 180); let lon2 = (locationB.split(',')[1]) * (Math.PI / 180); if ((lat1 == lat2) && (lon1 == lon2)) { return 0; } // Haversine formula let dlon = lon2 - lon1; let dlat = lat2 - lat1; let a = Math.pow(Math.sin(dlat / 2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon / 2),2); let c = 2 * Math.asin(Math.sqrt(a)); // Radius of earth in meters let r = 6371000; // calculate the result let result = `${(c * r).toFixed()} m` console.debug(`Calculated distance between ${locationA} and ${locationB} is ${result}`); return result; } module.exports = { compare, convertValue, distanceFrom };