UNPKG

homebridge-smartthings-v2

Version:
393 lines (346 loc) 17.9 kB
const inherits = require('util').inherits; module.exports = function(Service, Characteristic) { var CommunityTypes = {}; CommunityTypes.KilowattHours = function() { Characteristic.call(this, 'Total Consumption', 'E863F10C-079E-48FF-8F27-9C2605A29F52'); 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(); }; inherits(CommunityTypes.KilowattHours, Characteristic); CommunityTypes.Watts = function() { Characteristic.call(this, 'Consumption', 'E863F10D-079E-48FF-8F27-9C2605A29F52'); 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(); }; inherits(CommunityTypes.Watts, Characteristic); // Characteristics CommunityTypes.Timestamp = function() { Characteristic.call(this, "Timestamp", 'FF000001-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.Timestamp, Characteristic); CommunityTypes.AudioDataURL = function() { Characteristic.call(this, "Audio URL", 'FF000002-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); }; inherits(CommunityTypes.AudioDataURL, Characteristic); CommunityTypes.VideoDataURL = function() { Characteristic.call(this, "Video URL", 'FF000003-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); }; inherits(CommunityTypes.VideoDataURL, Characteristic); CommunityTypes.AudioVolume = function() { Characteristic.call(this, 'Audio Volume', '00001001-0000-1000-8000-135D67EC4377'); 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(); }; inherits(CommunityTypes.AudioVolume, Characteristic); CommunityTypes.Muting = function() { Characteristic.call(this, 'Muting', '00001002-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.UINT8, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.Muting, Characteristic); CommunityTypes.PlaybackState = function() { Characteristic.call(this, 'Playback State', '00002001-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.UINT8, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.PlaybackState, Characteristic); CommunityTypes.PlaybackState.PLAYING = 0; CommunityTypes.PlaybackState.PAUSED = 1; CommunityTypes.PlaybackState.STOPPED = 2; CommunityTypes.SkipForward = function() { Characteristic.call(this, 'Skip Forward', '00002002-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.BOOL, perms: [Characteristic.Perms.WRITE] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.SkipForward, Characteristic); CommunityTypes.SkipBackward = function() { Characteristic.call(this, 'Skip Backward', '00002003-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.BOOL, perms: [Characteristic.Perms.WRITE] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.SkipBackward, Characteristic); CommunityTypes.ShuffleMode = function() { Characteristic.call(this, 'Shuffle Mode', '00002004-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.UINT8, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; 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', '00002005-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.UINT8, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.RepeatMode, Characteristic); CommunityTypes.RepeatMode.OFF = 0; CommunityTypes.RepeatMode.ONE = 1; CommunityTypes.RepeatMode.ALL = 2; CommunityTypes.PlaybackSpeed = function() { Characteristic.call(this, 'Playback Speed', '00002006-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.FLOAT, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.PlaybackSpeed, Characteristic); CommunityTypes.MediaCurrentPosition = function() { Characteristic.call(this, 'Media Current Position', '00002007-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.FLOAT, // In seconds perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.MediaCurrentPosition, Characteristic); CommunityTypes.MediaItemName = function() { Characteristic.call(this, 'Media Name', '00003001-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.MediaItemName, Characteristic); CommunityTypes.MediaItemAlbumName = function() { Characteristic.call(this, 'Media Album Name', '00003002-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.MediaItemAlbumName, Characteristic); CommunityTypes.MediaItemArtist = function() { Characteristic.call(this, 'Media Artist', '00003003-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.MediaItemArtist, Characteristic); CommunityTypes.MediaItemDuration = function() { Characteristic.call(this, 'Media Duration', '00003005-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.FLOAT, // In seconds perms: [Characteristic.Perms.READ, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.MediaItemDuration, Characteristic); CommunityTypes.StillImage = function() { Characteristic.call(this, 'Still Image', '00004001-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.DATA, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.StillImage, Characteristic); // Also known as MIME type... CommunityTypes.MediaTypeIdentifier = function() { Characteristic.call(this, 'Media Type Identifier', '00004002-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = null; }; inherits(CommunityTypes.MediaTypeIdentifier, Characteristic); CommunityTypes.MediaWidth = function() { Characteristic.call(this, 'Media Width', '00004003-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.UINT32, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.MediaWidth, Characteristic); CommunityTypes.MediaHeight = function() { Characteristic.call(this, 'Media Width', '00004004-0000-1000-8000-135D67EC4377'); this.setProps({ format: Characteristic.Formats.UINT32, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.MediaHeight, Characteristic); // Custom SmartThings Device Characteristic CommunityTypes.DeviceId = function() { Characteristic.call(this, 'Device Id', '2ecc2a94-30d3-4457-bba7-0a93468de8a4'); this.setProps({ format: Characteristic.Formats.STRING, perms: [Characteristic.Perms.READ, Characteristic.Perms.WRITE, Characteristic.Perms.HIDDEN] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.DeviceId, Characteristic); // Services CommunityTypes.AudioDeviceService = function(displayName, subtype) { Service.call(this, displayName, '00000001-0000-1000-8000-135D67EC4377', subtype); // Required Characteristics this.addCharacteristic(CommunityTypes.AudioVolume); // Optional Characteristics this.addOptionalCharacteristic(CommunityTypes.Muting); this.addOptionalCharacteristic(Characteristic.Name); }; inherits(CommunityTypes.AudioDeviceService, Service); CommunityTypes.PlaybackDeviceService = function(displayName, subtype) { Service.call(this, displayName, '00000002-0000-1000-8000-135D67EC4377', 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); }; 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, '00000003-0000-1000-8000-135D67EC4377', 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); }; inherits(CommunityTypes.MediaInformationService, Service); CommunityTypes.StillImageService = function(displayName, subtype) { Service.call(this, displayName, '00000004-0000-1000-8000-135D67EC4377', 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); }; inherits(CommunityTypes.StillImageService, Service); CommunityTypes.SecurityCameraService = function(displayName, subtype) { Service.call(this, displayName, '00000005-0000-1000-8000-135D67EC4377', 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.FanOscilationMode = function() { Characteristic.call(this, 'RotationSpeed', '00000029-0000-1000-8000-0026BB765291'); this.setProps({ format: Characteristic.Formats.UINT8, maxValue: 100, minValue: 0, validValues: [25,50,75,100], perms: [Characteristic.Perms.READ,Characteristic.Perms.WRITE, Characteristic.Perms.NOTIFY] }); this.value = this.getDefaultValue(); }; inherits(CommunityTypes.FanOscilationMode, Characteristic.RotationSpeed); // The value property of FanOscilationMode must be one of the following: CommunityTypes.FanOscilationMode.SLEEP = 25; CommunityTypes.FanOscilationMode.LOW = 50; CommunityTypes.FanOscilationMode.MEDIUM = 75; CommunityTypes.FanOscilationMode.HIGH = 100; CommunityTypes.NewAirPurifierService = function(displayName, subtype) { Service.call(this, displayName, '000000BB-0000-1000-8000-0026BB765291', subtype); // Required Characteristics this.addCharacteristic(Characteristic.Active); this.addCharacteristic(Characteristic.CurrentAirPurifierState); this.addCharacteristic(Characteristic.TargetAirPurifierState); this.addCharacteristic(CommunityTypes.FanOscilationMode); // Optional Characteristics this.addOptionalCharacteristic(Characteristic.Name); }; inherits(CommunityTypes.NewAirPurifierService, Service.AirPurifier); return CommunityTypes; };