switch turn on off at temperature

Easy to use, 100% Lua-based event scripting framework.

Moderator: leecollings

Post Reply
anno
Posts: 36
Joined: Wednesday 01 March 2017 13:00
Target OS: Windows
Domoticz version: all
Contact:

switch turn on off at temperature

Post by anno »

I am working on a dzvents script to turn my "verdelers" on and off when a temperature sensor is above or below a value. Also i want to use thermostat setpoints.

But first first, i did try to turn a switch on but it is not working.. And i did read and read the instructions but i don't find the problem.

Code: Select all

return
{
	on = {

		-- device triggers
		devices = {
			-- scripts is executed if the device that was updated matches with one of these triggers
			'Woonkamer keuken', -- device name
--			'abc*', -- triggers for all devices which name begins with abc

		},

		-- timer riggers
		timer = {
			-- timer triggers.. if one matches with the current time then the script is executed
			'every minute',

			function(domoticz)
				-- return true or false
			end
		},
    execute = function(domoticz, roomSwitch)
--		if (triggerdItem.active) then -- state == 'On'
--			triggerdItem.switchOff().afterMin(2) -- if it is a switch
        if (device.name == 'Keuken' and device.temperature > 24.8)) then
        devices.switchOff()--.afterMin(2)
        elseif (device.name == 'Keuken' and device.temperature < 24.5)) then
        devices.switchOn()--.afterMin(2)
        end
end
}
And how is it possible to let the code only close a group if at least one group remains open?
Last edited by anno on Wednesday 01 February 2023 10:09, edited 1 time in total.
long time domiticz user, running 8 domoticz installations on vm's nuc i3. And espeay hosting more than 30.
User avatar
waltervl
Posts: 5148
Joined: Monday 28 January 2019 18:48
Target OS: Linux
Domoticz version: 2024.7
Location: NL
Contact:

Re: switch turn on off at temperature

Post by waltervl »

For debugging it is best to use log statements to see if values are as you expect them to be.,
Second please post scripts into code tags, makes it much more readable.
Third, make sure you identify your devices correctly.

You use 'Woonkamer keuken' and 'Keuken'. Keuken will never be triggerd as the triggering device is 'Woonkamer keuken'.
if you want switch or get data from a device that is not used as a trigger then use eg domoticz.devices('Name of Device').switchOn() or domoticz.devices('Name of Device').temperature

Also when mixed triggers (devices and timer) you have to check what is triggered with Roomswitch.IsTimer or Roomswitch.IsDevice.

I do not understand your question regarding Groups. Do you mean Domoticz groups or your heating system groups? And what kind of devices are those in domoticz?
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
anno
Posts: 36
Joined: Wednesday 01 March 2017 13:00
Target OS: Windows
Domoticz version: all
Contact:

Re: switch turn on off at temperature

Post by anno »

Code: Select all

return
{
	on = {

		-- device triggers
		devices = {
			-- scripts is executed if the device that was updated matches with one of these triggers
			'Woonkamer keuken', -- device name
--			'abc*', -- triggers for all devices which name begins with abc

		},

		-- timer riggers
		timer = {
			-- timer triggers.. if one matches with the current time then the script is executed
			'every minute',

			function(domoticz)
				-- return true or false
			end
		},
    execute = function(domoticz, roomSwitch.IsTimer)
--		if (triggerdItem.active) then -- state == 'On'
--			triggerdItem.switchOff().afterMin(2) -- if it is a switch
        if (domoticz.devices('KeukenTM').temperature > 24.8)) then
        domoitcz.devices.switchOff()--.afterMin(2)
        elseif (domoticz.devices('KeukenTM').temperature < 24.5)) then
        domoticz.devices.switchOn()--.afterMin(2)
        end
end
}
or

Code: Select all

return
{
	on = {

		-- device triggers
--		devices = {
			-- scripts is executed if the device that was updated matches with one of these triggers
--			'Woonkamer keuken', -- device name
--			'abc*', -- triggers for all devices which name begins with abc

--		},

		-- timer riggers
		timer = {
			-- timer triggers.. if one matches with the current time then the script is executed
			'every minute',

			function(domoticz)
				-- return true or false
			end
		},
    execute = function(domoticz, roomSwitch.IsTimer)
--		if (triggerdItem.active) then -- state == 'On'
--			triggerdItem.switchOff().afterMin(2) -- if it is a switch
        if (domoticz.devices('KeukenTM').temperature > 24.8)) then
        domoitcz.devices('Woonkamer keuken').switchOff()--.afterMin(2)
        elseif (domoticz.devices('KeukenTM').temperature < 24.5)) then
        domoticz.devices('Woonkamer keuken').switchOn()--.afterMin(2)
        end
end
}
heating system groups
long time domiticz user, running 8 domoticz installations on vm's nuc i3. And espeay hosting more than 30.
User avatar
waltervl
Posts: 5148
Joined: Monday 28 January 2019 18:48
Target OS: Linux
Domoticz version: 2024.7
Location: NL
Contact:

Re: switch turn on off at temperature

Post by waltervl »

the following part can be deleted from the script.

Code: Select all

			function(domoticz)
				-- return true or false
			end
And please start simple and use the script examples in the documentation https://www.domoticz.com/wiki/DzVents:_ ... r_examples
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
anno
Posts: 36
Joined: Wednesday 01 March 2017 13:00
Target OS: Windows
Domoticz version: all
Contact:

Re: switch turn on off at temperature

Post by anno »

waltervl wrote: Wednesday 01 February 2023 10:58 the following part can be deleted from the script.

Code: Select all

			function(domoticz)
				-- return true or false
			end
And please start simple and use the script examples in the documentation https://www.domoticz.com/wiki/DzVents:_ ... r_examples
Of course i already did that, not working, so i did seashed more and more, still nothing is working.....

I know i do something wrong, i don't know what and i can't find it.

Code: Select all

return
{
    on =
    {
        devices = { 'Woonkamer keuken'}
    },

    execute = function(domoticz, roomSwitch)
        if (roomSwitch.active and domoticz.devices('KeukenTM').temperature < 24.8) then
        domoticz.devices('AWWoonkamer keuken').switchOn()
        domoticz.notify('This rocks!',
                        'Turns out that it is getting warm here',
                        domoticz.PRIORITY_LOW)
        end
end
}
long time domiticz user, running 8 domoticz installations on vm's nuc i3. And espeay hosting more than 30.
FlyingDomotic
Posts: 303
Joined: Saturday 27 February 2016 0:30
Target OS: Raspberry Pi / ODroid
Domoticz version: 2020.2
Contact:

Re: switch turn on off at temperature

Post by FlyingDomotic »

Try it the opposite way : check temperature change and switch on or off depending on temperature (if I correctly understood the question).
Fredom
Posts: 140
Joined: Saturday 19 September 2020 21:02
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Krimpen aan den IJssel
Contact:

Re: switch turn on off at temperature

Post by Fredom »

anno wrote: Wednesday 01 February 2023 15:31
waltervl wrote: Wednesday 01 February 2023 10:58 the following part can be deleted from the script.

Code: Select all

			function(domoticz)
				-- return true or false
			end
And please start simple and use the script examples in the documentation https://www.domoticz.com/wiki/DzVents:_ ... r_examples
Of course i already did that, not working, so i did seashed more and more, still nothing is working.....

I know i do something wrong, i don't know what and i can't find it.

Code: Select all

return
{
    on =
    {
        devices = { 'Woonkamer keuken'}
    },

    execute = function(domoticz, roomSwitch)
        if (roomSwitch.active and domoticz.devices('KeukenTM').temperature < 24.8) then
        domoticz.devices('AWWoonkamer keuken').switchOn()
        domoticz.notify('This rocks!',
                        'Turns out that it is getting warm here',
                        domoticz.PRIORITY_LOW)
        end
end
}
Hi Anno,
I use the script below. With some adjustments according to your own needs.

Code: Select all

return
{
    on =
    {
        devices =
        {
            'Humidity Garagekamer'    --https://www.techpunt.nl/nl/xiaomi-aqara-temperatuur-en-vochtigheidssensor.html
        }
    },

    logging =
    {
        level  = domoticz.LOG_DEBUG,
        marker = 'Ventilator wasdroger',
    },

    execute   = function(dz, device)
    local fan = dz.devices('Ventilator wasdroger')  -- 

        if ( device.temperature < 25 or device.humidity < 73 ) and fan.state == 'On' then
            fan.switchOff().silent().repeatAfterSec(1, 2)
        elseif ( device.temperature >= 25 or device.humidity >= 73 )  and  fan.state == 'Off' then
            fan.switchOn()
        end
    end
}

Yours sincerely,
Fred

Rasberry Pi 3B+ - Debian Buster - Domoticz 2022.2
RFLink - RFXCom - Zigbee (CC2531)
P1 Smart Meter - KaKu
anno
Posts: 36
Joined: Wednesday 01 March 2017 13:00
Target OS: Windows
Domoticz version: all
Contact:

Re: switch turn on off at temperature

Post by anno »

Fredom wrote: Wednesday 01 February 2023 20:50
anno wrote: Wednesday 01 February 2023 15:31
waltervl wrote: Wednesday 01 February 2023 10:58 the following part can be deleted from the script.

Code: Select all

			function(domoticz)
				-- return true or false
			end
And please start simple and use the script examples in the documentation https://www.domoticz.com/wiki/DzVents:_ ... r_examples
Of course i already did that, not working, so i did seashed more and more, still nothing is working.....

I know i do something wrong, i don't know what and i can't find it.

Code: Select all

return
{
    on =
    {
        devices = { 'Woonkamer keuken'}
    },

    execute = function(domoticz, roomSwitch)
        if (roomSwitch.active and domoticz.devices('KeukenTM').temperature < 24.8) then
        domoticz.devices('AWWoonkamer keuken').switchOn()
        domoticz.notify('This rocks!',
                        'Turns out that it is getting warm here',
                        domoticz.PRIORITY_LOW)
        end
end
}
Hi Anno,
I use the script below. With some adjustments according to your own needs.

Code: Select all

return
{
    on =
    {
        devices =
        {
            'Humidity Garagekamer'    --https://www.techpunt.nl/nl/xiaomi-aqara-temperatuur-en-vochtigheidssensor.html
        }
    },

    logging =
    {
        level  = domoticz.LOG_DEBUG,
        marker = 'Ventilator wasdroger',
    },

    execute   = function(dz, device)
    local fan = dz.devices('Ventilator wasdroger')  -- 

        if ( device.temperature < 25 or device.humidity < 73 ) and fan.state == 'On' then
            fan.switchOff().silent().repeatAfterSec(1, 2)
        elseif ( device.temperature >= 25 or device.humidity >= 73 )  and  fan.state == 'Off' then
            fan.switchOn()
        end
    end
}

Yes, thanks, this did work,

Code: Select all

return
{
    on =
    {
        devices =
        {
            'KeukenTM'    
        }
    },

    logging =
    {
        level  = domoticz.LOG_DEBUG,
        marker = 'Woonkamer keuken',
    },

    execute   = function(dz, device)
    local verdeler = dz.devices('Woonkamer keuken')  -- 

        if ( device.temperature > 24.8 ) and verdeler.state == 'On' then
            verdeler.switchOff().silent().repeatAfterSec(1, 2)
        elseif ( device.temperature < 24.5 )  and  verdeler.state == 'Off' then
            verdeler.switchOn()
        end
    end
}
I need to ask, why does you laundry dryer has a ventilator?

i think i can do a little more/better myself.

Code: Select all

--------------------------------------------------------------------------------------------------------------------------------
-- assumptions:
-- the setpoint is set by a dummy device (not a selector type)

local WP_SWITCH = 'Voorkamer zuid' -- switch device
local TEMP_SETPOINT = 'Thermostaat voorkamer zuid' -- selector dummy device
local TEMP_SENSOR_1 = 'Voorkamer zuidTM'
local BAT_THRESHOLD = 30
local LOGGING = true

return
{
    on =
    {
        timer =
        {
            'every minute',
        },
    },

    --LOG levell: This is the log level you want for this script. Can be domoticz.LOG_INFO, domoticz.LOG_MODULE_EXEC_INFO, domoticz.LOG_DEBUG or domoticz.LOG_ERROR
    --marker: A string that is prefixed before each log message. That way you can easily create a filter in the Domoticz log to see just these messages.
    logging =
    {
        level = LOGGING and domoticz.LOG_DEBUG or domoticz.LOG_ERROR,
        --level = LOGGING and domoticz.LOG_ERROR,
        marker = 'dzVents voorkamer zuid',
    },

    execute = function(dz)

        -- collect all input data
        local verdeler_switch_state = dz.devices(WP_SWITCH).state
        local temp_1 = dz.devices(TEMP_SENSOR_1).temperature
        local setpointValue = dz.devices(TEMP_SETPOINT).setPoint

        -- info only on log level = LOG_DEBUG
        dz.log('WP_SWITCH : ' .. verdeler_switch_state, dz.LOG_DEBUG)
        dz.log('Temp_1 : ' .. temp_1, dz.LOG_DEBUG)
        dz.log('Setpoint_value : ' .. setpointValue, dz.LOG_DEBUG)

        -- now determine what to do
        if (temp_1 >= setpointValue) then
            dz.devices(WP_SWITCH).switchOff().silent()
            dz.log('Target temperature reached, boiler off')
        elseif (temp_1 <= (setpointValue -1)) then
            dz.log('Average temperature more than 1 degree below setpointValue, switchOn during 10 minutes')
            dz.devices(WP_SWITCH).switchOn().silent()
            dz.devices(WP_SWITCH).switchOff().silent().afterMin(2)
        elseif (temp_1 > (setpointValue -1)) then
            dz.log('Average temperature less than 1 degree below setpointValue, switchOn during 5 minutes')
            dz.devices(WP_SWITCH).switchOn().silent()
            dz.devices(WP_SWITCH).switchOff().silent().afterMin(1)
        end

    end
}
Dzvents is really difficult to understand. Did find above code on the forum here, and did some modifications.
long time domiticz user, running 8 domoticz installations on vm's nuc i3. And espeay hosting more than 30.
Fredom
Posts: 140
Joined: Saturday 19 September 2020 21:02
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Krimpen aan den IJssel
Contact:

Re: switch turn on off at temperature

Post by Fredom »

anno wrote: Wednesday 01 February 2023 15:31
waltervl wrote: Wednesday 01 February 2023 10:58 the following part can be deleted from the script.

Code: Select all

			function(domoticz)
				-- return true or false
			end
And please start simple and use the script examples in the documentation https://www.domoticz.com/wiki/DzVents:_ ... r_examples
Of course i already did that, not working, so i did seashed more and more, still nothing is working.....

I know i do something wrong, i don't know what and i can't find it.

Code: Select all

return
{
    on =
    {
        devices = { 'Woonkamer keuken'}
    },

    execute = function(domoticz, roomSwitch)
        if (roomSwitch.active and domoticz.devices('KeukenTM').temperature < 24.8) then
        domoticz.devices('AWWoonkamer keuken').switchOn()
        domoticz.notify('This rocks!',
                        'Turns out that it is getting warm here',
                        domoticz.PRIORITY_LOW)
        end
end
}
Hi Anno,
It's not my dryer but in the room where it is.
Glad it works now
Yours sincerely,
Fred

Rasberry Pi 3B+ - Debian Buster - Domoticz 2022.2
RFLink - RFXCom - Zigbee (CC2531)
P1 Smart Meter - KaKu
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest