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,...