Intelligent Multi-Zone Heating Script
Moderator: leecollings
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Intelligent Multi-Zone Heating Script
Hi,
I'd like to share my intelligent multi-zone heating script which I use to control my on/off central heating system. It attempts to predict the time needed to pre-heat a zone so it reaches the desired temperature when a thermostat timer is triggered. It uses an outside temperature sensor to make this prediction even more accurate. It can open/close valves in zones that do not need any heating, although there's still some work to be done there (see todos at the top of the script).
The script uses a separate sqlite database to store temperature deltas used to predict the pre-heat duration. Unfortunately it's currently not possible to load dynamic lua support for sqlite, so access to this database is done through system calls, which get the job done but isn't as robust as I'd like it to be.
Tell me what you think. Any hints, tips or other useful contributions are most welcome
https://github.com/bobkersten/domoticz-lua.git
Cheers,
Bob.
I'd like to share my intelligent multi-zone heating script which I use to control my on/off central heating system. It attempts to predict the time needed to pre-heat a zone so it reaches the desired temperature when a thermostat timer is triggered. It uses an outside temperature sensor to make this prediction even more accurate. It can open/close valves in zones that do not need any heating, although there's still some work to be done there (see todos at the top of the script).
The script uses a separate sqlite database to store temperature deltas used to predict the pre-heat duration. Unfortunately it's currently not possible to load dynamic lua support for sqlite, so access to this database is done through system calls, which get the job done but isn't as robust as I'd like it to be.
Tell me what you think. Any hints, tips or other useful contributions are most welcome
https://github.com/bobkersten/domoticz-lua.git
Cheers,
Bob.
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
-
- Posts: 4
- Joined: Tuesday 24 November 2015 23:00
- Target OS: Raspberry Pi / ODroid
- Domoticz version: beta
- Location: NL
- Contact:
Re: Intelligent Multi-Zone Heating Script
Hi Bob,
Your project looks promising. I tried to get it working, but have not yet succeeded. I get this error in the Domoticz-log.
2016-01-15 00:47:00.272 LUA: (Heating) ----- HEATING LOGIC START
2016-01-15 00:47:00.272 Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_heating.lua:130: bad argument #1 to 'sub' (string expected, got nil)
Maybe you can provide an empty domoticz.custom.db
Greetings,
Patrick
Your project looks promising. I tried to get it working, but have not yet succeeded. I get this error in the Domoticz-log.
2016-01-15 00:47:00.272 LUA: (Heating) ----- HEATING LOGIC START
2016-01-15 00:47:00.272 Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_heating.lua:130: bad argument #1 to 'sub' (string expected, got nil)
Maybe you can provide an empty domoticz.custom.db
Greetings,
Patrick
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Re: Intelligent Multi-Zone Heating Script
That error comes from within the parseDate method. It seems there isn't a known lastupdate date present (yet), for which I've added checks. It could also mean that you've spelled your heating devicename incorrectly.PatrickEekhout wrote: 2016-01-15 00:47:00.272 Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_heating.lua:130: bad argument #1 to 'sub' (string expected, got nil)
You'll find an empty database in the github project.PatrickEekhout wrote: Maybe you can provide an empty domoticz.custom.db
Hopefully you'll get it running with these adjustments, please let me know.
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
-
- Posts: 4
- Joined: Tuesday 24 November 2015 23:00
- Target OS: Raspberry Pi / ODroid
- Domoticz version: beta
- Location: NL
- Contact:
Re: Intelligent Multi-Zone Heating Script
I checked the logs this morning. The error is gone. It indeed looks like the issue was the lack of a known lastupdate date.
Thnx for the empty database in github. Looks like I won't be needing it. But very useful for new users.
I will continue to put all this into practice. I now use virtual switches for the ValvesDevice and HeatingDevice. Am going to replace those with a ZWave Qubino Flush 2 Relays-module.
Thnx for the empty database in github. Looks like I won't be needing it. But very useful for new users.
I will continue to put all this into practice. I now use virtual switches for the ValvesDevice and HeatingDevice. Am going to replace those with a ZWave Qubino Flush 2 Relays-module.
-
- Posts: 4
- Joined: Tuesday 24 November 2015 23:00
- Target OS: Raspberry Pi / ODroid
- Domoticz version: beta
- Location: NL
- Contact:
Re: Intelligent Multi-Zone Heating Script
New situation, since today is part of Weekends:
I created this entries in the Timer of the ThermostatDevice:
Yes On Time 07:30 20 Weekdays
Yes On Time 23:00 18 Weekdays
Assumed that, since last timer event is 23:00 weekday, tempsetting 18 would continue during the weekend until next weekday (monday). According to the log it works different?
2016-01-16 10:39:00.128 LUA: (THERM Office) The current timer started at 00:00 with temperature 20.4°.
2016-01-16 10:39:00.128 LUA: (THERM Office) The next timer will start at 23:59 with temperature 20.4°.
The ThermostatDevice device still says 18°. I guess the 20.4 value is the value from the TemperatureDevice.
What timers do I have to set / did you set, so that there are no gaps?
I created this entries in the Timer of the ThermostatDevice:
Yes On Time 07:30 20 Weekdays
Yes On Time 23:00 18 Weekdays
Assumed that, since last timer event is 23:00 weekday, tempsetting 18 would continue during the weekend until next weekday (monday). According to the log it works different?
2016-01-16 10:39:00.128 LUA: (THERM Office) The current timer started at 00:00 with temperature 20.4°.
2016-01-16 10:39:00.128 LUA: (THERM Office) The next timer will start at 23:59 with temperature 20.4°.
The ThermostatDevice device still says 18°. I guess the 20.4 value is the value from the TemperatureDevice.
What timers do I have to set / did you set, so that there are no gaps?
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Re: Intelligent Multi-Zone Heating Script
I've decided not to look past the current day for additional timers because that would complicate the script a lot. I know that's shortsighted, but for my situation it worked. I've set a low temperature timer late at night and a high temperature timer in the morning. I'll take a look if I can easily extend the script to look for timers the following days.
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
-
- Posts: 6
- Joined: Tuesday 19 April 2016 11:06
- Target OS: Windows
- Domoticz version:
- Location: Heeze
- Contact:
Re: Intelligent Multi-Zone Heating Script
I too am interested in creating/assisting in such a script. The repository is offline, can you share it again Bob? I'm happy to add to it where I can. I'm new to Domoticz, but not to programming.
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Re: Intelligent Multi-Zone Heating Script
The script is back on github, but it is currently tweaked to suit my own needs. You should however be able to customize it for your own personal needs, but maybe we can make it as general as possible so other people with the same need can benefit from it aswell. I'd like to hear what you think of it
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
-
- Posts: 17
- Joined: Thursday 06 October 2016 12:36
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Location: Woerden (NL)
- Contact:
Re: Intelligent Multi-Zone Heating Script
Hi Bob,
The script is no longer available on github. Could you please put it back online? I want to use it for my home heating.
Greetz,
Erik-Jan
The script is no longer available on github. Could you please put it back online? I want to use it for my home heating.
Greetz,
Erik-Jan
-
- Posts: 17
- Joined: Thursday 06 October 2016 12:36
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Location: Woerden (NL)
- Contact:
Re: Intelligent Multi-Zone Heating Script
Hi Bob,
Thanx for putting the files back on github.
I've tried to get it working, but have not yet succeeded. I get this error in the Domoticz-log.
2016-11-06 14:59:40.464 Error: EventSystem: in Verwarming: [string "--[[..."]:64: attempt to index global 'oDatetime' (a nil value)
Could you provide an empty domoticz.custom.db? Maby that solves the problem?
Greetings,
Erik-Jan Verweij
Thanx for putting the files back on github.
I've tried to get it working, but have not yet succeeded. I get this error in the Domoticz-log.
2016-11-06 14:59:40.464 Error: EventSystem: in Verwarming: [string "--[[..."]:64: attempt to index global 'oDatetime' (a nil value)
Could you provide an empty domoticz.custom.db? Maby that solves the problem?
Greetings,
Erik-Jan Verweij
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Re: Intelligent Multi-Zone Heating Script
The oDatetime object is created and populated in the variables-script in the inc folder. It has nothing to do with the missing database file. You can create an empty database file using the structures from the script, that should work. You will also need to have sqlite3 installed for the script to work. Also keep in mind that the script is heavily tailored for my personal needs, so a little tinkering might be necessary in your situation.
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
-
- Posts: 17
- Joined: Thursday 06 October 2016 12:36
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Location: Woerden (NL)
- Contact:
Re: Intelligent Multi-Zone Heating Script
Hi Bob,
I did install sqlite3 and created an empty database file with the structure from the script. But stil get the oDatetime error.
Where do i have to put the inc folder with the variables-script? Can i put the inc folder directly in the domoticz/scripts/lua folder?
I did install sqlite3 and created an empty database file with the structure from the script. But stil get the oDatetime error.
Where do i have to put the inc folder with the variables-script? Can i put the inc folder directly in the domoticz/scripts/lua folder?
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Re: Intelligent Multi-Zone Heating Script
Place it anywhere you can include it, or copy and paste it's content into the time_verwarming script.
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
-
- Posts: 230
- Joined: Sunday 14 July 2013 20:21
- Target OS: Linux
- Domoticz version: 4.10233
- Location: Alkmaar, The Netherlands
- Contact:
Re: Intelligent Multi-Zone Heating Script
Bob,
First off al thanks for the work done so far!
Im trying to get your script solution going.
I've made the database and made the lua. The script runs but i have one error. Here is the log:
When heating is desired:
When no heat is desired:
The code on line 268 is(from functions.lua):
I think it has something to do with the part below:
Could you help me out here?
And can you tell me what the valve does in your setup?
Thanks in advance!
First off al thanks for the work done so far!
Im trying to get your script solution going.
I've made the database and made the lua. The script runs but i have one error. Here is the log:
When heating is desired:
Code: Select all
2017-02-08 01:19:00.512 Error: EventSystem: in Heating: [string "--[[ ..."]:268: attempt to get length of global 'commandArray' (a nil value)
Code: Select all
2017-02-08 01:15:00.881 Error: EventSystem: Lua script Heating did not return a commandArray
Code: Select all
function addCommand( sDevice_, sCommand_ )
commandArray[#commandArray + 1] = { [ sDevice_ ] = sCommand_ }
Code: Select all
-- ___ ___ __ .__
-- / | \ ____ _____ _/ |_|__| ____ ____
-- / ~ \_/ __ \\__ \\ __\ |/ \ / ___\
-- \ Y /\ ___/ / __ \| | | | | \/ /_/ >
-- \___|_ / \___ >____ /__| |__|___| /\___ /
-- \/ \/ \/ \//_____/
if (
oHeating.diff > 0
and otherdevices[sHeatingDeviceName] == 'Off'
) then
addCommand( sHeatingDeviceName, 'On' )
--log( 'Sending ON command to heating device.', sHeatingDeviceName, true )
end
if (
oHeating.diff <= 0
and otherdevices[sHeatingDeviceName] == 'On'
) then
addCommand( sHeatingDeviceName, 'Off' )
--log( 'Sending OFF command to heating device.', sHeatingDeviceName, true )
end
And can you tell me what the valve does in your setup?
Thanks in advance!
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Re: Intelligent Multi-Zone Heating Script
My first guess is that you didn't create a commandArray in your script. You can see this being done in the script_device_shared.lua script in my github repository, at the first line. This is necessary for the addCommand function to work properly. Can you verify that adding this line somewhere to the top of your script or include chain solves your problem?
As for the valves part, they are used to open or close valves (or in my case, the underfloor heating pump') depending on the request for heat by their corresponding thermostats. Please note that this script is heavily taylored to my personal needs, with a relatively simple on/off central heating system in mind. The idea was to add z-wave radiator valves to this setup, but the weighted temperature error already provided for enough comfort as it is, so I decided not to, as these valves would cost another €50,- each
As for the valves part, they are used to open or close valves (or in my case, the underfloor heating pump') depending on the request for heat by their corresponding thermostats. Please note that this script is heavily taylored to my personal needs, with a relatively simple on/off central heating system in mind. The idea was to add z-wave radiator valves to this setup, but the weighted temperature error already provided for enough comfort as it is, so I decided not to, as these valves would cost another €50,- each
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
-
- Posts: 230
- Joined: Sunday 14 July 2013 20:21
- Target OS: Linux
- Domoticz version: 4.10233
- Location: Alkmaar, The Netherlands
- Contact:
Re: Intelligent Multi-Zone Heating Script
Hero! This indeed works!bobkersten wrote:My first guess is that you didn't create a commandArray in your script. You can see this being done in the script_device_shared.lua script in my github repository, at the first line. This is necessary for the addCommand function to work properly. Can you verify that adding this line somewhere to the top of your script or include chain solves your problem?
I've now copy and pasted everything into one script.
But would a better solution be?:
Code: Select all
commandArray = {}
package.path = package.path .. ';' .. '/home/pi/domoticz/scripts/lua/?.lua'
require "inc/functions"
require "inc/sqlite3"
require "inc/variables"
require "device_verwarming"
return commandArray
- bobkersten
- Posts: 34
- Joined: Tuesday 06 October 2015 9:17
- Target OS: Linux
- Domoticz version: beta
- Location: Venray
- Contact:
Re: Intelligent Multi-Zone Heating Script
Whatever suits your needs, but I would say, yes
Mac mini w/ ESXi running Ubuntu w/ Domoticz custombuild, SolarEdge 3500Wp, S0 Meter, P1 Smart Meter, RFXtrx433e, Aeotec Z-Stick Gen5
Who is online
Users browsing this forum: No registered users and 0 guests