# Payload: { # 'trigger_type': 'event', # 'event_type': 'homematic.keypress', # 'context': , # 'name': '000B5D898D535E', # 'param': 'PRESS_SHORT', # 'channel': 3 # } """ This script is designed to work with a Home Assistant setup using the Homematic IP WRC6 remote control. It listens for keypress events from the remote and performs actions based on the key pressed and the type of press (short or long). Documentation https://hacs-pyscript.readthedocs.io/en/latest/overview.html """ TASTER_ID_JOEL = "000B5D898D535E" # Replace with your actual Taster ID ROLLO_ID_JOEL = "cover.00115a498e0439" # Replace with your actual Rollo ID POSITION_UP = 66 POSITION_DOWN = 20 last_action = dict() state.persist('pyscript.last_action') """ The state of the short-presses will be stored in the pyscript.last_action variable.""" """ In the pattern of {key}_{0|1} - 0 = not pressed, 1 = pressed """ def toggle_keystate(key): """Toggle keypress state.""" prefixed_key = f'key_{key}' if prefixed_key in last_action: last_action[prefixed_key] = 1 if last_action.get(prefixed_key) == 0 else 0 else: last_action[prefixed_key] = 1 log.info(f"Key {key} toggled to {last_action[prefixed_key]}") log.info(f"Key dict {last_action}") def get_keystate(key): prefixed_key = f'key_{key}' return last_action.get(prefixed_key, 0) @event_trigger('homematic.keypress') def taster(**payload): if payload.get("name") != TASTER_ID_JOEL: return param = payload.get("param") if param == "PRESS_SHORT": # Check if the event is a short press log.info("Short press detected") channel_no = payload.get("channel") """ Offen """ if channel_no == 5: # Perform action for channel 5 if get_keystate("5") == 1: cover.open_cover(entity_id=ROLLO_ID_JOEL) else: cover.stop_cover(entity_id=ROLLO_ID_JOEL) toggle_keystate("5") elif channel_no == 6: # Perform action for channel 6 if get_keystate("6") == 1: cover.close_cover(entity_id=ROLLO_ID_JOEL) else: cover.stop_cover(entity_id=ROLLO_ID_JOEL) toggle_keystate("6") elif channel_no == 3: # Perform action for channel 3 log.info("Channel 3 action") # Add your action here, e.g., toggle a light if param == "PRESS_LONG": # Check if the event is a long press log.info("Long press detected") channel_no = payload.get("channel") if channel_no == 5: log.info("Channel 5 action") cover.set_cover_position(entity_id=ROLLO_ID_JOEL, position=POSITION_UP) elif channel_no == 6: log.info("Channel 6 action") cover.set_cover_position(entity_id=ROLLO_ID_JOEL, position=POSITION_DOWN) log.info(f"taster: {payload}")