homebridge-dummy 1.4.1-beta.2 → 1.4.1-beta.3

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/CHANGELOG.md CHANGED
@@ -2,12 +2,13 @@
2
2
 
3
3
  All notable changes to homebridge-dummy will be documented in this file.
4
4
 
5
- ## 1.4.1-beta.1 (2025-11-03)
5
+ ## 1.4.1-beta.3 (2025-11-03)
6
6
 
7
7
  ### ‼️ WARNING ‼️ — If upgrading from v0.9.2 or earlier, [READ THIS FIRST](https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#v10-migration)
8
8
 
9
9
  ### Added
10
10
  - Schedule settings for sunrise, sunset, dawn, dusk, golden hour, or night, with optional offset
11
+ - [Reachability](https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#reachabilityping) [Trigger Condition](https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#trigger-conditions)
11
12
 
12
13
  ### Changed
13
14
  - [Webhooks](https://github.com/mpatfield/homebridge-dummy#webhooks) now look for `get` or `set` instead of `command`
package/README.md CHANGED
@@ -132,6 +132,10 @@ Using the Homebridge Config UI is the easiest way to set up this plugin. However
132
132
  {
133
133
  "accessoryId": "string",
134
134
  "accessoryState": "on | off | open | closed | locked | unlocked",
135
+ "pattern": "string",
136
+ "pingHost": "string",
137
+ "pingInterval": number,
138
+ "pingUnits": "MILLISECONDS | SECONDS | MINUTES | HOURS"
135
139
  }
136
140
 
137
141
  ]
@@ -240,38 +244,6 @@ Execute arbitrary commands (e.g. curl) when the accessory changes state
240
244
  - `unlockCommand` - Arbitrary command to execute when lock mechanism is unlocked
241
245
  - `commandTemperature` - Arbitrary command to execute when temperature changes
242
246
 
243
- ### Trigger Conditions
244
-
245
- You can trigger an accessory whenever a set of conditions are satisfied, for example, when other Homebridge Dummy accessories turn on.
246
-
247
- There are two logical operators to trigger the target accessory when all (`AND`) or any (`OR`) of a set of conditions are satisfied. This is set using `operator`.
248
-
249
- You can have an arbitrarily long list of conditions and they are checked in order.
250
-
251
- If target accessory is not setup to auto-reset with a timer, then it will immediately return to it's default setting as soon as the conditions are no longer met.
252
-
253
- Note that due to limitations of HomeKit and Homebridge, it is only possible to check the states of other Homebridge Dummy accessories.
254
-
255
- One workaround is to use the `LOG` operand type which will watch the Homebridge log for the specified string or regex.
256
-
257
- `LOG` based conditions are stateless triggers. If it is the only condition or the conditions `operator` is `OR`, then it will fire immediately. If there are other `AND` conditions, then it will not fire unless all other conditions are satisfied.
258
-
259
- For example, if I have `LOG` condition "A" and `ACCESSORY` condition "B" for when "B" is turned "On", then if "B" is "Off"" and the pattern is found in the log, "A" will not trigger.
260
-
261
- Note that `LOG` triggers are not instantenous and may take several seconds to fire.
262
-
263
- Another workaround for non-Dummy accessories is to set up duplicate accessories in Homebridge Dummy and use Automation to mirror the states.
264
-
265
- For example, if I have a physical door lock I want to "watch", then I can setup a `LockMechanism` accessory in Homebridge Dummy and create two automations to change the state of my dummy lock whenever the physical door lock is unlocked or locked.
266
-
267
- #### Conditions Object
268
- - `operator` - "and" to require ALL conditions to be satisfied, and "or" ANY
269
- - `operands` - A list of accessories to "watch" for state changes to see if conditions are satisfied
270
-
271
- #### Operand Object
272
- - `accessoryId` - The id of the accessory to watch for state changes
273
- - `accessoryState` - The desired accessory state to make this condition "true"
274
-
275
247
  ### Defaults
276
248
  - `temperatureUnits` - Units to use for thermostats, either 'C' or 'F'
277
249
  - `defaultState` — Initial value, either "on" or "off"
@@ -289,6 +261,45 @@ For example, if I have a physical door lock I want to "watch", then I can setup
289
261
  - `resetOnRestart` _ If true, accessory will return to default state when Homebridge restarts
290
262
  - `disableLogging` — If true, state changes will not be logged
291
263
 
264
+ ## Trigger Conditions
265
+
266
+ You can trigger an accessory whenever a set of conditions are satisfied. There are two logical operators to trigger the target accessory when all (`AND`) or any (`OR`) of a set of conditions are satisfied. You may have an arbitrarily long list of conditions and they are checked in order.
267
+
268
+ - `conditions.operator` - `AND` to trigger when all conditions to be satisfied, `OR` to trigger when any conditions are satisfied
269
+ - `conditions.operands` - A list of conditions as defined below
270
+
271
+ ### Accessory Triggers
272
+
273
+ You can trigger an accessory when one more more other Homebridge Dummy accessories change state using the `ACCESSORY` operand type. Accessories will immediately return to their default setting as soon as the conditions are no longer satisfied unless an accessory also has an auto-reset timer.
274
+
275
+ Note that due to limitations of HomeKit and Homebridge, it is only possible to check the states of other Homebridge Dummy accessories. One workaround for non-Dummy accessories is to set up duplicate accessories in Homebridge Dummy and use Automation to mirror the states. For example, if I have a physical door lock I want to "watch", then I can setup a `LockMechanism` accessory in Homebridge Dummy and create two automations to change the state of my dummy lock whenever the physical door lock is unlocked or locked.
276
+
277
+ - `type` - `ACCESSORY`
278
+ - `accessoryId` - The id of the accessory to watch for state changes
279
+ - `accessoryState` - The desired accessory state to make this condition true, e.g. "on", "off", "open", "closed", "locked", "unlocked"
280
+
281
+ ### Log Watcher
282
+
283
+ Another workaround to the above limitation is to use the `LOG` operand type which will watch the Homebridge log for the specified string or regex.
284
+
285
+ `LOG` based conditions are stateless triggers. If it is the only condition or the conditions `operator` is `OR`, then it will fire immediately. If there are other `AND` conditions, then it will not fire unless all other conditions are satisfied.
286
+
287
+ For example, if I have `LOG` condition "A" and `ACCESSORY` condition "B" for when "B" is turned "On", then if "B" is "Off"" and the pattern is found in the log, "A" will not trigger.
288
+
289
+ Note that `LOG` triggers are not instantenous and may take several seconds to fire.
290
+
291
+ - `type` - `LOG`
292
+ - `pattern` - a literal string or regex to watch for
293
+
294
+ ### Reachability/Ping
295
+
296
+ There is also a `PING` operand type that allows you to set the state based on the reachability of a particular `pingHost`.
297
+
298
+ - `type` - `LOG`
299
+ - `pingHost` - the host to ping, e.g. `192.168.0.1` or `example.com`
300
+ - `pingInterval` - The raw interval to check the reachability of the above host (default 60 seconds)
301
+ - `pingUnits` - The units to use for interval above
302
+
292
303
  ## Webhooks
293
304
 
294
305
  You can optionally enable webhooks on an accessory by choosing `Enable Webhooks` in the config UI or setting `enableWebhooks` to `true` in the JSON config.
@@ -309,7 +320,7 @@ Here are the possible values for `get` or `set` and their respective valid `valu
309
320
  - `TargetTemperature` - number between 10°C and 38°C
310
321
  - For `TargetTemperature` you may optionally supply a `unit` (either 'F' or 'C') to allow you to pass in Fahrenheit or Celsius units.
311
322
 
312
- #### Examples using HTTP GET
323
+ ### Using GET Requests
313
324
 
314
325
  Here is an example to get the on/off state for a switch:
315
326
 
@@ -327,7 +338,7 @@ http://localhost:63743/?id=ACCESSORY_ID&set=Brightness&value=42
327
338
 
328
339
  Returns `{ "success": "Accessory Name is on, brightness is 42%" }`
329
340
 
330
- ### Examples using HTTP POST
341
+ ### Using POST Requests
331
342
 
332
343
  POST requests must be valid JSON. Here is an example of the JSON needed to get the on/off state for a switch:
333
344
 
@@ -372,7 +383,7 @@ curl -X POST http://localhost:63743/ -H "Content-Type: application/json" -d '{"i
372
383
 
373
384
  Schedule feature inspired by [Homebridge Schedule](https://github.com/kbrashears5/typescript-homebridge-schedule) by [@kbrashears5](https://github.com/sponsors/kbrashears5)
374
385
 
375
- Scheduling based on sun times (sunrise, sunset, etc.) inspired by [Homebridge Virtual Accessories](https://github.com/justjam2013/homebridge-virtual-accessories) by [@justjam2013](https://github.com/sponsors/justjam2013)
386
+ Scheduling based on sun times (sunrise, sunset, etc.) and reachability (ping) conditions inspired by [Homebridge Virtual Accessories](https://github.com/justjam2013/homebridge-virtual-accessories) by [@justjam2013](https://github.com/sponsors/justjam2013)
376
387
 
377
388
  Sensor feature inspired by [Homebridge-Delay-Switch](https://github.com/nitaybz/homebridge-delay-switch#readme) by [@nitaybz](https://github.com/sponsors/nitaybz)
378
389
 
@@ -243,8 +243,8 @@
243
243
  "type": {
244
244
  "type": "string",
245
245
  "title": "${config.title.type}",
246
- "enum": [ "ACCESSORY", "LOG" ],
247
- "enumNames": [ "${config.enumNames.accessory}", "${config.enumNames.log}" ],
246
+ "enum": [ "ACCESSORY", "LOG", "PING" ],
247
+ "enumNames": [ "${config.enumNames.accessory}", "${config.enumNames.log}", "${config.enumNames.ping}" ],
248
248
  "required": true
249
249
  },
250
250
  "accessoryId": {
@@ -260,6 +260,18 @@
260
260
  "pattern": {
261
261
  "type": "string",
262
262
  "title": "${config.title.pattern}"
263
+ },
264
+ "pingHost": {
265
+ "type": "string",
266
+ "title": "${config.title.pingHost}"
267
+ },
268
+ "pingInterval": {
269
+ "type": "integer",
270
+ "title": "${config.title.pingInterval}",
271
+ "minimum": 1
272
+ },
273
+ "pingUnits": {
274
+ "$ref": "#/definitions/units"
263
275
  }
264
276
  },
265
277
  "allOf": [
@@ -279,15 +291,52 @@
279
291
  {
280
292
  "if": {
281
293
  "properties": {
282
- "type": {
283
- "const": "LOG"
284
- }
294
+ "type": {
295
+ "const": "LOG"
296
+ }
285
297
  },
286
298
  "required": ["type"]
287
299
  },
288
300
  "then": {
289
301
  "required": ["pattern"]
290
302
  }
303
+ },
304
+ {
305
+ "if": {
306
+ "properties": {
307
+ "type": {
308
+ "const": "PING"
309
+ }
310
+ },
311
+ "required": ["type"]
312
+ },
313
+ "then": {
314
+ "required": ["pingHost"]
315
+ }
316
+ },
317
+ {
318
+ "if": {
319
+ "properties": {
320
+ "pingInterval": {
321
+ }
322
+ },
323
+ "required": ["pingInterval"]
324
+ },
325
+ "then": {
326
+ "required": ["pingUnits"]
327
+ }
328
+ },
329
+ {
330
+ "if": {
331
+ "properties": {
332
+ "pingUnits": {
333
+ }
334
+ },
335
+ "required": ["pingUnits"]
336
+ },
337
+ "then": {
338
+ "required": ["pingInterval"]
339
+ }
291
340
  }
292
341
  ]
293
342
  },
@@ -638,10 +687,6 @@
638
687
  "key": "accessories[].schedule.type",
639
688
  "flex": "0 0 auto"
640
689
  },
641
- {
642
- "type": "div",
643
- "flex": "0 0 5px"
644
- },
645
690
  {
646
691
  "key": "accessories[].schedule.interval",
647
692
  "flex": "0 0 auto",
@@ -649,10 +694,6 @@
649
694
  "functionBody": "return model.accessories?.[arguments[1]]?.schedule?.type === 'INTERVAL';"
650
695
  }
651
696
  },
652
- {
653
- "type": "div",
654
- "flex": "0 0 5px"
655
- },
656
697
  {
657
698
  "key": "accessories[].schedule.units",
658
699
  "flex": "0 0 auto",
@@ -667,10 +708,6 @@
667
708
  "functionBody": "return model.accessories?.[arguments[1]]?.schedule?.type === 'CRON';"
668
709
  }
669
710
  },
670
- {
671
- "type": "div",
672
- "flex": "0 0 5px"
673
- },
674
711
  {
675
712
  "key": "accessories[].schedule.cronCustom",
676
713
  "flex": "1 0 auto",
@@ -685,10 +722,6 @@
685
722
  "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.schedule?.type);"
686
723
  }
687
724
  },
688
- {
689
- "type": "div",
690
- "flex": "0 0 5px"
691
- },
692
725
  {
693
726
  "key": "accessories[].schedule.latitude",
694
727
  "flex": "0 1 auto",
@@ -696,10 +729,6 @@
696
729
  "functionBody": "return ['SUNRISE', 'SUNSET', 'DAWN', 'DUSK', 'GOLDEN_HOUR', 'NIGHT'].includes(model.accessories?.[arguments[1]]?.schedule?.type);"
697
730
  }
698
731
  },
699
- {
700
- "type": "div",
701
- "flex": "0 0 5px"
702
- },
703
732
  {
704
733
  "key": "accessories[].schedule.longitude",
705
734
  "flex": "0 1 auto",
@@ -842,10 +871,6 @@
842
871
  "key": "accessories[].conditions.operands[].type",
843
872
  "flex": "0 0 auto"
844
873
  },
845
- {
846
- "type": "div",
847
- "flex": "0 0 5px"
848
- },
849
874
  {
850
875
  "key": "accessories[].conditions.operands[].accessoryId",
851
876
  "flex": "0 0 auto",
@@ -853,10 +878,6 @@
853
878
  "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'ACCESSORY';"
854
879
  }
855
880
  },
856
- {
857
- "type": "div",
858
- "flex": "0 0 5px"
859
- },
860
881
  {
861
882
  "key": "accessories[].conditions.operands[].accessoryState",
862
883
  "flex": "0 0 auto",
@@ -864,6 +885,27 @@
864
885
  "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.accessoryId;"
865
886
  }
866
887
  },
888
+ {
889
+ "key": "accessories[].conditions.operands[].pingHost",
890
+ "flex": "0 0 auto",
891
+ "condition": {
892
+ "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'PING';"
893
+ }
894
+ },
895
+ {
896
+ "key": "accessories[].conditions.operands[].pingInterval",
897
+ "flex": "0 1 auto",
898
+ "condition": {
899
+ "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.pingHost !== undefined;"
900
+ }
901
+ },
902
+ {
903
+ "key": "accessories[].conditions.operands[].pingUnits",
904
+ "flex": "0 1 auto",
905
+ "condition": {
906
+ "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.pingInterval !== undefined;"
907
+ }
908
+ },
867
909
  {
868
910
  "key": "accessories[].conditions.operands[].pattern",
869
911
  "flex": "1 0 auto",
@@ -43,4 +43,4 @@
43
43
  <em><p i18n="migrationDetails5" i18n_replace="migration"></p></em></br>
44
44
  </div>
45
45
 
46
- <script src="ui.js?v=1.4.1-beta.2"></script>
46
+ <script src="ui.js?v=1.4.1-beta.3"></script>
package/dist/i18n/de.d.ts CHANGED
@@ -16,6 +16,7 @@ declare const de: {
16
16
  notSatisfied: string;
17
17
  patternAndConditions: string;
18
18
  patternMatch: string;
19
+ reachabilityUnknown: string;
19
20
  selfReference: string;
20
21
  statesEqual: string;
21
22
  statesNotEqual: string;
@@ -55,6 +56,11 @@ declare const de: {
55
56
  closed: string;
56
57
  open: string;
57
58
  };
59
+ reachability: {
60
+ pingError: string;
61
+ reachable: string;
62
+ unreachable: string;
63
+ };
58
64
  schedule: {
59
65
  badType: string;
60
66
  badUnits: string;
@@ -137,6 +143,7 @@ declare const de: {
137
143
  operatorAnd: string;
138
144
  operatorOr: string;
139
145
  outlet: string;
146
+ ping: string;
140
147
  milliseconds: string;
141
148
  minutes: string;
142
149
  motionSensor: string;
@@ -206,6 +213,8 @@ declare const de: {
206
213
  operator: string;
207
214
  pattern: string;
208
215
  period: string;
216
+ pingHost: string;
217
+ pingInterval: string;
209
218
  preset: string;
210
219
  random: string;
211
220
  resetOnRestart: string;
package/dist/i18n/en.d.ts CHANGED
@@ -16,6 +16,7 @@ declare const en: {
16
16
  notSatisfied: string;
17
17
  patternAndConditions: string;
18
18
  patternMatch: string;
19
+ reachabilityUnknown: string;
19
20
  selfReference: string;
20
21
  statesEqual: string;
21
22
  statesNotEqual: string;
@@ -55,6 +56,11 @@ declare const en: {
55
56
  closed: string;
56
57
  open: string;
57
58
  };
59
+ reachability: {
60
+ pingError: string;
61
+ reachable: string;
62
+ unreachable: string;
63
+ };
58
64
  schedule: {
59
65
  badType: string;
60
66
  badUnits: string;
@@ -137,6 +143,7 @@ declare const en: {
137
143
  operatorAnd: string;
138
144
  operatorOr: string;
139
145
  outlet: string;
146
+ ping: string;
140
147
  milliseconds: string;
141
148
  minutes: string;
142
149
  motionSensor: string;
@@ -206,6 +213,8 @@ declare const en: {
206
213
  operator: string;
207
214
  pattern: string;
208
215
  period: string;
216
+ pingHost: string;
217
+ pingInterval: string;
209
218
  preset: string;
210
219
  random: string;
211
220
  resetOnRestart: string;
package/dist/i18n/en.js CHANGED
@@ -16,6 +16,7 @@ const en = {
16
16
  notSatisfied: '%s conditions not satisfied', // accessory name
17
17
  patternAndConditions: '%s log condition found a pattern match. Checking other conditions…', // accessory name
18
18
  patternMatch: '%s log condition found a pattern match. Triggering…', // accessory name
19
+ reachabilityUnknown: 'Cannot yet evalutate conditions because reachability for %s is unknown', // host
19
20
  selfReference: '%s is not allowed to reference itself as a triggering condition', // accessory name
20
21
  statesEqual: 'Current and desired states are both %s', // state name
21
22
  statesNotEqual: 'Current state %s is not equivalent to desired state %s', // state name, state name
@@ -55,6 +56,11 @@ const en = {
55
56
  closed: '%s is closed', // accessory name
56
57
  open: '%s is open', // accessory name
57
58
  },
59
+ reachability: {
60
+ pingError: '`ping` error',
61
+ reachable: '%s is responsive', // host
62
+ unreachable: '%s is unresponsive', // host
63
+ },
58
64
  schedule: {
59
65
  badType: '%s has invalid schedule type %s. Must be one of: %s', // accessory name, input, list of type names
60
66
  badUnits: '%s schedule has invalid time units %s. Must be one of: %s', // accessory name, input, list of unit names
@@ -137,6 +143,7 @@ const en = {
137
143
  operatorAnd: 'ALL conditions are met', // proceeded by "Trigger when…"
138
144
  operatorOr: 'ANY conditions are met', // proceeded by "Trigger when…"
139
145
  outlet: 'Outlet',
146
+ ping: 'Reachability',
140
147
  milliseconds: 'Milliseconds',
141
148
  minutes: 'Minutes',
142
149
  motionSensor: 'Motion',
@@ -206,6 +213,8 @@ const en = {
206
213
  operator: 'Trigger when…',
207
214
  pattern: 'Search String or RegEx',
208
215
  period: 'Per',
216
+ pingHost: 'Host',
217
+ pingInterval: 'Ping Interval',
209
218
  preset: 'Preset',
210
219
  random: 'Randomize',
211
220
  resetOnRestart: 'Reset on Restart',
@@ -1 +1 @@
1
- {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,GAAG;IAET,SAAS,EAAE;QACT,YAAY,EAAE,gCAAgC,EAAE,+CAA+C;QAC/F,WAAW,EAAE,sCAAsC,EAAE,8BAA8B;QACnF,eAAe,EAAE,iCAAiC,EAAE,gCAAgC;KACrF;IAED,OAAO,EAAE;QACP,KAAK,EAAE,8BAA8B,EAAE,iBAAiB;QACxD,QAAQ,EAAE,qBAAqB,EAAE,iBAAiB;KACnD;IAED,UAAU,EAAE;QACV,eAAe,EAAE,8DAA8D,EAAE,iBAAiB;QAClG,aAAa,EAAE,sBAAsB,EAAE,UAAU;QACjD,oBAAoB,EAAE,8BAA8B,EAAE,iBAAiB;QACvE,SAAS,EAAE,gDAAgD,EAAE,iBAAiB;QAC9E,YAAY,EAAE,6BAA6B,EAAE,iBAAiB;QAC9D,oBAAoB,EAAE,oEAAoE,EAAE,iBAAiB;QAC7G,YAAY,EAAE,qDAAqD,EAAE,iBAAiB;QACtF,mBAAmB,EAAE,wEAAwE,EAAE,OAAO;QACtG,aAAa,EAAE,iEAAiE,EAAE,iBAAiB;QACnG,WAAW,EAAE,wCAAwC,EAAE,aAAa;QACpE,cAAc,EAAE,wDAAwD,EAAE,yBAAyB;QACnG,YAAY,EAAE,iEAAiE,EAAE,eAAe;QAChG,eAAe,EAAE,oFAAoF,EAAE,yBAAyB;KACjI;IAED,SAAS,EAAE;QACT,UAAU,EAAE,sBAAsB,EAAE,yBAAyB;QAC7D,OAAO,EAAE,6BAA6B,EAAE,yBAAyB;KAClE;IAED,OAAO,EAAE;QACP,SAAS,EAAE,iEAAiE,EAAE,4CAA4C;QAC1H,QAAQ,EAAE,gEAAgE,EAAE,4CAA4C;QACxH,OAAO,EAAE,mCAAmC,EAAE,iBAAiB;QAC/D,kBAAkB,EAAE,uFAAuF,EAAE,iBAAiB;QAC9H,gBAAgB,EAAE,qDAAqD,EAAE,iBAAiB;QAC1F,cAAc,EAAE,8CAA8C,EAAE,yBAAyB;QACzF,gBAAgB,EAAE,gDAAgD,EAAE,yBAAyB;QAC7F,gBAAgB,EAAE,gDAAgD,EAAE,yBAAyB;KAC9F;IAED,IAAI,EAAE;QACJ,UAAU,EAAE,0DAA0D,EAAE,6CAA6C;QACrH,OAAO,EAAE,cAAc,EAAE,iBAAiB;QAC1C,SAAS,EAAE,gBAAgB,EAAE,iBAAiB;KAC/C;IAED,UAAU,EAAE;QACV,KAAK,EAAE,sCAAsC,EAAE,QAAQ;QACvD,WAAW,EAAE,oCAAoC,EAAE,YAAY;KAChE;IAED,KAAK,EAAE;QACL,UAAU,EAAE,wDAAwD,EAAE,6CAA6C;QACnH,QAAQ,EAAE,WAAW,EAAE,iBAAiB;QACxC,OAAO,EAAE,UAAU,EAAE,iBAAiB;KACvC;IAED,QAAQ,EAAE;QACR,UAAU,EAAE,wDAAwD,EAAE,gDAAgD;QACtH,MAAM,EAAE,cAAc,EAAE,iBAAiB;QACzC,IAAI,EAAE,YAAY,EAAE,iBAAiB;KACtC;IAED,YAAY,EAAE;QACZ,SAAS,EAAE,cAAc;QACzB,SAAS,EAAE,kBAAkB,EAAE,OAAO;QACtC,WAAW,EAAE,oBAAoB,EAAE,OAAO;KAC3C;IAED,QAAQ,EAAE;QACR,OAAO,EAAE,qDAAqD,EAAE,4CAA4C;QAC5G,QAAQ,EAAE,2DAA2D,EAAE,4CAA4C;QACnH,IAAI,EAAE,8BAA8B,EAAE,iBAAiB;QACvD,oBAAoB,EAAE,oCAAoC,EAAE,yBAAyB;QACrF,eAAe,EAAE,+BAA+B,EAAE,yBAAyB;QAC3E,eAAe,EAAE,+BAA+B,EAAE,yBAAyB;QAC3E,aAAa,EAAE,4BAA4B,EAAE,yBAAyB;QACtE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB;KAC1D;IAED,UAAU,EAAE;QACV,IAAI,EAAE,gBAAgB,EAAE,iBAAiB;QACzC,UAAU,EAAE,qDAAqD,EAAE,6CAA6C;QAChH,QAAQ,EAAE,yDAAyD,EAAE,4CAA4C;QACjH,IAAI,EAAE,gBAAgB,EAAE,iBAAiB;QACzC,IAAI,EAAE,gBAAgB,EAAE,iBAAiB;QACzC,GAAG,EAAE,eAAe,EAAE,iBAAiB;QACvC,YAAY,EAAE,gBAAgB,EAAE,yBAAyB;QACzD,YAAY,EAAE,gBAAgB,EAAE,yBAAyB;QACzD,mBAAmB,EAAE,mCAAmC,EAAE,gBAAgB;KAC3E;IAED,KAAK,EAAE;QACL,QAAQ,EAAE,wDAAwD,EAAE,4CAA4C;QAChH,MAAM,EAAE,4BAA4B,EAAE,iBAAiB;QACvD,OAAO,EAAE,gEAAgE,EAAE,iBAAiB;QAC5F,MAAM,EAAE,mBAAmB,EAAE,iBAAiB;QAC9C,eAAe,EAAE,kCAAkC,EAAE,yBAAyB;QAC9E,UAAU,EAAE,6BAA6B,EAAE,yBAAyB;QACpE,UAAU,EAAE,6BAA6B,EAAE,yBAAyB;QACpE,QAAQ,EAAE,2BAA2B,EAAE,yBAAyB;KACjE;IAED,MAAM,EAAE;QAEN,WAAW,EAAE;YACX,QAAQ,EAAE,yEAAyE;YACnF,IAAI,EAAE,6BAA6B;YACnC,UAAU,EAAE,6FAA6F;YACzG,OAAO,EAAE,uEAAuE;YAChF,OAAO,EAAE,uGAAuG;YAChH,MAAM,EAAE,2DAA2D;YACnE,QAAQ,EAAE,sFAAsF;YAChG,KAAK,EAAE,qEAAqE;YAC5E,eAAe,EAAE,qFAAqF;SACvG;QAED,SAAS,EAAE;YACT,SAAS,EAAE,WAAW;YACtB,IAAI,EAAE,MAAM;YACZ,mBAAmB,EAAC,gBAAgB;YACpC,oBAAoB,EAAE,iBAAiB;YACvC,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,QAAQ;YAChB,aAAa,EAAE,SAAS;YACxB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,aAAa;YAC/B,UAAU,EAAE,aAAa;YACzB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,MAAM;YAClB,SAAS,EAAE,WAAW;YACtB,aAAa,EAAE,MAAM;YACrB,GAAG,EAAE,aAAa;YAClB,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,MAAM;YACZ,eAAe,EAAE,WAAW;YAC5B,GAAG,EAAE,KAAK;YACV,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,wBAAwB,EAAE,+BAA+B;YACtE,UAAU,EAAE,wBAAwB,EAAE,+BAA+B;YACrE,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,cAAc;YACpB,YAAY,EAAE,cAAc;YAC5B,OAAO,EAAE,SAAS;YAClB,YAAY,EAAE,QAAQ;YACtB,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,QAAQ;YACjB,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,YAAY;YACxB,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,cAAc,EAAE,0BAA0B;YAC1C,MAAM,EAAE,UAAU;SACnB;QAED,OAAO,EAAE,4CAA4C;QACrD,iBAAiB,EAAE,mFAAmF,EAAE,cAAc;QACtH,iBAAiB,EAAE,+EAA+E;QAClG,iBAAiB,EAAE,8GAA8G,EAAE,cAAc;QACjJ,iBAAiB,EAAE,kDAAkD;QACrE,iBAAiB,EAAE,mCAAmC,EAAE,MAAM;QAC9D,2BAA2B,EAAE,iDAAiD,EAAE,cAAc;QAC9F,qBAAqB,EAAE,oBAAoB;QAC3C,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,+CAA+C,EAAE,MAAM;QAChE,QAAQ,EAAE,6BAA6B,EAAE,cAAc;QACvD,GAAG,EAAE,KAAK;QAEV,KAAK,EAAE;YACL,SAAS,EAAE,WAAW;YACtB,cAAc,EAAE,OAAO;YACvB,YAAY,EAAE,eAAe;YAC7B,UAAU,EAAE,aAAa;YACzB,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,UAAU;YACpB,kBAAkB,EAAE,6BAA6B;YACjD,aAAa,EAAE,gBAAgB;YAC/B,SAAS,EAAE,WAAW;YACtB,UAAU,EAAE,oBAAoB;YAChC,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,aAAa;YACzB,iBAAiB,EAAE,oBAAoB;YACvC,eAAe,EAAE,kBAAkB;YACnC,YAAY,EAAE,eAAe;YAC7B,kBAAkB,EAAE,qBAAqB;YACzC,KAAK,EAAE,OAAO;YACd,cAAc,EAAE,iBAAiB;YACjC,YAAY,EAAE,gBAAgB;YAC9B,OAAO,EAAE,UAAU;YACnB,SAAS,EAAE,YAAY;YACvB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,YAAY;YACrB,SAAS,EAAE,WAAW;YACtB,kBAAkB,EAAE,iBAAiB;YACrC,kBAAkB,EAAE,iBAAiB;YACrC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,wBAAwB;YACjC,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,MAAM;YAChB,YAAY,EAAE,eAAe;YAC7B,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,eAAe;YACvB,gBAAgB,EAAE,mBAAmB;YACrC,KAAK,EAAE,kBAAkB;YACzB,eAAe,EAAE,+BAA+B;YAChD,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,OAAO;SACf;KACF;IAED,MAAM,EAAE;QAEN,OAAO,EAAE,mDAAmD,EAAE,4CAA4C;QAE1G,aAAa,EAAE;YACb,MAAM,EAAE,4BAA4B,EAAE,iBAAiB;YACvD,QAAQ,EAAE,qCAAqC,EAAE,iBAAiB;SACnE;QAED,cAAc,EAAE;YACd,MAAM,EAAE,6BAA6B,EAAE,iBAAiB;YACxD,QAAQ,EAAE,sCAAsC,EAAE,iBAAiB;SACpE;QAED,OAAO,EAAE;YACP,MAAM,EAAE,qBAAqB,EAAE,iBAAiB;YAChD,QAAQ,EAAE,8BAA8B,EAAE,iBAAiB;SAC5D;QAED,IAAI,EAAE;YACJ,MAAM,EAAE,oBAAoB,EAAE,iBAAiB;YAC/C,QAAQ,EAAE,+BAA+B,EAAE,iBAAiB;SAC7D;QAED,MAAM,EAAE;YACN,MAAM,EAAE,oBAAoB,EAAE,iBAAiB;YAC/C,QAAQ,EAAE,6BAA6B,EAAE,iBAAiB;SAC3D;QAED,SAAS,EAAE;YACT,MAAM,EAAE,uBAAuB,EAAE,iBAAiB;YAClD,QAAQ,EAAE,gCAAgC,EAAE,iBAAiB;SAC9D;QAED,KAAK,EAAE;YACL,MAAM,EAAE,mBAAmB,EAAE,iBAAiB;YAC9C,QAAQ,EAAE,4BAA4B,EAAE,iBAAiB;SAC1D;KACF;IAED,OAAO,EAAE;QACP,eAAe,EAAE,iFAAiF;QAClG,iBAAiB,EAAE,uCAAuC,EAAE,SAAS;QACrE,eAAe,EAAE,0DAA0D;QAC3E,eAAe,EAAE,kHAAkH;QACnI,sBAAsB,EAAE,2CAA2C;QACnE,eAAe,EAAE,+FAA+F;QAChH,YAAY,EAAE,uBAAuB;QACrC,eAAe,EAAE,qBAAqB;QACtC,kBAAkB,EAAE,sBAAsB;QAC1C,aAAa,EAAE,kBAAkB;QACjC,eAAe,EAAE,+BAA+B,EAAE,iBAAiB;QACnE,OAAO,EAAE;YACP,4GAA4G;YAC5G,8EAA8E;YAC9E,4EAA4E;YAC5E,qHAAqH;SACtH;KACF;IAED,OAAO,EAAE;QACP,OAAO,EAAE,0EAA0E,EAAE,SAAS;QAC9F,QAAQ,EAAE,0EAA0E,EAAE,4CAA4C;QAClI,SAAS,EAAE,uBAAuB;QAClC,qBAAqB,EAAE,gEAAgE;QACvF,YAAY,EAAE,kCAAkC;QAChD,QAAQ,EAAE,0BAA0B;QACpC,QAAQ,EAAE,yDAAyD,EAAE,cAAc;QACnF,OAAO,EAAE,qCAAqC,EAAE,cAAc;QAC9D,OAAO,EAAE,wBAAwB;QACjC,QAAQ,EAAE,+BAA+B;QACzC,UAAU,EAAE,iEAAiE,EAAE,+BAA+B;QAC9G,WAAW,EAAE,8CAA8C,EAAE,eAAe;QAC5E,0BAA0B,EAAE,0FAA0F,EAAE,eAAe;QACvI,yBAAyB,EAAE,yCAAyC,EAAE,QAAQ;QAC9E,cAAc,EAAE,+GAA+G,EAAE,KAAK;KACvI;CACF,CAAC;AAEF,eAAe,EAAE,CAAC"}
package/dist/i18n/es.d.ts CHANGED
@@ -16,6 +16,7 @@ declare const es: {
16
16
  notSatisfied: string;
17
17
  patternAndConditions: string;
18
18
  patternMatch: string;
19
+ reachabilityUnknown: string;
19
20
  selfReference: string;
20
21
  statesEqual: string;
21
22
  statesNotEqual: string;
@@ -55,6 +56,11 @@ declare const es: {
55
56
  closed: string;
56
57
  open: string;
57
58
  };
59
+ reachability: {
60
+ pingError: string;
61
+ reachable: string;
62
+ unreachable: string;
63
+ };
58
64
  schedule: {
59
65
  badType: string;
60
66
  badUnits: string;
@@ -137,6 +143,7 @@ declare const es: {
137
143
  operatorAnd: string;
138
144
  operatorOr: string;
139
145
  outlet: string;
146
+ ping: string;
140
147
  milliseconds: string;
141
148
  minutes: string;
142
149
  motionSensor: string;
@@ -206,6 +213,8 @@ declare const es: {
206
213
  operator: string;
207
214
  pattern: string;
208
215
  period: string;
216
+ pingHost: string;
217
+ pingInterval: string;
209
218
  preset: string;
210
219
  random: string;
211
220
  resetOnRestart: string;
@@ -27,6 +27,7 @@ declare const translations: {
27
27
  notSatisfied: string;
28
28
  patternAndConditions: string;
29
29
  patternMatch: string;
30
+ reachabilityUnknown: string;
30
31
  selfReference: string;
31
32
  statesEqual: string;
32
33
  statesNotEqual: string;
@@ -66,6 +67,11 @@ declare const translations: {
66
67
  closed: string;
67
68
  open: string;
68
69
  };
70
+ reachability: {
71
+ pingError: string;
72
+ reachable: string;
73
+ unreachable: string;
74
+ };
69
75
  schedule: {
70
76
  badType: string;
71
77
  badUnits: string;
@@ -148,6 +154,7 @@ declare const translations: {
148
154
  operatorAnd: string;
149
155
  operatorOr: string;
150
156
  outlet: string;
157
+ ping: string;
151
158
  milliseconds: string;
152
159
  minutes: string;
153
160
  motionSensor: string;
@@ -217,6 +224,8 @@ declare const translations: {
217
224
  operator: string;
218
225
  pattern: string;
219
226
  period: string;
227
+ pingHost: string;
228
+ pingInterval: string;
220
229
  preset: string;
221
230
  random: string;
222
231
  resetOnRestart: string;
package/dist/i18n/ru.d.ts CHANGED
@@ -16,6 +16,7 @@ declare const ru: {
16
16
  notSatisfied: string;
17
17
  patternAndConditions: string;
18
18
  patternMatch: string;
19
+ reachabilityUnknown: string;
19
20
  selfReference: string;
20
21
  statesEqual: string;
21
22
  statesNotEqual: string;
@@ -55,6 +56,11 @@ declare const ru: {
55
56
  closed: string;
56
57
  open: string;
57
58
  };
59
+ reachability: {
60
+ pingError: string;
61
+ reachable: string;
62
+ unreachable: string;
63
+ };
58
64
  schedule: {
59
65
  badType: string;
60
66
  badUnits: string;
@@ -137,6 +143,7 @@ declare const ru: {
137
143
  operatorAnd: string;
138
144
  operatorOr: string;
139
145
  outlet: string;
146
+ ping: string;
140
147
  milliseconds: string;
141
148
  minutes: string;
142
149
  motionSensor: string;
@@ -206,6 +213,8 @@ declare const ru: {
206
213
  operator: string;
207
214
  pattern: string;
208
215
  period: string;
216
+ pingHost: string;
217
+ pingInterval: string;
209
218
  preset: string;
210
219
  random: string;
211
220
  resetOnRestart: string;
@@ -16,6 +16,7 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
16
16
  notSatisfied: string;
17
17
  patternAndConditions: string;
18
18
  patternMatch: string;
19
+ reachabilityUnknown: string;
19
20
  selfReference: string;
20
21
  statesEqual: string;
21
22
  statesNotEqual: string;
@@ -55,6 +56,11 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
55
56
  closed: string;
56
57
  open: string;
57
58
  };
59
+ reachability: {
60
+ pingError: string;
61
+ reachable: string;
62
+ unreachable: string;
63
+ };
58
64
  schedule: {
59
65
  badType: string;
60
66
  badUnits: string;
@@ -137,6 +143,7 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
137
143
  operatorAnd: string;
138
144
  operatorOr: string;
139
145
  outlet: string;
146
+ ping: string;
140
147
  milliseconds: string;
141
148
  minutes: string;
142
149
  motionSensor: string;
@@ -206,6 +213,8 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
206
213
  operator: string;
207
214
  pattern: string;
208
215
  period: string;
216
+ pingHost: string;
217
+ pingInterval: string;
209
218
  preset: string;
210
219
  random: string;
211
220
  resetOnRestart: string;
@@ -5,13 +5,16 @@ export declare class ConditionManager {
5
5
  private readonly log;
6
6
  private readonly targets;
7
7
  private readonly triggersToTargets;
8
- private readonly triggerStates;
8
+ private readonly accessoryStates;
9
+ private readonly reachabilityInstances;
10
+ private readonly reachabilityStates;
9
11
  private readonly logWatcher;
10
12
  constructor(log: Log, storagePath: string);
11
13
  teardown(): void;
12
14
  register(name: string, identifier: string, conditions: ConditionsConfig | undefined, trigger: () => Promise<void>, reset: (() => Promise<void>) | undefined, disableLogging: boolean): void;
13
15
  onStateChange(triggerId: string, state: AccessoryState): Promise<void>;
14
16
  private onPatternMatch;
17
+ private onReachabilityChange;
15
18
  private evaluateConditions;
16
19
  private compareStates;
17
20
  }
@@ -1,12 +1,15 @@
1
1
  import { ConditionOperator, getStateType, OperandType } from './enums.js';
2
2
  import { strings } from '../i18n/i18n.js';
3
3
  import { LogWatcher } from '../tools/logWatcher.js';
4
+ import { Reachability } from '../tools/reachability.js';
4
5
  import { assert } from '../tools/validation.js';
5
6
  export class ConditionManager {
6
7
  log;
7
8
  targets = new Map();
8
9
  triggersToTargets = new Map();
9
- triggerStates = new Map();
10
+ accessoryStates = new Map();
11
+ reachabilityInstances = [];
12
+ reachabilityStates = new Map();
10
13
  logWatcher;
11
14
  constructor(log, storagePath) {
12
15
  this.log = log;
@@ -14,6 +17,7 @@ export class ConditionManager {
14
17
  }
15
18
  teardown() {
16
19
  this.logWatcher.teardown();
20
+ this.reachabilityInstances.forEach((instance) => instance.teardown());
17
21
  }
18
22
  register(name, identifier, conditions, trigger, reset, disableLogging) {
19
23
  if (conditions === undefined) {
@@ -34,6 +38,9 @@ export class ConditionManager {
34
38
  logTypeCount++;
35
39
  valid = valid && assert(this.log, name, operand, 'pattern');
36
40
  break;
41
+ case OperandType.PING:
42
+ valid = valid && assert(this.log, name, operand, 'pingHost');
43
+ break;
37
44
  }
38
45
  if (operand.accessoryId === identifier) {
39
46
  this.log.error(strings.conditions.selfReference, name);
@@ -61,6 +68,11 @@ export class ConditionManager {
61
68
  case OperandType.LOG:
62
69
  this.logWatcher.registerPattern(operand.pattern, () => this.onPatternMatch(target));
63
70
  break;
71
+ case OperandType.PING:
72
+ this.reachabilityInstances.push(new Reachability(this.log, operand.pingHost, operand.pingInterval, operand.pingUnits, (reachable) => {
73
+ this.onReachabilityChange(target, operand.pingHost, reachable);
74
+ }));
75
+ break;
64
76
  }
65
77
  }
66
78
  }
@@ -69,14 +81,14 @@ export class ConditionManager {
69
81
  if (!targetIds) {
70
82
  return;
71
83
  }
72
- this.triggerStates.set(triggerId, state);
84
+ this.accessoryStates.set(triggerId, state);
73
85
  for (const targetId of targetIds) {
74
86
  const target = this.targets.get(targetId);
75
87
  if (!target) {
76
88
  throw new Error('Unable to find target associated with the supplied trigger');
77
89
  }
78
90
  this.log.ifVerbose(strings.conditions.evaluatingConditions, target.name);
79
- if (this.evaluateConditions(target.conditions, false)) {
91
+ if (this.evaluateConditions(target.conditions)) {
80
92
  if (!target.disableLogging) {
81
93
  this.log.always(strings.conditions.satisfied, target.name);
82
94
  }
@@ -104,7 +116,20 @@ export class ConditionManager {
104
116
  }
105
117
  target.trigger();
106
118
  }
107
- evaluateConditions(conditions, ignoreLogType) {
119
+ async onReachabilityChange(target, host, reachable) {
120
+ this.reachabilityStates.set(host, reachable);
121
+ if (this.evaluateConditions(target.conditions)) {
122
+ if (!target.disableLogging) {
123
+ this.log.always(strings.conditions.satisfied, target.name);
124
+ }
125
+ await target.trigger();
126
+ }
127
+ else {
128
+ this.log.ifVerbose(strings.conditions.notSatisfied, target.name);
129
+ await target.reset?.();
130
+ }
131
+ }
132
+ evaluateConditions(conditions, ignoreLogType = false) {
108
133
  let result;
109
134
  for (const operand of conditions.operands) {
110
135
  if (operand.type === OperandType.LOG) {
@@ -114,13 +139,28 @@ export class ConditionManager {
114
139
  result = false;
115
140
  break;
116
141
  }
117
- const currentState = this.triggerStates.get(operand.accessoryId);
118
- if (!currentState) {
119
- this.log.ifVerbose(strings.conditions.stateUnknown, `'${operand.accessoryId}'`);
120
- result = false;
121
- break;
142
+ let operandResult;
143
+ if (operand.type === OperandType.ACCESSORY) {
144
+ const currentState = this.accessoryStates.get(operand.accessoryId);
145
+ if (!currentState) {
146
+ this.log.ifVerbose(strings.conditions.stateUnknown, `'${operand.accessoryId}'`);
147
+ result = false;
148
+ break;
149
+ }
150
+ operandResult = this.compareStates(currentState, operand.accessoryState);
151
+ }
152
+ else if (operand.type === OperandType.PING) {
153
+ const currentReachability = this.reachabilityStates.get(operand.pingHost);
154
+ if (currentReachability === undefined) {
155
+ this.log.ifVerbose(strings.conditions.reachabilityUnknown, `'${operand.pingHost}'`);
156
+ result = false;
157
+ break;
158
+ }
159
+ operandResult = currentReachability;
160
+ }
161
+ if (operandResult === undefined) {
162
+ throw new Error('operandResult should never be undefined at this point');
122
163
  }
123
- const operandResult = this.compareStates(currentState, operand.accessoryState);
124
164
  switch (conditions.operator) {
125
165
  case ConditionOperator.AND:
126
166
  result = result === undefined ? operandResult : result && operandResult;
@@ -1 +1 @@
1
- {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/model/conditions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/model/conditions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG1F,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAWhD,MAAM,OAAO,gBAAgB;IAYE;IAVZ,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,iBAAiB,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEhD,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEpD,qBAAqB,GAAmB,EAAE,CAAC;IAC3C,kBAAkB,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEhD,UAAU,CAAa;IAExC,YAA6B,GAAQ,EAAE,WAAmB;QAA7B,QAAG,GAAH,GAAG,CAAK;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAEM,QAAQ,CAAC,IAAY,EAAE,UAAkB,EAAE,UAAwC,EACxF,OAA4B,EAAE,KAAwC,EAAE,cAAuB;QAE/F,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1C,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAEzD,QAAO,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,KAAK,WAAW,CAAC,SAAS;oBACxB,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;oBAClF,MAAM;gBACR,KAAK,WAAW,CAAC,GAAG;oBAClB,YAAY,EAAE,CAAC;oBACf,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;oBAC5D,MAAM;gBACR,KAAK,WAAW,CAAC,IAAI;oBACnB,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;oBAC7D,MAAM;YACR,CAAC;YAED,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBACvD,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,KAAK,iBAAiB,CAAC,GAAG,EAAE,CAAC;YACtE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAChF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAErC,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YAE1C,QAAO,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtB,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAY,CAAC,IAAI,EAAE,CAAC;oBAC1E,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC5B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAY,EAAE,UAAU,CAAC,CAAC;oBAC7D,MAAM;gBACR,CAAC;gBACD,KAAK,WAAW,CAAC,GAAG;oBAClB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,OAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrF,MAAM;gBACR,KAAK,WAAW,CAAC,IAAI;oBACnB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,QAAS,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;wBACnI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAS,EAAE,SAAS,CAAC,CAAC;oBAClE,CAAC,CAAC,CAAC,CAAC;oBACJ,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,KAAqB;QAEjE,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAE3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAEzE,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC3B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACjE,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,MAAc;QAEnC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACnG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,MAAc,EAAE,IAAY,EAAE,SAAkB;QACjF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAE7C,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjE,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,UAA4B,EAAE,gBAAyB,KAAK;QAErF,IAAI,MAA2B,CAAC;QAEhC,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YAE1C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC;gBAErC,IAAI,aAAa,IAAI,UAAU,CAAC,QAAQ,KAAK,iBAAiB,CAAC,EAAE,EAAE,CAAC;oBAClE,SAAS;gBACX,CAAC;gBAED,MAAM,GAAG,KAAK,CAAC;gBACf,MAAM;YACR,CAAC;YAED,IAAI,aAAkC,CAAC;YACvC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;gBAE3C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAY,CAAC,CAAC;gBACpE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;oBAChF,MAAM,GAAG,KAAK,CAAC;oBACf,MAAM;gBACR,CAAC;gBAED,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,cAAe,CAAC,CAAC;YAE5E,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;gBAE7C,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;gBAC3E,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBACtC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACpF,MAAM,GAAG,KAAK,CAAC;oBACf,MAAM;gBACR,CAAC;gBAED,aAAa,GAAG,mBAAmB,CAAC;YACtC,CAAC;YAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC3E,CAAC;YAED,QAAO,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAC7B,KAAK,iBAAiB,CAAC,GAAG;oBACxB,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC;oBACxE,MAAM;gBACR,KAAK,iBAAiB,CAAC,EAAE;oBACvB,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC;oBACxE,MAAM;YACR,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAEO,aAAa,CAAC,OAAuB,EAAE,OAAuB;QAEpE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;YACnF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -34,7 +34,8 @@ export declare enum ConditionOperator {
34
34
  }
35
35
  export declare enum OperandType {
36
36
  ACCESSORY = "ACCESSORY",
37
- LOG = "LOG"
37
+ LOG = "LOG",
38
+ PING = "PING"
38
39
  }
39
40
  export declare enum OnState {
40
41
  ON = "on",
@@ -42,6 +42,7 @@ export var OperandType;
42
42
  (function (OperandType) {
43
43
  OperandType["ACCESSORY"] = "ACCESSORY";
44
44
  OperandType["LOG"] = "LOG";
45
+ OperandType["PING"] = "PING";
45
46
  })(OperandType || (OperandType = {}));
46
47
  export var OnState;
47
48
  (function (OnState) {
@@ -1 +1 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/model/enums.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAUX;AAVD,WAAY,aAAa;IACvB,8BAAa,CAAA;IACb,sDAAqC,CAAA;IACrC,wCAAuB,CAAA;IACvB,gDAA+B,CAAA;IAC/B,kCAAiB,CAAA;IACjB,kCAAiB,CAAA;IACjB,0CAAyB,CAAA;IACzB,kCAAiB,CAAA;IACjB,kDAAiC,CAAA;AACnC,CAAC,EAVW,aAAa,KAAb,aAAa,QAUxB;AAED,MAAM,CAAN,IAAY,UAQX;AARD,WAAY,UAAU;IACpB,yDAA2C,CAAA;IAC3C,2DAA6C,CAAA;IAC7C,6CAA+B,CAAA;IAC/B,uCAAyB,CAAA;IACzB,2CAA6B,CAAA;IAC7B,iDAAmC,CAAA;IACnC,yCAA2B,CAAA;AAC7B,CAAC,EARW,UAAU,KAAV,UAAU,QAQrB;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAN,IAAY,oBAQX;AARD,WAAY,oBAAoB;IAC9B,uEAA+C,CAAA;IAC/C,yEAAiD,CAAA;IACjD,iEAAyC,CAAA;IACzC,qDAA6B,CAAA;IAC7B,yDAAiC,CAAA;IACjC,+DAAuC,CAAA;IACvC,uDAA+B,CAAA;AACjC,CAAC,EARW,oBAAoB,KAApB,oBAAoB,QAQ/B;AAED,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,gCAAW,CAAA;IACX,8BAAS,CAAA;AACX,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B;AAED,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,0BAAW,CAAA;AACb,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB;AAED,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,oBAAS,CAAA;IACT,sBAAW,CAAA;AACb,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAED,MAAM,UAAU,cAAc,CAAC,KAAe;IAC5C,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,8BAAiB,CAAA;IACjB,kCAAqB,CAAA;AACvB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,6BAAiB,CAAA;AACnB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,UAAU,eAAe,CAAC,KAAgB;IAC9C,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAID,MAAM,UAAU,YAAY,CAAC,KAAqB;IAEhD,IAAI,cAAc,CAAC,KAAgB,CAAC,EAAE,CAAC;QACrC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,eAAe,CAAC,KAAiB,CAAC,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,gBAAgB,CAAC,KAAkB,CAAC,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAN,IAAY,sBAKX;AALD,WAAY,sBAAsB;IAChC,uCAAa,CAAA;IACb,uCAAa,CAAA;IACb,uCAAa,CAAA;IACb,qCAAW,CAAA;AACb,CAAC,EALW,sBAAsB,KAAtB,sBAAsB,QAKjC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA8B;IACnE,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,2BAAa,CAAA;IACb,6BAAe,CAAA;AACjB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACnB,0CAA6B,CAAA;IAC7B,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;IACnB,4BAAe,CAAA;AACjB,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgB;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAN,IAAY,YASX;AATD,WAAY,YAAY;IACtB,qCAAqB,CAAA;IACrB,6BAAa,CAAA;IACb,6BAAa,CAAA;IACb,6BAAa,CAAA;IACb,2CAA2B,CAAA;IAC3B,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;AACnB,CAAC,EATW,YAAY,KAAZ,YAAY,QASvB;AAED,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,oCAAgB,CAAA;AAClB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAwB;IAC9D,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAN,IAAY,qBAQX;AARD,WAAY,qBAAqB;IAC/B,kDAAyB,CAAA;IACzB,4DAAmC,CAAA;IACnC,kCAAS,CAAA;IACT,4DAAmC,CAAA;IACnC,gFAAuD,CAAA;IACvD,0DAAiC,CAAA;IACjC,gEAAuC,CAAA;AACzC,CAAC,EARW,qBAAqB,KAArB,qBAAqB,QAQhC;AAED,MAAM,UAAU,eAAe,CAAI,CAAqC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/model/enums.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { AccessoryConfig, CharacteristicValue, PlatformConfig } from 'homebridge';
2
2
  export type ServiceType = typeof import('homebridge').Service;
3
3
  export type CharacteristicType = typeof import('homebridge').Characteristic;
4
- import { AccessoryState, AccessoryType, ConditionOperator, DefaultThermostatState, LockState, OnState, Position, ScheduleType, SensorType, TemperatureUnits, TimePeriod, TimeUnits } from './enums.js';
4
+ import { AccessoryState, AccessoryType, ConditionOperator, DefaultThermostatState, LockState, OnState, OperandType, Position, ScheduleType, SensorType, TemperatureUnits, TimePeriod, TimeUnits } from './enums.js';
5
5
  export type LegacyAccessoryConfig = AccessoryConfig & {
6
6
  name: string;
7
7
  dimmer?: boolean;
@@ -47,10 +47,13 @@ export type LimiterConfig = Assertable & {
47
47
  period: TimePeriod;
48
48
  };
49
49
  export type Operand = Assertable & {
50
- type: string;
50
+ type: OperandType;
51
51
  accessoryId?: string;
52
52
  accessoryState?: AccessoryState;
53
53
  pattern?: string;
54
+ pingHost?: string;
55
+ pingInterval?: number;
56
+ pingUnits?: TimeUnits;
54
57
  };
55
58
  export type ConditionsConfig = Assertable & {
56
59
  operator: ConditionOperator;
@@ -0,0 +1,16 @@
1
+ import { TimeUnits } from '../model/enums.js';
2
+ import { Log } from '../tools/log.js';
3
+ type ReachabilityCallback = (reachable: boolean) => (void);
4
+ export declare class Reachability {
5
+ private readonly log;
6
+ private readonly callback;
7
+ private host;
8
+ protected timeout?: NodeJS.Timeout;
9
+ private _alive?;
10
+ constructor(log: Log, host: string, interval: number | undefined, units: TimeUnits | undefined, callback: ReachabilityCallback);
11
+ teardown(): void;
12
+ private set alive(value);
13
+ private ping;
14
+ private normalizeHost;
15
+ }
16
+ export {};
@@ -0,0 +1,52 @@
1
+ import ping from 'ping';
2
+ import { strings } from '../i18n/i18n.js';
3
+ import { TimeUnits } from '../model/enums.js';
4
+ import { getDelay } from '../timeout/timeout.js';
5
+ export class Reachability {
6
+ log;
7
+ callback;
8
+ host;
9
+ timeout;
10
+ _alive;
11
+ constructor(log, host, interval, units, callback) {
12
+ this.log = log;
13
+ this.callback = callback;
14
+ this.host = this.normalizeHost(host);
15
+ const delay = getDelay(interval ?? 60, units ?? TimeUnits.SECONDS);
16
+ this.timeout = setInterval(() => {
17
+ this.ping();
18
+ }, delay);
19
+ this.ping();
20
+ }
21
+ teardown() {
22
+ clearInterval(this.timeout);
23
+ this.timeout = undefined;
24
+ }
25
+ set alive(value) {
26
+ if (this._alive !== value) {
27
+ this.log.ifVerbose(value ? strings.reachability.reachable : strings.reachability.unreachable, `'${this.host}'`);
28
+ this.callback(value);
29
+ }
30
+ this._alive = value;
31
+ }
32
+ async ping() {
33
+ try {
34
+ const response = await ping.promise.probe(this.host);
35
+ this.alive = response.alive;
36
+ }
37
+ catch (err) {
38
+ this.log.error(strings.reachability.pingError, err);
39
+ this.teardown();
40
+ }
41
+ }
42
+ normalizeHost(input) {
43
+ try {
44
+ const url = new URL(input.includes('://') ? input : `http://${input}`);
45
+ return url.hostname;
46
+ }
47
+ catch {
48
+ return input;
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=reachability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reachability.js","sourceRoot":"","sources":["../../src/tools/reachability.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMjD,MAAM,OAAO,YAAY;IASJ;IAIA;IAXX,IAAI,CAAS;IAEX,OAAO,CAAkB;IAE3B,MAAM,CAAW;IAEzB,YACmB,GAAQ,EACzB,IAAY,EACZ,QAA4B,EAC5B,KAA4B,EACX,QAA8B;QAJ9B,QAAG,GAAH,GAAG,CAAK;QAIR,aAAQ,GAAR,QAAQ,CAAsB;QAG/C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,KAAK,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEM,QAAQ;QACb,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,IAAY,KAAK,CAAC,KAAc;QAE9B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAChH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;YACvE,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "displayName": "Homebridge Dummy",
5
5
  "description": "Create accessories to help with HomeKit automation and control — scheduling, delays, sensors, commands, conditions, webhooks, and more",
6
6
  "type": "module",
7
- "version": "1.4.1-beta.2",
7
+ "version": "1.4.1-beta.3",
8
8
  "homepage": "https://github.com/mpatfield/homebridge-dummy#readme",
9
9
  "repository": {
10
10
  "type": "git",
@@ -66,6 +66,7 @@
66
66
  "homebridge-lib": "^7.1.8",
67
67
  "lodash.merge": "^4.6.2",
68
68
  "node-persist": "^4.0.4",
69
+ "ping": "^1.0.0",
69
70
  "suncalc": "^1.9.0",
70
71
  "tail-file": "^1.4.16"
71
72
  },