JSFiddle - React, Tailwind, and code Playground
by Ebony McCoy
JavaScript
var Accessory, Service, Characteristic, UUIDGen;
const PluginName = "homebridge-vivint"
const PlatformName = "Vivint"
const VivintApiModule = require("./lib/vivint_api.js")
const DeviceSetModule = require("./lib/device_set.js")
const ThermostatCharacteristicsModule = require("./lib/thermostat_characteristics.js")
function asyncAccumulator() {
let accum = []
var open = true
let append = (e) => {
if (open)
accum.push(e)
else
throw "Accumulator is closed"
}
var promiseCompleter = null
let finalize = () => {
open = false
promiseCompleter(accum)
}
let result = new Promise((success, reject) => {
promiseCompleter = success
})
return {append, finalize, result}
}
module.exports = function (homebridge) {
Accessory = homebridge.platformAccessory;
Service = homebridge.hap.Service;
Characteristic = homebridge.hap.Characteristic;
UUIDGen = homebridge.hap.uuid;
let ThermostatCharacteristics = ThermostatCharacteristicsModule(homebridge)
function setCastrophe(accessories) {
accessories.forEach((accessory) => {
accessory.services
.filter((service) => service.UUID != Service.AccessoryInformation)
.forEach((service) => {
service.characteristics.forEach((characteristic) => {
characteristic.on('get', (next) => {
next(new Error("Platform failed to initialize"))
})
})
})
})
}
class VivintPlatform {
constructor(log, config, api) {
this.log = log
this.config = config
this.api = api
let VivintApi = VivintApiModule(config, log)
this.vivintApiPromise = VivintApi.login({username: config.username, password: config.password})
let apiLoginRefreshSecs = config.apiLoginRefreshSecs || 1200 // once per 20 minutes default
this.deviceSetPromise = this.vivintApiPromise.then((vivintApi) => {
let DeviceSet = DeviceSetModule(config, log, homebridge, vivintApi,...