homebridge-dummy 1.4.0-beta.3 → 1.4.0-beta.4

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,12 @@
2
2
 
3
3
  All notable changes to homebridge-dummy will be documented in this file.
4
4
 
5
- ## 1.4.0-beta.3 (2025-10-26)
5
+ ## 1.4.0-beta.4 (2025-10-26)
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
- - [Trigger Conditions](https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#trigger-conditions) to change the state of an accessory based on state changes of other Homebridge Dummy accessories
10
+ - [Trigger Conditions](https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#trigger-conditions) to change the state of an accessory based on state changes of other Homebridge Dummy accessories or keywords in the Homebridge log
11
11
  - ⚠️ Config UI for conditions is highly experimental. Please [open a ticket](https://github.com/mpatfield/homebridge-dummy/issues/new/choose) if you see any unusal behavior.
12
12
  - `GET` requests for [Webhooks](https://github.com/mpatfield/homebridge-dummy#webhooks) (previously only `POST`)
13
13
  - Fade Out option for `Lightbulb` brightness to emulate a simple "count-down"
package/README.md CHANGED
@@ -238,13 +238,23 @@ Execute arbitrary commands (e.g. curl) when the accessory changes state
238
238
 
239
239
  You can trigger an accessory whenever a set of conditions are satisfied, for example, when other Homebridge Dummy accessories turn on.
240
240
 
241
- 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`.
241
+ 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`.
242
242
 
243
243
  You can have an arbitrarily long list of conditions and they are checked in order.
244
244
 
245
245
  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.
246
246
 
247
- Note that due to limitations of HomeKit and Homebridge, it is only possible to check the states of other Homebridge Dummy accessories. One possible workaround is to set up duplicate accessories in Homebridge Dummy and use Automation to mirror the states.
247
+ Note that due to limitations of HomeKit and Homebridge, it is only possible to check the states of other Homebridge Dummy accessories.
248
+
249
+ One workaround is to use the `LOG` operand type which will watch the Homebridge log for the specified string or regex.
250
+
251
+ `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.
252
+
253
+ 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.
254
+
255
+ Note that `LOG` triggers are not instantenous and may take several seconds to fire.
256
+
257
+ Another workaround for non-Dummy accessories is to set up duplicate accessories in Homebridge Dummy and use Automation to mirror the states.
248
258
 
249
259
  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.
250
260
 
@@ -335,6 +345,8 @@ Sensor feature inspired by [Homebridge-Delay-Switch](https://github.com/nitaybz/
335
345
 
336
346
  Command feature inspired by [homebridge-cmdtrigger](https://github.com/hallos/homebridge-cmdtrigger) by [@hallos](https://github.com/sponsors/hallos)
337
347
 
348
+ Log watch trigger feature inspired by [hb-virtual-switch](https://github.com/Plankske/hb-virtual-switch/) by [@Plankske](https://github.com/sponsors/Plankske)
349
+
338
350
  Special thanks to [@nfarina](https://github.com/sponsors/nfarina) for creating the original version of this plugin and maintaining it for almost 10 (!!!) years
339
351
 
340
352
  And to the amazing creators/contributors of [Homebridge](https://homebridge.io) who made this plugin possible!
@@ -214,19 +214,56 @@
214
214
  "operand": {
215
215
  "type": "object",
216
216
  "properties": {
217
- "accessoryId": {
217
+ "type": {
218
218
  "type": "string",
219
- "title": "${config.title.accessory}",
219
+ "title": "${config.title.type}",
220
+ "enum": [ "ACCESSORY", "LOG" ],
221
+ "enumNames": [ "${config.enumNames.accessory}", "${config.enumNames.log}" ],
220
222
  "required": true
221
223
  },
224
+ "accessoryId": {
225
+ "type": "string",
226
+ "title": "${config.title.accessory}"
227
+ },
222
228
  "accessoryState": {
223
229
  "type": "string",
224
230
  "title": "${config.title.accessoryState}",
225
231
  "enum": [ "on", "off", "open", "closed", "locked", "unlocked" ],
226
- "enumNames": [ "${config.enumNames.on}", "${config.enumNames.off}", "${config.enumNames.open}", "${config.enumNames.closed}", "${config.enumNames.secured}", "${config.enumNames.unsecured}" ],
227
- "required": true
232
+ "enumNames": [ "${config.enumNames.on}", "${config.enumNames.off}", "${config.enumNames.open}", "${config.enumNames.closed}", "${config.enumNames.secured}", "${config.enumNames.unsecured}" ]
233
+ },
234
+ "pattern": {
235
+ "type": "string",
236
+ "title": "${config.title.pattern}"
228
237
  }
229
- }
238
+ },
239
+ "allOf": [
240
+ {
241
+ "if": {
242
+ "properties": {
243
+ "type": {
244
+ "const": "ACCESSORY"
245
+ }
246
+ },
247
+ "required": ["type"]
248
+ },
249
+ "then": {
250
+ "required": ["accessoryId", "accessoryState"]
251
+ }
252
+ },
253
+ {
254
+ "if": {
255
+ "properties": {
256
+ "type": {
257
+ "const": "LOG"
258
+ }
259
+ },
260
+ "required": ["type"]
261
+ },
262
+ "then": {
263
+ "required": ["pattern"]
264
+ }
265
+ }
266
+ ]
230
267
  },
231
268
  "conditions": {
232
269
  "type": "object",
@@ -747,15 +784,37 @@
747
784
  "flex-direction": "row",
748
785
  "items": [
749
786
  {
750
- "key": "accessories[].conditions.operands[].accessoryId",
787
+ "key": "accessories[].conditions.operands[].type",
751
788
  "flex": "0 0 auto"
752
789
  },
790
+ {
791
+ "type": "div",
792
+ "flex": "0 0 5px"
793
+ },
794
+ {
795
+ "key": "accessories[].conditions.operands[].accessoryId",
796
+ "flex": "0 0 auto",
797
+ "condition": {
798
+ "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'ACCESSORY';"
799
+ }
800
+ },
801
+ {
802
+ "type": "div",
803
+ "flex": "0 0 5px"
804
+ },
753
805
  {
754
806
  "key": "accessories[].conditions.operands[].accessoryState",
755
807
  "flex": "0 0 auto",
756
808
  "condition": {
757
809
  "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.accessoryId;"
758
810
  }
811
+ },
812
+ {
813
+ "key": "accessories[].conditions.operands[].pattern",
814
+ "flex": "1 0 auto",
815
+ "condition": {
816
+ "functionBody": "return model.accessories?.[arguments[1][0]]?.conditions?.operands?.[arguments[1][1]]?.type === 'LOG';"
817
+ }
759
818
  }
760
819
  ]
761
820
  }
@@ -8,7 +8,8 @@ export declare class HomebridgeDummyPlatform implements DynamicPlatformPlugin {
8
8
  private readonly log;
9
9
  private readonly platformAccessories;
10
10
  private readonly dummyAccessories;
11
- private webhookManager;
11
+ private readonly webhookManager;
12
+ private readonly conditionManager;
12
13
  constructor(logger: Logger, config: DummyPlatformConfig, api: API);
13
14
  configureAccessory(platformAccessory: PlatformAccessory): void;
14
15
  private teardown;
@@ -18,6 +18,7 @@ export class HomebridgeDummyPlatform {
18
18
  platformAccessories = new Map();
19
19
  dummyAccessories = [];
20
20
  webhookManager;
21
+ conditionManager;
21
22
  constructor(logger, config, api) {
22
23
  this.config = config;
23
24
  this.api = api;
@@ -27,6 +28,7 @@ export class HomebridgeDummyPlatform {
27
28
  this.Characteristic = api.hap.Characteristic;
28
29
  this.log = new Log(logger, config.verbose === true);
29
30
  this.webhookManager = new WebhookManager(this.Characteristic, this.log, config.webhookPort);
31
+ this.conditionManager = new ConditionManager(this.log, api.user.storagePath());
30
32
  this.log.always('v%s | System %s | Node %s | HB v%s | HAPNodeJS v%s', getVersion(), process.platform, process.version, api.serverVersion, api.hap.HAPLibraryVersion());
31
33
  api.on('didFinishLaunching', () => {
32
34
  this.setup();
@@ -43,6 +45,7 @@ export class HomebridgeDummyPlatform {
43
45
  this.dummyAccessories.forEach(accessory => {
44
46
  accessory.teardown();
45
47
  });
48
+ this.conditionManager.teardown();
46
49
  }
47
50
  async setup() {
48
51
  await Storage.init(this.api.user.persistPath());
@@ -53,7 +56,6 @@ export class HomebridgeDummyPlatform {
53
56
  accessories.push(...migratedAccessories);
54
57
  }
55
58
  const groupAccessories = new Map();
56
- const conditionManager = new ConditionManager(this.log);
57
59
  for (const accessoryConfig of accessories) {
58
60
  if (accessoryConfig.groupName?.length) {
59
61
  const groupConfig = groupAccessories.get(accessoryConfig.groupName) || { accessories: [] };
@@ -69,7 +71,7 @@ export class HomebridgeDummyPlatform {
69
71
  Characteristic: this.Characteristic,
70
72
  platformAccessory: platformAccessory,
71
73
  config: accessoryConfig,
72
- conditionManager: conditionManager,
74
+ conditionManager: this.conditionManager,
73
75
  log: this.log,
74
76
  isGrouped: false,
75
77
  };
@@ -91,7 +93,7 @@ export class HomebridgeDummyPlatform {
91
93
  Service: this.Service,
92
94
  Characteristic: this.Characteristic,
93
95
  platformAccessory: platformAccessory,
94
- conditionManager: conditionManager,
96
+ conditionManager: this.conditionManager,
95
97
  log: this.log,
96
98
  };
97
99
  const groupAccessory = new GroupAccessory(dependency, groupConfig, this.webhookManager);
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/homebridge/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/homebridge/platform.ts"],"names":[],"mappings":"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"}
@@ -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.0-beta.3"></script>
46
+ <script src="ui.js?v=1.4.0-beta.4"></script>
@@ -1 +1 @@
1
- "use strict";(()=>{var u="Homebridge Dummy";var L={github:'<a target="_blank" href="https://github.com/mpatfield/homebridge-dummy/">GitHub</a>',migration:'<a target="_blank" href="https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#v10-migration">GitHub</a>',dummy:u};function w(e){document.querySelectorAll("[i18n]").forEach(t=>{let i=t.getAttribute("i18n"),n=e.config[i],o=t.getAttribute("i18n_replace");o&&(n=n.replace("%s",L[o])),t.innerHTML=n})}function I(e){let t=["span","label","legend","option","p"];Array.from(window.parent.document.querySelectorAll(t.join(","))).sort((n,o)=>t.indexOf(n.tagName.toLowerCase())-t.indexOf(o.tagName.toLowerCase())).forEach(n=>{let o=n.innerHTML;o=o.replaceAll(/\$\{config\.(title|description|enumNames)\.([^}]+)\}/g,(d,s,r)=>e.config[s]&&typeof e.config[s]=="object"&&r in e.config[s]?e.config[s][r]:d),n.innerHTML!==o&&(n.innerHTML=o)})}function O(e){let t=Array.from(window.parent.document.querySelectorAll("fieldset legend"));for(let i of t){let o=i.closest("fieldset")?.querySelector('input[type="text"][name="name"]');o&&i.textContent!==(o.value||e.config.title.accessory)&&(i.textContent=o.value!==""?o.value:e.config.title.accessory),o&&!o.dataset.accessoryNameListener&&(o.addEventListener("input",()=>O(e)),o.dataset.accessoryNameListener="true")}}function E(){if(typeof crypto<"u"){if(crypto.randomUUID)return crypto.randomUUID();if(crypto.getRandomValues)return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=crypto.getRandomValues(new Uint8Array(1))[0]&15;return(e==="x"?t:t&3|8).toString(16)})}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}async function D(e){let t=!1;e.forEach(i=>{i.accessories?.forEach(n=>{n.id===void 0&&(n.id=E(),t=!0),n.limiter!==void 0&&n.limiter.id===void 0&&(n.limiter.id=E(),t=!0)})}),t&&await homebridge.updatePluginConfig(e)}function v(e,t){let i=window.parent.document.createTreeWalker(window.parent.document.body,NodeFilter.SHOW_ELEMENT),n=!1;for(;i.nextNode();)if(i.currentNode===e){n=!0;break}for(;n&&i.nextNode();){let o=i.currentNode;if(o.getAttribute("name")===t)return o}return null}var c=[];async function S(e,t){let i=window.parent.document.querySelectorAll('[name="accessoryId"]');if(i.length===0)return;t===void 0&&(t=await homebridge.getPluginConfig());let n=[];for(let d of t){let s=(d.accessories??[]).filter(r=>r.id&&r.name&&r.type!=="Thermostat");n.push(...s)}let o=!1;c.length!==n.length?(c=n,o=!0):c.forEach((d,s)=>{let r=n[s];(d.name!==r.name||d.type!==r.type||d.id!==r.id)&&(c=n,o=!0)}),i.forEach(d=>{let s=d,r=s.parentElement?.querySelector('select.form-select[data-accessory-name-select="true"]');if(r&&r.dataset.accessoryNameSelect!=="true"){console.error("Unable to retrieve accessory name selector");return}r||(r=document.createElement("select"),r.className="form-select",r.dataset.accessoryNameSelect="true",s.hidden=!0,r.addEventListener("change",()=>{if(r.selectedIndex===-1)s.value="";else{let l=c[r.selectedIndex].id;s.value=l}s.dispatchEvent(new Event("input",{bubbles:!0}))}),s.parentElement?.appendChild(r)),(o||r.length===0)&&(r.length=0,c.forEach(l=>{let a=document.createElement("option");a.text=l.name,r.add(a)}));let m=s.value.length?c.findIndex(l=>l.id===s.value):-1;if(m===-1)r.selectedIndex=-1;else{r.selectedIndex=m;let l=c[m],a=v(r,"accessoryState");if(!a){console.error("Unable to find accessory state selector");return}if(a.length!==6){console.error("Accessory state selector has an unexpected number of options");return}let g=a.options[0],x=a.options[1],p=a.options[2],h=a.options[3],b=a.options[4],y=a.options[5];switch(g.hidden=!0,x.hidden=!0,p.hidden=!0,h.hidden=!0,b.hidden=!0,y.hidden=!0,l.type){case"Lightbulb":case"Outlet":case"Switch":g.hidden=!1,x.hidden=!1,a.selectedIndex!==0&&a.selectedIndex!==1&&(a.selectedIndex=-1,a.dispatchEvent(new Event("change",{bubbles:!0})));break;case"Door":case"GarageDoorOpener":case"Window":case"WindowCovering":p.hidden=!1,h.hidden=!1,a.selectedIndex!==2&&a.selectedIndex!==3&&(a.selectedIndex=-1,a.dispatchEvent(new Event("change",{bubbles:!0})));break;case"LockMechanism":a.selectedIndex!==4&&a.selectedIndex!==5&&(a.selectedIndex=-1,a.dispatchEvent(new Event("change",{bubbles:!0}))),b.hidden=!1,y.hidden=!1;break;case"Thermostat":default:return}}})}async function N(e){let t=!1;e.forEach(i=>{i.accessories?.forEach(n=>{"defaultOn"in n&&(n.defaultState=n.defaultOn?"on":"off",n.defaultOn=void 0,t=!0);let o=n.sensor;typeof o=="string"&&(n.sensor={type:o},t=!0);let d=n.schedule;d?.type==="CRON"&&d.cron!=="CRON_CUSTOM"&&!d.cron?.startsWith("@")&&(n.schedule={...d,cron:"CRON_CUSTOM",cronCustom:d.cron},t=!0)})}),t&&await homebridge.updatePluginConfig(e)}function f(e){document.getElementById("intro").style.display="none",document.getElementById("migration").style.display="none",document.getElementById("support").style.display="block",new MutationObserver(()=>{I(e),O(e),S(e)}).observe(window.parent.document.body,{childList:!0,subtree:!0}),homebridge.addEventListener("configChanged",async i=>{let n=i.data;await D(n),await S(e,n)}),homebridge.showSchemaForm(),homebridge.hideSpinner(),homebridge.enableSaveButton()}function M(e){document.getElementById("header").style.display="none",document.getElementById("intro").style.display="none",document.getElementById("migration").style.display="block",document.getElementById("skipMigration").addEventListener("click",async()=>{await homebridge.updatePluginConfig([{name:u}]),await homebridge.savePluginConfig(),f(e)}),document.getElementById("doMigration").addEventListener("click",async()=>{await homebridge.updatePluginConfig([{name:u,migrationNeeded:!0}]),await homebridge.savePluginConfig(),homebridge.closeSettings(),homebridge.toast.info(e.config.migrationRestartDescription.replace("%s",u),e.config.migrationRestartTitle)})}function C(e){document.getElementById("showSettings").addEventListener("click",async()=>{await homebridge.updatePluginConfig([{name:u}]),f(e)}),document.getElementById("showMigration").addEventListener("click",()=>{M(e)}),document.getElementById("intro").style.display="block",homebridge.hideSpinner()}homebridge.disableSaveButton(),homebridge.showSpinner();(async()=>{let e=await homebridge.i18nCurrentLang(),t=await homebridge.request("i18n",e);w(t);let i=await homebridge.getPluginConfig();i.length?(await N(i),f(t)):C(t)})();})();
1
+ "use strict";(()=>{var u="Homebridge Dummy";var w={github:'<a target="_blank" href="https://github.com/mpatfield/homebridge-dummy/">GitHub</a>',migration:'<a target="_blank" href="https://github.com/mpatfield/homebridge-dummy?tab=readme-ov-file#v10-migration">GitHub</a>',dummy:u};function I(e){document.querySelectorAll("[i18n]").forEach(t=>{let i=t.getAttribute("i18n"),n=e.config[i],o=t.getAttribute("i18n_replace");o&&(n=n.replace("%s",w[o])),t.innerHTML=n})}function D(e){let t=["span","label","legend","option","p"];Array.from(window.parent.document.querySelectorAll(t.join(","))).sort((n,o)=>t.indexOf(n.tagName.toLowerCase())-t.indexOf(o.tagName.toLowerCase())).forEach(n=>{let o=n.innerHTML;o=o.replaceAll(/\$\{config\.(title|description|enumNames)\.([^}]+)\}/g,(d,s,r)=>e.config[s]&&typeof e.config[s]=="object"&&r in e.config[s]?e.config[s][r]:d),n.innerHTML!==o&&(n.innerHTML=o)})}function O(e){let t=Array.from(window.parent.document.querySelectorAll("fieldset legend"));for(let i of t){let o=i.closest("fieldset")?.querySelector('input[type="text"][name="name"]');o&&i.textContent!==(o.value||e.config.title.accessory)&&(i.textContent=o.value!==""?o.value:e.config.title.accessory),o&&!o.dataset.accessoryNameListener&&(o.addEventListener("input",()=>O(e)),o.dataset.accessoryNameListener="true")}}function y(){if(typeof crypto<"u"){if(crypto.randomUUID)return crypto.randomUUID();if(crypto.getRandomValues)return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=crypto.getRandomValues(new Uint8Array(1))[0]&15;return(e==="x"?t:t&3|8).toString(16)})}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}async function v(e){let t=!1;e.forEach(i=>{i.accessories?.forEach(n=>{n.id===void 0&&(n.id=y(),t=!0),n.limiter!==void 0&&n.limiter.id===void 0&&(n.limiter.id=y(),t=!0)})}),t&&await homebridge.updatePluginConfig(e)}function C(e,t){let i=window.parent.document.createTreeWalker(window.parent.document.body,NodeFilter.SHOW_ELEMENT),n=!1;for(;i.nextNode();)if(i.currentNode===e){n=!0;break}for(;n&&i.nextNode();){let o=i.currentNode;if(o.getAttribute("name")===t)return o}return null}var c=[];async function S(e,t){let i=window.parent.document.querySelectorAll('[name="accessoryId"]');if(i.length===0)return;t===void 0&&(t=await homebridge.getPluginConfig());let n=[];for(let d of t){let s=(d.accessories??[]).filter(r=>r.id&&r.name&&r.type!=="Thermostat");n.push(...s)}let o=!1;c.length!==n.length?(c=n,o=!0):c.forEach((d,s)=>{let r=n[s];(d.name!==r.name||d.type!==r.type||d.id!==r.id)&&(c=n,o=!0)}),i.forEach(d=>{let s=d,r=s.parentElement?.querySelector('select.form-select[data-accessory-name-select="true"]');if(r&&r.dataset.accessoryNameSelect!=="true"){console.error("Unable to retrieve accessory name selector");return}r||(r=document.createElement("select"),r.className="form-select",r.dataset.accessoryNameSelect="true",s.hidden=!0,r.addEventListener("change",()=>{if(r.selectedIndex===-1)s.value="";else{let l=c[r.selectedIndex].id;s.value=l}s.dispatchEvent(new Event("input",{bubbles:!0}))}),s.parentElement?.appendChild(r)),(o||r.length===0)&&(r.length=0,c.forEach(l=>{let a=document.createElement("option");a.text=l.name,r.add(a)}));let m=s.value.length?c.findIndex(l=>l.id===s.value):-1;if(m===-1)r.selectedIndex=-1;else{r.selectedIndex=m;let l=c[m],a=C(r,"accessoryState");if(!a){console.error("Unable to find accessory state selector");return}if(a.length!==7){console.error("Accessory state selector has an unexpected number of options");return}let L=a.options[0],g=a.options[1],x=a.options[2],p=a.options[3],h=a.options[4],b=a.options[5],E=a.options[6];switch(L.hidden=!0,g.hidden=!0,x.hidden=!0,p.hidden=!0,h.hidden=!0,b.hidden=!0,E.hidden=!0,l.type){case"Lightbulb":case"Outlet":case"Switch":g.hidden=!1,x.hidden=!1,a.selectedIndex!==1&&a.selectedIndex!==2&&(a.selectedIndex=-1,a.dispatchEvent(new Event("change",{bubbles:!0})));break;case"Door":case"GarageDoorOpener":case"Window":case"WindowCovering":p.hidden=!1,h.hidden=!1,a.selectedIndex!==3&&a.selectedIndex!==4&&(a.selectedIndex=-1,a.dispatchEvent(new Event("change",{bubbles:!0})));break;case"LockMechanism":a.selectedIndex!==5&&a.selectedIndex!==6&&(a.selectedIndex=-1,a.dispatchEvent(new Event("change",{bubbles:!0}))),b.hidden=!1,E.hidden=!1;break;case"Thermostat":default:return}}})}async function N(e){let t=!1;e.forEach(i=>{i.accessories?.forEach(n=>{"defaultOn"in n&&(n.defaultState=n.defaultOn?"on":"off",n.defaultOn=void 0,t=!0);let o=n.sensor;typeof o=="string"&&(n.sensor={type:o},t=!0);let d=n.schedule;d?.type==="CRON"&&d.cron!=="CRON_CUSTOM"&&!d.cron?.startsWith("@")&&(n.schedule={...d,cron:"CRON_CUSTOM",cronCustom:d.cron},t=!0)})}),t&&await homebridge.updatePluginConfig(e)}function f(e){document.getElementById("intro").style.display="none",document.getElementById("migration").style.display="none",document.getElementById("support").style.display="block",new MutationObserver(()=>{D(e),O(e),S(e)}).observe(window.parent.document.body,{childList:!0,subtree:!0}),homebridge.addEventListener("configChanged",async i=>{let n=i.data;await v(n),await S(e,n)}),homebridge.showSchemaForm(),homebridge.hideSpinner(),homebridge.enableSaveButton()}function M(e){document.getElementById("header").style.display="none",document.getElementById("intro").style.display="none",document.getElementById("migration").style.display="block",document.getElementById("skipMigration").addEventListener("click",async()=>{await homebridge.updatePluginConfig([{name:u}]),await homebridge.savePluginConfig(),f(e)}),document.getElementById("doMigration").addEventListener("click",async()=>{await homebridge.updatePluginConfig([{name:u,migrationNeeded:!0}]),await homebridge.savePluginConfig(),homebridge.closeSettings(),homebridge.toast.info(e.config.migrationRestartDescription.replace("%s",u),e.config.migrationRestartTitle)})}function k(e){document.getElementById("showSettings").addEventListener("click",async()=>{await homebridge.updatePluginConfig([{name:u}]),f(e)}),document.getElementById("showMigration").addEventListener("click",()=>{M(e)}),document.getElementById("intro").style.display="block",homebridge.hideSpinner()}homebridge.disableSaveButton(),homebridge.showSpinner();(async()=>{let e=await homebridge.i18nCurrentLang(),t=await homebridge.request("i18n",e);I(t);let i=await homebridge.getPluginConfig();i.length?(await N(i),f(t)):k(t)})();})();
package/dist/i18n/de.d.ts CHANGED
@@ -9,10 +9,13 @@ declare const de: {
9
9
  executed: string;
10
10
  };
11
11
  conditions: {
12
+ andMultipleLogs: string;
12
13
  currentResult: string;
13
14
  evaluatingConditions: string;
14
15
  satisfied: string;
15
16
  notSatisfied: string;
17
+ patternAndConditions: string;
18
+ patternMatch: string;
16
19
  selfReference: string;
17
20
  statesEqual: string;
18
21
  statesNotEqual: string;
@@ -38,6 +41,10 @@ declare const de: {
38
41
  secured: string;
39
42
  unsecured: string;
40
43
  };
44
+ logWatcher: {
45
+ error: string;
46
+ missingFile: string;
47
+ };
41
48
  onOff: {
42
49
  badDefault: string;
43
50
  stateOff: string;
@@ -91,6 +98,7 @@ declare const de: {
91
98
  timerControlled: string;
92
99
  };
93
100
  enumNames: {
101
+ accessory: string;
94
102
  auto: string;
95
103
  carbonDioxideSensor: string;
96
104
  carbonMonoxideSensor: string;
@@ -113,6 +121,7 @@ declare const de: {
113
121
  leakSensor: string;
114
122
  lightbulb: string;
115
123
  lockMechanism: string;
124
+ log: string;
116
125
  minutely: string;
117
126
  month: string;
118
127
  monthly: string;
@@ -185,6 +194,7 @@ declare const de: {
185
194
  maximumTemperature: string;
186
195
  name: string;
187
196
  operator: string;
197
+ pattern: string;
188
198
  period: string;
189
199
  preset: string;
190
200
  random: string;
package/dist/i18n/en.d.ts CHANGED
@@ -9,10 +9,13 @@ declare const en: {
9
9
  executed: string;
10
10
  };
11
11
  conditions: {
12
+ andMultipleLogs: string;
12
13
  currentResult: string;
13
14
  evaluatingConditions: string;
14
15
  satisfied: string;
15
16
  notSatisfied: string;
17
+ patternAndConditions: string;
18
+ patternMatch: string;
16
19
  selfReference: string;
17
20
  statesEqual: string;
18
21
  statesNotEqual: string;
@@ -38,6 +41,10 @@ declare const en: {
38
41
  secured: string;
39
42
  unsecured: string;
40
43
  };
44
+ logWatcher: {
45
+ error: string;
46
+ missingFile: string;
47
+ };
41
48
  onOff: {
42
49
  badDefault: string;
43
50
  stateOff: string;
@@ -91,6 +98,7 @@ declare const en: {
91
98
  timerControlled: string;
92
99
  };
93
100
  enumNames: {
101
+ accessory: string;
94
102
  auto: string;
95
103
  carbonDioxideSensor: string;
96
104
  carbonMonoxideSensor: string;
@@ -113,6 +121,7 @@ declare const en: {
113
121
  leakSensor: string;
114
122
  lightbulb: string;
115
123
  lockMechanism: string;
124
+ log: string;
116
125
  minutely: string;
117
126
  month: string;
118
127
  monthly: string;
@@ -185,6 +194,7 @@ declare const en: {
185
194
  maximumTemperature: string;
186
195
  name: string;
187
196
  operator: string;
197
+ pattern: string;
188
198
  period: string;
189
199
  preset: string;
190
200
  random: string;
package/dist/i18n/en.js CHANGED
@@ -9,10 +9,13 @@ const en = {
9
9
  executed: '%s executed command', // accessory name
10
10
  },
11
11
  conditions: {
12
+ andMultipleLogs: '%s cannot have mutiple log triggers using the "ALL" operator', // accessory name
12
13
  currentResult: 'Current result is %s', // boolean
13
14
  evaluatingConditions: 'Evaluating conditions for %s', // accessory name
14
15
  satisfied: '%s conditions have been satisfied. Triggering…', // accessory name
15
16
  notSatisfied: '%s conditions not satisfied', // accessory name
17
+ patternAndConditions: '%s log condition found a pattern match. Checking other conditions…', // accessory name
18
+ patternMatch: '%s log condition found a pattern match. Triggering…', // accessory name
16
19
  selfReference: '%s is not allowed to reference itself as a triggering condition', // accessory name
17
20
  statesEqual: 'Current and desired states are both %s', // state name
18
21
  statesNotEqual: 'Current state %s is not equivalent to desired state %s', // state name, state name
@@ -38,6 +41,10 @@ const en = {
38
41
  secured: '%s is locked', // accessory name
39
42
  unsecured: '%s is unlocked', // accessory name
40
43
  },
44
+ logWatcher: {
45
+ error: 'Log watcher encountered an error: %s', // error
46
+ missingFile: 'Unable to find log file at path %s', // file path
47
+ },
41
48
  onOff: {
42
49
  badDefault: '%s has invalid default on state %s. Must be one of: %s', // accessory name, input, list of state names
43
50
  stateOff: '%s is off', // accessory name
@@ -91,6 +98,7 @@ const en = {
91
98
  timerControlled: 'Instead of mirroring accessory, sensor will be activated when accessory auto-resets',
92
99
  },
93
100
  enumNames: {
101
+ accessory: 'Accessory',
94
102
  auto: 'Auto',
95
103
  carbonDioxideSensor: 'Carbon Dioxide',
96
104
  carbonMonoxideSensor: 'Carbon Monoxide',
@@ -113,6 +121,7 @@ const en = {
113
121
  leakSensor: 'Leak',
114
122
  lightbulb: 'Lightbulb',
115
123
  lockMechanism: 'Lock',
124
+ log: 'Log Watcher',
116
125
  minutely: 'Every Minute',
117
126
  month: 'Month',
118
127
  monthly: 'Monthly',
@@ -185,6 +194,7 @@ const en = {
185
194
  maximumTemperature: 'Max Temperature',
186
195
  name: 'Name',
187
196
  operator: 'Trigger when…',
197
+ pattern: 'Search String or RegEx',
188
198
  period: 'Per',
189
199
  preset: 'Preset',
190
200
  random: 'Randomize',
@@ -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":"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"}
package/dist/i18n/es.d.ts CHANGED
@@ -9,10 +9,13 @@ declare const es: {
9
9
  executed: string;
10
10
  };
11
11
  conditions: {
12
+ andMultipleLogs: string;
12
13
  currentResult: string;
13
14
  evaluatingConditions: string;
14
15
  satisfied: string;
15
16
  notSatisfied: string;
17
+ patternAndConditions: string;
18
+ patternMatch: string;
16
19
  selfReference: string;
17
20
  statesEqual: string;
18
21
  statesNotEqual: string;
@@ -38,6 +41,10 @@ declare const es: {
38
41
  secured: string;
39
42
  unsecured: string;
40
43
  };
44
+ logWatcher: {
45
+ error: string;
46
+ missingFile: string;
47
+ };
41
48
  onOff: {
42
49
  badDefault: string;
43
50
  stateOff: string;
@@ -91,6 +98,7 @@ declare const es: {
91
98
  timerControlled: string;
92
99
  };
93
100
  enumNames: {
101
+ accessory: string;
94
102
  auto: string;
95
103
  carbonDioxideSensor: string;
96
104
  carbonMonoxideSensor: string;
@@ -113,6 +121,7 @@ declare const es: {
113
121
  leakSensor: string;
114
122
  lightbulb: string;
115
123
  lockMechanism: string;
124
+ log: string;
116
125
  minutely: string;
117
126
  month: string;
118
127
  monthly: string;
@@ -185,6 +194,7 @@ declare const es: {
185
194
  maximumTemperature: string;
186
195
  name: string;
187
196
  operator: string;
197
+ pattern: string;
188
198
  period: string;
189
199
  preset: string;
190
200
  random: string;
@@ -20,10 +20,13 @@ declare const translations: {
20
20
  executed: string;
21
21
  };
22
22
  conditions: {
23
+ andMultipleLogs: string;
23
24
  currentResult: string;
24
25
  evaluatingConditions: string;
25
26
  satisfied: string;
26
27
  notSatisfied: string;
28
+ patternAndConditions: string;
29
+ patternMatch: string;
27
30
  selfReference: string;
28
31
  statesEqual: string;
29
32
  statesNotEqual: string;
@@ -49,6 +52,10 @@ declare const translations: {
49
52
  secured: string;
50
53
  unsecured: string;
51
54
  };
55
+ logWatcher: {
56
+ error: string;
57
+ missingFile: string;
58
+ };
52
59
  onOff: {
53
60
  badDefault: string;
54
61
  stateOff: string;
@@ -102,6 +109,7 @@ declare const translations: {
102
109
  timerControlled: string;
103
110
  };
104
111
  enumNames: {
112
+ accessory: string;
105
113
  auto: string;
106
114
  carbonDioxideSensor: string;
107
115
  carbonMonoxideSensor: string;
@@ -124,6 +132,7 @@ declare const translations: {
124
132
  leakSensor: string;
125
133
  lightbulb: string;
126
134
  lockMechanism: string;
135
+ log: string;
127
136
  minutely: string;
128
137
  month: string;
129
138
  monthly: string;
@@ -196,6 +205,7 @@ declare const translations: {
196
205
  maximumTemperature: string;
197
206
  name: string;
198
207
  operator: string;
208
+ pattern: string;
199
209
  period: string;
200
210
  preset: string;
201
211
  random: string;
package/dist/i18n/ru.d.ts CHANGED
@@ -9,10 +9,13 @@ declare const ru: {
9
9
  executed: string;
10
10
  };
11
11
  conditions: {
12
+ andMultipleLogs: string;
12
13
  currentResult: string;
13
14
  evaluatingConditions: string;
14
15
  satisfied: string;
15
16
  notSatisfied: string;
17
+ patternAndConditions: string;
18
+ patternMatch: string;
16
19
  selfReference: string;
17
20
  statesEqual: string;
18
21
  statesNotEqual: string;
@@ -38,6 +41,10 @@ declare const ru: {
38
41
  secured: string;
39
42
  unsecured: string;
40
43
  };
44
+ logWatcher: {
45
+ error: string;
46
+ missingFile: string;
47
+ };
41
48
  onOff: {
42
49
  badDefault: string;
43
50
  stateOff: string;
@@ -91,6 +98,7 @@ declare const ru: {
91
98
  timerControlled: string;
92
99
  };
93
100
  enumNames: {
101
+ accessory: string;
94
102
  auto: string;
95
103
  carbonDioxideSensor: string;
96
104
  carbonMonoxideSensor: string;
@@ -113,6 +121,7 @@ declare const ru: {
113
121
  leakSensor: string;
114
122
  lightbulb: string;
115
123
  lockMechanism: string;
124
+ log: string;
116
125
  minutely: string;
117
126
  month: string;
118
127
  monthly: string;
@@ -185,6 +194,7 @@ declare const ru: {
185
194
  maximumTemperature: string;
186
195
  name: string;
187
196
  operator: string;
197
+ pattern: string;
188
198
  period: string;
189
199
  preset: string;
190
200
  random: string;
@@ -9,10 +9,13 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
9
9
  executed: string;
10
10
  };
11
11
  conditions: {
12
+ andMultipleLogs: string;
12
13
  currentResult: string;
13
14
  evaluatingConditions: string;
14
15
  satisfied: string;
15
16
  notSatisfied: string;
17
+ patternAndConditions: string;
18
+ patternMatch: string;
16
19
  selfReference: string;
17
20
  statesEqual: string;
18
21
  statesNotEqual: string;
@@ -38,6 +41,10 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
38
41
  secured: string;
39
42
  unsecured: string;
40
43
  };
44
+ logWatcher: {
45
+ error: string;
46
+ missingFile: string;
47
+ };
41
48
  onOff: {
42
49
  badDefault: string;
43
50
  stateOff: string;
@@ -91,6 +98,7 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
91
98
  timerControlled: string;
92
99
  };
93
100
  enumNames: {
101
+ accessory: string;
94
102
  auto: string;
95
103
  carbonDioxideSensor: string;
96
104
  carbonMonoxideSensor: string;
@@ -113,6 +121,7 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
113
121
  leakSensor: string;
114
122
  lightbulb: string;
115
123
  lockMechanism: string;
124
+ log: string;
116
125
  minutely: string;
117
126
  month: string;
118
127
  monthly: string;
@@ -185,6 +194,7 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
185
194
  maximumTemperature: string;
186
195
  name: string;
187
196
  operator: string;
197
+ pattern: string;
188
198
  period: string;
189
199
  preset: string;
190
200
  random: string;
@@ -1,14 +1,17 @@
1
- import { ConditionsConfig } from './types.js';
2
1
  import { AccessoryState } from './enums.js';
2
+ import { ConditionsConfig } from './types.js';
3
3
  import { Log } from '../tools/log.js';
4
4
  export declare class ConditionManager {
5
5
  private readonly log;
6
6
  private readonly targets;
7
7
  private readonly triggersToTargets;
8
8
  private readonly triggerStates;
9
- constructor(log: Log);
9
+ private readonly logWatcher;
10
+ constructor(log: Log, storagePath: string);
11
+ teardown(): void;
10
12
  register(name: string, identifier: string, conditions: ConditionsConfig | undefined, trigger: () => Promise<void>, reset: (() => Promise<void>) | undefined, disableLogging: boolean): void;
11
13
  onStateChange(triggerId: string, state: AccessoryState): Promise<void>;
14
+ private onPatternMatch;
12
15
  private evaluateConditions;
13
16
  private compareStates;
14
17
  }
@@ -1,13 +1,19 @@
1
- import { ConditionOperator, getStateType } from './enums.js';
2
- import { assert } from '../tools/validation.js';
1
+ import { ConditionOperator, getStateType, OperandType } from './enums.js';
3
2
  import { strings } from '../i18n/i18n.js';
3
+ import { LogWatcher } from '../tools/logWatcher.js';
4
+ import { assert } from '../tools/validation.js';
4
5
  export class ConditionManager {
5
6
  log;
6
7
  targets = new Map();
7
8
  triggersToTargets = new Map();
8
9
  triggerStates = new Map();
9
- constructor(log) {
10
+ logWatcher;
11
+ constructor(log, storagePath) {
10
12
  this.log = log;
13
+ this.logWatcher = new LogWatcher(log, storagePath);
14
+ }
15
+ teardown() {
16
+ this.logWatcher.teardown();
11
17
  }
12
18
  register(name, identifier, conditions, trigger, reset, disableLogging) {
13
19
  if (conditions === undefined) {
@@ -16,24 +22,46 @@ export class ConditionManager {
16
22
  if (!assert(this.log, name, conditions, 'operator', 'operands')) {
17
23
  return;
18
24
  }
25
+ let logTypeCount = 0;
19
26
  let valid = true;
20
27
  for (const operand of conditions.operands) {
21
- valid = valid && assert(this.log, name, operand, 'accessoryId', 'accessoryState');
28
+ valid = valid && assert(this.log, name, operand, 'type');
29
+ switch (operand.type) {
30
+ case OperandType.ACCESSORY:
31
+ valid = valid && assert(this.log, name, operand, 'accessoryId', 'accessoryState');
32
+ break;
33
+ case OperandType.LOG:
34
+ logTypeCount++;
35
+ valid = valid && assert(this.log, name, operand, 'pattern');
36
+ break;
37
+ }
22
38
  if (operand.accessoryId === identifier) {
23
39
  this.log.error(strings.conditions.selfReference, name);
24
40
  valid = false;
25
41
  break;
26
42
  }
27
43
  }
44
+ if (logTypeCount > 1 && conditions.operator === ConditionOperator.AND) {
45
+ this.log.error(strings.conditions.andMultipleLogs, name);
46
+ return;
47
+ }
28
48
  if (!valid) {
29
49
  return;
30
50
  }
31
51
  const target = { name, identifier, conditions, trigger, reset, disableLogging };
32
52
  this.targets.set(identifier, target);
33
53
  for (const operand of conditions.operands) {
34
- const targetList = this.triggersToTargets.get(operand.accessoryId) ?? [];
35
- targetList.push(identifier);
36
- this.triggersToTargets.set(operand.accessoryId, targetList);
54
+ switch (operand.type) {
55
+ case OperandType.ACCESSORY: {
56
+ const targetList = this.triggersToTargets.get(operand.accessoryId) ?? [];
57
+ targetList.push(identifier);
58
+ this.triggersToTargets.set(operand.accessoryId, targetList);
59
+ break;
60
+ }
61
+ case OperandType.LOG:
62
+ this.logWatcher.registerPattern(operand.pattern, () => this.onPatternMatch(target));
63
+ break;
64
+ }
37
65
  }
38
66
  }
39
67
  async onStateChange(triggerId, state) {
@@ -48,7 +76,7 @@ export class ConditionManager {
48
76
  throw new Error('Unable to find target associated with the supplied trigger');
49
77
  }
50
78
  this.log.ifVerbose(strings.conditions.evaluatingConditions, target.name);
51
- if (this.evaluateConditions(target.conditions)) {
79
+ if (this.evaluateConditions(target.conditions, false)) {
52
80
  if (!target.disableLogging) {
53
81
  this.log.always(strings.conditions.satisfied, target.name);
54
82
  }
@@ -60,9 +88,32 @@ export class ConditionManager {
60
88
  }
61
89
  }
62
90
  }
63
- evaluateConditions(conditions) {
91
+ onPatternMatch(target) {
92
+ if (target.conditions.operands.length === 1 || target.conditions.operator === ConditionOperator.OR) {
93
+ this.log.ifVerbose(strings.conditions.patternMatch, target.name);
94
+ target.trigger();
95
+ return;
96
+ }
97
+ this.log.ifVerbose(strings.conditions.patternAndConditions, target.name);
98
+ if (!this.evaluateConditions(target.conditions, true)) {
99
+ this.log.ifVerbose(strings.conditions.notSatisfied, target.name);
100
+ return;
101
+ }
102
+ if (!target.disableLogging) {
103
+ this.log.always(strings.conditions.satisfied, target.name);
104
+ }
105
+ target.trigger();
106
+ }
107
+ evaluateConditions(conditions, ignoreLogType) {
64
108
  let result;
65
109
  for (const operand of conditions.operands) {
110
+ if (operand.type === OperandType.LOG) {
111
+ if (ignoreLogType || conditions.operator === ConditionOperator.OR) {
112
+ continue;
113
+ }
114
+ result = false;
115
+ break;
116
+ }
66
117
  const currentState = this.triggerStates.get(operand.accessoryId);
67
118
  if (!currentState) {
68
119
  this.log.ifVerbose(strings.conditions.stateUnknown, `'${operand.accessoryId}'`);
@@ -80,7 +131,7 @@ export class ConditionManager {
80
131
  }
81
132
  this.log.ifVerbose(strings.conditions.currentResult, `'${String(result)}'`);
82
133
  }
83
- return result ?? false;
134
+ return result ?? true;
84
135
  }
85
136
  compareStates(current, desired) {
86
137
  if (current === desired) {
@@ -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":"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"}
@@ -32,6 +32,10 @@ export declare enum ConditionOperator {
32
32
  AND = "and",
33
33
  OR = "or"
34
34
  }
35
+ export declare enum OperandType {
36
+ ACCESSORY = "ACCESSORY",
37
+ LOG = "LOG"
38
+ }
35
39
  export declare enum OnState {
36
40
  ON = "on",
37
41
  OFF = "off"
@@ -38,6 +38,11 @@ export var ConditionOperator;
38
38
  ConditionOperator["AND"] = "and";
39
39
  ConditionOperator["OR"] = "or";
40
40
  })(ConditionOperator || (ConditionOperator = {}));
41
+ export var OperandType;
42
+ (function (OperandType) {
43
+ OperandType["ACCESSORY"] = "ACCESSORY";
44
+ OperandType["LOG"] = "LOG";
45
+ })(OperandType || (OperandType = {}));
41
46
  export var OnState;
42
47
  (function (OnState) {
43
48
  OnState["ON"] = "on";
@@ -1 +1 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/model/enums.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/model/enums.ts"],"names":[],"mappings":"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"}
@@ -44,8 +44,10 @@ export type LimiterConfig = Assertable & {
44
44
  period: TimePeriod;
45
45
  };
46
46
  export type Operand = Assertable & {
47
- accessoryId: string;
48
- accessoryState: AccessoryState;
47
+ type: string;
48
+ accessoryId?: string;
49
+ accessoryState?: AccessoryState;
50
+ pattern?: string;
49
51
  };
50
52
  export type ConditionsConfig = Assertable & {
51
53
  operator: ConditionOperator;
@@ -0,0 +1,13 @@
1
+ import { Log } from '../tools/log.js';
2
+ type ListenerCallback = () => (void);
3
+ export declare class LogWatcher {
4
+ private readonly log;
5
+ private readonly storagePath;
6
+ private tailFile?;
7
+ private readonly matchers;
8
+ constructor(log: Log, storagePath: string);
9
+ private startWatching;
10
+ teardown(): void;
11
+ registerPattern(pattern: string, callback: ListenerCallback): void;
12
+ }
13
+ export {};
@@ -0,0 +1,52 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import TailFile from 'tail-file';
4
+ import { strings } from '../i18n/i18n.js';
5
+ export class LogWatcher {
6
+ log;
7
+ storagePath;
8
+ tailFile;
9
+ matchers = new Map();
10
+ constructor(log, storagePath) {
11
+ this.log = log;
12
+ this.storagePath = storagePath;
13
+ }
14
+ startWatching() {
15
+ if (this.tailFile !== undefined) {
16
+ return;
17
+ }
18
+ const logFilePath = path.join(this.storagePath, 'homebridge.log');
19
+ if (!fs.existsSync(logFilePath)) {
20
+ this.log.error(strings.logWatcher.missingFile, `'${logFilePath}'`);
21
+ return;
22
+ }
23
+ this.tailFile = new TailFile(logFilePath, { startPos: 'end' });
24
+ this.tailFile.on('line', (line) => {
25
+ for (const [matcher, callbacks] of this.matchers.entries()) {
26
+ if (matcher.test(line)) {
27
+ callbacks.forEach(cb => cb());
28
+ }
29
+ }
30
+ });
31
+ this.tailFile.on('error', (err) => this.log.error(strings.logWatcher.error, String(err)));
32
+ this.tailFile.start();
33
+ }
34
+ teardown() {
35
+ this.tailFile?.stop();
36
+ }
37
+ registerPattern(pattern, callback) {
38
+ let regex;
39
+ try {
40
+ regex = new RegExp(pattern);
41
+ }
42
+ catch (e) {
43
+ const escapedPattern = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
44
+ regex = new RegExp(escapedPattern);
45
+ }
46
+ const callbacks = this.matchers.get(regex) ?? [];
47
+ callbacks.push(callback);
48
+ this.matchers.set(regex, callbacks);
49
+ this.startWatching();
50
+ }
51
+ }
52
+ //# sourceMappingURL=logWatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logWatcher.js","sourceRoot":"","sources":["../../src/tools/logWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAI1C,MAAM,OAAO,UAAU;IAMQ;IAA2B;IAJhD,QAAQ,CAAY;IAEX,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IAElE,YAA6B,GAAQ,EAAmB,WAAmB;QAA9C,QAAG,GAAH,GAAG,CAAK;QAAmB,gBAAW,GAAX,WAAW,CAAQ;IAC3E,CAAC;IAEO,aAAa;QAEnB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAElE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,WAAW,GAAG,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAE/D,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACxC,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAEM,eAAe,CAAC,OAAe,EAAE,QAA0B;QAEhE,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YACtE,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,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.0-beta.3",
7
+ "version": "1.4.0-beta.4",
8
8
  "homepage": "https://github.com/mpatfield/homebridge-dummy#readme",
9
9
  "repository": {
10
10
  "type": "git",
@@ -65,7 +65,8 @@
65
65
  "express": "^5.1.0",
66
66
  "homebridge-lib": "^7.1.8",
67
67
  "lodash.merge": "^4.6.2",
68
- "node-persist": "^4.0.4"
68
+ "node-persist": "^4.0.4",
69
+ "tail-file": "^1.4.16"
69
70
  },
70
71
  "devDependencies": {
71
72
  "@types/escape-html": "^1.0.4",