node-red-contrib-sun-position
Advanced tools
Comparing version 1.1.0-alpha to 1.1.0-alpha-2
@@ -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 @@ |
@@ -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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1597715
11319