12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- from homeassistant.const import EVENT_STATE_CHANGED
- """
- Kitchen LED Documentation:
- Kitchen worktop lights use two different LED-Strips with two different color temperatures:
- 2700 and 4000K. They are controlled individually with two MOSFET PWM controllers.
- The PWM-controller (STM32-board) receives its information via a serial line (9600) from
- the Pi3. The Pi3 sends data in ASCII format <1234ABCD> to control the 2 channels.
- The Pi3 has a Python-script running as a service kitchen_led.service that acts like two separate
- Home Assistant MQTT Lights: "Kitchen worktop 4K" and "Kitchen worktop 27K". They can be
- controller with On/Off and brightness individually.
- The lights can be in 3 different modes: 1:Off, 2:Soft and 3:Work
- 3:Work is controlled by a manual switch (a helper) called "input_boolean.kitchen_worklights"
- When change the value of the switch the function kitchen_worklights_button_trigger() reacts
- to the events and start a control-chain.
- 2:Soft and 1:Off is controller when the household lights are changed between different modes.
- The function kitchen_worklights_button_trigger() is called directly from these goto-mode-functions.
- As a security measure the whole Power Supply to the LED-controller is electrically controlled
- with an IKEA Switch. So when the LEDs are Off, then the circuit is fully electrically Off.
- The full chain is:
- 1. Either by trigger or functional call the function kitchen_worklights_button_trigger() is called.
- It checks if the LEDs are to be one of the On-modes or Off. It then controls the IKEA Switch to turn the
- whole Kitchen LED on or off (electrically with a relay in the IKEA Switch).
- If the IKEA Switch was already On, then it calls handle_kitchen_worklights()
- 2. If the IKEA Switch was off and was turned on in step 1, then the event-trigger-function
- kitchen_worklights_security_switch_trigger() reacts to that state-change.
- If change Off-On then it waits a samll time before calling the third step handle_kitchen_worklights()
- If On-Off, then calls that function directly.
- 3. The last step in function handle_kitchen_worklights() is controlling the two separate
- MQTT-Lights in Home Assistant to achieve the setup that is wanted in each of the three modes.
- """
- # Reacts to when the Kitchen Worklights button is changed
- # This could be from HA UI or from web-interface
- @service
- @state_trigger("input_boolean.kitchen_worklights")
- def kitchen_worklights_button_trigger():
- log.info(f"Kitchen worklight changed. State: {input_boolean.kitchen_worklights}")
- if( input_boolean.kitchen_worklights=='on' or light.hall_door == 'on' ):
- log.info("Kitchen LED: Sec switch ON")
- if( switch.kok_led_sec_switch == 'on' ):
- log.info("K LED Sec Switch already On, go directly to PWW-Control")
- handle_kitchen_worklights()
- else:
- switch.turn_on(entity_id='switch.kok_led_sec_switch')
- else:
- log.info("Kitchen LED: Sec switch OFF")
- switch.turn_off(entity_id='switch.kok_led_sec_switch')
- # Triggers when the IKEA Switch changes state. Goes On or Off
- @event_trigger(EVENT_STATE_CHANGED, "entity_id=='switch.kok_led_sec_switch'")
- def kitchen_worklights_security_switch_trigger(entity_id, new_state, old_state):
- log.info(f"kitchen_worklights_security_switch_trigger() {switch.kok_led_sec_switch}")
- if( switch.kok_led_sec_switch=='on' ):
- log.info("Kitchen LED: Control PWM Wait...")
- task.sleep(0.5)
- log.info("Kitchen LED: Go....")
- handle_kitchen_worklights()
- # Controls the PWM of the kitchen workbench LED-Strips
- # Does not control the IKEA Switch that turns everything On/Off
- def handle_kitchen_worklights():
- log.info(f"handle_kitchen_worklights WL:{input_boolean.kitchen_worklights} HALL:{light.hall_door}")
- if( input_boolean.kitchen_worklights == 'on' ):
- log.info("K LED Full mode...")
- light.turn_on(entity_id='light.kitchen_worktop_4k',brightness='63')
- light.turn_on(entity_id='light.kitchen_worktop_27k',brightness='127')
- elif( light.hall_door == 'on' ):
- log.info("K LED Soft mode...")
- light.turn_off(entity_id='light.kitchen_worktop_4k')
- light.turn_on(entity_id='light.kitchen_worktop_27k',brightness='12')
- else:
- log.info("K LED Off mode...")
- light.turn_off(entity_id='light.kitchen_worktop_4k')
- light.turn_off(entity_id='light.kitchen_worktop_27k')
|