Socket
Socket
Sign inDemoInstall

node-red-contrib-sun-position

Package Overview
Dependencies
Maintainers
1
Versions
136
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

node-red-contrib-sun-position - npm Package Compare versions

Comparing version 1.1.0-alpha to 1.1.0-alpha-2

10

CHANGELOG.md

@@ -11,6 +11,12 @@ # node-red-contrib-sun-position

- renamed priority for Overrides to importance
- implemented importance for rules #138
- fixed rules "priority" execution
- implemented importance for rules #137
- fixed rules "priority" execution #139
- enhanced autoTrigger rule selection #143
- within-time
- fixed month limitation #141
- Removed options for message resend!
- Removed initial calculation trigger
- fixed `internal error` if a time could not evaluated into better error
- time-comp
- fixed out value, if context store or any special message object
- removed interval-inject --> has moved to time-inject

@@ -17,0 +23,0 @@

152

nodes/clock-timer.js

@@ -519,5 +519,15 @@ /********************************************

const checkRuleForAT = rule => {
const num = getRuleTimeData(node, msg, rule, dNow);
if (num > nowNr) {
node.debug('autoTrigger set to rule ' + rule.pos);
const diff = num - nowNr;
node.autoTrigger.time = Math.min(node.autoTrigger.time, diff);
node.autoTrigger.type = 2; // next rule
}
};
if (ruleSel) {
if (node.autoTrigger) {
if (ruleSel.timeLimited && ruleSel.timeData.ts > nowNr) {
node.debug('autoTrigger set to rule ' + ruleSel.pos + ' (current)');
const diff = ruleSel.timeData.ts - nowNr;

@@ -532,9 +542,8 @@ node.autoTrigger.time = Math.min(node.autoTrigger.time, diff);

}
const num = getRuleTimeData(node, msg, rule, dNow);
if (num > nowNr) {
const diff = num - nowNr;
node.autoTrigger.time = Math.min(node.autoTrigger.time, diff);
node.autoTrigger.type = 2; // next rule
}
checkRuleForAT(rule);
}
// check first rule, maybe next day
if ((node.autoTrigger.type !== 2) && (node.rules.firstTimeLimited < node.rules.count)) {
checkRuleForAT(node.rules.data[node.rules.firstTimeLimited]);
}
}

@@ -605,2 +614,11 @@ }

livingRuleData.description = RED._('clock-timer.reasons.default');
if (node.autoTrigger) {
// check first rule, maybe next day
if ((node.rules.firstTimeLimited < node.rules.count)) {
checkRuleForAT(node.rules.data[node.rules.firstTimeLimited]);
}
if ((node.rules.firstTimeLimited !== node.rules.firstFrom) && (node.autoTrigger.type !== 2)) {
checkRuleForAT(node.rules.data[node.rules.firstFrom]);
}
}
// node.debug(`checkRules end livingRuleData=${util.inspect(livingRuleData, { colors: true, compact: 10, breakLength: Infinity })}`);

@@ -749,3 +767,3 @@ return livingRuleData;

ruleId = timeCtrl.rule.id;
node.payload.current = node.positionConfig.getOutDataProp(node, msg, timeCtrl.rule.payloadData);
node.payload.current = node.positionConfig.getOutDataProp(node, msg, timeCtrl.rule.payloadData, dNow);
node.payload.topic = timeCtrl.rule.topic;

@@ -882,7 +900,8 @@ node.reason.code = timeCtrl.rule.code;

};
// Prepare Rules
node.rules.count = node.rules.data.length;
node.rules.lastUntil = node.rules.count -1;
node.rules.checkUntil = false;
node.rules.checkFrom = false;
node.rules.firstFrom = node.rules.lastUntil;
node.rules.firstTimeLimited = node.rules.count;
node.rules.maxImportance = 0;

@@ -899,54 +918,82 @@

rule.timeLimited = (rule.timeType !== 'none');
rule.offsetType = rule.offsetType || 'none';
rule.multiplier = rule.multiplier || 60000;
rule.timeMinType = rule.timeMinType || 'none';
rule.timeMinValue = (rule.timeMinValue || '');
rule.offsetMinType = rule.offsetMinType || 'none';
rule.multiplierMin = rule.multiplierMin || 60000;
if (!rule.timeLimited) {
rule.timeOp = cRuleNoTime;
delete rule.offsetType;
delete rule.multiplier;
rule.timeMaxType = rule.timeMaxType || 'none';
rule.timeMaxValue = (rule.timeMaxValue || '');
rule.offsetMaxType = rule.offsetMaxType || 'none';
rule.multiplierMax = rule.multiplierMax || 60000;
delete rule.timeMinType;
delete rule.timeMinValue;
delete rule.offsetMinType;
delete rule.multiplierMin;
if (!rule.timeDays || rule.timeDays === '*') {
rule.timeDays = null;
} else {
rule.timeDays = rule.timeDays.split(',');
rule.timeDays = rule.timeDays.map( e => parseInt(e) );
}
delete rule.timeMaxType;
delete rule.timeMaxValue;
delete rule.offsetMaxType;
delete rule.multiplierMax;
if (!rule.timeMonths || rule.timeMonths === '*') {
rule.timeMonths = null;
delete rule.timeDays;
delete rule.timeMonths;
delete rule.timeOnlyOddDays;
delete rule.timeOnlyEvenDays;
delete rule.timeDateStart;
delete rule.timeDateEnd;
} else {
rule.timeMonths = rule.timeMonths.split(',');
rule.timeMonths = rule.timeMonths.map( e => parseInt(e) );
}
rule.offsetType = rule.offsetType || 'none';
rule.multiplier = rule.multiplier || 60000;
if (!rule.timeLimited) {
rule.timeOp = cRuleNoTime;
}
rule.timeMinType = rule.timeMinType || 'none';
rule.timeMinValue = (rule.timeMinValue || '');
rule.offsetMinType = rule.offsetMinType || 'none';
rule.multiplierMin = rule.multiplierMin || 60000;
if (rule.timeOnlyOddDays && rule.timeOnlyEvenDays) {
rule.timeOnlyOddDays = false;
rule.timeOnlyEvenDays = false;
}
rule.timeMaxType = rule.timeMaxType || 'none';
rule.timeMaxValue = (rule.timeMaxValue || '');
rule.offsetMaxType = rule.offsetMaxType || 'none';
rule.multiplierMax = rule.multiplierMax || 60000;
rule.timeDateStart = rule.timeDateStart || '';
rule.timeDateEnd = rule.timeDateEnd || '';
if (rule.timeDateStart || rule.timeDateEnd) {
if (rule.timeDateStart) {
rule.timeDateStart = new Date(rule.timeDateStart);
rule.timeDateStart.setHours(0, 0, 0, 1);
node.rules.firstTimeLimited = Math.min(i,node.rules.firstTimeLimited);
if (rule.timeOp === cRuleUntil) {
node.rules.lastUntil = i;
}
if (rule.timeOp === cRuleFrom) {
node.rules.firstFrom = Math.min(i,node.rules.firstFrom);
}
if (!rule.timeDays || rule.timeDays === '*') {
rule.timeDays = null;
} else {
rule.timeDateStart = new Date(2000,0,1,0, 0, 0, 1);
rule.timeDays = rule.timeDays.split(',');
rule.timeDays = rule.timeDays.map( e => parseInt(e) );
}
if (rule.timeDateEnd) {
rule.timeDateEnd = new Date(rule.timeDateEnd);
rule.timeDateEnd.setHours(23, 59, 59, 999);
if (!rule.timeMonths || rule.timeMonths === '*') {
rule.timeMonths = null;
} else {
rule.timeDateEnd = new Date(2000,11,31, 23, 59, 59, 999);
rule.timeMonths = rule.timeMonths.split(',');
rule.timeMonths = rule.timeMonths.map( e => parseInt(e) );
}
if (rule.timeOnlyOddDays && rule.timeOnlyEvenDays) {
rule.timeOnlyOddDays = false;
rule.timeOnlyEvenDays = false;
}
rule.timeDateStart = rule.timeDateStart || '';
rule.timeDateEnd = rule.timeDateEnd || '';
if (rule.timeDateStart || rule.timeDateEnd) {
if (rule.timeDateStart) {
rule.timeDateStart = new Date(rule.timeDateStart);
rule.timeDateStart.setHours(0, 0, 0, 1);
} else {
rule.timeDateStart = new Date(2000,0,1,0, 0, 0, 1);
}
if (rule.timeDateEnd) {
rule.timeDateEnd = new Date(rule.timeDateEnd);
rule.timeDateEnd.setHours(23, 59, 59, 999);
} else {
rule.timeDateEnd = new Date(2000,11,31, 23, 59, 59, 999);
}
}
}

@@ -1006,11 +1053,2 @@

rule.conditional = rule.conditonData.length > 0;
if (rule.timeOp === cRuleUntil) {
node.rules.lastUntil = i;
node.rules.checkUntil = true;
}
if (rule.timeOp === cRuleFrom && !node.rules.checkFrom) {
node.rules.firstFrom = i;
node.rules.checkFrom = true;
}
}

@@ -1017,0 +1055,0 @@

@@ -73,15 +73,4 @@ /********************************************

node.error('error on getting result: ' + resultObj.error);
} else if (config.result1Type === 'msgPayload') {
msg.payload = resultObj;
} else if (config.result1Type === 'msgTs') {
msg.ts = resultObj;
} else if (config.result1Type === 'msgLc') {
msg.lc = resultObj;
} else if (config.result1Type === 'msgValue') {
msg.value = resultObj;
} else if (config.result1Type === 'msg') {
RED.util.setMessageProperty(msg, config.result1Value, resultObj, true);
} else if (config.result1Type === 'flow' || config.result1Type === 'global') {
const contextKey = RED.util.parseContextStore(config.result1Value);
node.context()[config.result1Type].set(contextKey.key, resultObj, contextKey.store);
} else {
node.positionConfig.setMessageProp(this, msg, config.result1Type, config.result1, resultObj);
}

@@ -88,0 +77,0 @@ }

@@ -314,3 +314,3 @@ /********************************************

let millisecEnd = 1000 * 60 * 60 * 24; // 24h
if ((node.nextEndTime !== null) && (typeof node.nextEndTime !== undefined) && (errorStatus === '')) {
if ((node.nextEndTime !== null) && (typeof node.nextEndTime !== 'undefined') && (errorStatus === '')) {
// node.debug('timeout ' + node.nextEndTime + ' is in ' + millisec + 'ms');

@@ -357,3 +357,4 @@ millisecEnd = tsGetScheduleTime(node.nextEndTime, 10);

node.prepOutMsg = msg => {
node.debug(`prepOutMsg node.msg=${util.inspect(msg, { colors: true, compact: 10, breakLength: Infinity })}`);
// node.debug(`prepOutMsg node.msg=${util.inspect(msg, { colors: true, compact: 10, breakLength: Infinity })}`);
const dNow = new Date();
msg.payload = node.positionConfig.getOutDataProp(node, msg, node.payloadData);

@@ -363,7 +364,14 @@ msg.topic = config.topic;

node.debug(`prepOutMsg-${i} node.addPayload[${i}]=${util.inspect(node.addPayloadData[i], { colors: true, compact: 10, breakLength: Infinity })}`);
node.positionConfig.setMessageProp(this, msg, node.addPayloadData[i], node.payloadData.now);
const res = node.positionConfig.getOutDataProp(this, msg, node.addPayloadData[i], dNow);
if (res === null || (typeof res === 'undefined')) {
this.error('Could not evaluate ' + node.addPayloadData[i].type + '.' + node.addPayloadData[i].value + '. - Maybe settings outdated (open and save again)!');
} else if (res.error) {
this.error('Error on getting additional payload: "' + res.error + '"');
} else {
node.positionConfig.setMessageProp(this, msg, node.addPayloadData[i].outType, node.addPayloadData[i].outValue, res);
}
node.debug(`prepOutMsg-${i} msg=${util.inspect(msg, { colors: true, compact: 10, breakLength: Infinity })}`);
}
msg._srcid = node.id;
msg._ts = node.payloadData.now.valueOf();
msg._ts = dNow.valueOf();
return msg;

@@ -376,7 +384,6 @@ };

* @param {boolean} [_onInit] - _true_ if is in initialisation
* @param {Date} [dNow] - Date object with the calculation base
* @returns {object} state or error
*/
node.doCreateStartTimeout = (node, _onInit, dNow) => {
node.debug(`doCreateStartTimeout _onInit=${_onInit} node.timeStartData=${util.inspect(node.timeStartData, { colors: true, compact: 10, breakLength: Infinity })}`);
node.doCreateStartTimeout = (node, _onInit) => {
// node.debug(`doCreateStartTimeout _onInit=${_onInit} node.timeStartData=${util.inspect(node.timeStartData, { colors: true, compact: 10, breakLength: Infinity })}`);
node.nextStartTime = null;

@@ -406,3 +413,3 @@ node.nextStartTimeAlt = null;

node.debug(`doCreateStartTimeout2 node.intervalTime=${util.inspect(node.intervalTime, { colors: true, compact: 10, breakLength: Infinity })}`);
// node.debug(`doCreateStartTimeout2 node.intervalTime=${util.inspect(node.intervalTime, { colors: true, compact: 10, breakLength: Infinity })}`);
if (!node.timeStartData) {

@@ -427,3 +434,3 @@ node.debug('doCreateStartTimeout - absolute Intervall');

node.timeStartData.now = dNow || new Date();
node.timeStartData.now = new Date();
const startLimit = node.getTimeLimitation(node.timeStartData.now);

@@ -628,3 +635,2 @@ if (startLimit.valid) {

try {
node.payloadData.now = new Date();
node.debug('--------- time-inject - input (type=' + msg.type + ')');

@@ -634,3 +640,3 @@ if (!node.positionConfig) {

}
node.doCreateStartTimeout(node, false, node.payloadData.now);
node.doCreateStartTimeout(node, false);
send(node.prepOutMsg(msg));

@@ -637,0 +643,0 @@ if (msg.payload === null || (typeof msg.payload === 'undefined')) {

@@ -356,15 +356,4 @@ /********************************************

node.error('error on getting result: ' + resultObj.error);
} else if (config.result1Type === 'msgPayload') {
msg.payload = resultObj;
} else if (config.result1Type === 'msgTs') {
msg.ts = resultObj;
} else if (config.result1Type === 'msgLc') {
msg.lc = resultObj;
} else if (config.result1Type === 'msgValue') {
msg.value = resultObj;
} else if (config.result1Type === 'msg') {
RED.util.setMessageProperty(msg, config.result1, resultObj);
} else if (config.result1Type === 'flow' || config.result1Type === 'global') {
const contextKey = RED.util.parseContextStore(config.result1);
node.context()[config.result1Type].set(contextKey.key, resultObj, contextKey.store);
} else {
node.positionConfig.setMessageProp(this, msg, config.result1Type, config.result1, resultObj);
}

@@ -371,0 +360,0 @@ }

@@ -20,3 +20,3 @@ /********************************************

*/
function getDate(comparetype, msg, node) {
function getIntDate(comparetype, msg, node) {
let id = '';

@@ -57,6 +57,5 @@ let value = '';

* @param {*} data - the state data
* @param {boolean} [_onInit] - indicates if the node in in initialisation
* @returns {boolean}
*/
function setstate(node, data, _onInit) {
function setstate(node, data) {
if (data.error) {

@@ -79,22 +78,4 @@ node.status({

if (data.start && data.start.error) {
if (_onInit === true) {
node.status({
fill: 'red',
shape: 'ring',
text: RED._('node-red-contrib-sun-position/position-config:errors.error-init', data.start.error)
});
node.warn(RED._('node-red-contrib-sun-position/position-config:errors.warn-init', data.start.error));
return true;
}
hlp.handleError(node, RED._('within-time-switch.errors.error-start-time', { message : data.start.error}), undefined, data.start.error);
} else if (data.end && data.end.error) {
if (_onInit === true) {
node.status({
fill: 'red',
shape: 'ring',
text: RED._('node-red-contrib-sun-position/position-config:errors.error-init', data.end.error)
});
node.warn(RED._('node-red-contrib-sun-position/position-config:errors.warn-init', data.end.error));
return true;
}
hlp.handleError(node, RED._('within-time-switch.errors.error-end-time', { message : data.end.error}), undefined, data.end.error);

@@ -136,3 +117,3 @@ } else if (data.start && data.start.value && data.end && data.end.value) {

}
if (config.timeMonths && !config.timeMonths.includes(dNow.getDay())) {
if (config.timeMonths && !config.timeMonths.includes(dNow.getMonth())) {
node.debug('invalid Month config. today=' + dNow.getMonth() + ' timeMonths=' + util.inspect(config.timeMonths, Object.getOwnPropertyNames(config.timeMonths)));

@@ -213,4 +194,3 @@ result.warn = RED._('within-time-switch.errors.invalid-month');

if (result.altStartTime && config.startTimeAltType !== 'none') {
// node.debug('using alternate start time ' + result.altStartTime + ' - ' + config.startTimeAltType);
// result.start = node.positionConfig.getTimeProp(node, msg, config.startTimeAltType, config.startTimeAlt, config.startOffsetAltType, config.startOffsetAlt, config.startOffsetAltMultiplier);
// node.debug(`using alternate start time config.startTimeType=${ config.startTimeType},config.startTime=${ config.startTime}, result.altStartTime=${ result.altStartTime}, config.startTimeAltType=${ config.startTimeAltType}`);
result.start = node.positionConfig.getTimeProp(node, msg, {

@@ -225,5 +205,4 @@ type: config.startTimeAltType,

result.startSuffix = '⎇ ';
} else {
// node.debug('using standard start time ' + result.altStartTime + ' - ' + config.startTimeAltType);
// result.start = node.positionConfig.getTimeProp(node, msg, config.startTimeType, config.startTime, config.startOffsetType, config.startOffset, config.startOffsetMultiplier);
} else if (msg || (node.startTimeType !== 'msg')) {
// node.debug(`using standard start time config.startTimeType=${ config.startTimeType},config.startTime=${ config.startTime}, result.altStartTime=${ result.altStartTime}, config.startTimeAltType=${ config.startTimeAltType}`);
result.start = node.positionConfig.getTimeProp(node, msg, {

@@ -239,4 +218,3 @@ type: config.startTimeType,

if (result.altEndTime && config.endTimeAltType !== 'none') {
// node.debug('using alternate end time ' + result.altEndTime + ' - ' + config.startTimeAltType);
// result.end = node.positionConfig.getTimeProp(node, msg, config.endTimeAltType, config.endTimeAlt, config.endOffsetAltType, config.endOffsetAlt, config.endOffsetAltMultiplier);
// node.debug(`using alternate end time config.endTimeType=${ config.endTimeType},config.endTime=${ config.endTime}, result.altEndTime=${ result.altEndTime}, config.endTimeAltType=${ config.endTimeAltType}`);
result.end = node.positionConfig.getTimeProp(node, msg, {

@@ -250,5 +228,4 @@ type: config.endTimeAltType,

result.endSuffix = ' ⎇';
} else {
// node.debug('using standard end time ' + result.altEndTime + ' - ' + config.startTimeAltType);
// result.end = node.positionConfig.getTimeProp(node, msg, config.endTimeType, config.endTime, config.endOffsetType, config.endOffset, config.endOffsetMultiplier);
} else if (msg || (node.endTimeType !== 'msg')) {
// node.debug(`using standard end time config.endTimeType=${ config.endTimeType},config.endTime=${ config.endTime}, result.altEndTime=${ result.altEndTime}, config.endTimeAltType=${ config.endTimeAltType}`);
result.end = node.positionConfig.getTimeProp(node, msg, {

@@ -335,3 +312,3 @@ type: config.endTimeType,

// this.debug('config ' + util.inspect(config, { colors: true, compact: 10, breakLength: Infinity }));
const now = getDate(config.tsCompare, msg, node);
const now = getIntDate(config.tsCompare, msg, node);
const result = calcWithinTimes(this, msg, config, now);

@@ -381,17 +358,2 @@

node.status({});
const result = calcWithinTimes(this, null, config, new Date());
// if an error occurred, will retry in 6 minutes. This will prevent errors on initialization.
if (setstate(this, result, true)) {
node.debug('node is in initialization, retrigger time calculation in 6 min');
setTimeout(() => {
try {
const result = calcWithinTimes(this, null, config, new Date());
setstate(this, result);
} catch (err) {
node.error(err.message);
node.log(util.inspect(err, Object.getOwnPropertyNames(err)));
setstate(node, { error: RED._('node-red-contrib-sun-position/position-config:errors.error-title') });
}
}, 360000); // 6 Minuten
}
} catch (err) {

@@ -398,0 +360,0 @@ node.error(err.message);

{
"name": "node-red-contrib-sun-position",
"version": "1.1.0-alpha",
"version": "1.1.0-alpha-2",
"description": "NodeRED nodes to get sun and moon position",

@@ -5,0 +5,0 @@ "keywords": [

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc