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,23 +48,36 @@ Below is what i did on my Debian Bullseye installation:
## 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.
### 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.
Mandatory:
```json
{
"type": "OccupancySensor",
"name": "Presence kitchen",
"type": "OccupancySensor",
"name": "Presence kitchen",
}
```
Optional:
```json
{
"manufacturer": "Preussen",
"model": "Motion 360 KNX",
"manufacturer": "Preussen",
"model": "Motion 360 KNX",
}
```
### Doorbell
@ -103,8 +116,8 @@ In addition to the common characteristics the following are available.
Mandatory:
```json
{
"CurrentPosition": "EG.Buero.Rolladen.Position",
"TargetPosition": "EG.Buero.Rolladen.ZielPosition",
"CurrentPosition": "EG.Buero.Rolladen.Position",
"TargetPosition": "EG.Buero.Rolladen.ZielPosition",
}
```
The current moving state and direction is automatically derived from the difference between the current and target position.
@ -112,12 +125,12 @@ The current moving state and direction is automatically derived from the differe
Optional:
```json
{
"CurrentPositionMin": 0,
"CurrentPositionMax": 255,
"CurrentPositionInverted": true,
"TargetPositionMin": 0,
"TargetPositionMax": 255,
"TargetPositionInverted": true
"CurrentPositionMin": 0,
"CurrentPositionMax": 255,
"CurrentPositionInverted": true,
"TargetPositionMin": 0,
"TargetPositionMax": 255,
"TargetPositionInverted": true
}
```
HomeKit works with values between 0 and 100 where 0 is completely closed and 100 is open.
@ -141,6 +154,8 @@ This is an example config file which just uses this plugin and some example Smar
"platform": "SmartHomeNG",
"name": "SmartHomeNG",
"host": "smarthome.iot.wagener.family",
"port": 2425,
"tls": true,
"accessories": [
{
"type": "Outlet",

View File

@ -170,19 +170,34 @@ export class Lightbulb implements AccessoryPlugin {
}
updateColor(): void {
if (this.lightType === LightType.RGBW) {
switch (this.lightType) {
case LightType.RGBW: {
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.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.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);
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.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');
break;
}
}

View File

@ -54,7 +54,11 @@ export class SmartHomeNGPlatform implements StaticPlatformPlugin {
public readonly api: API,
) {
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', () => {
log.debug('Executed didFinishLaunching callback');