Lua script for controlling humidity in the bathroom Topic is solved
Moderator: leecollings
-
- Posts: 1355
- Joined: Friday 29 August 2014 11:26
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Location: Ermelo
- Contact:
Re: Lua script for controlling humidity in the bathroom
Did you create all the necessary user variables correctly as stated in the wiki? Without that it will not work.
Creator dzVents - RPi3, loads of zwave devices, esp8266, evohome.
Re: Lua script for controlling humidity in the bathroom
Copy pasted all the user variables an now it works
-
- Posts: 230
- Joined: Sunday 14 July 2013 20:21
- Target OS: Linux
- Domoticz version: 4.10233
- Location: Alkmaar, The Netherlands
- Contact:
Re: Lua script for controlling humidity in the bathroom
Ive edited the script in the wiki with a PRINT_MODE variable.
When set to true it wil print out the data to the log as before.
When set to fals it will stop to print data to the log and stop sending notifications.
When set to true it wil print out the data to the log as before.
When set to fals it will stop to print data to the log and stop sending notifications.
-
- Posts: 1
- Joined: Thursday 25 June 2015 20:20
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Lua script for controlling humidity in the bathroom
cant get a sensor reading with the lua script
sensor= Alecto WS1700
105 RFXCOM AB02 2 Badkamer Temp + Humidity Alecto WS1700 24.9 C, 67 %
Tried to remove and add the sensor without succes. With other alecto ws1700 i have the same problem.
using the latest beta version on raspberry pi 2 with rfxcom
However in the #/Temperature page i can get all the readings of my temp/humidity sensors...2015-07-18 10:17:00.388 LUA: Fan control
2015-07-18 10:17:00.388 LUA: current is 0 or nil. Skipping this reading
sensor= Alecto WS1700
105 RFXCOM AB02 2 Badkamer Temp + Humidity Alecto WS1700 24.9 C, 67 %
Tried to remove and add the sensor without succes. With other alecto ws1700 i have the same problem.
using the latest beta version on raspberry pi 2 with rfxcom
-
- Posts: 4
- Joined: Tuesday 28 July 2015 15:48
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Location: Netherlands - Achterhoek
- Contact:
Re: Lua script for controlling humidity in the bathroom
Same error in my log file: LUA: current is 0 or nil. Skipping this reading.
The json statement for the hygrometer in my badroom http://192.168.1.29:8080/json.htm?type=devices&rid=459 gives the following output:
{
"ActTime" : 1439407102,
"ServerTime" : "Aug 12 2015 21:18:22",
"Sunrise" : "06:14:00",
"Sunset" : "21:04:00",
"result" : [
{
"BatteryLevel" : 100,
"CustomImage" : 0,
"Data" : "Humidity 72 %",
"Description" : "BS",
"Favorite" : 0,
"HardwareID" : 2,
"HardwareName" : "433 Transiever",
"HaveTimeout" : false,
"Humidity" : 72,
"HumidityStatus" : "Wet",
"ID" : "2300",
"LastUpdate" : "2015-08-12 21:18:05",
"Name" : "BS",
"Notifications" : "false",
"PlanID" : "0",
"Protected" : false,
"ShowNotifications" : true,
"SignalLevel" : 7,
"SubType" : "LaCrosse TX3",
"Timers" : "false",
"Type" : "Humidity",
"TypeImg" : "temperature",
"Unit" : 1,
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "459"
}
],
"status" : "OK",
"title" : "Devices"
}
If I use the dummy switch everyting works OK. Using an other hygrometer (from my Aquarium) works also OK.
The json statement for the hygrometer in my badroom http://192.168.1.29:8080/json.htm?type=devices&rid=459 gives the following output:
{
"ActTime" : 1439407102,
"ServerTime" : "Aug 12 2015 21:18:22",
"Sunrise" : "06:14:00",
"Sunset" : "21:04:00",
"result" : [
{
"BatteryLevel" : 100,
"CustomImage" : 0,
"Data" : "Humidity 72 %",
"Description" : "BS",
"Favorite" : 0,
"HardwareID" : 2,
"HardwareName" : "433 Transiever",
"HaveTimeout" : false,
"Humidity" : 72,
"HumidityStatus" : "Wet",
"ID" : "2300",
"LastUpdate" : "2015-08-12 21:18:05",
"Name" : "BS",
"Notifications" : "false",
"PlanID" : "0",
"Protected" : false,
"ShowNotifications" : true,
"SignalLevel" : 7,
"SubType" : "LaCrosse TX3",
"Timers" : "false",
"Type" : "Humidity",
"TypeImg" : "temperature",
"Unit" : 1,
"Used" : 1,
"XOffset" : "0",
"YOffset" : "0",
"idx" : "459"
}
],
"status" : "OK",
"title" : "Devices"
}
If I use the dummy switch everyting works OK. Using an other hygrometer (from my Aquarium) works also OK.
Last edited by ReneSalden on Wednesday 12 August 2015 23:29, edited 1 time in total.
RPI with beta Domoticz - RFXtrx433E with Kaku/Imagitronix/La Crosse/Flamingo - OpenZWave USB with Remotec ZXT-120 - OpenthermGW - Philips HUE - Kodi - P1
-
- Posts: 230
- Joined: Sunday 14 July 2013 20:21
- Target OS: Linux
- Domoticz version: 4.10233
- Location: Alkmaar, The Netherlands
- Contact:
Re: Lua script for controlling humidity in the bathroom
Please try turning off/on blockly/Lua in the settings. This fixed things for me
-
- Posts: 4
- Joined: Tuesday 28 July 2015 15:48
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Location: Netherlands - Achterhoek
- Contact:
Re: Lua script for controlling humidity in the bathroom
I was very skeptical about the tip from Skippiemanz but it solved my problem......
RPI with beta Domoticz - RFXtrx433E with Kaku/Imagitronix/La Crosse/Flamingo - OpenZWave USB with Remotec ZXT-120 - OpenthermGW - Philips HUE - Kodi - P1
-
- Posts: 1355
- Joined: Friday 29 August 2014 11:26
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Location: Ermelo
- Contact:
Re: Lua script for controlling humidity in the bathroom
Ah, great that it works for you. I am using this script for a long time now without any problems.
Creator dzVents - RPi3, loads of zwave devices, esp8266, evohome.
-
- Posts: 890
- Joined: Tuesday 30 September 2014 8:49
- Target OS: Linux
- Domoticz version: beta
- Location: The Netherlands
- Contact:
Re: Lua script for controlling humidity in the bathroom
Does this script need a sensor that only contains humidity? Or will it also work with a sensor that has both temperature and humidity (which most of the sensors have)
I am not active on this forum anymore.
-
- Posts: 228
- Joined: Thursday 21 May 2015 9:08
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: Lua script for controlling humidity in the bathroom
Also thought about it to make the ventilation smart.
But since my goal is to reduce energy. I think this will only crank the energy bill up.
But since my goal is to reduce energy. I think this will only crank the energy bill up.
- bizziebis
- Posts: 182
- Joined: Saturday 19 October 2013 14:00
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 3.8805
- Location: The Netherlands
- Contact:
Re: Lua script for controlling humidity in the bathroom
It works fine with combined sensors. It's possible the script needs a small adjustment, at least in my case. I can add it to the wiki when I'm sure it doesn't break anything.ThinkPad wrote:Does this script need a sensor that only contains humidity? Or will it also work with a sensor that has both temperature and humidity (which most of the sensors have)
-
- Posts: 890
- Joined: Tuesday 30 September 2014 8:49
- Target OS: Linux
- Domoticz version: beta
- Location: The Netherlands
- Contact:
Re: Lua script for controlling humidity in the bathroom
When your bathroom starts looking like this: http://www.diydoctor.org.uk/project_ima ... -walls.jpg i think you will be sorry that you don't have a script like thisJustintime wrote:Also thought about it to make the ventilation smart.
But since my goal is to reduce energy. I think this will only crank the energy bill up.
OK, good to know. Scraping only the temperature from a combined sensor isn't that hard either. Something like this: http://domoticz.com/forum/viewtopic.php ... 869#p25878 will do fine (with the addition to write it to a virtual temperature sensor). I am not going to use the script from dannybloe myself, but was interested in how it works.bizziebis wrote:It works fine with combined sensors. It's possible the script needs a small adjustment, at least in my case. I can add it to the wiki when I'm sure it doesn't break anything.ThinkPad wrote:Does this script need a sensor that only contains humidity? Or will it also work with a sensor that has both temperature and humidity (which most of the sensors have)
I am not active on this forum anymore.
-
- Posts: 228
- Joined: Thursday 21 May 2015 9:08
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: Lua script for controlling humidity in the bathroom
LOL that's extreme mold... Good environment for mushrooms.ThinkPad wrote:When your bathroom starts looking like this: http://www.diydoctor.org.uk/project_ima ... -walls.jpg i think you will be sorry that you don't have a script like thisJustintime wrote:Also thought about it to make the ventilation smart.
But since my goal is to reduce energy. I think this will only crank the energy bill up.OK, good to know. Scraping only the temperature from a combined sensor isn't that hard either. Something like this: http://domoticz.com/forum/viewtopic.php ... 869#p25878 will do fine (with the addition to write it to a virtual temperature sensor). I am not going to use the script from dannybloe myself, but was interested in how it works.bizziebis wrote:It works fine with combined sensors. It's possible the script needs a small adjustment, at least in my case. I can add it to the wiki when I'm sure it doesn't break anything.ThinkPad wrote:Does this script need a sensor that only contains humidity? Or will it also work with a sensor that has both temperature and humidity (which most of the sensors have)
I have some timers running on the ventilation. Works fine...
But always nice to see those fully automated scripts... Though
-
- Posts: 1355
- Joined: Friday 29 August 2014 11:26
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Location: Ermelo
- Contact:
Re: Lua script for controlling humidity in the bathroom
Well, I have a combined sensor myself and it works like a charm. Afaikbizziebis wrote:It works fine with combined sensors. It's possible the script needs a small adjustment, at least in my case. I can add it to the wiki when I'm sure it doesn't break anything.ThinkPad wrote:Does this script need a sensor that only contains humidity? Or will it also work with a sensor that has both temperature and humidity (which most of the sensors have)
Code: Select all
otherdevices_humidity[SENSOR_NAME]
Creator dzVents - RPi3, loads of zwave devices, esp8266, evohome.
-
- Posts: 139
- Joined: Thursday 19 February 2015 21:48
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Lua script for controlling humidity in the bathroom
I based my script on the script in the wiki, the difference is that I want 2 trip levels for humidity change, one for when someone takes a bath and one for the shower.
I have a 3 stage fanbox for my central exhaust system (always running on 1st stage) plus one additional build in pipe fan inside the chanel to the bathroom (because that used to stay moist with the normal fan or my kitchen exhaust flow was to low to get rid of all smells)
when someone takes a bath I only want to start the fanbox at stage 3, but when a shower also needs to trigger the additional fan.
this is where I ended up with, and is working fine for a few months now
I have a 3 stage fanbox for my central exhaust system (always running on 1st stage) plus one additional build in pipe fan inside the chanel to the bathroom (because that used to stay moist with the normal fan or my kitchen exhaust flow was to low to get rid of all smells)
when someone takes a bath I only want to start the fanbox at stage 3, but when a shower also needs to trigger the additional fan.
this is where I ended up with, and is working fine for a few months now
Code: Select all
commandArray = {}
-- declare some constants
-- adjust to your specific situation
SAMPLE_INTERVAL = 5 -- time in minutes when a the script logic will happen
FAN_DELTA_TRIGGER = 3 -- rise in humidity needed for a bath that will trigger the fan
FAN_DELTA_TRIGGER2 = 6 -- rise in humidity needed for a shower that will trigger the fan
FAN_MAX_TIME = 20 -- maximum amount of sample cycles the fan can be on,
-- in case we never reach the target humidity
TARGET_OFFSET = 2 -- ventilator goes off if target+offset is reached
FAN_NAME = 'Ventilator 2' -- exact device name of the switch turning on/off the ventilator 2 (itho fan box stand 2)
FAN_NAME2 = 'Ventilator 3' -- exact device name of the switch turning on/off the ventilator 3 (itho fan box stand 3)
FAN_NAME3 = 'Ventilator 4' -- exact device name of the switch turning on/off the ventilator 4 (additional bathroom fan)
SENSOR_NAME = 'Badkamer' -- exact device name of the humidity sensor
TEST_MODE = false -- when true TEST_MODE_HUMVAR is used instead of the real sensor
TEST_MODE_HUMVAR = 'testHumidity' -- fake humidity value, give it a test value in domoticz/uservars
PRINT_MODE = false -- when true wil print output to log and send notifications
if PRINT_MODE == true then
print('Fan control')
end
-- get the global variables:
-- this script runs every minute, humCounter is used to create SAMPLE_INTERVAL periods
humCounter = tonumber(uservariables['humCounter'])
humidityTmin5 = tonumber(uservariables['humidityTmin5']) -- youngest reading
humidityTmin10 = tonumber(uservariables['humidityTmin10']) -- oldest reading
targetFanOffHumidity = tonumber(uservariables['targetFanOffHumidity']) -- target humidity
fanMaxTimer = tonumber(uservariables['fanMaxTimer'])
fanFollowsProgram = tonumber(uservariables['fanFollowsProgram']) -- marker indicating that the programm is runing for a bath
fan3FollowsProgram = tonumber(uservariables['fan3FollowsProgram']) -- marker indicating that the programm is runing for a shower
target = 0 -- will hold the target humidity when the program starts
-- get the current humidity value
if (TEST_MODE) then
current = tonumber(uservariables[TEST_MODE_HUMVAR])
else
current = otherdevices_humidity[SENSOR_NAME]
end
-- check if the sensor is on or has some weird reading
if (current == 0 or current == nil) then
print('current is 0 or nil. Skipping this reading')
return commandArray
end
if PRINT_MODE == true then
print('Current humidity:' .. current)
print('targetFanOffHumidity:' .. targetFanOffHumidity)
print('humidityTmin5: ' .. humidityTmin5)
print('humidityTmin10: ' .. humidityTmin10)
print('fanMaxTimer: ' .. fanMaxTimer)
print('humCounter:' .. humCounter)
print('fanFollowsProgram:' .. fanFollowsProgram)
print('fan3FollowsProgram:' .. fan3FollowsProgram)
end
-- increase cycle counter
humCounter = humCounter + 1
if (humCounter >= SAMPLE_INTERVAL) then
if (humidityTmin5 == 0) then
-- initialization, assume this is the first time
humidityTmin5 = current
humidityTmin10 = current
end
humCounter = 0 -- reset the cycle counter
-- pick the lowest history value to calculate the delta
-- this also makes sure that two relative small deltas in the past 2*interval minutes are treated as one larger rise
-- and therefore will still trigger the ventilator
-- I don't want to use a longer interval instead because I want the ventilator to start as soon as possible
-- (so rather after 5 minutes instead of after 15 minutes because the mirrors in the bathroom become kinda useless ;-)
delta = current - math.min(humidityTmin10, humidityTmin5)
if PRINT_MODE == true then
print('Delta: ' .. delta)
end
-- pick the lowest history value
target = math.min(humidityTmin10, humidityTmin5) + TARGET_OFFSET
-- shift the previous measurements
humidityTmin10 = humidityTmin5
-- and store the current
humidityTmin5 = current
if (otherdevices[FAN_NAME]=='Off' or (otherdevices[FAN_NAME]=='On' and fanFollowsProgram==0)) then
-- either the fan is off or it is on but the decrease program has not started
-- in that latter case we start the program anyway. This could happen if someone turns on the ventilator
-- manually because he/she is about to take a shower and doesn't like damp mirrors.
-- I don't do this because the ventilator removes heat from the bathroom and I want this to happen
-- as late as possible ;-)
if (fanFollowsProgram == 1 and otherdevices[FAN_NAME]=='Off') then
-- likely someone turned off the ventilator while the program was running
fanFollowsProgram = 0
end
-- see if we have to turn it on for the shower
if (delta >= FAN_DELTA_TRIGGER2) then
-- time to start the extra fan
commandArray[FAN_NAME] = 'On'
commandArray[FAN_NAME2] = 'On'
commandArray[FAN_NAME3] = 'On'
targetFanOffHumidity = target
fanFollowsProgram = 1
fan3FollowsProgram = 1
-- set the safety stop
fanMaxTimer = FAN_MAX_TIME
if PRINT_MODE == true then
print('Large rise in humidity. Turning on the exra vent. Delta: ' .. delta)
print('Target humidity for turning the ventilator: ' ..targetFanOffHumidity)
commandArray['SendNotification'] = 'Ventilator is on#The extra ventilator was activated at humidity level ' .. current .. '#0'
end
end
-- see if we have to turn it on for the bath
if (delta >= FAN_DELTA_TRIGGER) then
-- time to start the fan
commandArray[FAN_NAME] = 'On'
commandArray[FAN_NAME2] = 'On'
targetFanOffHumidity = target
fanFollowsProgram = 1
-- set the safety stop
fanMaxTimer = FAN_MAX_TIME
if PRINT_MODE == true then
print('Rise in humidity. Turning on the vents. Delta: ' .. delta)
print('Target humidity for turning the ventilator: ' ..targetFanOffHumidity)
commandArray['SendNotification'] = 'Ventilator is on#The ventilator was activated at humidity level ' .. current .. '#0'
end
end
else
if (fanMaxTimer > 0) then
-- possible that someone started the ventialator manually
fanMaxTimer = fanMaxTimer - 1
end
if (fanFollowsProgram == 1) then -- not manually started
if (delta >= FAN_DELTA_TRIGGER) then
-- ok, there is another FAN_DELTA_TRIGGER rise in humidity
-- when this happen we reset the fanMaxTimer to a new count down
-- because we have to ventilate a bit longer due to the extra humidity
if PRINT_MODE == true then
print('Another large increase detected, resetting max timer. Delta: ' .. delta)
end
fanMaxTimer = FAN_MAX_TIME
end
-- first see if it can be turned off
if (current <= targetFanOffHumidity or fanMaxTimer==0) then
commandArray[FAN_NAME] = 'Off'
commandArray[FAN_NAME2] = 'Off'
commandArray[FAN_NAME3] = 'Off'
msg = ''
if (fanMaxTimer == 0 and current > targetFanOffHumidity) then
msg = 'Target not reached but safety time-out is triggered.'
if PRINT_MODE == true then
print(msg)
end
else
msg = 'Target humidity reached'
if PRINT_MODE == true then
print(msg)
end
end
if PRINT_MODE == true then
print('Turning off the ventilator')
msg = msg .. '\nTurning off the ventilator'
end
targetFanOffHumidity = 0
fanMaxTimer = 0
fanFollowsProgram = 0
fan3FollowsProgram = 0
-- reset history in this case.. we start all over
-- Tmin10 is still in the 'ventilator=On'-zone
humidityTmin10 = humidityTmin5
if PRINT_MODE == true then
commandArray['SendNotification'] = 'Ventilator is off#' .. msg .. '#0'
end
else
-- we haven't reached the target yet
if PRINT_MODE == true then
print('Humidity delta: ' .. delta)
end
end
end
end
if PRINT_MODE == true then
print('New values >>>>>>>>>>>')
print('humidityTmin5: ' .. humidityTmin5)
print('humidityTmin10: ' .. humidityTmin10)
print('fanMaxTimer: ' .. fanMaxTimer)
print('humCounter:' .. humCounter)
print('fanFollowsProgram:' .. fanFollowsProgram)
print('fan3FollowsProgram:' .. fan3FollowsProgram)
print('------ target: ' .. targetFanOffHumidity)
end
end
-- save the globals
commandArray['Variable:humCounter'] = tostring(humCounter)
commandArray['Variable:humidityTmin10'] = tostring(humidityTmin10)
commandArray['Variable:humidityTmin5'] = tostring(humidityTmin5)
commandArray['Variable:targetFanOffHumidity'] = tostring(targetFanOffHumidity)
commandArray['Variable:fanMaxTimer'] = tostring(fanMaxTimer)
commandArray['Variable:fanFollowsProgram'] = tostring(fanFollowsProgram)
commandArray['Variable:fan3FollowsProgram'] = tostring(fan3FollowsProgram)
return commandArray
- bizziebis
- Posts: 182
- Joined: Saturday 19 October 2013 14:00
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 3.8805
- Location: The Netherlands
- Contact:
Re: Lua script for controlling humidity in the bathroom
Well, for me it worked also.. Until I changed to a slave domoticz for retrieving this temp+humidity sensor. After that I couldn't use that piece of code anymore. Looks like not all sensor types in Domoticz are behaving the same.dannybloe wrote:
Well, I have a combined sensor myself and it works like a charm. Afaiktakes care of this.Code: Select all
otherdevices_humidity[SENSOR_NAME]
-
- Posts: 890
- Joined: Tuesday 30 September 2014 8:49
- Target OS: Linux
- Domoticz version: beta
- Location: The Netherlands
- Contact:
Re: Lua script for controlling humidity in the bathroom
You could scrape the value from that slave sensor on the master Domoticz and put it into a virtual sensor (on the master Domoticz)? I guess it is then seen again by the script.
I am not active on this forum anymore.
-
- Posts: 10
- Joined: Tuesday 13 October 2015 10:04
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Lua script for controlling humidity in the bathroom
Hi,
I have a question about these 2 if statements
I'm not getting how the second if statement is working.
in my opinion when fanfollowsprogram = 1 and otherdevices[FAN_NAME]=='Off'
the first if statement is not true, so the second if statement never going to be executed.
But it does ?
Did i miss something?
I have a question about these 2 if statements
Code: Select all
if (otherdevices[FAN_NAME]=='Off' or (otherdevices[FAN_NAME]=='On' and fanFollowsProgram==0)) then
-- either the fan is off or it is on but the decrease program has not started
-- in that latter case we start the program anyway. This could happen if someone turns on the ventilator
-- manually because he/she is about to take a shower and doesn't like damp mirrors.
-- I don't do this because the ventilator removes heat from the bathroom and I want this to happen
-- as late as possible ;-)
if (fanFollowsProgram == 1 and otherdevices[FAN_NAME]=='Off') then
-- likely someone turned off the ventilator while the program was running
fanFollowsProgram = 0
end
in my opinion when fanfollowsprogram = 1 and otherdevices[FAN_NAME]=='Off'
the first if statement is not true, so the second if statement never going to be executed.
But it does ?
Did i miss something?
-
- Posts: 1355
- Joined: Friday 29 August 2014 11:26
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Location: Ermelo
- Contact:
Re: Lua script for controlling humidity in the bathroom
I believe you do . If the fan is off then you will always enter the first if-block (it's an OR statement). So when you enter it, the fanFollowsProgram could be set. This happens when someone turns off the ventilator while the dehumidify program is running. Then it will terminate the program by setting fanFollowsProgram to 0. End of the show.Cybertom wrote:Hi,
I have a question about these 2 if statementsI'm not getting how the second if statement is working.Code: Select all
if (otherdevices[FAN_NAME]=='Off' or (otherdevices[FAN_NAME]=='On' and fanFollowsProgram==0)) then -- either the fan is off or it is on but the decrease program has not started -- in that latter case we start the program anyway. This could happen if someone turns on the ventilator -- manually because he/she is about to take a shower and doesn't like damp mirrors. -- I don't do this because the ventilator removes heat from the bathroom and I want this to happen -- as late as possible ;-) if (fanFollowsProgram == 1 and otherdevices[FAN_NAME]=='Off') then -- likely someone turned off the ventilator while the program was running fanFollowsProgram = 0 end
in my opinion when fanfollowsprogram = 1 and otherdevices[FAN_NAME]=='Off'
the first if statement is not true, so the second if statement never going to be executed.
But it does ?
Did i miss something?
Creator dzVents - RPi3, loads of zwave devices, esp8266, evohome.
Who is online
Users browsing this forum: No registered users and 1 guest