This excellent post presents a basement dehumidifying solution using ventilators. In my case forced ventilation was not an option so I’ve opted for a dehumidifier. My main objective is to avoid that walls, furniture and equipments suffer from humidity excess. Here are some characteristics of my project:
- The basement has ~60m2 and is under the garage. It is used basically as a gaming / entertainment room
- The dehumidifier has no wifi and no pump. I need to be alerted when its water tank is full
- I have photovoltaic panels so dehumidifier activity is preferred during the day
- Dehumidifier is noisy so it should stop when basement is being used
Required equipment:
- Wireless technology (I have wifi and zigbee in the basement)
- Dumb dehumidifier (in one corner of the room)
- Humidity sensor (in the opposite corner)
- Smart plug with energy control (in my case a Tapo P110)
- Smart lights (in my case basement lights are controlled with a Shelly1)
I have used this logic:
- The system decides when to switch the dehumidifier on/off based of ambient humidity, and in order to detect that the water tank is full it measures its power consumption. This is tricky because dehumidification may pause momentarily during the dehumidification cycle. Therefore I consider that the water tank is full only after 15 consecutive minutes of no dehumidification
- When a “water tank full” condition is detected an alarm is sent (via Telegram), the dehumidifier plug is switched off, and future dehumidification cycles are disabled
- When basement lights are on the dehumidifier is switched off. And when they are switched off I assume that the water tank has been emptied so dehumidification cycles are resumed
This logic is implemented with the following rules:
Start dehumidification cycle with high humidity
configuration: {}
triggers:
- id: "1"
configuration:
itemName: Sensorhumidadeetemperaturacave_Humidity
type: core.ItemStateChangeTrigger
- id: "7"
configuration:
itemName: AN_Cellar_Light
state: OFF
previousState: ON
type: core.ItemStateChangeTrigger
conditions:
- inputs: {}
id: "3"
configuration:
itemName: P110SmartPlug_OutputSwitch
state: ON
operator: "!="
type: core.ItemStateCondition
- inputs: {}
id: "4"
configuration:
itemName: Sensorhumidadeetemperaturacave_Humidity
state: 70
operator: ">"
type: core.ItemStateCondition
- inputs: {}
id: "5"
configuration:
itemName: Sun_Elevation
state: 5 °
operator: ">"
type: core.ItemStateCondition
- inputs: {}
id: "6"
configuration:
itemName: AN_Cellar_Light
state: ON
operator: "!="
type: core.ItemStateCondition
- inputs: {}
id: "8"
configuration:
itemName: Cellar_Dehumidifier_State
state: ON
operator: =
type: core.ItemStateCondition
actions:
- inputs: {}
id: "2"
configuration:
command: ON
itemName: P110SmartPlug_OutputSwitch
type: core.ItemCommandAction
Stop dehumidification cycle when lights are on
configuration: {}
triggers:
- id: "1"
configuration:
itemName: AN_Cellar_Light
state: ON
type: core.ItemStateChangeTrigger
conditions:
- inputs: {}
id: "3"
configuration:
itemName: P110SmartPlug_OutputSwitch
state: OFF
operator: "!="
type: core.ItemStateCondition
actions:
- inputs: {}
id: "2"
configuration:
command: OFF
itemName: P110SmartPlug_OutputSwitch
type: core.ItemCommandAction
Stop dehumidification with low humidity
configuration: {}
triggers:
- id: "1"
configuration:
itemName: Sensorhumidadeetemperaturacave_Humidity
type: core.ItemStateChangeTrigger
conditions:
- inputs: {}
id: "3"
configuration:
itemName: P110SmartPlug_OutputSwitch
state: OFF
operator: "!="
type: core.ItemStateCondition
- inputs: {}
id: "4"
configuration:
itemName: Sensorhumidadeetemperaturacave_Humidity
state: 65
operator: <
type: core.ItemStateCondition
actions:
- inputs: {}
id: "2"
configuration:
command: OFF
itemName: P110SmartPlug_OutputSwitch
type: core.ItemCommandAction
Detect that dehumidification has been paused
configuration: {}
triggers:
- id: "1"
configuration:
itemName: P110SmartPlug_Power
type: core.ItemStateChangeTrigger
conditions:
- inputs: {}
id: "2"
configuration:
itemName: P110SmartPlug_Power
state: 50 W
operator: <
type: core.ItemStateCondition
- inputs: {}
id: "3"
configuration:
itemName: P110SmartPlug_Power
state: 40 W
operator: ">"
type: core.ItemStateCondition
actions:
- inputs: {}
id: "4"
configuration:
itemName: Cellar_Dehumidifier_Timer
command: ON
type: core.ItemCommandAction
Water tank full - Stop dehumidifier and notify me
configuration: {}
triggers:
- id: "1"
configuration:
command: OFF
itemName: Cellar_Dehumidifier_Timer
type: core.ItemCommandTrigger
conditions:
- inputs: {}
id: "2"
configuration:
itemName: P110SmartPlug_Power
state: 50 W
operator: <
type: core.ItemStateCondition
- inputs: {}
id: "3"
configuration:
itemName: P110SmartPlug_Power
state: 40 W
operator: ">"
type: core.ItemStateCondition
actions:
- inputs: {}
id: "4"
configuration:
itemName: P110SmartPlug_OutputSwitch
command: OFF
type: core.ItemCommandAction
- inputs: {}
id: "5"
configuration:
itemName: Cellar_Dehumidifier_State
command: OFF
type: core.ItemCommandAction
- inputs: {}
id: "6"
configuration:
itemName: aAlert
command: É necessário despejar o balde do desumidificador da cave
type: core.ItemCommandAction
-
Cellar_Dehumidifier_Timer
is a switch item that expires after 15 minutes. This value should be higher than the “normal pause” of the dehumidifier -
Cellar_Dehumidifier_State
is a switch item (OFF when water tank is full, ON otherwise) -
aAlert
is a string item linked to a message channel (see below)
My dehumidifier uses 45W for ventilation and 240W for dehumidifying. It’s regulated for humidity target 40% and in such case “normal pauses” are ~8min
There are various methods to send alerts to mobiles, I use the http binding to send telegrams. Here is the thing (****** are coded using telegram binding instructions)
UID: http:url:d52db6a46a
label: $Telegram
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: https://api.telegram.org/bot****************
delay: 0
stateMethod: GET
refresh: 30
commandMethod: GET
contentType: text/plain
timeout: 3000
bufferSize: 2048
channels:
- id: message
channelTypeUID: http:string
label: Message
description: ""
configuration:
mode: WRITEONLY
commandExtension: /sendMessage?chat_id=********&text=%2$s