node-red-contrib-ramp-thermostat
Version:
A Node-RED node that emulates a programmable thermostat.
147 lines (112 loc) • 4.07 kB
Markdown
[![NPM version][npm-image]][npm-url]
[]: http://img.shields.io/npm/v/node-red-contrib-ramp-thermostat.svg
[]: https://npmjs.org/package/node-red-contrib-ramp-thermostat
A Node-RED contrib-node that emulates a programmable thermostat.
[](https://en.wikipedia.org/wiki/Programmable_thermostat): *A **programmable thermostat** is a thermostat which is designed to adjust the temperature according to a series of programmed settings that take effect at different times of the day. Programmable thermostats may also be called **clock thermostats**.*
The ramp-thermostat controls an actuator depending on the current input temperature and the target temperature (setpoint).
The target temperature is defined by a `profile` for a day period (00:00-23:59). A weekly or holiday setting can be achieved using several profiles.
## Configuration
The target temperature is defined by a profile that provides the value depending on the current time `00:00-23:59`. The profile consists of several points whose connections build a sequence of lines. The switching moment can be optimized by defining a gradient line like a `ramp`.
**A profile has at least 2 points and must start at 00:00 and end at 23:59.**
The hysteresis is used to prevent osciliation. The `[+]` value is added to the target and the `[-]` (absolute) value is subtracted from the target. Within this neutral zone no action accurs.
## Usage
This node expects a `numeric` msg.payload containing the current temperature (number). The msg.topic should be set to `setCurrent`. It will calculate the target temperature depending on msg.payload at the current time and output 3 values:
* state (boolean)
* current temperature (number)
* target temperature (number)
The state (true/false) is used to control an actuator. The current and target temperature outputs can be wired e.g. into an ui_chart node.
## Runtime settings
### setTarget
```sh
msg.topic: setTarget
msg.payload: nn.n (number)
```
The target will be valid until a new target or a profile is set again or until node-red is restarted.
### setHysteresisPlus
```sh
msg.topic: setHysteresisPlus
msg.payload: nn.n (number)
```
The Hydteresis will be valid until a new hysteresis is set again or until node-red is restated.
### setHysteresisMinus
```sh
msg.topic: setHysteresisMinus
msg.payload: nn.n (number)
```
The Hydteresis will be valid until a new hysteresis is set again or until node-red is restated.
### getProfile
```sh
msg.topic: getProfile
msg.payload: profile-name
```
The profile object is sent to the output 3:
```sh
msg.topic: getProfile
msg.payload: {
"name": "profile-name",
"points": [{
"00:00": 18
}, {
"04:00": 18
}, {
"08:00": 20.5
}, {
"12:00": 20.5
}, {
"12:00": 19
}, {
"12:30": 19
}, {
"13:30": 20.5
}, {
"19:00": 20.5
}, {
"19:00": 18
}, {
"23:59": 18
}]
}
```
```sh
msg.topic: setProfile
msg.payload: profile-name
```
The profile-name is one of the existing profiles that are configured in the ramp-thermostat node.
You can even define an input profile (JSON object) with more than 10 points:
```sh
msg.topic: setProfile
msg.payload: {
"name": "dining room",
"points": [
{"00:00": 18},
{"03:00": 18},
{"06:00": 18.5},
{"08:00": 20},
{"10:00": 20},
{"11:00": 20.5},
{"12:30": 20.5},
{"12:30": 19.5},
{"15:00": 19.5},
{"17:00": 20.5},
{"19:00": 20.5},
{"19:00": 20},
{"21:30": 20},
{"21:30": 18},
{"23:59": 18}
]
}
```

The profile is defined using 6 points:
```sh
"time" : temp
"00:00": 18.0
"03:00": 18.0
"06:00": 20.0
"19:00": 20.0
"20:00": 18.0
"23:59": 18.0
```