Skip to content

Commit

Permalink
feat(event-state): Add predefined ignore event types
Browse files Browse the repository at this point in the history
  • Loading branch information
zachowj committed Oct 5, 2020
1 parent 4503856 commit d70ba6f
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 4 deletions.
26 changes: 22 additions & 4 deletions nodes/events-state-changed/events-state-changed.js
Expand Up @@ -20,9 +20,14 @@ module.exports = function (RED) {
outputinitially: {},
state_type: (nodeDef) => nodeDef.state_type || 'str',
output_only_on_state_change: {},
for: { value: '0' },
forType: { value: 'num' },
forUnits: { value: 'minutes' },
for: (nodeDef) => nodeDef.for || '0',
forType: (nodeDef) => nodeDef.forType || 'num',
forUnits: (nodeDef) => nodeDef.forUnits || 'minutes',
ignorePrevStateNull: {},
ignorePrevStateUnknown: {},
ignorePrevStateUnavailable: {},
ignoreCurrentStateUnknown: {},
ignoreCurrentStateUnavailable: {},
},
};

Expand Down Expand Up @@ -59,7 +64,6 @@ module.exports = function (RED) {
if (
this.isEnabled === false ||
!this.isHomeAssistantRunning ||
!evt.event.new_state ||
!shouldIncludeEvent(
evt.entity_id,
this.nodeConfig.entityidfilter,
Expand All @@ -73,6 +77,20 @@ module.exports = function (RED) {
const oldState = selectn('event.old_state', eventMessage);
const newState = selectn('event.new_state', eventMessage);

if (
(config.ignorePrevStateNull && !oldState) ||
(config.ignorePrevStateUnknown &&
oldState.state === 'unknown') ||
(config.ignorePrevStateUnavailable &&
oldState.state === 'unavailable') ||
(config.ignoreCurrentStateUnknown &&
newState.state === 'unknown') ||
(config.ignoreCurrentStateUnavailable &&
newState.state === 'unavailable')
) {
return;
}

// Convert and save original state if needed
this.castState(oldState, config.state_type);
this.castState(newState, config.state_type);
Expand Down
29 changes: 29 additions & 0 deletions nodes/events-state-changed/ui-events-state-changed.html
Expand Up @@ -82,3 +82,32 @@
<input type="checkbox" id="node-input-outputinitially" />
<label for="node-input-outputinitially"> Output on Connect </label>
</div>

<div class="form-row checkbox-option">
<label><i class="fa fa-ban"></i> Ignore state change event when:</label>
<br />
<input type="checkbox" id="node-input-ignorePrevStateNull" />
<label for="node-input-ignorePrevStateNull">
Previous state doesn't exist
</label>
<br />
<input type="checkbox" id="node-input-ignorePrevStateUnknown" />
<label for="node-input-ignorePrevStateUnknown">
Previous state is <code>unknown</code>
</label>
<br />
<input type="checkbox" id="node-input-ignorePrevStateUnavailable" />
<label for="node-input-ignorePrevStateUnavailable">
Previous state is <code>unavailable</code>
</label>
<br />
<input type="checkbox" id="node-input-ignoreCurrentStateUnknown" />
<label for="node-input-ignoreCurrentStateUnknown">
Current state is <code>unknown</code>
</label>
<br />
<input type="checkbox" id="node-input-ignoreCurrentStateUnavailable" />
<label for="node-input-ignoreCurrentStateUnavailable">
Current state is <code>unavailable</code>
</label>
</div>
5 changes: 5 additions & 0 deletions nodes/events-state-changed/ui-events-state-changed.js
Expand Up @@ -36,6 +36,11 @@ RED.nodes.registerType('server-state-changed', {
for: { value: 0 },
forType: { value: 'num' },
forUnits: { value: 'minutes' },
ignorePrevStateNull: { value: false },
ignorePrevStateUnknown: { value: false },
ignorePrevStateUnavailable: { value: false },
ignoreCurrentStateUnknown: { value: false },
ignoreCurrentStateUnavailable: { value: false },
},
oneditprepare: function () {
const $entityidfilter = $('#node-input-entityidfilter');
Expand Down

0 comments on commit d70ba6f

Please sign in to comment.