Socket
Socket
Sign inDemoInstall

homebridge-syntex-dynamic-platform

Package Overview
Dependencies
Maintainers
1
Versions
345
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

homebridge-syntex-dynamic-platform - npm Package Compare versions

Comparing version 1.0.0-b2 to 1.0.0-b20

accessories/coloredBulb.js

120

accessories/base.js
module.exports = class BaseService
{
constructor(homebridgeAccessory, deviceConfig, serviceType, type, subtype, manager)
constructor(homebridgeAccessory, deviceConfig, serviceConfig, serviceType, manager)
{
var service = homebridgeAccessory.getServiceById(serviceType, subtype);
this.id = deviceConfig['id'];
this.name = serviceConfig['name'];
var subtype = serviceConfig.subtype;
if(subtype.includes('-'))
{
subtype = subtype.split('-')[1];
}
this.letters = typeToLetter(serviceConfig.type) + subtype;
this.homebridgeAccessory = homebridgeAccessory;
this.logger = manager.logger;
var service = homebridgeAccessory.getServiceById(serviceType, serviceConfig.subtype);
if(service)
{
manager.logger.debug('Existierenden Service gefunden! ' + deviceConfig.name + ' ' + type + ' ' + subtype + ' ( ' + deviceConfig.id + ' )');
this.logger.debug('Existierenden Service gefunden! ' + serviceConfig.name + ' ' + serviceConfig.type + ' ' + serviceConfig.subtype + ' ( ' + this.id + ' )');
service.setCharacteristic(manager.platform.api.hap.Characteristic.Name, deviceConfig.name);
service.setCharacteristic(manager.platform.api.hap.Characteristic.Name, serviceConfig.name);
}
else
{
manager.logger.debug('Erstelle neuen Service! ' + deviceConfig.name + ' ' + type + ' ' + subtype + ' ( ' + deviceConfig.id + ' )');
this.logger.debug('Erstelle neuen Service! ' + serviceConfig.name + ' ' + serviceConfig.type + ' ' + serviceConfig.subtype + ' ( ' + this.id + ' )');
homebridgeAccessory.addService(serviceType, deviceConfig.name, subtype)
//homebridgeAccessory.service.push();
homebridgeAccessory.addService(serviceType, serviceConfig.name, serviceConfig.subtype)
}
}
}
getValue(key, verbose)
{
var value = null;
console.log(key, this.homebridgeAccessory.context);
if(this.homebridgeAccessory != null
&& this.homebridgeAccessory.context != null
&& this.homebridgeAccessory.context.data != null
&& this.homebridgeAccessory.context.data[this.letters] != null
&& this.homebridgeAccessory.context.data[this.letters][key] != null)
{
value = this.homebridgeAccessory.context.data[this.letters][key];
if(verbose)
{
this.logger.log('read', this.id, this.letters, 'HomeKit Status für [' + this.name + '] ist [' + JSON.stringify(value) + '] ( ' + this.id + ' )');
}
}
else
{
this.logger.log('warn', this.id, this.letters, '[' + this.name + '] wurde nicht im Cache gefunden! ( ' + this.id + ' )');
}
return value;
}
setValue(key, value, verbose)
{
if(this.homebridgeAccessory && this.homebridgeAccessory.context)
{
if(!this.homebridgeAccessory.context.data)
{
this.homebridgeAccessory.context.data = {};
}
if(!this.homebridgeAccessory.context.data[this.letters])
{
this.homebridgeAccessory.context.data[this.letters] = {};
}
this.homebridgeAccessory.context.data[this.letters][key] = value;
if(verbose)
{
this.logger.log('update', this.id, this.letters, 'HomeKit Status für [' + this.name + '] geändert zu [' + JSON.stringify(value) + '] ( ' + this.id + ' )');
}
return true;
}
else
{
this.logger.log('error', this.id, this.letters, '[' + this.name + '] konnte nicht im Cache gespeichert werden! ( ' + this.id + ' )');
return false;
}
}
getValues()
{
var values = null;
if(this.homebridgeAccessory != null
&& this.homebridgeAccessory.context != null
&& this.homebridgeAccessory.context.data != null
&& this.homebridgeAccessory.context.data[this.letters] != null)
{
values = this.homebridgeAccessory.context.data[this.letters];
}
else
{
this.logger.log('warn', this.id, this.letters, '[' + this.name + '] wurde nicht im Cache gefunden! ( ' + this.id + ' )');
}
return values;
}
}
var types = ['contact', 'motion', 'temperature', 'humidity', 'rain', 'light', 'occupancy', 'smoke', 'airquality', 'rgb', 'switch', 'relais', 'statelessswitch', 'outlet', 'led', 'dimmer'];
var letters = ['A', 'B', 'C', 'D', 'E', 'F', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
function letterToType(letter)
{
return types[letters.indexOf(letter.toUpperCase())];
}
function typeToLetter(type)
{
return letters[types.indexOf(type.toLowerCase())];
}

26

accessories/outlet.js
const BaseService = require('./base');
let Service;
let Characteristic;
let Service, Characteristic;
module.exports = class OutletService extends BaseService
{
constructor(homebridgeAccessory, deviceConfig, subtype, manager)
constructor(homebridgeAccessory, deviceConfig, serviceConfig, manager)
{
Characteristic = manager.platform.api.hap.Characteristic;
Service = manager.platform.api.hap.Service;
Characteristic = manager.platform.api.hap.Characteristic;
super(homebridgeAccessory, deviceConfig, Service.Outlet, 'outlet', subtype, manager);
super(homebridgeAccessory, deviceConfig, serviceConfig, Service.Outlet, manager);
this.letters = '7' + subtype;
homebridgeAccessory.getServiceById(Service.Outlet, serviceConfig.subtype).getCharacteristic(Characteristic.On).on('get', this.getState.bind(this)).on('set', this.setState.bind(this));
this.changeHandler = (state) =>
{
homebridgeAccessory.getServiceById(Service.Outlet, serviceConfig.subtype).getCharacteristic(Characteristic.On).updateValue(state);
homebridgeAccessory.getServiceById(Service.Outlet, subtype).getCharacteristic(Characteristic.On).on('get', this.getState.bind(this)).on('set', this.setState.bind(this));
super.setValue('state', state);
};
}
getState(callback)
{
console.log('getState() OUTLET');
callback(false);
callback(super.getValue('state', true));
}

@@ -29,3 +31,3 @@

{
console.log('setState(' + level + ') OUTLET');
super.setValue('state', level);

@@ -32,0 +34,0 @@ callback();

const BaseService = require('./base');
let Service;
let Characteristic;
let Service, Characteristic;
module.exports = class SwitchService extends BaseService
{
constructor(homebridgeAccessory, deviceConfig, subtype, manager)
constructor(homebridgeAccessory, deviceConfig, serviceConfig, manager)
{
Characteristic = manager.platform.api.hap.Characteristic;
Service = manager.platform.api.hap.Service;
Characteristic = manager.platform.api.hap.Characteristic;
super(homebridgeAccessory, deviceConfig, Service.Switch, 'switch', subtype, manager);
super(homebridgeAccessory, deviceConfig, serviceConfig, Service.Switch, manager);
homebridgeAccessory.getServiceById(Service.Switch, serviceConfig.subtype).getCharacteristic(Characteristic.On).on('get', this.getState.bind(this)).on('set', this.setState.bind(this));
this.changeHandler = (state) =>
{
homebridgeAccessory.getServiceById(Service.Switch, serviceConfig.subtype).getCharacteristic(Characteristic.On).updateValue(state);
this.letters = '4' + subtype;
homebridgeAccessory.getServiceById(Service.Switch, subtype).getCharacteristic(Characteristic.On).on('get', this.getState.bind(this)).on('set', this.setState.bind(this));
super.setValue('state', state);
};
}

@@ -22,5 +26,3 @@

{
console.log('getState() SWITCH');
callback(false);
callback(null, super.getValue('state') || false);
}

@@ -30,3 +32,3 @@

{
console.log('setState(' + level + ') SWITCH');
super.setValue('state', level);

@@ -33,0 +35,0 @@ callback();

@@ -0,8 +1,11 @@

const AccessoryInformationService = require('./info');
const OutletService = require('./outlet');
const SwitchService = require('./switch');
const LightBulbService = require('./lightbulb');
const LightBulbService = require('./lightBulb');
const DimmedBulbService = require('./dimmedBulb');
const ColoredBulbService = require('./coloredBulb');
const ContactService = require('./contact');
let PlatformAccessory;
let Service;
let Characteristic;
let UUIDGen;

@@ -23,6 +26,6 @@

this.manufacturer = deviceConfig['manufacturer'] || 'SynTex';
this.model = deviceConfig['model'] || 'Virtual Accessory';
this.version = deviceConfig['version'] || '1.0.0';
this.model = deviceConfig['model'] || 'Virtual Accessory';
this.manufacturer = deviceConfig['manufacturer'] || 'SynTex';
this.manager = manager;

@@ -32,3 +35,3 @@

({ Service, Characteristic, uuid: UUIDGen } = manager.platform.api.hap);
({ Service, uuid: UUIDGen } = manager.platform.api.hap);

@@ -40,28 +43,18 @@ this.homebridgeAccessory = homebridgeAccessory;

for(var i = 0; i < this.services.length; i++)
this.setAccessoryInformation();
if(Array.isArray(this.services))
{
var accessoryService = Service.AccessoryInformation;
if(deviceConfig.services[i] == 'rgb')
for(var i = 0; i < this.services.length; i++)
{
accessoryService = Service.Lightbulb;
this.addService(this.services[i]);
}
else if(deviceConfig.services[i] == 'switch')
{
accessoryService = Service.Switch;
}
else if(deviceConfig.services[i] == 'outlet')
{
accessoryService = Service.Outlet;
}
else if(deviceConfig.services[i] == 'fan')
{
accessoryService = Service.Fanv2;
}
this.addService(accessoryService, deviceConfig.services[i]);
}
else
{
this.addService(this.services);
}
}
addService(serviceType, config)
addService(config)
{

@@ -80,3 +73,3 @@ var type = config;

this.setService(serviceType, config, this.subtypes[type]);
this.setService(config, this.subtypes[type].toString());

@@ -86,5 +79,30 @@ this.subtypes[type]++;

setService(serviceType, config, subtype)
addAccessory()
{
//var name = this.name;
if(this.homebridgeAccessory)
{
this.logger.debug('Existierendes Accessory gefunden! ' + this.name + ' ( ' + this.id + ' )');
this.homebridgeAccessory.displayName = this.name;
}
else
{
this.logger.debug('Erstelle neues Accessory! ' + this.name + ' ( ' + this.id + ' )');
this.homebridgeAccessory = new PlatformAccessory(this.name, UUIDGen.generate(this.id), Service.Switch);
this.platform.registerPlatformAccessory(this.homebridgeAccessory);
}
}
setAccessoryInformation()
{
var service = new AccessoryInformationService(this.homebridgeAccessory, this.deviceConfig, { manufacturer : this.manufacturer, model : this.model, version : this.version }, this.manager);
this.service.push(service);
}
setService(config, subtype)
{
var name = this.name;
var type = config;

@@ -94,3 +112,2 @@

{
/*
if(config.name != null)

@@ -100,3 +117,3 @@ {

}
*/
if(config.type != null)

@@ -108,16 +125,34 @@ {

var service = null;
var serviceConfig = { name : name, type : type, subtype : subtype };
if(type == 'switch')
{
var service = new SwitchService(this.homebridgeAccessory, this.deviceConfig, subtype, this.manager);
service = new SwitchService(this.homebridgeAccessory, this.deviceConfig, serviceConfig, this.manager);
}
else if(type == 'outlet')
{
var service = new OutletService(this.homebridgeAccessory, this.deviceConfig, subtype, this.manager);
service = new OutletService(this.homebridgeAccessory, this.deviceConfig, serviceConfig, this.manager);
}
else if(type == 'led')
{
service = new LightBulbService(this.homebridgeAccessory, this.deviceConfig, serviceConfig, this.manager);
}
else if(type == 'dimmer')
{
service = new DimmedBulbService(this.homebridgeAccessory, this.deviceConfig, serviceConfig, this.manager);
}
else if(type == 'rgb')
{
var service = new LightBulbService(this.homebridgeAccessory, this.deviceConfig, subtype, this.manager);
service = new ColoredBulbService(this.homebridgeAccessory, this.deviceConfig, serviceConfig, this.manager);
}
else if(type == 'contact')
{
service = new ContactService(this.homebridgeAccessory, this.deviceConfig, serviceConfig, this.manager);
}
this.service.push(service);
if(service != null)
{
this.service.push(service);
}
}

@@ -129,33 +164,2 @@

}
addAccessory()
{
if(this.homebridgeAccessory)
{
this.logger.debug('Existierendes Accessory gefunden! ' + this.name + ' ( ' + this.id + ' )');
this.homebridgeAccessory.displayName = this.name;
}
else
{
this.logger.debug('Erstelle neues Accessory! ' + this.name + ' ( ' + this.id + ' )');
this.homebridgeAccessory = new PlatformAccessory(this.name, UUIDGen.generate(this.id), Service.Switch);
this.platform.registerPlatformAccessory(this.homebridgeAccessory);
}
}
}
var types = ['contact', 'motion', 'temperature', 'humidity', 'rain', 'light', 'occupancy', 'smoke', 'airquality', 'rgb', 'switch', 'relais', 'statelessswitch', 'outlet'];
var letters = ['A', 'B', 'C', 'D', 'E', 'F', '0', '1', '2', '3', '4', '5', '6', '7'];
function letterToType(letter)
{
return types[letters.indexOf(letter.toUpperCase())];
}
function typeToLetter(type)
{
return letters[types.indexOf(type.toLowerCase())];
}
{
"name": "homebridge-syntex-dynamic-platform",
"version": "1.0.0-b2",
"version": "1.0.0-b20",
"description": "A Dynamic Platform Accessory",
"main": "index.js",
"main": "platform.js",
"author": "SynTexDZN",

@@ -7,0 +7,0 @@ "engines": {

@@ -0,34 +1,103 @@

const { pid } = require('process');
const UniversalAccessory = require('./accessories/universal');
const AccessoryInformationService = require('./accessories/info');
const OutletService = require('./accessories/outlet');
const SwitchService = require('./accessories/switch');
const LightBulbService = require('./accessories/lightBulb');
const DimmedBulbService = require('./accessories/dimmedBulb');
const ColoredBulbService = require('./accessories/coloredBulb');
const ContactService = require('./accessories/contact');
const pluginID = 'homebridge-syntex-dynamic-platform';
const pluginName = 'SynTexDynamicPlatform';
var pluginID = 'homebridge-syntex-dynamic-platform';
var pluginName = 'SynTexDynamicPlatform';
let logger = require('./logger');
let logger = require('./logger'), WebServer = require('./webserver');;
module.exports = class SynTexDynamicPlatform
let DynamicPlatform = class SynTexDynamicPlatform
{
constructor(log, config, api)
constructor(config, api, pID, pName)
{
this.log = log;
this.config = config;
this.port = config.port;
pluginID = pID;
pluginName = pName;
console.log(this.port);
this.logger = new logger(pluginName, config.log_directory, api.user.storagePath());
if(!config || !config.options)
if(this.port != null)
{
this.logger.debug('Keine Config gefunden, das Plugin wird deaktiviert!')
//return;
WebServer = new WebServer(pluginName, this.logger, this.port, false);
/*
WebServer.addPage('/serverside/version', (response) => {
response.write(require('./package.json').version);
response.end();
});
WebServer.addPage('/serverside/check-restart', (response) => {
response.write(restart.toString());
response.end();
});
WebServer.addPage('/serverside/update', (response, urlParams) => {
var version = urlParams.version != null ? urlParams.version : 'latest';
const { exec } = require('child_process');
exec('sudo npm install ' + pluginID + '@' + version + ' -g', (error, stdout, stderr) => {
try
{
if(error || stderr.includes('ERR!'))
{
logger.log('warn', 'bridge', 'Bridge', 'Das Plugin ' + pluginName + ' konnte nicht aktualisiert werden! ' + (error || stderr));
}
else
{
logger.log('success', 'bridge', 'Bridge', 'Das Plugin ' + pluginName + ' wurde auf die Version [' + version + '] aktualisiert!');
restart = true;
logger.log('warn', 'bridge', 'Bridge', 'Die Homebridge wird neu gestartet ..');
exec('sudo systemctl restart homebridge');
}
response.write(error || stderr.includes('ERR!') ? 'Error' : 'Success');
response.end();
}
catch(e)
{
logger.err(e);
}
});
});
*/
}
if(!config)
{
this.logger.debug('Keine Config gefunden, das Plugin wird deaktiviert!');
return;
}
this.accessories = new Map();
if(api)
{
this.api = api;
/*
this.api.on('didFinishLaunching', () => {
// Demo Stuff
this.logger.debug('Initialisiere ' + pluginName + ' ...');
var devices = ['acc1', 'acc2'];
var devices = ['acc1', 'acc2', 'acc3', 'acc4', 'acc5'];

@@ -43,4 +112,7 @@ for(const id of devices)

var devices = [{id : 'acc1', name : 'Accessory 1', services : ['outlet', 'outlet', 'outlet', 'outlet', 'outlet']},
{id : 'acc2', name : 'Accessory 2', services : ['rgb', 'switch']}];
var devices = [{id : 'acc1', name : 'Accessory 1', services : [{ type : 'outlet', name : 'Outlet 1' }, { type : 'outlet', name : 'Outlet 2' }, { type : 'outlet', name : 'Outlet 3' }, { type : 'outlet', name : 'Outlet 4' }, { type : 'outlet', name : 'Outlet 5' }]},
{id : 'acc2', name : 'Accessory 2', services : ['led', 'dimmer', 'rgb', 'switch']},
{id : 'acc3', name : 'Accessory 3', services : ['dimmer']},
{id : 'acc4', name : 'Accessory 4', services : 'led'},
{id : 'acc5', name : 'Accessory 5', services : 'contact'}];

@@ -51,28 +123,69 @@ for(const device of devices)

}
for(const accessory of this.accessories)
{
for(const x in accessory[1].service)
{
if(accessory[1].service[x].letters)
{
console.log(accessory[1].id, accessory[1].service[x].letters);
console.log(this.readAccessoryService(accessory[1].id, accessory[1].service[x].letters));
}
}
}
setTimeout(() => {
this.updateAccessoryService('acc5', 'A0', false);
}, 10000);
setTimeout(() => {
this.updateAccessoryService('acc5', 'A0', true);
}, 20000);
setTimeout(() => {
this.updateAccessoryService('acc3', '90', { power : true, brightness : 75 });
}, 30000);
});
*/
}
}
refreshDeviceStates()
registerPlatformAccessory(platformAccessory)
{
this.logger.debug('Registriere Platform Accessory [' + platformAccessory.displayName + ']');
this.api.registerPlatformAccessories(pluginID, pluginName, [platformAccessory]);
}
addAccessory(device)
getPlatformAccessory()
{
this.logger.log('info', 'bridge', 'Bridge', 'Hinzufügen: ' + device.name + ' ( ' + device.id + ' )');
return this;
}
addAccessory(accessory)
{
this.logger.log('info', 'bridge', 'Bridge', 'Hinzufügen: ' + accessory.name + ' ( ' + accessory.id + ' )');
const uuid = this.api.hap.uuid.generate(device.id);
const uuid = this.api.hap.uuid.generate(accessory.id);
const homebridgeAccessory = this.accessories.get(uuid);
let deviceAccessory = new UniversalAccessory(homebridgeAccessory, device, { platform : this, logger : this.logger });
this.accessories.set(uuid, deviceAccessory.homebridgeAccessory);
//let deviceAccessory = new UniversalAccessory(homebridgeAccessory, accessory, { platform : this, logger : this.logger });
this.accessories.set(uuid, accessory);
}
registerPlatformAccessory(platformAccessory)
getAccessory(id)
{
this.logger.debug('Registriere Platform Accessory [' + platformAccessory.displayName + ']');
this.api.registerPlatformAccessories(pluginID, pluginName, [platformAccessory]);
const uuid = this.api.hap.uuid.generate(id);
const homebridgeAccessory = this.accessories.get(uuid);
return homebridgeAccessory;
}
configureAccessory(accessory)

@@ -84,2 +197,11 @@ {

}
removeAccessory(accessory)
{
this.logger.debug('Entferne Accessory [' + accessory.displayName + '] ( ' + accessory.UUID + ' )');
this.api.unregisterPlatformAccessories(pluginID, pluginName, [accessory]);
this.accessories.delete(accessory.uuid);
}
/*

@@ -92,9 +214,36 @@ updateAccessoryReachability(accessory, state)

*/
removeAccessory(accessory)
updateAccessoryService(id, letters, value)
{
this.logger.debug('Entferne Accessory [' + accessory.name + '] ( ' + accessory.UUID + ' )');
this.api.unregisterPlatformAccessories(pluginID, pluginName, [accessory]);
const uuid = this.api.hap.uuid.generate(id);
const homebridgeAccessory = this.accessories.get(uuid);
this.accessories.delete(accessory.uuid);
for(var i = 0; i < homebridgeAccessory.service.length; i++)
{
if(homebridgeAccessory.service[i].letters == letters)
{
homebridgeAccessory.service[i].changeHandler(value);
}
}
}
}
readAccessoryService(id, letters)
{
const uuid = this.api.hap.uuid.generate(id);
const homebridgeAccessory = this.accessories.get(uuid);
var state = null;
for(var i = 0; i < homebridgeAccessory.service.length; i++)
{
if(homebridgeAccessory.service[i].letters == letters)
{
state = homebridgeAccessory.service[i].getValues();
}
}
return state;
}
}
module.exports = { DynamicPlatform, UniversalAccessory, AccessoryInformationService, OutletService, SwitchService, LightBulbService, DimmedBulbService, ColoredBulbService, ContactService };

@@ -5,4 +5,17 @@ # Homebridge SynTex Dynamic Platform

# Installation
## Installation
1. Install homebridge using: `sudo npm install -g homebridge`
2. Install this plugin using: `sudo npm install -g homebridge-dynamic-platform`
2. Install this plugin using: `sudo npm install -g homebridge-syntex-dynamic-platform`
## Example Config
**Info:** If the directory for the storage can't be created you have to do it by yourself and give it full write permissions!
- `sudo chown -R homebridge ./SynTex/` ( *permissions only for homebridge* )
- `sudo chmod 777 -R homebridge ./SynTex/` ( *permissions for many processes* )
```
{
"platform": "SynTexDynamicPlatform",
"log_directory": "./SynTex/log"
}
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc