Allows my home wiz lights to be timed on and off according to a schedule.
web/web-wiz-script.js
- Committer:
- andrewboyson
- Date:
- 2021-05-11
- Revision:
- 1:a6b120e4031a
- Parent:
- 0:9af80a39adcc
File content as of revision 1:a6b120e4031a:
//Wiz script 'use strict'; let lights = ""; let wizTrace = false; let nowlocal = ""; let nowutc = ""; let sunrise = ""; let sunset = ""; let schedule = ""; let macs = new Array(); let names = new Array(); let rooms = new Array(); let ages = new Array(); let signals = new Array(); let ons = new Array(); let dimmers = new Array(); let schednames = new Array(); let schedons = new Array(); let schedoffs = new Array(); let actons = new Array(); let actoffs = new Array(); let durations = new Array(); function makehm(minutes) { let isNegative = minutes < 0; if (isNegative) minutes = -minutes; minutes = Math.floor(minutes / 60).toString().padStart(2, '0') + 'h' + (minutes % 60).toString().padStart(2, '0'); if (isNegative) minutes = '-' + minutes; return minutes; } function parseGeneral(topic) { let lines = topic.split('\n'); wizTrace = lines[0] != '0'; } function addLight(line) { let fields = line.split('\t'); macs .push(fields[0].substr(-8)); names .push(fields[1]); rooms .push(fields[2]); ages .push(fields[3]); signals.push(fields[4]); ons .push(fields[5]); dimmers.push(fields[6]); } function parseLights(topic) { macs = new Array(); names = new Array(); rooms = new Array(); ages = new Array(); signals = new Array(); ons = new Array(); dimmers = new Array(); topic.split('\n').forEach(addLight); } function parseDaylight(topic) { let lines = topic.split('\n'); nowlocal = Ajax.hexToSignedInt16(lines[0]); nowutc = Ajax.hexToSignedInt16(lines[1]); sunrise = Ajax.hexToSignedInt16(lines[2]); sunset = Ajax.hexToSignedInt16(lines[3]); } function addSchedule(line) { let fields = line.split('\t'); schednames.push(fields[0]); schedons .push(fields[1]); schedoffs .push(fields[2]); actons .push(fields[3]); actoffs .push(fields[4]); durations .push(fields[5]); } function parseSchedules(topic) { schednames = new Array(); schedons = new Array(); schedoffs = new Array(); actons = new Array(); actoffs = new Array(); durations = new Array(); topic.split('\n').forEach(addSchedule); } function parse() { let topics = Ajax.response.split('\f'); parseGeneral (topics[0]); lights = topics[1]; parseLights (topics[1]); parseDaylight (topics[2]); schedule = topics[3]; parseSchedules(topics[3]); } function display() { let elem; elem = Ajax.getElementOrNull('ajax-wiz-lights' ); if (elem) elem.textContent = lights; elem = Ajax.getElementOrNull('ajax-wiz-trace' ); if (elem) elem.setAttribute('dir', wizTrace ? 'rtl' : 'ltr'); elem = Ajax.getElementOrNull('ajax-now-local' ); if (elem) elem.textContent = makehm(nowlocal); elem = Ajax.getElementOrNull('ajax-now-utc' ); if (elem) elem.textContent = makehm(nowutc ); elem = Ajax.getElementOrNull('ajax-sun-rise' ); if (elem) elem.textContent = makehm(sunrise ); elem = Ajax.getElementOrNull('ajax-sun-set' ); if (elem) elem.textContent = makehm(sunset ); elem = Ajax.getElementOrNull('ajax-wiz-schedule'); if (elem) elem.textContent = schedule; for (let i = 0; i < 15; i++) { elem = Ajax.getElementOrNull('ajax-mac-' + i); if (elem) elem.textContent = macs [i] != null ? macs [i] : ''; elem = Ajax.getElementOrNull('ajax-name-' + i); if (elem) elem.value = names [i] != null ? names [i] : ''; elem = Ajax.getElementOrNull('ajax-room-' + i); if (elem) elem.value = rooms [i] != null ? rooms [i] : ''; elem = Ajax.getElementOrNull('ajax-age-' + i); if (elem) elem.textContent = ages [i] != null ? ages [i] : ''; elem = Ajax.getElementOrNull('ajax-signal-' + i); if (elem) elem.textContent = signals[i] != null ? signals[i] : ''; elem = Ajax.getElementOrNull('ajax-on-' + i); if (elem) elem.textContent = ons[i] != null ? ons [i] : ''; elem = Ajax.getElementOrNull('ajax-led-' + i); if (elem) elem.setAttribute('dir', ons[i] == '1' ? 'rtl' : 'ltr') ; elem = Ajax.getElementOrNull('ajax-dimmer-' + i); if (elem) elem.textContent = dimmers[i] != null ? dimmers[i] : ''; } for (let i = 0; i < 5; i++) { elem = Ajax.getElementOrNull('sched-name-' + i); if (elem) elem.value = schednames[i] != null ? schednames[i] : ''; elem = Ajax.getElementOrNull('sched-on-' + i); if (elem) elem.value = schedons [i] != null ? schedons [i] : ''; elem = Ajax.getElementOrNull('sched-off-' + i); if (elem) elem.value = schedoffs [i] != null ? schedoffs [i] : ''; elem = Ajax.getElementOrNull('act-on-' + i); if (elem) elem.textContent = actons [i] != null ? actons [i] : ''; elem = Ajax.getElementOrNull('act-off-' + i); if (elem) elem.textContent = actoffs [i] != null ? actoffs [i] : ''; elem = Ajax.getElementOrNull('duration-' + i); if (elem) elem.textContent = durations [i] != null ? durations [i] : ''; } } Ajax.server = '/wiz-ajax'; Ajax.onResponse = function() { parse(); display(); }; Ajax.init();