Centralite Perl Thermostat, Vera/Ezlo hub, and remote sensors?

In my hunt for a solution to my single zone/multiple room heating dilemma (how do you get a single thermostat controlling a single zone to best control the temperature of the various rooms heated by said zone), I came across the Centralite Pearl Thermostat which states on its website:

the Pearl offers advanced features like the use of remote temperature sensors to eliminate hot and cold spots in the home.

Sounds like what I want, right? Unfortunately, I couldn’t find any information on how to do this, so I asked support. I got a response from @Leonardo_Soto (apparently Centralite is an Ezlo company now) stating that

…the scenario that you are proposing is not natively support, for that you will need a platform like Vera or any other platform that allows advanced automation

Ok, fine. I have that. Doesn’t tell me how to make it work though. After some back-and-forth, it was stated that I could

write a LUA Code with “luup.variable_set” or “luup.call_action”, the luup code will set the thermostat and call for heat

Fair enough. The only problem here is that I wouldn’t think you would be able to change the “CurrentTemperature” variable from luup code (or anywhere else, for that matter) - since it is something the thermostat reports, I would think it would be read-only. Sure, you can change the setpoint, but that’s not the goal if you want to “eliminate hot or cold spots” - the setpoint needs to be fixed at the desired temperature, and the temperature reading that the thermostat is getting needs to be adjusted to the average temperature of the various areas, so it calls for heat when the average temperature gets too low.

So what am I missing here? Is the “CurrentTemperature” variable really read-write, such that I can change it and thereby “trick” the thermostat into thinking it needs to call for heat (or not)?

Since a picture is worth a thousand words, and apparently the concept can be more complicated than I thought, allow me to post a screen shot showing what needs to be changed. The value circled in the picture needs to be set to the average value of the various temperature sensors, such that the thermostat responds to changes in said average value, rather than changes in the built-in thermostat.

Hello @ibrewster

It is a read-only value by default, however, we can indeed change it momentarily or set it to the average of the two sensors whenever the thermostat reports its inside temperature once more, check the following flow of such scenario.

  • The average value will be calculated from the two temperature sensors.
  • The calculated value will be assigned to the CurrentTemperature variable of the thermostat.
  • The thermostat will then turn on the heater.
  • A variable_watch function would be placed on the startup lua of the controller to determine if the Pearl Thermostat reports temperature so that the Average value could be calculated again and re-assigned to the CurrentTemperature variable.
  • The thermostat will turn on the heat once more if needed.

Please let me know if more explanation is needed.

Thank you, that flow sounds appropriate, and like it would accomplish the desired goal.

Will that be possible on the Ezlo Plus, or only on the Vera Plus at the moment? I’m hoping to move things over to the Ezlo Plus soon now that the DSC plugin is nearly available :slight_smile:

Would you be able to provide some sample code for the variable_watch function, as well as where I would put that? I am familiar with the basics of writing luup code, and believe I can figure out the code needed to set the CurrentTemperature variable, but variable_watch is new to me.

Note that I tried simply changing the value of CurrentTemperature one one of my (not a Perl) thermostats using the Vera Plus UI7 Advanced interface, and it had no effect - but perhaps doing it through a Luup script (or on a Perl thermostat) would have a different effect? That is, at the time the thermostat was calling for heat, so I set the CurrentTemperature to a high value to see if it would stop, but it did not stop calling for heat.

Thanks again, and thank you for bearing with me as I figure this out!


Yes, this is an example of how to use variable_watch (Which is just a way to keep on watching a specific variable and its changes in temperature or status)

function commWatch() -- **Function that will be executed anytime the variablle being watched changes**
        commStatus = luup.variable_get("urn:micasaverde-com:serviceId:HaDevice1","CommFailure",55)
  	   if commStatus == "1" then
        return true
luup.variable_watch("commWatch", "urn:micasaverde-com:serviceId:HaDevice1", "CommFailure", 55) -- **Function which is receiving the variable that's going to be watched.**

As per the possibility to have that being done on eZLO, need to check as I have not tampered with that specific situation with the newer platform, I will verify and see if that can be accomplished.

1 Like