homebridge-virtual-accessories 3.1.1 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,11 +22,6 @@
22
22
 
23
23
  ## <!-- Thin separator line -->
24
24
 
25
- > [!CAUTION]
26
- > **Virtual Accessories For Homebridge v3.0.0 is a breaking upgrade.** If you are upgrading from a v2.x.x version, please read the [Wiki page for v3.0.0](https://github.com/justjam2013/homebridge-virtual-accessories/wiki/Virtual-Accessories-For-Homebridge-v3.0.0-breaking-update) for details on how to update your configuration.
27
-
28
- ## <!-- Thin separator line -->
29
-
30
25
  <details>
31
26
  <summary>
32
27
 
@@ -79,7 +74,7 @@
79
74
 
80
75
  This plugin is inspired by Nick Farina's most excellent 🎸 [homebridge-dummy](https://github.com/nfarina/homebridge-dummy) plugin, which formed the backbone of my HomeKit automations. This plugin is Homebridge Verified and is ready for Homebridge 2.0.
81
76
 
82
- The purpose of this plugin is to provide a single solution for creating different types of virtual HomeKit accessories. In my automations it has replaced seven separate plugins, each of which provided part of the functionality I needed, and all of which had gone unmaintained or abandoned. Also, it became frustrating trying to figure out which plugin provided what functionality or managed which accessory, each time I wanted to make a change.
77
+ The purpose of this plugin is to provide a single solution for creating different types of virtual HomeKit accessories. In my automations it has replaced seven separate plugins, each of which provided part of the functionality I needed, and all of which had gone unmaintained or abandoned. Also, it became annoying having to figure out which plugin provided what functionality, or managed which accessory, each time I wanted to make a change.
83
78
 
84
79
  The downside to a single plugin is trading ease of accessory maintenance for a single point of failure. However, this is work in progress so I will be publishing bug fixes and improvements. Also, I will slowly add new accessories and functionality, either as I need them, or, more likely, in response to requests by users who find this plugin useful.
85
80
 
@@ -771,10 +766,10 @@ Patrick Hunt, the content creator of the [Make Smart Matter](https://www.youtube
771
766
  - The Humidifier/Dehumidifier accessory is not properly rendered in Homebridge UI. Homebrige UI currently is unable to differentiate between Humidifier-only, Dehumidifier-only, and Humidifier-Dehumidifier accessories, but HomeKit renders it correctly.
772
767
  - The Heater/Cooler accessory is not properly rendered in Homebridge UI. Homebrige UI currently is unable to differentiate between Heater-only, Cooler-only, and Heater-Cooler accessories, but HomeKit renders it correctly.
773
768
  - The Speaker tile in Homebridge UI is not working properly. It does not differentiate between Active and Muted properties and once switched off, does not switch it back on again.
774
- - The ability to order the accessories has been rolled back, as it makes it impossible to drag a number slider, for example to set the Doorbell volume between 0%-100%. A bug report has been opened. Once the bug is fixed, this functionality will be restored. The temporary workaround is to manually edit the order of the accessories in the JSON configuration.
769
+ - The ability to order the accessories has been rolled back, as it makes it impossible to drag a number slider, for example to set the Doorbell volume. A bug report has been opened with the underlying framework project and, once this behavior is fixed, this functionality will be restored. The temporary workaround is to manually edit the order of the accessories in the JSON configuration.
775
770
 
776
771
  ## What if I run into a problem?
777
772
 
778
- If you encounter a problem, you can [check the #virtual accessories channel on Discord](https://discord.gg/Z8jmyvb) for any notifications, or [open an issue on GitHub](https://github.com/justjam2013/homebridge-virtual-accessories/issues/new/choose). Please attach any log output to the issue, making sure to remove any sensitive information such as passwords, tokens, etc.
773
+ If you encounter a problem, you can [check the #virtual accessories channel on Discord](https://discord.gg/Z8jmyvb) for any notifications, or [open an issue here on GitHub](https://github.com/justjam2013/homebridge-virtual-accessories/issues). Please include log outputs and configuration details to the issue, making sure to remove any sensitive information such as passwords, tokens, etc. The more information you provide, the better I can investigate the issues.
779
774
 
780
775
  Please open a [Feature Request issue](https://github.com/justjam2013/homebridge-virtual-accessories/issues/new/choose) if you have any enhancement suggestions or any additional functionality that you would like to see added, or comment on an existing issue if one is already open.
@@ -772,10 +772,9 @@
772
772
  "properties": {
773
773
  "host": {
774
774
  "title": "Host *",
775
- "description": "IP address of host to ping",
775
+ "description": "IP address (142.250.178.4) or domain name (www.google.com) of host to ping",
776
776
  "placeholder": "192.168.0.1",
777
- "type": "string",
778
- "pattern": "^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])$"
777
+ "type": "string"
779
778
  },
780
779
  "failureRetryCount": {
781
780
  "title": "Retries Before Failure *",
@@ -1,3 +1,4 @@
1
+ import { PingTriggerConfiguration } from '../configuration/triggers/configurationPingTrigger.js';
1
2
  import { Trigger } from './trigger.js';
2
3
  import { Sensor } from '../sensors/virtualSensor.js';
3
4
  /**
@@ -9,9 +10,11 @@ export declare class PingTrigger extends Trigger {
9
10
  private IPv6;
10
11
  private failureCount;
11
12
  constructor(sensor: Sensor, name: string);
13
+ setup(triggerConfig: PingTriggerConfiguration): Promise<void>;
12
14
  /**
13
15
  * Private methods
14
16
  */
15
17
  private ping;
18
+ private getIP;
16
19
  }
17
20
  export declare const dynamicTrigger: typeof PingTrigger;
@@ -1,6 +1,6 @@
1
1
  import { Trigger } from './trigger.js';
2
2
  import { Sensor } from '../sensors/virtualSensor.js';
3
- // import dns from 'dns';
3
+ import dns from 'dns';
4
4
  import net from 'net';
5
5
  import ping from 'net-ping';
6
6
  /**
@@ -27,12 +27,17 @@ export class PingTrigger extends Trigger {
27
27
  this.log.info(`[${this.sensorConfig.accessoryName}] Ping trigger is disabled`);
28
28
  return;
29
29
  }
30
- const ipProtocolVersion = net.isIP(triggerConfig.host);
31
- // TODO: DNS lookup
32
- // if (ipVersion === this.NOT_IP) {
33
- // const ip = this.getIP(trigger.host);
34
- // ipVersion = net.isIP(ip);
35
- // }
30
+ this.setup(triggerConfig);
31
+ }
32
+ async setup(triggerConfig) {
33
+ let ipProtocolVersion = net.isIP(triggerConfig.host);
34
+ if (ipProtocolVersion === this.NOT_IP) {
35
+ const ip = await this.getIP(triggerConfig.host);
36
+ if (ip) {
37
+ ipProtocolVersion = net.isIP(ip);
38
+ triggerConfig.host = ip;
39
+ }
40
+ }
36
41
  let protocol;
37
42
  switch (ipProtocolVersion) {
38
43
  case this.IPv4:
@@ -41,10 +46,6 @@ export class PingTrigger extends Trigger {
41
46
  case this.IPv6:
42
47
  protocol = ping.NetworkProtocol.IPv6;
43
48
  break;
44
- // case this.NOT_IP:
45
- // // TODO: this is a domain name, perform DNS lookup
46
- // protocol = ping.NetworkProtocol.None; // 0
47
- // break;
48
49
  default:
49
50
  this.log.error(`[${this.sensorConfig.accessoryName}] Unkown or invalid IP protocol version: ${ipProtocolVersion}`);
50
51
  return;
@@ -93,6 +94,17 @@ export class PingTrigger extends Trigger {
93
94
  session.close();
94
95
  });
95
96
  }
97
+ async getIP(hostname) {
98
+ const response = await dns.promises.lookup(hostname)
99
+ .then((result) => {
100
+ this.sensor.platform.log.info(`[${this.sensorConfig.accessoryName}] IP address retrieved for '${hostname}' is '${result.address}'`);
101
+ return result.address;
102
+ })
103
+ .catch((error) => {
104
+ this.sensor.platform.log.error(`[${this.sensorConfig.accessoryName}] Error retrieving IP address for '${hostname}': ${error.message}`);
105
+ });
106
+ return response;
107
+ }
96
108
  }
97
109
  export const dynamicTrigger = PingTrigger;
98
110
  //# sourceMappingURL=triggerPing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"triggerPing.js","sourceRoot":"","sources":["../../src/triggers/triggerPing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triggerPing.js","sourceRoot":"","sources":["../../src/triggers/triggerPing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "homebridge-virtual-accessories",
3
3
  "displayName": "Virtual Accessories for Homebridge",
4
4
  "type": "module",
5
- "version": "3.1.1",
5
+ "version": "3.1.2",
6
6
  "description": "Virtual HomeKit accessories for Homebridge.",
7
7
  "author": "justjam2013",
8
8
  "license": "MIT",
@@ -28,6 +28,14 @@
28
28
  "virtual fan",
29
29
  "garage door",
30
30
  "virtual garage door",
31
+ "heater",
32
+ "virtual heater",
33
+ "thermostat",
34
+ "virtual thermostat",
35
+ "cooler",
36
+ "virtual cooler",
37
+ "air conditioner",
38
+ "virtual air conditioner",
31
39
  "humidifier",
32
40
  "virtual humidifier",
33
41
  "dehumidifier",