Skip Navigation
Time To Share Config: Venta Humidifier with pyscript
  • :) understand, I went this way to control fan speed actually because the humidifier is in my bedroom - so that when I am in the room (motion sensor), fan speed goes to minimum and when I leave it goes to medium and high depending on targeted humidity difference

  • Use cases for TTS
  • Hi, endless ones - I use it for:

    • announcing the news in the morning
    • announcing when to clean / refill humidifier
    • announcing when to clean / refill vacuum robot
    • announcing when flat is overheated and it is cold enough outside to open windows
    • announcing when my better half is close to home
    • announcing when the dryer/washer/dishwasher is ready
    • announcing weather forecast for the day (when I need an umbrella etc.)

    in the picture you find all my "announcement buttons" from my dashboard - constantly growing

  • Time To Share Config: Venta Humidifier with pyscript

    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") ```

    3
    InitialsDiceBearhttps://github.com/dicebear/dicebearhttps://creativecommons.org/publicdomain/zero/1.0/„Initials” (https://github.com/dicebear/dicebear) by „DiceBear”, licensed under „CC0 1.0” (https://creativecommons.org/publicdomain/zero/1.0/)BA
    bazingabot @reddthat.com
    Posts 1
    Comments 2