UNPKG

node-red-contrib-ewelink-cube

Version:

Node-RED integration with eWeLink Cube

143 lines (126 loc) 3.35 kB
function sleep(time) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(true); }, time); }); } function isNullObject(obj) { return Object.keys(obj).length === 0; } function hyphenToCamel(word) { const str = word.charAt(0).toUpperCase() + word.slice(1); return str.replace(/-([a-z])/g, function (match, char) { return char.toUpperCase(); }); } function loadshGet(obj, path) { return ( path.reduce((o, k) => { return (o || {})[k]; }, obj) || undefined ); } function isObject(value) { const type = typeof value; return value !== null && (type === 'object' || type === 'function'); } function merge(source, other) { if (!isObject(source) || !isObject(other)) { return other === undefined ? source : other; } // 合并两个对象的 key,另外要区分数组的初始值为 [] return Object.keys({ ...source, ...other, }).reduce( (acc, key) => { // 递归合并 value acc[key] = merge(source[key], other[key]); return acc; }, Array.isArray(source) ? [] : {} ); } function omit(source, keys) { return Object.keys(source).reduce((target, nowKey) => { if (!keys.includes(nowKey)) target[nowKey] = source[nowKey]; return target; }, {}); } function rgbToHsv(r1, g1, b1) { let rdif; let gdif; let bdif; let h; let s; const r = r1 / 255; const g = g1 / 255; const b = b1 / 255; const v = Math.max(r, g, b); const diff = v - Math.min(r, g, b); const diffc = function (c) { return (v - c) / 6 / diff + 1 / 2; }; if (diff === 0) { h = 0; s = 0; } else { s = diff / v; rdif = diffc(r); gdif = diffc(g); bdif = diffc(b); if (r === v) { h = bdif - gdif; } else if (g === v) { h = 1 / 3 + rdif - bdif; } else if (b === v) { h = 2 / 3 + gdif - rdif; } if (h < 0) { h += 1; } else if (h > 1) { h -= 1; } } return [h * 360, s * 100, v * 100]; } function hsvToRgb(h1, s1, v1) { const h = h1 / 60; const s = s1 / 100; let v = v1 / 100; const hi = Math.floor(h) % 6; const f = h - Math.floor(h); const p = 255 * v * (1 - s); const q = 255 * v * (1 - s * f); const t = 255 * v * (1 - s * (1 - f)); v *= 255; switch (hi) { case 0: return [v, t, p]; case 1: return [q, v, p]; case 2: return [p, v, t]; case 3: return [p, q, v]; case 4: return [t, p, v]; case 5: return [v, p, q]; } } function compareVersion(versionA, versionB) { if (versionA === versionB) { return 0; } const arrayA = versionA.split('.'); const arrayB = versionB.split('.'); for (let i = 0; ; i++) { const numA = parseInt(arrayA[i]); const numB = parseInt(arrayB[i]); if (numA !== numB) { return numA - numB; } } }