So, I decided to buy a venta evaporative humidifier (AH550) which has wifi support. Unfortunately there is no homeassistant integration for this, so I needed to find a workaround solution with pyscript.
What to do to get there:
- download the venta home app to your smartphone (you need this to initially connect your humidifier to your wifi)
- create an account (sigh)
- in the app connect your humidifier to your wlan
- delete the account
- delete the venta home app
- in homeassistant install pyscript integration via hacs
- create a pyscript folder in your config
- create the necessary sensors input_booleans, input_numbers, input_selects in homeassistant
- restart homeassistant
- add a file "requirements.txt" in your pyscript folder
- add the text "venta_protocol_v3_device" in your requirements txt
- create a python file, I called mine "venta_humidifier.py"
- add the below code into the python file and voila all services and data available in local api can be used in homeassistant through automations
from venta_protocol_v3_device import Venta_Protocol_v3_Device
import json
@service
def venta_setfanspeed(myip=None,mytarget=None):
"""yaml
name: Sets the Fan Speed of the Venta device
description: Sets the Fan Speed of the Venta device
fields:
myip:
description: provide IP of venta humidifier
example: 192.168.40.108
required: true
mytarget:
description: provide fan speed between 1 and 3
example: 1
required: true
"""
d = Venta_Protocol_v3_Device(myip)
mytask = task.executor(d.setFanSpeed, target=mytarget)
@service
def venta_setautomatic(myip=None,mytarget=None):
"""yaml
name: Enables / disables the Automatic mode of the Venta device
description: Enables / disables the Automatic mode of the Venta device
fields:
myip:
description: provide IP of venta humidifier
example: 192.168.40.108
required: true
mytarget:
description: set if True or False
example: True
required: true
"""
d = Venta_Protocol_v3_Device(myip)
mytask = task.executor(d.setAutomatic, target=mytarget)
@service
def venta_setsleepmode(myip=None,mytarget=None):
"""yaml
name: Enables / disables the Sleep mode of the Venta device
description: Enables / disables the Sleep mode of the Venta device
fields:
myip:
description: provide IP of venta humidifier
example: 192.168.40.108
required: true
mytarget:
description: set if True or False
example: True
required: true
"""
d = Venta_Protocol_v3_Device(myip)
mytask = task.executor(d.setSleepMode, target=mytarget)
@service
def venta_setpower(myip=None,mytarget=None):
"""yaml
name: Enables / disables the the Venta device
description: Enables / disables the the Venta device
fields:
myip:
description: provide IP of venta humidifier
example: 192.168.40.108
required: true
mytarget:
description: set if True or False
example: True
required: true
"""
d = Venta_Protocol_v3_Device(myip)
mytask = task.executor(d.setPower, target=mytarget)
@service
def venta_settargethumidity(myip=None,mytarget=None):
"""yaml
name: Sets the target humidity of the Venta device
description: Sets the target humidity of the Venta device
fields:
myip:
description: provide IP of venta humidifier
example: 192.168.40.108
required: true
mytarget:
description: sets target humidity in 5% steps
example: 55
required: true
"""
d = Venta_Protocol_v3_Device(myip)
mytask = task.executor(d.setTargetHum, target=mytarget)
@service
def venta_getstatus(myip=None):
"""yaml
name: Contacts the Venta device and populates / updates the class properties
description: Contacts the Venta device and populates / updates the class properties
fields:
myip:
description: provide IP of venta humidifier
example: 192.168.40.108
required: true
"""
d = Venta_Protocol_v3_Device(myip)
mytask = task.executor(d.getStatus)
data= task.executor(d.toJSON)
x = json.loads(data)
service.call("input_number", "set_value", blocking=True, entity_id="input_number.venta_temperature", value=round(x['Temperature'],2))
service.call("input_number", "set_value", blocking=True, entity_id="input_number.venta_humidity", value=round(x['Humidity'],2))
service.call("input_number", "set_value", blocking=True, entity_id="input_number.venta_targethumidity", value=round(x['TargetHum'],0))
service.call("input_number", "set_value", blocking=True, entity_id="input_number.venta_daystoservice", value=round(x['DaysToService'],0))
if x['SleepMode'] == True:
service.call("input_boolean", "turn_on", blocking=True, entity_id="input_boolean.venta_sleepmode")
else:
service.call("input_boolean", "turn_off", blocking=True, entity_id="input_boolean.venta_sleepmode")
if x['Power'] == True:
service.call("input_boolean", "turn_on", blocking=True, entity_id="input_boolean.venta_power")
else:
service.call("input_boolean", "turn_off", blocking=True, entity_id="input_boolean.venta_power")
if x['Warnings'] == True:
service.call("input_boolean", "turn_on", blocking=True, entity_id="input_boolean.venta_lowwaterwarning")
else:
service.call("input_boolean", "turn_off", blocking=True, entity_id="input_boolean.venta_lowwaterwarning")
if x['Automatic'] == True:
service.call("input_boolean", "turn_on", blocking=True, entity_id="input_boolean.venta_automatic")
else:
service.call("input_boolean", "turn_off", blocking=True, entity_id="input_boolean.venta_automatic")
if x['FanSpeed'] == 1:
service.call("input_select", "select_option", blocking=True, entity_id="input_select.venta_fanspeed", option="low")
elif x['FanSpeed'] == 2:
service.call("input_select", "select_option", blocking=True, entity_id="input_select.venta_fanspeed", option="medium")
elif x['FanSpeed'] == 3:
service.call("input_select", "select_option", blocking=True, entity_id="input_select.venta_fanspeed", option="high")
or is it? those people working on that game pay taxes at home, being residents of russia, they send money to their families even while living abroad, their families buy products and pay those taxes again, and those taxes are used to fund what? killing us, Ukrainians.