Added TLS support

This commit is contained in:
Serge Wagener 2022-02-10 14:46:12 +01:00
parent 0167799c54
commit b2a287934c
3 changed files with 61 additions and 27 deletions

View File

@ -48,7 +48,20 @@ Below is what i did on my Debian Bullseye installation:
## Configuration ## Configuration
If you already have a working homebridge installation just add the platform section into your existing config. If you are a new homebridge user you have to create a `config.json` file in the `.homebridge` directory. You'll find that directory in your home folder. If you already have a working homebridge installation just add the platform section into your existing config. If you are a new homebridge user you have to create a `config.json` file in the `.homebridge` directory. You'll find that directory in your home folder.
### Common characteristics ### Platform configuration
The following parameters are available to configure the plugin as platform in homebridge.
```json
{
"platform": "SmartHomeNG",
"name": "SmartHomeNG",
"host": "<your SHNG server name or IP>",
"port": 2425,
"tls": true,
}
```
If the `port` and `tls` parameters are not specified the plugin defaults to port 2424 without tls encryption.
### Common accessories characteristics
The following characteristics are valid for all accessories. The following characteristics are valid for all accessories.
Mandatory: Mandatory:
@ -141,6 +154,8 @@ This is an example config file which just uses this plugin and some example Smar
"platform": "SmartHomeNG", "platform": "SmartHomeNG",
"name": "SmartHomeNG", "name": "SmartHomeNG",
"host": "smarthome.iot.wagener.family", "host": "smarthome.iot.wagener.family",
"port": 2425,
"tls": true,
"accessories": [ "accessories": [
{ {
"type": "Outlet", "type": "Outlet",

View File

@ -170,19 +170,34 @@ export class Lightbulb implements AccessoryPlugin {
} }
updateColor(): void { updateColor(): void {
if (this.lightType === LightType.RGBW) { switch (this.lightType) {
case LightType.RGBW: {
const rgbw: RGBW = this.hsb2rgbw(this.hue, this.saturation, this.brightness); const rgbw: RGBW = this.hsb2rgbw(this.hue, this.saturation, this.brightness);
this.platform.shng.setItem(this.accessory.r, this.convertRange(rgbw.R, 0, 100, this.RMin, this.RMax)); this.platform.shng.setItem(this.accessory.r, this.convertRange(rgbw.R, 0, 100, this.RMin, this.RMax));
this.platform.shng.setItem(this.accessory.g, this.convertRange(rgbw.G, 0, 100, this.GMin, this.GMax)); this.platform.shng.setItem(this.accessory.g, this.convertRange(rgbw.G, 0, 100, this.GMin, this.GMax));
this.platform.shng.setItem(this.accessory.b, this.convertRange(rgbw.B, 0, 100, this.BMin, this.BMax)); this.platform.shng.setItem(this.accessory.b, this.convertRange(rgbw.B, 0, 100, this.BMin, this.BMax));
this.platform.shng.setItem(this.accessory.w, this.convertRange(rgbw.W, 0, 100, this.WMin, this.WMax)); this.platform.shng.setItem(this.accessory.w, this.convertRange(rgbw.W, 0, 100, this.WMin, this.WMax));
} else if (this.lightType === LightType.RGB) { break;
}
case LightType.RGB: {
const rgb: RGB = this.hsb2rgb(this.hue, this.saturation, this.brightness); const rgb: RGB = this.hsb2rgb(this.hue, this.saturation, this.brightness);
this.platform.shng.setItem(this.accessory.r, this.convertRange(rgb.R, 0, 100, this.RMin, this.RMax)); this.platform.shng.setItem(this.accessory.r, this.convertRange(rgb.R, 0, 100, this.RMin, this.RMax));
this.platform.shng.setItem(this.accessory.g, this.convertRange(rgb.G, 0, 100, this.GMin, this.GMax)); this.platform.shng.setItem(this.accessory.g, this.convertRange(rgb.G, 0, 100, this.GMin, this.GMax));
this.platform.shng.setItem(this.accessory.b, this.convertRange(rgb.B, 0, 100, this.BMin, this.BMax)); this.platform.shng.setItem(this.accessory.b, this.convertRange(rgb.B, 0, 100, this.BMin, this.BMax));
} else { break;
}
case LightType.HSB:
this.platform.shng.setItem(this.accessory.hue, this.hue);
this.platform.shng.setItem(this.accessory.saturation, this.saturation);
this.platform.shng.setItem(this.accessory.brightness, this.brightness);
break;
default:
this.platform.log.warn('Cannot update color of', this.name, 'because RGB(W) items are missing'); this.platform.log.warn('Cannot update color of', this.name, 'because RGB(W) items are missing');
break;
} }
} }

View File

@ -54,7 +54,11 @@ export class SmartHomeNGPlatform implements StaticPlatformPlugin {
public readonly api: API, public readonly api: API,
) { ) {
log.debug('Using config file', api.user.configPath()); log.debug('Using config file', api.user.configPath());
this.shng = new SmartHomeNG(this, 'ws://smarthome.iot.wagener.family:2424/'); const host = this.config.host ? this.config.host : 'smarthome.local';
const port = this.config.port ? this.config.port : '2424';
const protocol = this.config.tls ? 'wss' : 'ws';
const url = protocol + '://' + host + ':' + port + '/';
this.shng = new SmartHomeNG(this, url);
this.api.on('didFinishLaunching', () => { this.api.on('didFinishLaunching', () => {
log.debug('Executed didFinishLaunching callback'); log.debug('Executed didFinishLaunching callback');