moving hmip switch to pyscript
This commit is contained in:
92
pyscript/hmip_wrc6_joel.py
Normal file
92
pyscript/hmip_wrc6_joel.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# Payload: {
|
||||||
|
# 'trigger_type': 'event',
|
||||||
|
# 'event_type': 'homematic.keypress',
|
||||||
|
# 'context': <homeassistant.core.Context object at 0x7f8c9eebe890>,
|
||||||
|
# 'name': '000B5D898D535E',
|
||||||
|
# 'param': 'PRESS_SHORT',
|
||||||
|
# 'channel': 3
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
|
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}")
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user