mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	Fix input node (+2 squashed commits)
Squashed commits: [3079c2d] Added Heatmiser input and output nodes [62bd1f3] Added Heatmiser input and output nodes Fix input node bugs
This commit is contained in:
		@@ -67,6 +67,10 @@ Copyright 2013 IBM Corp. under [the Apache 2.0 license](LICENSE).
 | 
			
		||||
 | 
			
		||||
**79-sensorTag** - Reads data from the Ti BLE SensorTag device.
 | 
			
		||||
 | 
			
		||||
**100-heatmiser-in** - Writes settings for temperature and frost protection to Heatmiser thermostats.
 | 
			
		||||
 | 
			
		||||
**101-heatmiser-out** - Reads settings from Heatmiser thermostats at a polling interval.
 | 
			
		||||
 | 
			
		||||
**101-scanBLE** - Scans for a particular Bluetooth Low Energy (BLE) device.
 | 
			
		||||
 | 
			
		||||
### IO
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
<!--
 | 
			
		||||
  Copyright 2013 IBM Corp.
 | 
			
		||||
  Copyright 2014 Sean Bedford
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<script type="text/x-red" data-template-name="heatmiser">
 | 
			
		||||
<script type="text/x-red" data-template-name="heatmiser-in">
 | 
			
		||||
    <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">
 | 
			
		||||
@@ -30,12 +30,18 @@
 | 
			
		||||
    <div class="form-tips">Expects a msg.payload with a JSON object that contains settings for the Heatmiser thermostat</div>
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script type="text/x-red" data-help-name="heatmiser">
 | 
			
		||||
    <p>Heatmiser I/O node. Expects a msg.payload with a JSON object that contains settings for the Heatmiser thermostat</p>
 | 
			
		||||
<script type="text/x-red" data-help-name="heatmiser-in">
 | 
			
		||||
    <p>Heatmiser Input node.</p>
 | 
			
		||||
    <p>Expects a msg.payload with a JSON object that contains settings for the Heatmiser thermostat</p>
 | 
			
		||||
    <p>msg.payload can currently be either a heating boost option, or a run mode, as below:</p>
 | 
			
		||||
    <h3>Heating boost</h3>
 | 
			
		||||
    <p><pre>{heating: {target: TARGET_TEMPERATURE, hold: MINUTES_TO_STAY_ON_FOR}}</pre></p>
 | 
			
		||||
    <h3>Run mode</h3>
 | 
			
		||||
    <p><pre>{runmode:"frost" OR "heating"}</pre></p
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
    RED.nodes.registerType('heatmiser',{
 | 
			
		||||
    RED.nodes.registerType('heatmiser-in',{
 | 
			
		||||
        category: 'advanced-function',
 | 
			
		||||
        color:"GoldenRod",
 | 
			
		||||
        defaults: {
 | 
			
		||||
@@ -44,10 +50,10 @@
 | 
			
		||||
            pin: {value:""}
 | 
			
		||||
        },
 | 
			
		||||
        inputs:1,
 | 
			
		||||
        outputs:1,
 | 
			
		||||
        outputs:0,
 | 
			
		||||
        icon: "timer.png",
 | 
			
		||||
        label: function() {
 | 
			
		||||
            return this.name||"heatmiser";
 | 
			
		||||
            return this.name||"heatmiser-in";
 | 
			
		||||
        },
 | 
			
		||||
        labelStyle: function() {
 | 
			
		||||
            return this.name?"node_label_italic":"";
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright 2013 IBM Corp.
 | 
			
		||||
 * Copyright 2014 Sean Bedford
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
@@ -19,47 +19,59 @@ var RED = require(process.env.NODE_RED_HOME+"/red/red");
 | 
			
		||||
var Heatmiser = require("heatmiser");
 | 
			
		||||
var util =  require('util');
 | 
			
		||||
 | 
			
		||||
function HeatmiserNode(n) {
 | 
			
		||||
function HeatmiserInputNode(n) {
 | 
			
		||||
	// TODO - holiday and hot water cases when confirmed working
 | 
			
		||||
	var DEBUG = true;
 | 
			
		||||
	var DEBUG = false;
 | 
			
		||||
    RED.nodes.createNode(this,n);
 | 
			
		||||
    this.ip = n.ip || "192.168.0.1";
 | 
			
		||||
    this.pin = n.pin || "1234";
 | 
			
		||||
    this.multiWriteFunc = undefined;
 | 
			
		||||
    that = this;
 | 
			
		||||
    hminnode = this;
 | 
			
		||||
    this.pollIntervalRef = undefined;
 | 
			
		||||
 | 
			
		||||
    this.hm = new Heatmiser(this.ip, this.pin);
 | 
			
		||||
 | 
			
		||||
    this.hm.on('success', function(data) {
 | 
			
		||||
		if (DEBUG) {
 | 
			
		||||
			util.log(JSON.stringify(data));
 | 
			
		||||
			util.log("[100-heatmiser-in.js] - Successfully wrote data. Response : " + JSON.stringify(data));
 | 
			
		||||
		}
 | 
			
		||||
		that.currentStatus = data.dcb;
 | 
			
		||||
		if (that.multiWriteFunc) {
 | 
			
		||||
			that.multiWriteFunc();
 | 
			
		||||
			that.multiWriteFunc = undefined;
 | 
			
		||||
		hminnode.currentStatus = data.dcb;
 | 
			
		||||
		if (hminnode.multiWriteFunc) {
 | 
			
		||||
			hminnode.multiWriteFunc();
 | 
			
		||||
			hminnode.multiWriteFunc = undefined;
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		that.send(data.dcb);
 | 
			
		||||
		hminnode.send({topic: "", payload:JSON.stringify(data.dcb)});
 | 
			
		||||
	});
 | 
			
		||||
	this.hm.on('error', function(data) {
 | 
			
		||||
		if (DEBUG) {
 | 
			
		||||
			console.log(JSON.stringify(data));
 | 
			
		||||
			util.log("[100-heatmiser-in.js] - Error during data setting : " + JSON.stringify(data));
 | 
			
		||||
		}
 | 
			
		||||
		hminnode.send(data);
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	this.on("close", function() {
 | 
			
		||||
		if (this.pollIntervalRef) {
 | 
			
		||||
			clearInterval(this.pollIntervalRef);
 | 
			
		||||
			this.pollIntervalRef = undefined;
 | 
			
		||||
		}
 | 
			
		||||
		that.send(data);
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	this.read = function() {
 | 
			
		||||
		that.hm.read_device();
 | 
			
		||||
		if (hminnode.hm) {
 | 
			
		||||
			hminnode.hm.read_device();
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	if (!this.currentStatus) {
 | 
			
		||||
		this.read();
 | 
			
		||||
		setInterval(this.read, 30000);
 | 
			
		||||
		this.pollIntervalRef = setInterval(this.read, 30*60*1000);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.write = function(dcb) {
 | 
			
		||||
		that.hm.write_device(dcb);
 | 
			
		||||
        if (hminnode.hm) {
 | 
			
		||||
		    hminnode.hm.write_device(dcb);
 | 
			
		||||
        }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	this.validateAndWrite = function(message) {
 | 
			
		||||
@@ -68,24 +80,24 @@ function HeatmiserNode(n) {
 | 
			
		||||
				switch(key) {
 | 
			
		||||
					case "runmode" :
 | 
			
		||||
						if (DEBUG) {
 | 
			
		||||
							util.log("[100-heatmiser.js] Hit the runmode case");
 | 
			
		||||
							util.log("[100-heatmiser-in.js] Hit the runmode case");
 | 
			
		||||
						}
 | 
			
		||||
						if (message.payload[key] !== "frost" && message.payload[key] !== "heating") {
 | 
			
		||||
							util.log("[100-heatmiser.js] Warning: Unsupported 'runmode' value passed!");
 | 
			
		||||
							util.log("[100-heatmiser-in.js] Warning: Unsupported 'runmode' value passed!");
 | 
			
		||||
							return;
 | 
			
		||||
						}
 | 
			
		||||
						break;
 | 
			
		||||
 | 
			
		||||
					// case "holiday" :
 | 
			
		||||
					// 	if (DEBUG) {
 | 
			
		||||
					// 		util.log("[100-heatmiser.js] Hit the holiday case");
 | 
			
		||||
					// 		util.log("[100-heatmiser-in.js] Hit the holiday case");
 | 
			
		||||
					// 	}
 | 
			
		||||
					// 	if (!('enabled' in message.payload[key]) && !('time' in message.payload[key])) {
 | 
			
		||||
					// 		util.log("[100-heatmiser.js] Warning: Unsupported 'holiday' value passed!");
 | 
			
		||||
					// 		util.log("[100-heatmiser-in.js] Warning: Unsupported 'holiday' value passed!");
 | 
			
		||||
					// 		return;
 | 
			
		||||
					// 	}
 | 
			
		||||
					// 	var time = message.payload[key].time;
 | 
			
		||||
					// 	// Ensure that time is a date
 | 
			
		||||
					// 	// Ensure hminnode time is a date
 | 
			
		||||
					// 	if (typeof(time) == "string") {
 | 
			
		||||
					// 		util.log("Typeof time was " +typeof(message.payload[key].time));
 | 
			
		||||
					// 		// message.payload[key].time = new Date(message.payload[key].time);
 | 
			
		||||
@@ -103,10 +115,10 @@ function HeatmiserNode(n) {
 | 
			
		||||
 | 
			
		||||
					// case "hotwater" :
 | 
			
		||||
					// 	if (DEBUG) {
 | 
			
		||||
					// 		util.log("[100-heatmiser.js] Hit the hotwater case");
 | 
			
		||||
					// 		util.log("[100-heatmiser-in.js] Hit the hotwater case");
 | 
			
		||||
					// 	}
 | 
			
		||||
					// 	if (message.payload[key] !== "on" && message.payload[key] !== "boost" && message.payload[key] !== "off") {
 | 
			
		||||
					// 		util.log("[100-heatmiser.js] Warning: Unsupported 'hotwater' value passed!");
 | 
			
		||||
					// 		util.log("[100-heatmiser-in.js] Warning: Unsupported 'hotwater' value passed!");
 | 
			
		||||
					// 		return;
 | 
			
		||||
					// 	}
 | 
			
		||||
					// 	break;
 | 
			
		||||
@@ -114,10 +126,10 @@ function HeatmiserNode(n) {
 | 
			
		||||
					case "heating" :
 | 
			
		||||
						// Ensure heating stays last! It's got a multi write scenario
 | 
			
		||||
						if (DEBUG) {
 | 
			
		||||
							util.log("[100-heatmiser.js] Hit the heating case");
 | 
			
		||||
							util.log("[100-heatmiser-in.js] Hit the heating case");
 | 
			
		||||
						}
 | 
			
		||||
						if (!('target' in message.payload[key]) && !('hold' in message.payload[key])) {
 | 
			
		||||
							util.log("[100-heatmiser.js] Warning: Unsupported 'heating' value passed!");
 | 
			
		||||
							util.log("[100-heatmiser-in.js] Warning: Unsupported 'heating' value passed!");
 | 
			
		||||
							return;
 | 
			
		||||
						}
 | 
			
		||||
						// Set sane temp and time ranges and sanitise to float/int
 | 
			
		||||
@@ -128,54 +140,52 @@ function HeatmiserNode(n) {
 | 
			
		||||
						(target <= 10.0) ? message.payload[key].target = 10.0 : message.payload[key].target = target;
 | 
			
		||||
						(hold <= 0) ? message.payload[key].hold = 0 : message.payload[key].hold = hold;
 | 
			
		||||
 | 
			
		||||
						// Ensure that runmode == heating first
 | 
			
		||||
						if (that.currentStatus.run_mode === "frost_protection") {
 | 
			
		||||
						// Ensure hminnode runmode == heating first
 | 
			
		||||
						if (hminnode.currentStatus.run_mode === "frost_protection") {
 | 
			
		||||
							// Use the multiWriteFunc as a callback in our success case
 | 
			
		||||
							that.multiWriteFunc = function() {
 | 
			
		||||
								that.write(message.payload);
 | 
			
		||||
							hminnode.multiWriteFunc = function() {
 | 
			
		||||
								hminnode.write(message.payload);
 | 
			
		||||
							}
 | 
			
		||||
							that.write({"runmode" : "heating"});
 | 
			
		||||
							hminnode.write({"runmode" : "heating"});
 | 
			
		||||
							// End the flow here to ensure no double-writing
 | 
			
		||||
							return;
 | 
			
		||||
						}
 | 
			
		||||
						break;
 | 
			
		||||
 | 
			
		||||
					default :
 | 
			
		||||
						if (DEBUG) {
 | 
			
		||||
							util.log("[100-heatmiser.js] Hit the default case");
 | 
			
		||||
						}
 | 
			
		||||
						that.read();
 | 
			
		||||
						break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			// Valid set of key messages, construct DCB and write
 | 
			
		||||
			var dcb = message.payload;
 | 
			
		||||
			if (DEBUG) {
 | 
			
		||||
				util.log("[100-heatmiser.js] Injecting " + JSON.stringify(dcb));
 | 
			
		||||
				util.log("[100-heatmiser-in.js] Injecting " + JSON.stringify(dcb));
 | 
			
		||||
			}
 | 
			
		||||
			that.write(dcb);
 | 
			
		||||
			hminnode.write(dcb);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
    this.on("input", function(message) {
 | 
			
		||||
		// Valid inputs are heating:{target:, hold:}, read:, runmode:frost/heating, holiday:{enabled:, time:}, hotwater:{'on':1/0 / 'boost':1/0}
 | 
			
		||||
		if (typeof(message.payload) == "string") {
 | 
			
		||||
			message.payload = JSON.parse(message.payload);
 | 
			
		||||
		}
 | 
			
		||||
		if (message.payload.read) {
 | 
			
		||||
			that.hm.read_device();
 | 
			
		||||
		}
 | 
			
		||||
		else if (message.payload) {
 | 
			
		||||
			// Compare message.payload data to confirm valid and send to thermostat
 | 
			
		||||
		if (message.payload) {
 | 
			
		||||
			if (typeof(message.payload) === "string") {
 | 
			
		||||
				message.payload = JSON.parse(message.payload);
 | 
			
		||||
			}
 | 
			
		||||
 			// Compare message.payload data to confirm valid and send to thermostat
 | 
			
		||||
			var validInputs = ["heating", "runmode"];
 | 
			
		||||
			for (var key in message.payload) {
 | 
			
		||||
				if (message.payload.hasOwnProperty(key)) {
 | 
			
		||||
					if (validInputs.indexOf(key) < 0) {
 | 
			
		||||
						util.log("[100-heatmiser.js] Warning: Unsupported key ("+key+") passed!");
 | 
			
		||||
						util.log("[100-heatmiser-in.js] Warning: Unsupported key ("+key+") passed!");
 | 
			
		||||
						return;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			that.validateAndWrite(message);
 | 
			
		||||
			hminnode.validateAndWrite(message);
 | 
			
		||||
		}
 | 
			
		||||
		else {
 | 
			
		||||
			util.log("[100-heatmiser-in.js] Warning: Invalid input passed!");
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
RED.nodes.registerType("heatmiser",HeatmiserNode);
 | 
			
		||||
RED.nodes.registerType("heatmiser-in",HeatmiserInputNode);
 | 
			
		||||
							
								
								
									
										62
									
								
								hardware/heatmiser-out/101-heatmiser-out.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								hardware/heatmiser-out/101-heatmiser-out.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
<!--
 | 
			
		||||
  Copyright 2014 Sean Bedford
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
  http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<script type="text/x-red" data-template-name="heatmiser-out">
 | 
			
		||||
    <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">
 | 
			
		||||
        <label for="node-input-uuid"><i class="icon-tag"></i> IP Address</label>
 | 
			
		||||
        <input type="text" id="node-input-ip" placeholder="192.168.0.1">
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-row">
 | 
			
		||||
        <label for="node-input-name"><i class="icon-tag"></i> PIN</label>
 | 
			
		||||
        <input type="text" id="node-input-pin" placeholder="1234">
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-row">
 | 
			
		||||
        <label for="node-input-name"><i class="icon-tag"></i> Poll time (in minutes)</label>
 | 
			
		||||
        <input type="text" id="node-input-pollTime" placeholder="30">
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="form-tips">Expects a msg.payload with a JSON object that contains settings for the Heatmiser thermostat</div>
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script type="text/x-red" data-help-name="heatmiser-out">
 | 
			
		||||
    <p>Heatmiser Output node.</p>
 | 
			
		||||
    <p>Will read and send a status update at a configurable time interval. This is set to every 30 minutes by default</p>
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<script type="text/javascript">
 | 
			
		||||
    RED.nodes.registerType('heatmiser-out',{
 | 
			
		||||
        category: 'advanced-function',
 | 
			
		||||
        color:"GoldenRod",
 | 
			
		||||
        defaults: {
 | 
			
		||||
            name: {value:""},
 | 
			
		||||
            ip: {value:""},
 | 
			
		||||
            pin: {value:""},
 | 
			
		||||
            pollTime : {value:""}
 | 
			
		||||
        },
 | 
			
		||||
        inputs:0,
 | 
			
		||||
        outputs:1,
 | 
			
		||||
        icon: "timer.png",
 | 
			
		||||
        label: function() {
 | 
			
		||||
            return this.name||"heatmiser-out";
 | 
			
		||||
        },
 | 
			
		||||
        labelStyle: function() {
 | 
			
		||||
            return this.name?"node_label_italic":"";
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
</script>
 | 
			
		||||
							
								
								
									
										91
									
								
								hardware/heatmiser-out/101-heatmiser-out.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								hardware/heatmiser-out/101-heatmiser-out.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright 2014 Sean Bedford
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 **/
 | 
			
		||||
 | 
			
		||||
var RED = require(process.env.NODE_RED_HOME+"/red/red");
 | 
			
		||||
 | 
			
		||||
var Heatmiser = require("heatmiser");
 | 
			
		||||
var util =  require('util');
 | 
			
		||||
 | 
			
		||||
function HeatmiserOutputNode(n) {
 | 
			
		||||
	// TODO - holiday and hot water cases when confirmed working
 | 
			
		||||
	var DEBUG = false;
 | 
			
		||||
    RED.nodes.createNode(this,n);
 | 
			
		||||
    this.ip = n.ip || "192.168.0.1";
 | 
			
		||||
    this.pin = n.pin || "1234";
 | 
			
		||||
    this.pollTime = n.pollTime*60*1000 || 30*60*1000;
 | 
			
		||||
    this.pollIntervalRef = undefined;
 | 
			
		||||
    hmoutnode = this;
 | 
			
		||||
 | 
			
		||||
    this.hm = new Heatmiser(this.ip, this.pin);
 | 
			
		||||
 | 
			
		||||
    this.hm.on('success', function(data) {
 | 
			
		||||
		if (DEBUG) {
 | 
			
		||||
			util.log("[100-heatmiser-in.js] - Successfully wrote data. Response : " + JSON.stringify(data));
 | 
			
		||||
		}
 | 
			
		||||
		hmoutnode.send({topic: "", payload:JSON.stringify(data.dcb)});
 | 
			
		||||
	});
 | 
			
		||||
	this.hm.on('error', function(data) {
 | 
			
		||||
		if (DEBUG) {
 | 
			
		||||
			util.log("[100-heatmiser-in.js] - Error during data setting : " + JSON.stringify(data));
 | 
			
		||||
		}
 | 
			
		||||
		hmoutnode.send(data);
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	this.read = function() {
 | 
			
		||||
		if (hmoutnode.hm) {
 | 
			
		||||
			hmoutnode.hm.read_device();
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	if (!this.currentStatus) {
 | 
			
		||||
		this.read();
 | 
			
		||||
		this.pollIntervalRef = setInterval(this.read, this.pollTime);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.on("close", function() {
 | 
			
		||||
		if (this.pollIntervalRef) {
 | 
			
		||||
			clearInterval(this.pollIntervalRef);
 | 
			
		||||
			this.pollIntervalRef = undefined;
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
    this.on("input", function(message) {
 | 
			
		||||
		// Valid inputs are heating:{target:, hold:}, read:, runmode:frost/heating, holiday:{enabled:, time:}, hotwater:{'on':1/0 / 'boost':1/0}
 | 
			
		||||
        if (message.payload == "undefined" || !message.payload) {
 | 
			
		||||
            message.payload = {read : true};
 | 
			
		||||
        }
 | 
			
		||||
		if (typeof(message.payload) == "string") {
 | 
			
		||||
			message.payload = JSON.parse(message.payload);
 | 
			
		||||
		}
 | 
			
		||||
		if (message.payload.read) {
 | 
			
		||||
			hmoutnode.read();
 | 
			
		||||
		}
 | 
			
		||||
		else if (message.payload) {
 | 
			
		||||
			// Compare message.payload data to confirm valid and send to thermostat
 | 
			
		||||
			var validInputs = ["heating", "runmode"];
 | 
			
		||||
			for (var key in message.payload) {
 | 
			
		||||
				if (message.payload.hasOwnProperty(key)) {
 | 
			
		||||
					if (validInputs.indexOf(key) < 0) {
 | 
			
		||||
						util.log("[100-heatmiser.js] Warning: Unsupported key ("+key+") passed!");
 | 
			
		||||
						return;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			hmoutnode.validateAndWrite(message);
 | 
			
		||||
		}
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
RED.nodes.registerType("heatmiser-out",HeatmiserOutputNode);
 | 
			
		||||
		Reference in New Issue
	
	Block a user