smithtek-nodered
Version:
NodeRED node to post data on SmithTek using MQTT.
137 lines (127 loc) • 6.89 kB
HTML
<script type="text/javascript">
RED.nodes.registerType('smithtek_sequencer',{
category: 'function',
color: '#B9B6B8',
defaults: {
name: {value:""},
outputs: {value:"1", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
step: {value: "10", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
stepUnits: {value:"seconds"},
pauseTime: {value: "1", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
pauseUnits: {value:"minutes"},
autostart: {value:"false"},
startupDelay: {value: "1", required:true, validate:function(v) { return RED.validators.number(v) && (v >= 0); }},
startupUnits: {value: "milliseconds"}
},
inputs:1,
outputs:1,
icon: "smithtek.png",
paletteLabel: "smithtek_seq",
label: function() {
if (this.name) {
return this.name;
}
var units = this.stepUnits ? this.stepUnits.charAt(0) : "s";
if (this.stepUnits == "milliseconds") { units = "ms"; }
return "sequencer " + this.step + units;
},
labelStyle : function() {
return this.name ? "node_label_italic" : "";
},
oneditprepare: function() {
var that = this;
$("#node-input-outputs").spinner({
min: 1,
change: function (event, ui) {
var value = this.value;
if (!value.match(/^\d+$/)) {
value = 1;
}
else if (value < this.min) {
value = this.min;
}
if (value !== this.value) {
$(this).spinner("value", value);
}
}
});
if (!this.stepUnits) {
$("#node-input-stepUnits option").filter(function() {
return $(this).val() == 'seconds';
}).attr('selected',true);
}
if (!this.pauseUnits) {
$("#node-input-pauseUnits option").filter(function() {
return $(this).val() == 'minutes';
}).attr('selected',true);
}
if (!this.startupUnits) {
$("#node-input-pauseUnits option").filter(function() {
return $(this).val() == "milliseconds";
}).attr('selected',true);
}
}
});
</script>
<script type="text/x-red" data-template-name="smithtek_sequencer">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-row" id="delay-details-for">
<label for="node-input-step"><i class="fa fa-clock-o"></i> <span data-i18n="smithtek.sequencer.stepTime"></span></label>
<input type="text" id="node-input-step" style="text-align:end; width:50px !important">
<select id="node-input-stepUnits" style="width:200px !important">
<option value="milliseconds" data-i18n="smithtek.timeunits.ms" ></option>
<option value="seconds" data-i18n="smithtek.timeunits.s"></option>
<option value="minutes" data-i18n="smithtek.timeunits.m"></option>
<option value="hours" data-i18n="smithtek.timeunits.h"></option>
<option value="days" data-i18n="smithtek.timeunits.d"></option>
</select>
</div>
<div class="form-row" id="pause-details-for">
<label for="node-input-pauseTime"><i class="fa fa-clock-o"></i> <span data-i18n="smithtek.sequencer.pauseTime"></span></label>
<input type="text" id="node-input-pauseTime" style="text-align:end; width:50px !important">
<select id="node-input-pauseUnits" style="width:200px !important">
<option value="milliseconds" data-i18n="smithtek.timeunits.ms"></option>
<option value="seconds" data-i18n="smithtek.timeunits.s"></option>
<option value="minutes" data-i18n="smithtek.timeunits.m"></option>
<option value="hours" data-i18n="smithtek.timeunits.h"></option>
<option value="days" data-i18n="smithtek.timeunits.d"></option>
</select>
</div>
<div class="form-row">
<input type="checkbox" id="node-input-autostart" style="display: inline-block; width: auto; vertical-align: top;">
<label style="width: auto;" for="node-input-autostart" data-i18n="smithtek.sequencer.autostart"></label></input>
</div>
<div class="form-row" id="startup-details-for">
<label for="node-input-startupDelay"><i class="fa fa-clock-o"></i> <span data-i18n="smithtek.sequencer.startupDelay"></span></label>
<input type="text" id="node-input-startupDelay" style="text-align:end; width:50px !important">
<select id="node-input-startupUnits" style="width:200px !important">
<option value="milliseconds" data-i18n="smithtek.timeunits.ms"></option>
<option value="seconds" data-i18n="smithtek.timeunits.s"></option>
<option value="minutes" data-i18n="smithtek.timeunits.m"></option>
<option value="hours" data-i18n="smithtek.timeunits.h"></option>
<option value="days" data-i18n="smithtek.timeunits.d"></option>
</select>
</div>
<div class="form-row">
<label for="node-input-outputs"><i class="fa fa-random"></i> <span data-i18n="node-red:function.label.outputs"></span></label>
<input id="node-input-outputs" style="width: 60px;" value="1">
</div>
</div>
</script>
<script type="text/x-red" data-help-name="smithtek_sequencer">
<p>A node to send <code>true</code> as the <code>msg.paylod</code> to each output in sequence.</p>
<p><strong>Smithtek Sequencer</strong><br/>
This node will step through the outputs sending a true value and pausing a set amount of time between output sends.
any input will trigger a pause on the node, pausing for a set amount of time.
<ul>
<li><code>Step Time</code> This amount of time to wait before sending true the next output.</li>
<li><code>Pause Time</code> The amount of time to pause when a value comes in on the input.</li>
<li><code>Autostart</code> If checked, this node will start up when deployed.</li>
<li><code>Start Delay</code> If the node is autostarting, it will wait this long before doing so.</li>
<li><code>Outputs</code> The number of outputs to step through.</li>
</p>
</ul>
</script>