Node-red-contrib-ramp-thermostat

New version 0.8.0 available.

  • setProfile with more than 10 points

Example:

chart10

@cflurin,
thank you, guess it is time to start learning javascript :blush:
I am playing with your simulation right now...thank you for that...is there a way to change a flows system-time or timezone o the fly? :thinking:

It depends on your OS -> search for date -set or similar.

...that would change date/time for the entire underlying system node-red is running on. But I have other flows and services running there.
For the simulation, I was thinking adding User-Input for the current temp and a slider, changing time or timezone in order to test the profile manually.
...maybe I can use docker to run a sandbox instance and have this set to a different time :thinking:

Hey Flurin, I assume this new functionality is not available via the config screen (by looking at the html file)? Do you have plans to do there the same? If so, don't hesitate to give me a call if you need any assistence!
Bart

@BartButenaers,

Thanks for your proposal!
I guess 10 points are enough for 95% of all use cases. Some users asked for more than 10 points, so I think the actual solution using setProfile is sufficient and furthermore flexible (unlimited points).

I'll come back if there'd be a request to expand the config UI.

1 Like

The way the actuator output of this component works seems specific to heating.
ie. it turns on when the current temperature is below the target - hysteresis, and turns off when the current temperature is above the current temperature plus hysteresis.

Is there a way to use this for cooling/AC? I thought of just inverting the actuator output, which kind of works once it gets into a cooling on/off cycle. But if I deploy my flow and the current temperature is within the dead-zone, the ramp thermostat will initialise to 'off', which gets inverted and starts my AC. Not a big deal but a potential enhancement is to say whether a profile is a heating or cooling profile and set the actuator output accordingly?

If you are using the ramp-thermostat only for cooling, you could try to change the getStatefunction in ramp-themostat.js:

    if (current > target_plus) {
      state = false;
      status = {fill:"grey",shape:"ring",text:current+" > "+target_plus+" ("+profile.name+")"};
    } else if (current == target_plus) {
      state = false;
      status = {fill:"grey",shape:"ring",text:current+" = "+target_plus+" ("+profile.name+")"}; 
    } else if (current == target_minus) {
      state = true;
      status = {fill:"yellow",shape:"dot",text:current+" = "+target_minus+" ("+profile.name+")"}; 
    } else if (current < target_minus) {
      state = true;
      status = {fill:"yellow",shape:"dot",text:current+" < "+target_minus+" ("+profile.name+")"};    
    } else { // deadband
      state = context.get('pre_state') || false;
      if (state) {
        status = {fill:"yellow",shape:"dot",text:target_minus+" < "+current+" < "+target_plus+" ("+profile.name+")"};
      } else {
        status = {fill:"grey",shape:"ring",text:target_minus+" < "+current+" < "+target_plus+" ("+profile.name+")"};
      }
    }

Change line 240:

      state = context.get('pre_state') || true;

and add this new line before context.set('pre_state', state);

state = !state;

Thanks! I will do that, and I'll see if I can send a pull request to make it configurable by profile or something.