Pyscript: Python Scripting for Home Assistant

"Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearPY
Time To Share Config: Venta Humidifier with pyscript

cross-posted from: https://reddthat.com/post/550018 > 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") > ```

1
0
"Initials" by "Florian Körner", licensed under "CC0 1.0". / Remix of the original. - Created with dicebear.comInitialsFlorian Körnerhttps://github.com/dicebear/dicebearPY
Pyscript appreciation post

As an initial post, I just wanted to say that Pyscript changed my whole usage of Home Assistant. I don't even use the built-in automations: everything is performed by Pyscript. Without it, I would dump 90% of my automation ideas due to the clunky automation interface and YAML clunkiness. If you are too humble to post at the [Pyscript GitHub Discussions](https://github.com/custom-components/pyscript/discussions), please post your questions here!

1
0