UNPKG

hap-nodejs-community-types

Version:

A collection of extension HAP Service and Characteristic types known to be used by HomeKit apps and accessories, for use with the HAP-NodeJS library.

1,098 lines (963 loc) 45.4 kB
var inherits = require('util').inherits; var Service, Characteristic; module.exports = function(homebridge, options) { Service = homebridge.hap.Service; Characteristic = homebridge.hap.Characteristic; UUID = homebridge.hap.uuid; var CommunityTypes = {}; if (!options) options = {}; // Characteristics CommunityTypes.Timestamp = function() { Characteristic.call(this, "Timestamp", CommunityTypes.Timestamp.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.Timestamp.UUID = 'FF000001-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.Timestamp, Characteristic); CommunityTypes.AudioDataURL = function() { Characteristic.call(this, "Audio URL", CommunityTypes.AudioDataURL.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); }; CommunityTypes.AudioDataURL.UUID = 'FF000002-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.AudioDataURL, Characteristic); CommunityTypes.VideoDataURL = function() { Characteristic.call(this, "Video URL", CommunityTypes.VideoDataURL.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); }; CommunityTypes.VideoDataURL.UUID = 'FF000003-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.VideoDataURL, Characteristic); CommunityTypes.AudioVolume = function() { Characteristic.call(this, 'Audio Volume', CommunityTypes.AudioVolume.UUID); this.setProps({ format: Characteristic.Formats.UINT8, unit: Characteristic.Units.PERCENTAGE, maxValue: 100, minValue: 0, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.AudioVolume.UUID = '00001001-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.AudioVolume, Characteristic); CommunityTypes.Muting = function() { Characteristic.call(this, 'Muting', CommunityTypes.Muting.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.Muting.UUID = '00001002-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.Muting, Characteristic); CommunityTypes.PlaybackState = function() { Characteristic.call(this, 'Playback State', CommunityTypes.PlaybackState.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.PlaybackState.UUID = '00002001-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.PlaybackState, Characteristic); CommunityTypes.PlaybackState.PLAYING = 0; CommunityTypes.PlaybackState.PAUSED = 1; CommunityTypes.PlaybackState.STOPPED = 2; CommunityTypes.SkipForward = function() { Characteristic.call(this, 'Skip Forward', CommunityTypes.SkipForward.UUID); this.setProps({ format: Characteristic.Formats.BOOL, perms: [ Characteristic.Perms.WRITE ] }); this.value = this.getDefaultValue(); }; CommunityTypes.SkipForward.UUID = '00002002-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.SkipForward, Characteristic); CommunityTypes.SkipBackward = function() { Characteristic.call(this, 'Skip Backward', CommunityTypes.SkipBackward.UUID); this.setProps({ format: Characteristic.Formats.BOOL, perms: [ Characteristic.Perms.WRITE ] }); this.value = this.getDefaultValue(); }; CommunityTypes.SkipBackward.UUID = '00002003-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.SkipBackward, Characteristic); CommunityTypes.ShuffleMode = function() { Characteristic.call(this, 'Shuffle Mode', CommunityTypes.ShuffleMode.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.ShuffleMode.UUID = '00002004-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.ShuffleMode, Characteristic); //NOTE: If GROUP or SET is not supported, accessories should coerce to ALBUM. // If ALBUM is not supported, coerce to ITEM. // In general, it is recommended for apps to only assume OFF, ITEM, and ALBUM // are supported unless it is known that the accessory supports other settings. CommunityTypes.ShuffleMode.OFF = 0; //NOTE: INDIVIDUAL is deprecated. CommunityTypes.ShuffleMode.ITEM = CommunityTypes.ShuffleMode.INDIVIDUAL = 1; CommunityTypes.ShuffleMode.GROUP = 2; // e.g. iTunes "Groupings" CommunityTypes.ShuffleMode.ALBUM = 3; // e.g. album or season CommunityTypes.ShuffleMode.SET = 4; // e.g. T.V. Series or album box set CommunityTypes.RepeatMode = function() { Characteristic.call(this, 'Repeat Mode', CommunityTypes.RepeatMode.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.RepeatMode.UUID = '00002005-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.RepeatMode, Characteristic); CommunityTypes.RepeatMode.OFF = 0; CommunityTypes.RepeatMode.ONE = 1; CommunityTypes.RepeatMode.ALL = 2; CommunityTypes.PlaybackSpeed = function() { Characteristic.call(this, 'Playback Speed', CommunityTypes.PlaybackSpeed.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.PlaybackSpeed.UUID = '00002006-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.PlaybackSpeed, Characteristic); CommunityTypes.MediaCurrentPosition = function() { Characteristic.call(this, 'Media Current Position', CommunityTypes.MediaCurrentPosition.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, // In seconds perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaCurrentPosition.UUID = '00002007-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaCurrentPosition, Characteristic); CommunityTypes.MediaItemName = function() { Characteristic.call(this, 'Media Name', CommunityTypes.MediaItemName.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaItemName.UUID = '00003001-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaItemName, Characteristic); CommunityTypes.MediaItemAlbumName = function() { Characteristic.call(this, 'Media Album Name', CommunityTypes.MediaItemAlbumName.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaItemAlbumName.UUID = '00003002-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaItemAlbumName, Characteristic); CommunityTypes.MediaItemArtist = function() { Characteristic.call(this, 'Media Artist', CommunityTypes.MediaItemArtist.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaItemArtist.UUID = '00003003-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaItemArtist, Characteristic); CommunityTypes.MediaItemDuration = function() { Characteristic.call(this, 'Media Duration', CommunityTypes.MediaItemDuration.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, // In seconds perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaItemDuration.UUID = '00003005-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaItemDuration, Characteristic); CommunityTypes.StillImage = function() { Characteristic.call(this, 'Still Image', CommunityTypes.StillImage.UUID); this.setProps({ format: Characteristic.Formats.DATA, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.StillImage.UUID = '00004001-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.StillImage, Characteristic); // Also known as MIME type... CommunityTypes.MediaTypeIdentifier = function() { Characteristic.call(this, 'Media Type Identifier', CommunityTypes.MediaTypeIdentifier.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaTypeIdentifier.UUID = '00004002-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaTypeIdentifier, Characteristic); CommunityTypes.MediaWidth = function() { Characteristic.call(this, 'Media Width', CommunityTypes.MediaWidth.UUID); this.setProps({ format: Characteristic.Formats.UINT32, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaWidth.UUID = '00004003-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaWidth, Characteristic); CommunityTypes.MediaHeight = function() { Characteristic.call(this, 'Media Width', CommunityTypes.MediaHeight.UUID); this.setProps({ format: Characteristic.Formats.UINT32, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.MediaHeight.UUID = '00004004-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaHeight, Characteristic); // courtesy of https://gist.github.com/gomfunkel/b1a046d729757120907c CommunityTypes.Volts = function() { Characteristic.call(this, 'Volts', CommunityTypes.Volts.UUID); this.setProps({ format: Characteristic.Formats.UINT16, unit: "V", minValue: 0, maxValue: 65535, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.Volts.UUID = 'E863F10A-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.Volts, Characteristic); CommunityTypes.Amperes = function() { Characteristic.call(this, 'Amps', CommunityTypes.Amperes.UUID); this.setProps({ format: Characteristic.Formats.UINT16, unit: "A", minValue: 0, maxValue: 65535, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.Amperes.UUID = 'E863F126-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.Amperes, Characteristic); CommunityTypes.Watts = function() { Characteristic.call(this, 'Consumption', CommunityTypes.Watts.UUID); this.setProps({ format: Characteristic.Formats.UINT16, unit: "W", minValue: 0, maxValue: 65535, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.Watts.UUID = 'E863F10D-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.Watts, Characteristic); CommunityTypes.VoltAmperes = function() { Characteristic.call(this, 'Apparent Power', CommunityTypes.VoltAmperes.UUID); this.setProps({ format: Characteristic.Formats.UINT16, unit: "VA", minValue: 0, maxValue: 65535, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.VoltAmperes.UUID = 'E863F110-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.VoltAmperes, Characteristic); CommunityTypes.KilowattHours = function() { Characteristic.call(this, 'Total Consumption', CommunityTypes.KilowattHours.UUID); this.setProps({ format: Characteristic.Formats.UINT32, unit: "kWh", minValue: 0, maxValue: 65535, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.KilowattHours.UUID = 'E863F10C-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.KilowattHours, Characteristic); CommunityTypes.KilowattVoltAmpereHour = function() { Characteristic.call(this, 'Apparent Energy', CommunityTypes.KilowattVoltAmpereHour.UUID); this.setProps({ format: Characteristic.Formats.UINT32, unit: "kVAh", minValue: 0, maxValue: 65535, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.KilowattVoltAmpereHour.UUID = 'E863F127-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.KilowattVoltAmpereHour, Characteristic); CommunityTypes.BatteryLevel = function() { Characteristic.call(this, 'Battery Level', CommunityTypes.BatteryLevel.UUID); this.setProps({ format: Characteristic.Formats.UINT16, unit: Characteristic.Units.PERCENTAGE, maxValue: 100, minValue: 0, minStep: 1, perms: [ Characteristic.Perms.READ ] }); this.value = this.getDefaultValue(); }; CommunityTypes.BatteryLevel.UUID = 'E863F11B-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.BatteryLevel, Characteristic); CommunityTypes.EveAirQuality = function () { Characteristic.call(this, 'Eve Air Quality', CommunityTypes.EveAirQuality.UUID); this.setProps({ format: Characteristic.Formats.UINT16, unit: "ppm", maxValue: 5000, minValue: 0, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ], }); this.value = this.getDefaultValue(); }; CommunityTypes.EveAirQuality.UUID = 'E863F10B-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.EveAirQuality, Characteristic); // courtesy of https://github.com/ebaauw/homebridge-lib // i should probably submit a PR for everything here that isn't in that repo... CommunityTypes.EveOpenDuration = function () { Characteristic.call(this, 'Eve Open Duration', CommunityTypes.EveOpenDuration.UUID); this.setProps({ format: Characteristic.Formats.UINT32, unit: Characteristic.Units.SECONDS, // since last reset perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY, Characteristic.Perms.WRITE] }); this.value = this.getDefaultValue(); }; CommunityTypes.EveOpenDuration.UUID = 'E863F118-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.EveOpenDuration, Characteristic); CommunityTypes.EveClosedDuration = function () { Characteristic.call(this, 'Eve Closed Duration', CommunityTypes.EveClosedDuration.UUID); this.setProps({ format: Characteristic.Formats.UINT32, unit: Characteristic.Units.SECONDS, // since last reset perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY, Characteristic.Perms.WRITE] }); this.value = this.getDefaultValue(); }; CommunityTypes.EveClosedDuration.UUID = 'E863F119-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.EveClosedDuration, Characteristic); CommunityTypes.EveLastActivation = function () { Characteristic.call(this, 'Eve Last Activation', CommunityTypes.EveLastActivation.UUID); this.setProps({ format: Characteristic.Formats.UINT32, unit: Characteristic.Units.SECONDS, // since last reset perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; CommunityTypes.EveLastActivation.UUID = 'E863F11A-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.EveLastActivation, Characteristic); CommunityTypes.EveTimesOpened = function () { Characteristic.call(this, 'Eve Times Opened', CommunityTypes.EveTimesOpened.UUID); this.setProps({ format: Characteristic.Formats.UINT32, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; CommunityTypes.EveTimesOpened.UUID = 'E863F129-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.EveTimesOpened, Characteristic); CommunityTypes.EveResetTotal = function () { Characteristic.call(this, 'Eve Reset Total', CommunityTypes.EveResetTotal.UUID); this.setProps({ format: Characteristic.Formats.UINT32, unit: Characteristic.Units.SECONDS, // since 2001/01/01 perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY, Characteristic.Perms.WRITE] }); this.value = this.getDefaultValue(); }; CommunityTypes.EveResetTotal.UUID = 'E863F112-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.EveResetTotal, Characteristic); // courtesy of https://github.com/robi-van-kinobi/homebridge-cubesensors CommunityTypes.AtmosphericPressureLevel = function () { Characteristic.call(this, 'Barometric Pressure', CommunityTypes.AtmosphericPressureLevel.UUID); this.setProps({ format: Characteristic.Formats.UINT8, unit: "mbar", minValue: 800, maxValue: 1200, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.AtmosphericPressureLevel.UUID = '28FDA6BC-9C2A-4DEA-AAFD-B49DB6D155AB'; inherits(CommunityTypes.AtmosphericPressureLevel, Characteristic); CommunityTypes.NoiseLevel = function () { Characteristic.call(this, 'Noise Level', CommunityTypes.NoiseLevel.UUID); this.setProps({ format: Characteristic.Formats.UINT8, unit: "dB", minValue: 0, maxValue: 200, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.NoiseLevel.UUID = '2CD7B6FD-419A-4740-8995-E3BFE43735AB'; inherits(CommunityTypes.NoiseLevel, Characteristic); // courtesy of https://github.com/homespun/homebridge-platform-snmp CommunityTypes.AirFlow = function () { Characteristic.call(this, 'Air Flow', CommunityTypes.AirFlow.UUID); this.setProps({ format: Characteristic.Formats.UINT8, unit: "m/s", minValue: 0, maxValue: 135, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.AirFlow.UUID = '49C8AE5A-A3A5-41AB-BF1F-12D5654F9F41'; inherits(CommunityTypes.AirFlow, Characteristic); CommunityTypes.NitrogenDioxideDetected = function () { Characteristic.call(this, 'Nitrogen Dioxide Detected', CommunityTypes.NitrogenDioxideDetected.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.NitrogenDioxideDetected.UUID = 'D737B40A-3AF0-4316-950F-76090B98C5CF'; inherits(CommunityTypes.NitrogenDioxideDetected, Characteristic); CommunityTypes.NitrogenDioxideDetected.NO2_LEVELS_NORMAL = 0; CommunityTypes.NitrogenDioxideDetected.NO2_LEVELS_ABNORMAL = 1; CommunityTypes.NitrogenDioxideLevel = function () { Characteristic.call(this, 'Nitrogen Dioxide Level', CommunityTypes.NitrogenDioxideLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppm", minValue: 0, maxValue: 1500, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.NitrogenDioxideLevel.UUID = 'B762A2AF-D9D0-4A79-814A-E9EBAB0ED290'; inherits(CommunityTypes.NitrogenDioxideLevel, Characteristic); CommunityTypes.NitrogenDioxidePeakLevel = function () { Characteristic.call(this, 'Nitrogen Dioxide Peak Level', CommunityTypes.NitrogenDioxidePeakLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppm", minValue: 0, maxValue: 1500, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.NitrogenDioxidePeakLevel.UUID = 'B6594847-7B88-496C-A1A0-B7860F3D7601'; inherits(CommunityTypes.NitrogenDioxidePeakLevel, Characteristic); // courtesy of https://github.com/homespun/homebridge-platform-aqe CommunityTypes.OzoneDetected = function () { Characteristic.call(this, 'Ozone Detected', CommunityTypes.OzoneDetected.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.OzoneDetected.UUID = '0168FA60-5CF4-4314-AA45-0F84E389A093'; inherits(CommunityTypes.OzoneDetected, Characteristic); CommunityTypes.OzoneDetected.O3_LEVELS_NORMAL = 0; CommunityTypes.OzoneDetected.O3_LEVELS_ABNORMAL = 1; CommunityTypes.OzoneLevel = function () { Characteristic.call(this, 'Ozone Level', CommunityTypes.OzoneLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppb", minValue: 0, maxValue: 1500, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.OzoneLevel.UUID = '03C17FD9-672E-42F5-8DD4-30C6822C739A'; inherits(CommunityTypes.OzoneLevel, Characteristic); CommunityTypes.OzonePeakLevel = function () { Characteristic.call(this, 'Ozone Peak Level', CommunityTypes.OzonePeakLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppb", minValue: 0, maxValue: 1500, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.OzonePeakLevel.UUID = '550EE1FF-FC66-4BB6-A1C1-4B0A07109AE3'; inherits(CommunityTypes.OzonePeakLevel, Characteristic); CommunityTypes.SodiumDioxideDetected = function () { Characteristic.call(this, 'Sodium Dioxide Detected', CommunityTypes.SodiumDioxideDetected.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.SodiumDioxideDetected.UUID = '4D237DAB-1CB6-4D52-B446-4667F58F7D28'; inherits(CommunityTypes.SodiumDioxideDetected, Characteristic); CommunityTypes.SodiumDioxideDetected.SO2_LEVELS_NORMAL = 0; CommunityTypes.SodiumDioxideDetected.SO2_LEVELS_ABNORMAL = 1; CommunityTypes.SodiumDioxideLevel = function () { Characteristic.call(this, 'Sodium Dioxide Level', CommunityTypes.SodiumDioxideLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppb", minValue: 0, maxValue: 1500, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.SodiumDioxideLevel.UUID = '66C4D315-FBEF-470E-9434-B047679F1141'; inherits(CommunityTypes.SodiumDioxideLevel, Characteristic); CommunityTypes.SodiumDioxidePeakLevel = function () { Characteristic.call(this, 'Sodium Dioxide Peak Level', CommunityTypes.SodiumDioxidePeakLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppb", minValue: 0, maxValue: 1500, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.SodiumDioxidePeakLevel.UUID = '4CD6F648-2F92-43D8-86DF-0E8DE75E033B'; inherits(CommunityTypes.SodiumDioxidePeakLevel, Characteristic); CommunityTypes.VolatileOrganicCompoundDetected = function () { Characteristic.call(this, 'Volatile Organic Compound Detected', CommunityTypes.VolatileOrganicCompoundDetected.UUID); this.setProps({ format: Characteristic.Formats.UINT8, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.VolatileOrganicCompoundDetected.UUID = '65DBC0F5-C40B-4E04-ADED-DC70031B0B82'; inherits(CommunityTypes.VolatileOrganicCompoundDetected, Characteristic); CommunityTypes.VolatileOrganicCompoundDetected.VOC_LEVELS_NORMAL = 0; CommunityTypes.VolatileOrganicCompoundDetected.VOC_LEVELS_ABNORMAL = 1; CommunityTypes.VolatileOrganicCompoundLevel = function () { Characteristic.call(this, 'Volatile Organic Compound Level', CommunityTypes.VolatileOrganicCompoundLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppb", minValue: 0, maxValue: 1500, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.VolatileOrganicCompoundLevel.UUID = '35C4C797-193D-4998-879F-A08514E87897'; inherits(CommunityTypes.VolatileOrganicCompoundLevel, Characteristic); CommunityTypes.VolatileOrganicCompoundPeakLevel = function () { Characteristic.call(this, 'Volatile Organic Compound Peak Level', CommunityTypes.VolatileOrganicCompoundPeakLevel.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: "ppb", minValue: 0, maxValue: 1500, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.VolatileOrganicCompoundPeakLevel.UUID = 'A62CB784-1916-4BDF-B840-BDB9F8A264E9'; inherits(CommunityTypes.VolatileOrganicCompoundPeakLevel, Characteristic); CommunityTypes.NotificationCode = function() { Characteristic.call(this, 'Notification Code', CommunityTypes.NotificationCode.UUID); this.setProps({ format: Characteristic.Formats.UINT8, maxValue: 255, minValue: 0, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY ] }); this.value = 255; }; CommunityTypes.NotificationCode.UUID = '381C47A3-CB06-4177-8E3D-A1B4C22EB031'; inherits(CommunityTypes.NotificationCode, Characteristic); CommunityTypes.NotificationText = function() { Characteristic.call(this, 'Notification Text', CommunityTypes.NotificationText.UUID); this.setProps({ format: Characteristic.Formats.STRING, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.NotificationText.UUID = 'e244ca80-813e-423a-86bd-02f293b857a0'; inherits(CommunityTypes.NotificationText, Characteristic); // used by Elgato Eve, number of seconds since the epoch... CommunityTypes.LastEventTime = function() { Characteristic.call(this, 'Last Event Time', CommunityTypes.LastEventTime.UUID); this.setProps({ format: Characteristic.Formats.UINT32, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.LastEventTime.UUID = 'E863F11A-079E-48FF-8F27-9C2605A29F52'; inherits(CommunityTypes.LastEventTime, Characteristic); // courtesy of https://github.com/SeydX/homebridge-broadband CommunityTypes.DownloadSpeed = function() { Characteristic.call(this, 'Download Speed', CommunityTypes.DownloadSpeed.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: (options.units && options.units.DownloadSpeed) || 'Mbps', maxValue: 1024, minValue: 0, minStep: 1, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; CommunityTypes.DownloadSpeed.UUID = 'DA70DA1F-DA72-4DB3-81C2-99F158A15A9A'; inherits(CommunityTypes.DownloadSpeed, Characteristic); CommunityTypes.UploadSpeed = function() { Characteristic.call(this, 'Upload Speed', CommunityTypes.UploadSpeed.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: 'Mbps', maxValue: 1024, minValue: 0, minStep: 1, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; CommunityTypes.UploadSpeed.UUID = 'AB74289E-D516-4A12-B2AE-1B32A74C035F'; inherits(CommunityTypes.UploadSpeed, Characteristic); CommunityTypes.Ping = function() { Characteristic.call(this, 'Ping', CommunityTypes.Ping.UUID); this.setProps({ format: Characteristic.Formats.INT, unit: 'ms', maxValue: 999, minValue: 0, minStep: 1, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; CommunityTypes.Ping.UUID = 'CC65A09A-E052-410C-981D-C11BDE2C3F60'; inherits(CommunityTypes.Ping, Characteristic); CommunityTypes.Latency = function() { Characteristic.call(this, 'Latency', CommunityTypes.Latency.UUID); this.setProps({ format: Characteristic.Formats.INT, unit: 'ms', maxValue: 999, minValue: 0, minStep: 0.001, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; CommunityTypes.Latency.UUID = '60EC80F9-F799-4E8E-B613-098E7EBCBB0B'; inherits(CommunityTypes.Latency, Characteristic); // https://github.com/naofireblade/homebridge-weather-plus CommunityTypes.DewPoint = function() { Characteristic.call(this, 'Dew Point', CommunityTypes.DewPoint.UUID); this.setProps({ format: Characteristic.Formats.FLOAT, unit: Characteristic.Units.CELSIUS, maxValue: 50, minValue: -50, minStep: 0.1, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; CommunityTypes.DewPoint.UUID = '095c46e2-278e-4e3c-b9e7-364622a0f501'; inherits(CommunityTypes.DewPoint, Characteristic); // Services CommunityTypes.AudioDeviceService = function(displayName, subtype) { Service.call(this, displayName, CommunityTypes.AudioDeviceService.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.AudioVolume); // Optional Characteristics this.addOptionalCharacteristic(CommunityTypes.Muting); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.AudioDeviceService.UUID = '00000001-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.AudioDeviceService, Service); CommunityTypes.PlaybackDeviceService = function(displayName, subtype) { Service.call(this, displayName, CommunityTypes.PlaybackDeviceService.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.PlaybackState); // Optional Characteristics this.addOptionalCharacteristic(CommunityTypes.SkipForward); this.addOptionalCharacteristic(CommunityTypes.SkipBackward); this.addOptionalCharacteristic(CommunityTypes.ShuffleMode); this.addOptionalCharacteristic(CommunityTypes.RepeatMode); this.addOptionalCharacteristic(CommunityTypes.PlaybackSpeed); this.addOptionalCharacteristic(CommunityTypes.MediaCurrentPosition); this.addOptionalCharacteristic(CommunityTypes.MediaItemName); this.addOptionalCharacteristic(CommunityTypes.MediaItemAlbumName); this.addOptionalCharacteristic(CommunityTypes.MediaItemArtist); this.addOptionalCharacteristic(CommunityTypes.MediaItemDuration); this.addOptionalCharacteristic(Characteristic.Name); // Artwork characteristics...would be better reported in a separate service? this.addOptionalCharacteristic(CommunityTypes.StillImage); this.addOptionalCharacteristic(CommunityTypes.MediaTypeIdentifier); this.addOptionalCharacteristic(CommunityTypes.MediaWidth); this.addOptionalCharacteristic(CommunityTypes.MediaHeight); }; CommunityTypes.PlaybackDeviceService.UUID = '00000002-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.PlaybackDeviceService, Service); // A media information service that has no playback controls, for e.g. DAB radio... CommunityTypes.MediaInformationService = function(displayName, subtype) { Service.call(this, displayName, CommunityTypes.MediaInformationService.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.MediaItemName); // Optional Characteristics this.addOptionalCharacteristic(CommunityTypes.MediaItemAlbumName); this.addOptionalCharacteristic(CommunityTypes.MediaItemArtist); this.addOptionalCharacteristic(CommunityTypes.MediaItemDuration); this.addOptionalCharacteristic(CommunityTypes.MediaCurrentPosition); this.addOptionalCharacteristic(Characteristic.Name); // Artwork characteristics...would be better reported in a separate service? this.addOptionalCharacteristic(CommunityTypes.StillImage); this.addOptionalCharacteristic(CommunityTypes.MediaTypeIdentifier); this.addOptionalCharacteristic(CommunityTypes.MediaWidth); this.addOptionalCharacteristic(CommunityTypes.MediaHeight); }; CommunityTypes.MediaInformationService.UUID = '00000003-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.MediaInformationService, Service); CommunityTypes.StillImageService = function(displayName, subtype) { Service.call(this, displayName, CommunityTypes.StillImageService.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.StillImage); this.addCharacteristic(CommunityTypes.MediaTypeIdentifier); // Optional Characteristics this.addOptionalCharacteristic(CommunityTypes.MediaWidth); this.addOptionalCharacteristic(CommunityTypes.MediaHeight); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.StillImageService.UUID = '00000004-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.StillImageService, Service); CommunityTypes.SecurityCameraService = function(displayName, subtype) { Service.call(this, displayName, CommunityTypes.SecurityCameraService.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.StillImageService); this.addCharacteristic(CommunityTypes.MediaTypeIdentifier); // Optional Characteristics this.addOptionalCharacteristic(CommunityTypes.Timestamp); this.addOptionalCharacteristic(CommunityTypes.MediaWidth); this.addOptionalCharacteristic(CommunityTypes.MediaHeight); this.addOptionalCharacteristic(CommunityTypes.VideoDataURL); this.addOptionalCharacteristic(CommunityTypes.AudioDataURL); this.addOptionalCharacteristic(Characteristic.MotionDetected); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.SecurityCameraService.UUID = '00000005-0000-1000-8000-135D67EC4377'; inherits(CommunityTypes.SecurityCameraService, Service); // courtesy of https://github.com/robi-van-kinobi/homebridge-cubesensors CommunityTypes.AtmosphericPressureSensor = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.AtmosphericPressureSensor.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.AtmosphericPressureLevel); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.StatusActive); this.addOptionalCharacteristic(Characteristic.StatusFault); this.addOptionalCharacteristic(Characteristic.StatusLowBattery); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.AtmosphericPressureSensor.UUID = 'B77831FD-D66A-46A4-B66D-FD7EE8DFE3CE'; inherits(CommunityTypes.AtmosphericPressureSensor, Service); CommunityTypes.NoiseLevelSensor = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.NoiseLevelSensor.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.NoiseLevel); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.StatusActive); this.addOptionalCharacteristic(Characteristic.StatusFault); this.addOptionalCharacteristic(Characteristic.StatusLowBattery); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.NoiseLevelSensor.UUID = '28FDA6BC-9C2A-4DEA-AAFD-B49DB6D155AB'; inherits(CommunityTypes.NoiseLevelSensor, Service); // courtesy of https://github.com/ToddGreenfield/homebridge-nut CommunityTypes.InputVoltageAC = function() { Characteristic.call(this, 'Input Voltage AC', CommunityTypes.InputVoltageAC.UUID); this.setProps({ format: Characteristic.Formats.Float, unit: "V", minValue: 0, maxValue: 65535, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.InputVoltageAC.UUID = UUID.generate('CommunityTypes:usagedevice:InputVoltageAC'); inherits(CommunityTypes.InputVoltageAC, Characteristic); CommunityTypes.OutputVoltageAC = function() { Characteristic.call(this, 'Output Voltage AC', CommunityTypes.OutputVoltageAC.UUID); this.setProps({ format: Characteristic.Formats.Float, unit: "V", minValue: 0, maxValue: 65535, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.OutputVoltageAC.UUID = UUID.generate('CommunityTypes:usagedevice:OutputVoltageAC'); inherits(CommunityTypes.OutputVoltageAC, Characteristic); CommunityTypes.BatteryVoltageDC = function() { Characteristic.call(this, 'Battery Voltage DC', CommunityTypes.BatteryVoltageDC.UUID); this.setProps({ format: Characteristic.Formats.Float, unit: "V", minValue: 0, maxValue: 65535, minStep: 0.01, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.BatteryVoltageDC.UUID = UUID.generate('CommunityTypes:usagedevice:BatteryVoltageDC'); inherits(CommunityTypes.BatteryVoltageDC, Characteristic); CommunityTypes.UPSLoadPercent = function() { Characteristic.call(this, 'UPS Load', CommunityTypes.UPSLoadPercent.UUID); this.setProps({ format: Characteristic.Formats.UINT8, unit: Characteristic.Units.PERCENTAGE, minValue: 0, maxValue: 100, minStep: 1, perms: [ Characteristic.Perms.READ, Characteristic.Perms.NOTIFY ] }); this.value = this.getDefaultValue(); }; CommunityTypes.UPSLoadPercent.UUID = UUID.generate('CommunityTypes:usagedevice:UPSLoadPercent'); inherits(CommunityTypes.UPSLoadPercent, Characteristic); // courtesy of https://github.com/homespun/homebridge-platform-snmp CommunityTypes.AirFlowSensor = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.AirFlowSensor.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.AirFlow); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.StatusActive); this.addOptionalCharacteristic(Characteristic.StatusFault); this.addOptionalCharacteristic(Characteristic.StatusLowBattery); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.AirFlowSensor.UUID = 'AF5C192E-420F-4A13-AB67-B8F3968A4935'; inherits(CommunityTypes.AirFlowSensor, Service); CommunityTypes.NitrogenDioxideSensor = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.NitrogenDioxideSensor.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.NitrogenDioxideDetected); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.StatusActive); this.addOptionalCharacteristic(Characteristic.StatusFault); this.addOptionalCharacteristic(Characteristic.StatusLowBattery); this.addOptionalCharacteristic(CommunityTypes.NitrogenDioxideLevel); this.addOptionalCharacteristic(CommunityTypes.NitrogenDioxidePeakLevel); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.NitrogenDioxideSensor.UUID = '9F6B797D-D43B-4C88-9AA0-57018AB8A91E'; inherits(CommunityTypes.NitrogenDioxideSensor, Service); // courtesy of https://github.com/homespun/homebridge-platform-aqe CommunityTypes.OzoneSensor = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.OzoneSensor.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.OzoneDetected); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.StatusActive); this.addOptionalCharacteristic(Characteristic.StatusFault); this.addOptionalCharacteristic(Characteristic.StatusLowBattery); this.addOptionalCharacteristic(CommunityTypes.OzoneLevel); this.addOptionalCharacteristic(CommunityTypes.OzonePeakLevel); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.OzoneSensor.UUID = 'B91C2BD6-D071-4F49-A23B-20721AC6CCEB'; inherits(CommunityTypes.OzoneSensor, Service); CommunityTypes.SodiumDioxideSensor = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.SodiumDioxideSensor.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.SodiumDioxideDetected); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.StatusActive); this.addOptionalCharacteristic(Characteristic.StatusFault); this.addOptionalCharacteristic(Characteristic.StatusLowBattery); this.addOptionalCharacteristic(CommunityTypes.SodiumDioxideLevel); this.addOptionalCharacteristic(CommunityTypes.SodiumDioxidePeakLevel); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.SodiumDioxideSensor.UUID = 'FE7CFB1F-12D0-405D-86FD-7E268D65C453'; inherits(CommunityTypes.SodiumDioxideSensor, Service); CommunityTypes.VolatileOrganicCompoundSensor = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.VolatileOrganicCompoundSensor.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.VolatileOrganicCompoundDetected); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.StatusActive); this.addOptionalCharacteristic(Characteristic.StatusFault); this.addOptionalCharacteristic(Characteristic.StatusLowBattery); this.addOptionalCharacteristic(CommunityTypes.VolatileOrganicCompoundLevel); this.addOptionalCharacteristic(CommunityTypes.VolatileOrganicCompoundPeakLevel); this.addOptionalCharacteristic(Characteristic.StatusTampered); this.addOptionalCharacteristic(Characteristic.Name); }; CommunityTypes.VolatileOrganicCompoundSensor.UUID = '776E34BC-1660-46EC-A33D-2DFE5B958699'; inherits(CommunityTypes.VolatileOrganicCompoundSensor, Service); CommunityTypes.NotificationService = function (displayName, subtype) { Service.call(this, displayName, CommunityTypes.NotificationService.UUID, subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.NotificationCode); this.addCharacteristic(CommunityTypes.NotificationText); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.Name); this.addOptionalCharacteristic(CommunityTypes.LastEventTime); }; CommunityTypes.NotificationService.UUID = '074D8CE9-5B4B-48D5-9990-D98850C2F3FE'; inherits(CommunityTypes.NotificationService, Service); return CommunityTypes; };