mynodes / presence-detector / presence-detector.html
Newer Older
72 lines | 3.129kb
Bogdan Timofte authored 2 weeks ago
1
<script type="text/x-red" data-template-name="presence-detector">
2
  <div class="form-row">
3
    <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
4
    <input type="text" id="node-input-name" placeholder="Name">
5
  </div>
6
  <div class="form-row">
7
    <label for="node-input-motionTimeout">Motion timeout (ms)</label>
8
    <input type="number" id="node-input-motionTimeout" placeholder="30000">
9
  </div>
10
  <div class="form-row">
11
    <label for="node-input-delayBetween">Delay between timeout payloads (ms)</label>
12
    <input type="number" id="node-input-delayBetween" placeholder="3000">
13
  </div>
14
  <div class="form-row">
15
    <label for="node-input-payload1Text">Payload #1 (sent on timeout first)</label>
16
    <textarea id="node-input-payload1Text" rows="3" placeholder='{"cmd":"leave"}'></textarea>
17
  </div>
18
  <div class="form-row">
19
    <label for="node-input-payload2Text">Payload #2 (sent on timeout after delay, and also on presence)</label>
20
    <textarea id="node-input-payload2Text" rows="3" placeholder='{"cmd":"clear"}'></textarea>
21
  </div>
22
  <div class="form-row">
23
    <label for="node-input-treatMissingDoorAsOpen">Treat missing door as open</label>
24
    <input type="checkbox" id="node-input-treatMissingDoorAsOpen" checked>
25
  </div>
26
  <div class="form-row">
27
    <label for="node-input-resetOnMotion">Reset timer on motion</label>
28
    <input type="checkbox" id="node-input-resetOnMotion" checked>
29
  </div>
30
  <div class="form-row">
31
    <label for="node-input-resetOnDoorOpen">Reset timer on door open</label>
32
    <input type="checkbox" id="node-input-resetOnDoorOpen" checked>
33
  </div>
34
</script>
35

            
36
<script type="text/x-red" data-help-name="presence-detector">
37
  <p>
38
    Determines presence from motion and door sensor inputs.
39
  </p>
40
  <p>
41
    Outputs:
42
    <ol>
43
      <li>Presence message: <code>msg.payload.presenceDetected = true|false</code> (sent on every presence change)</li>
44
      <li>Control payloads: on timeout sends payload #1 then after delay payload #2 (if configured); sends payload #2 immediately when presence is detected (if configured)</li>
45
    </ol>
46
  </p>
47
  <p>Supported message shapes: send an object in <code>msg.payload</code> with fields like <code>motionDetected</code>, <code>doorOpen</code>, or <code>presenceDetected</code>. Example: <code>{"motionDetected":true,"doorOpen":false}</code>.</p>
48
  <p>When a timeout is counting down, the node status shows the remaining time in <code>HH:MM:SS</code> format. Status updates occur every 10s while more than 10s remain, and every 1s when 10s or less remain.</p>
49
</script>
50

            
51
<script>
52
  RED.nodes.registerType('presence-detector', {
53
    category: 'function',
54
    color: '#a6bbcf',
55
    defaults: {
56
      name: {value: ""},
57
      motionTimeout: {value: 30000},
58
      delayBetween: {value: 3000},
59
      payload1Text: {value: ""},
60
      payload2Text: {value: ""},
61
      treatMissingDoorAsOpen: {value: true},
62
      resetOnMotion: {value: true},
63
      resetOnDoorOpen: {value: true}
64
    },
65
    inputs: 1,
66
    outputs: 2,
67
    icon: "font-awesome/fa-users",
68
    label: function() {
69
      return this.name||"presence-detector";
70
    }
71
  });
72
</script>