From dbd6e6c824bdeb288d2f0fcda462bf912b15ba33 Mon Sep 17 00:00:00 2001 From: ChNussbaum Date: Wed, 7 Oct 2020 14:27:16 -0500 Subject: [PATCH] All Feit dimmer devices use custom Tuya light comp Move all Feit dimmer devices to device folder README updates --- .gitignore | 4 +- README.md | 35 +++--- common/common_tuya_dimmer.yaml | 11 -- common/device_tuya_dimmer.yaml | 50 -------- devices/.gitignore | 10 -- .../basement_stair_lights_1.yaml | 14 ++- .../basement_stair_lights_2.yaml | 14 ++- .../family_room_light.yaml | 14 ++- .../kitchen_bar_lights.yaml | 14 ++- .../kitchen_table_light.yaml | 14 ++- .../living_room_lights.yaml | 14 ++- .../master_bath_lights_1.yaml | 14 ++- .../master_bath_lights_2.yaml | 14 ++- .../office_light.yaml | 14 ++- ...yaml => scripture_of_the_day_melissa.yaml} | 0 devices/secrets.yaml | 1 + packages/secrets.yaml | 2 +- tuya_light_control.h | 117 ------------------ 18 files changed, 115 insertions(+), 241 deletions(-) delete mode 100644 common/common_tuya_dimmer.yaml delete mode 100644 common/device_tuya_dimmer.yaml delete mode 100644 devices/.gitignore rename basement_stair_lights.yaml => devices/basement_stair_lights_1.yaml (64%) rename basement_stair_lights_2.yaml => devices/basement_stair_lights_2.yaml (65%) rename family_room_light.yaml => devices/family_room_light.yaml (61%) rename kitchen_bar_lights.yaml => devices/kitchen_bar_lights.yaml (61%) rename kitchen_table_light.yaml => devices/kitchen_table_light.yaml (62%) rename living_room_lights.yaml => devices/living_room_lights.yaml (61%) rename master_bath_lights.yaml => devices/master_bath_lights_1.yaml (62%) rename master_bath_lights_2.yaml => devices/master_bath_lights_2.yaml (63%) rename office_light.yaml => devices/office_light.yaml (59%) rename devices/{scripture_of_the_day_1.yaml => scripture_of_the_day_melissa.yaml} (100%) create mode 100644 devices/secrets.yaml delete mode 100644 tuya_light_control.h diff --git a/.gitignore b/.gitignore index 991791b..0f94f62 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ # Gitignore settings for ESPHome -/.esphome/ +**/.esphome/ /.vscode/ **/.pioenvs/ **/.piolibdeps/ **/lib/ **/src/ **/platformio.ini -/secrets.yaml \ No newline at end of file +/secrets.yaml diff --git a/README.md b/README.md index a365667..3bd9972 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ESPHome-Devices ## Overview -> This is a collection of [ESPHome](https://ESPHome.io) configuration files and code for my various ESP8266 devices that integrate with [Home Assistant](https://www.home-assistant.io/). +> This is a collection of [ESPHome](https://ESPHome.io) configuration files and code for my various ESP8266 devices that integrate with [Home Assistant](https://www.home-assistant.io/). I am using includes and packages pretty extensively in order to prevent duplication and allow for easy changing of common settings. > **What is ESPHome**
> ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems. For more information checkout [ESPHome.io](https://ESPHome.io). @@ -28,6 +28,9 @@ > ### Patio Lights > This is a [WEMOS D1 Mini Pro](https://www.amazon.com/gp/product/B07G9HZ5LM/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) that is connected to a [relay](https://www.amazon.com/gp/product/B00VRUAHLE/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) to control the power to the landscape lights around my patio. I used the WEMOS D1 Mini Pro because it has an external antenna. I initially used a [WEMOS D1 Mini clone](https://www.amazon.com/gp/product/B076F52NQD/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) but the power supply for my lights was to far from the house and I kept having connectivity issues. +> ### Scripture of the Day +> This is a project I just started working on (and I am still waiting on the hardware to arrive from China). I am planning on building 2 of them as Christmas presents for my wife and son. It will consist of a [ESP8266 e-Paper Panel Driver Board](https://www.waveshare.com/e-paper-esp8266-driver-board.htm) powered by a [lithium battery](https://www.amazon.com/dp/B0867KDMY7/?coliid=IE0LBNACFHG4U&colid=1LOK862UA8LA0&psc=1&ref_=lv_ov_lig_dp_it) and [TP4056 lithium battery charger module](https://www.amazon.com/dp/B06XQRQR3Q/?coliid=I1B2ELKKLLKAK0&colid=1LOK862UA8LA0&psc=1&ref_=lv_ov_lig_dp_it) and driving a [Waveshare 7.5inch 800×480 E-Ink display](https://www.waveshare.com/7.5inch-e-paper.htm) all mounted inside a picture frame. The plan is to have it sit in deep-sleep most of the time but wake up every night, grab a random scripture from the [Our Manna Daily Verses API](http://www.ourmanna.com/verses/api/), update the display with the verse, and go back to sleep. + ## Switches > I plan to use dimmer switches for anything that is dimmable just for consistency and you never know when you might want to have the ability to dim a light. However there are times when a dimmer isn't an option. @@ -53,20 +56,24 @@ > Things I don't like about these switches: > > * Have to click repeatedly to change the brightness (can't hold to change) -> > * All buttons are managed by the Tuya MCU so no ability to do things like double-taps (although I may have a solution for this but haven't had a chance to do a POC) +> > * All buttons are managed by the Tuya MCU so adding things like double-taps is kind of a hack -> I have created a custom component for these that should work with most (if not all) Tuya dimmers which provides the following extra features: +> I have created a custom [component](https://github.com/nuttytree/ESPHome-Devices/blob/master/custom/tuya_light_plus.h) for these that extends the standard Tuya Light component that should work with most (if not all) Tuya dimmers and provides the following extra features: > > * Resets the brightness level back to a default level when turned off so that it always comes on at the same level instead of the level it was at when turned off -> > * The default level is configurable as different levels when my house is in "Day" mode vs "Night" mode (based on a binary sensor in Home Assistant) -> > * Provides a service that I can dynamically change the current default brightness level -> > * Allows you to "link" another light in Home Assistant that will be controlled by this dimmer +> > * The default level is configurable as different levels when my house is in "Day" mode vs "Night" mode (based on a binary sensor in Home Assistant) and via a service in Home Assistant +> > * Provides an option to auto turn off the light after a period of time +> > * The auto turn off time is configurable to be different when my house is in "Day" mode vs "Night" mode (based on a binary sensor in Home Assistant) and via a service in Home Assistant +> > * Adds ability to specify a function to call when the switch is double tapped +> > * Allows you to "link" other light(s) in Home Assistant that will be controlled by this dimmer > The following devices are Feit Dimmers: -> > * Basement Stair Lights/Basement Stair Lights 2 -> > * Computer Light -> > * Dining Room Light -> > * Family Room Light -> > * Kitchen Bar Lights -> > * Kitchen Table Light -> > * Master Bathroom Lights/Master Bathroom Lights 2 -> > * Office Light +> > * [Basement Stair Lights](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/basement_stair_lights_1.yaml)/[Basement Stair Lights 2](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/basement_stair_lights_2.yaml) +> > * [Computer Light](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/computer_light.yaml) +> > * [Dining Room Light](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/dining_room_light.yaml) +> > * [Family Room Light](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/family_room_light.yaml) +> > * [Front Lights](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/front_lights.yaml) +> > * [Kitchen Bar Lights](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/kitchen_bar_lights.yaml) +> > * [Kitchen Table Light](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/kitchen_table_light.yaml) +> > * [Living Room Lights](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/living_room_lights.yaml) +> > * [Master Bathroom Lights](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/master_bath_lights_1.yaml)/[Master Bathroom Lights 2](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/master_bath_lights_2.yaml) +> > * [Office Light](https://github.com/nuttytree/ESPHome-Devices/blob/master/devices/office_light.yaml) diff --git a/common/common_tuya_dimmer.yaml b/common/common_tuya_dimmer.yaml deleted file mode 100644 index f127fa7..0000000 --- a/common/common_tuya_dimmer.yaml +++ /dev/null @@ -1,11 +0,0 @@ -<<: !include wifi.yaml -<<: !include api.yaml -<<: !include ota.yaml - -tuya: - -uart: - - !include uart/tuya.yaml - -light: - - !include light/tuya_dimmer.yaml \ No newline at end of file diff --git a/common/device_tuya_dimmer.yaml b/common/device_tuya_dimmer.yaml deleted file mode 100644 index a219d7c..0000000 --- a/common/device_tuya_dimmer.yaml +++ /dev/null @@ -1,50 +0,0 @@ -esphome: - <<: !include esphome.yaml - includes: - - tuya_light_control.h - -<<: !include common_tuya_dimmer.yaml -<<: !include logger/logger_none.yaml - -interval: - - interval: 1min - then: - if: - condition: - and: - - binary_sensor.is_off: day_night - - for: - time: ${night_auto_off_time} - condition: - light.is_on: tuya_light - then: - - light.turn_off: tuya_light - -custom_component: - - lambda: |- - auto control = new TuyaLightControl(); - control->set_switch_id(1); - control->set_dimmer_id(2); - control->set_min_value(0); - control->set_max_value(1000); - control->set_tuya_parent(tuya_tuya); - control->set_day_brightness(${day_brightness}); - control->set_night_brightness(${night_brightness}); - control->set_api_server(api_apiserver); - control->set_linked_lights("${linked_lights}"); - return {control}; - -binary_sensor: - - !include binary_sensor/status.yaml - - !include binary_sensor/day_night.yaml - -sensor: - - !include sensor/uptime.yaml - - !include sensor/wifi.yaml - -switch: - - !include switch/restart.yaml - -text_sensor: - - !include text_sensor/version.yaml - - !include text_sensor/wifi.yaml \ No newline at end of file diff --git a/devices/.gitignore b/devices/.gitignore deleted file mode 100644 index 0bbf89c..0000000 --- a/devices/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Gitignore settings for ESPHome -# This is an example and may include too much for your use-case. -# You can modify this file to suit your needs. -/.esphome/ -**/.pioenvs/ -**/.piolibdeps/ -**/lib/ -**/src/ -**/platformio.ini -/secrets.yaml diff --git a/basement_stair_lights.yaml b/devices/basement_stair_lights_1.yaml similarity index 64% rename from basement_stair_lights.yaml rename to devices/basement_stair_lights_1.yaml index d8404e5..6bf26c1 100644 --- a/basement_stair_lights.yaml +++ b/devices/basement_stair_lights_1.yaml @@ -1,15 +1,21 @@ substitutions: device_id: basement_stair_lights device_name: Basement Stair Lights - platform: ESP8266 - board: esp01_1m ip_address: !secret basement_stair_lights_ip ota_pwd: !secret basement_stair_lights_ota_pwd api_pwd: !secret basement_stair_lights_api_pwd ap_wifi_pwd: !secret basement_stair_lights_ap_wifi_pwd day_brightness: "1" night_brightness: ".03" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "light.basement_stair_lights_2" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/basement_stair_lights_2.yaml b/devices/basement_stair_lights_2.yaml similarity index 65% rename from basement_stair_lights_2.yaml rename to devices/basement_stair_lights_2.yaml index f806a8c..26d1064 100644 --- a/basement_stair_lights_2.yaml +++ b/devices/basement_stair_lights_2.yaml @@ -1,15 +1,21 @@ substitutions: device_id: basement_stair_lights_2 device_name: Basement Stair Lights 2 - platform: ESP8266 - board: esp01_1m ip_address: !secret basement_stair_lights_2_ip ota_pwd: !secret basement_stair_lights_2_ota_pwd api_pwd: !secret basement_stair_lights_2_api_pwd ap_wifi_pwd: !secret basement_stair_lights_2_ap_wifi_pwd day_brightness: "1" night_brightness: ".03" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "light.basement_stair_lights" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/family_room_light.yaml b/devices/family_room_light.yaml similarity index 61% rename from family_room_light.yaml rename to devices/family_room_light.yaml index ef3f122..728eeb4 100644 --- a/family_room_light.yaml +++ b/devices/family_room_light.yaml @@ -1,15 +1,21 @@ substitutions: device_id: family_room_light device_name: Family Room Light - platform: ESP8266 - board: esp01_1m ip_address: !secret family_room_light_ip ota_pwd: !secret family_room_light_ota_pwd api_pwd: !secret family_room_light_api_pwd ap_wifi_pwd: !secret family_room_light_ap_wifi_pwd day_brightness: "1" night_brightness: ".03" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/kitchen_bar_lights.yaml b/devices/kitchen_bar_lights.yaml similarity index 61% rename from kitchen_bar_lights.yaml rename to devices/kitchen_bar_lights.yaml index e4d3cd2..939a127 100644 --- a/kitchen_bar_lights.yaml +++ b/devices/kitchen_bar_lights.yaml @@ -1,15 +1,21 @@ substitutions: device_id: kitchen_bar_lights device_name: Kitchen Bar Lights - platform: ESP8266 - board: esp01_1m ip_address: !secret kitchen_bar_lights_ip ota_pwd: !secret kitchen_bar_lights_ota_pwd api_pwd: !secret kitchen_bar_lights_api_pwd ap_wifi_pwd: !secret kitchen_bar_lights_ap_wifi_pwd day_brightness: "1" night_brightness: ".03" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/kitchen_table_light.yaml b/devices/kitchen_table_light.yaml similarity index 62% rename from kitchen_table_light.yaml rename to devices/kitchen_table_light.yaml index a3ee3ae..7cb8e9f 100644 --- a/kitchen_table_light.yaml +++ b/devices/kitchen_table_light.yaml @@ -1,15 +1,21 @@ substitutions: device_id: kitchen_table_light device_name: Kitchen Table Light - platform: ESP8266 - board: esp01_1m ip_address: !secret kitchen_table_light_ip ota_pwd: !secret kitchen_table_light_ota_pwd api_pwd: !secret kitchen_table_light_api_pwd ap_wifi_pwd: !secret kitchen_table_light_ap_wifi_pwd day_brightness: "1" night_brightness: ".03" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/living_room_lights.yaml b/devices/living_room_lights.yaml similarity index 61% rename from living_room_lights.yaml rename to devices/living_room_lights.yaml index e76027a..687e763 100644 --- a/living_room_lights.yaml +++ b/devices/living_room_lights.yaml @@ -1,15 +1,21 @@ substitutions: device_id: living_room_lights device_name: Living Room Lights - platform: ESP8266 - board: esp01_1m ip_address: !secret living_room_lights_ip ota_pwd: !secret living_room_lights_ota_pwd api_pwd: !secret living_room_lights_api_pwd ap_wifi_pwd: !secret living_room_lights_ap_wifi_pwd day_brightness: "1" night_brightness: ".03" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/master_bath_lights.yaml b/devices/master_bath_lights_1.yaml similarity index 62% rename from master_bath_lights.yaml rename to devices/master_bath_lights_1.yaml index eb0764a..ec7f707 100644 --- a/master_bath_lights.yaml +++ b/devices/master_bath_lights_1.yaml @@ -1,15 +1,21 @@ substitutions: device_id: master_bath_lights device_name: Master Bathroom Lights - platform: ESP8266 - board: esp01_1m ip_address: !secret master_bath_lights_ip ota_pwd: !secret master_bath_lights_ota_pwd api_pwd: !secret master_bath_lights_api_pwd ap_wifi_pwd: !secret master_bath_lights_ap_wifi_pwd day_brightness: "1" night_brightness: ".05" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/master_bath_lights_2.yaml b/devices/master_bath_lights_2.yaml similarity index 63% rename from master_bath_lights_2.yaml rename to devices/master_bath_lights_2.yaml index e82cbd4..ed36ba5 100644 --- a/master_bath_lights_2.yaml +++ b/devices/master_bath_lights_2.yaml @@ -1,15 +1,21 @@ substitutions: device_id: master_bath_lights_2 device_name: Master Bathroom Lights 2 - platform: ESP8266 - board: esp01_1m ip_address: !secret master_bath_lights_2_ip ota_pwd: !secret master_bath_lights_2_ota_pwd api_pwd: !secret master_bath_lights_2_api_pwd ap_wifi_pwd: !secret master_bath_lights_2_ap_wifi_pwd day_brightness: "1" night_brightness: ".05" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/office_light.yaml b/devices/office_light.yaml similarity index 59% rename from office_light.yaml rename to devices/office_light.yaml index d2b55a2..cb36ecf 100644 --- a/office_light.yaml +++ b/devices/office_light.yaml @@ -1,15 +1,21 @@ substitutions: device_id: office_light device_name: Office Light - platform: ESP8266 - board: esp01_1m ip_address: !secret office_light_ip ota_pwd: !secret office_light_ota_pwd api_pwd: !secret office_light_api_pwd ap_wifi_pwd: !secret office_light_ap_wifi_pwd day_brightness: "1" night_brightness: ".03" - night_auto_off_time: 15min + day_auto_off_minutes: "0" + night_auto_off_minutes: "15" linked_lights: "" + double_tap_on_stays_on: "true" -<<: !include common/device_tuya_dimmer.yaml +script: + - id: startup + then: + - lambda: |- + +packages: + feit_dimmer: !include ../packages/feit_dimmer.yaml diff --git a/devices/scripture_of_the_day_1.yaml b/devices/scripture_of_the_day_melissa.yaml similarity index 100% rename from devices/scripture_of_the_day_1.yaml rename to devices/scripture_of_the_day_melissa.yaml diff --git a/devices/secrets.yaml b/devices/secrets.yaml new file mode 100644 index 0000000..8bf34eb --- /dev/null +++ b/devices/secrets.yaml @@ -0,0 +1 @@ +<<: !include ../secrets.yaml diff --git a/packages/secrets.yaml b/packages/secrets.yaml index 257cb74..8bf34eb 100644 --- a/packages/secrets.yaml +++ b/packages/secrets.yaml @@ -1 +1 @@ -<<: !include ../secrets.yaml \ No newline at end of file +<<: !include ../secrets.yaml diff --git a/tuya_light_control.h b/tuya_light_control.h deleted file mode 100644 index 477ce9c..0000000 --- a/tuya_light_control.h +++ /dev/null @@ -1,117 +0,0 @@ -#include "esphome.h" - -class TuyaLightControl : public Component, public CustomAPIDevice { - public: - void setup() override; - void set_switch_id(uint8_t switch_id) { this->switch_id_ = switch_id; } - void set_dimmer_id(uint8_t dimmer_id) { this->dimmer_id_ = dimmer_id; } - void set_tuya_parent(esphome::tuya::Tuya *parent) { this->parent_ = parent; } - void set_min_value(uint32_t min_value) { this->min_value_ = min_value; } - void set_max_value(uint32_t max_value) { this->max_value_ = max_value; } - void set_day_brightness(float brightness) { this->day_brightness_ = brightness; } - void set_night_brightness(float brightness) { this->night_brightness_ = brightness; } - void set_api_server(api::APIServer *api_server) { this->api_server_ = api_server; }; - void set_linked_lights(const std::string linked_lights); - void set_default_brightness(float brightness); - void on_day_night_changed(std::string state); - - protected: - void handle_datapoint(esphome::tuya::TuyaDatapoint datapoint); - void set_brightness(); - - esphome::tuya::Tuya *parent_; - optional switch_id_{}; - optional dimmer_id_{}; - uint32_t min_value_ = 0; - uint32_t max_value_ = 1000; - float day_brightness_ = 1; - float night_brightness_ = .03; - float default_brightness_ = 1; - api::APIServer *api_server_; - api::HomeAssistantServiceCallAction<> *turn_on_service_; - api::HomeAssistantServiceCallAction<> *turn_off_service_; - bool has_linked_lights_ = false; - bool is_on_; - uint32_t brightness_pct_; -}; - -void TuyaLightControl::setup() { - this->parent_->register_listener(*this->switch_id_, [this](esphome::tuya::TuyaDatapoint datapoint) { - this->handle_datapoint(datapoint); - }); - - this->parent_->register_listener(*this->dimmer_id_, [this](esphome::tuya::TuyaDatapoint datapoint) { - this->handle_datapoint(datapoint); - }); - - register_service(&TuyaLightControl::set_default_brightness, "set_default_brightness", {"brightness"}); - - subscribe_homeassistant_state(&TuyaLightControl::on_day_night_changed, "sensor.day_night"); -} - -void TuyaLightControl::set_linked_lights(const std::string linked_lights) { - if (linked_lights != "") { - this->has_linked_lights_ = true; - - this->turn_on_service_ = new api::HomeAssistantServiceCallAction<>(this->api_server_, false); - this->turn_on_service_->set_service("light.turn_on"); - this->turn_on_service_->add_data("entity_id", linked_lights); - this->turn_on_service_->add_variable("brightness_pct", [=]() { return this->brightness_pct_; }); - this->turn_on_service_->add_data_template("brightness_pct", "{{ brightness_pct }}"); - - this->turn_off_service_ = new api::HomeAssistantServiceCallAction<>(this->api_server_, false); - this->turn_off_service_->set_service("light.turn_off"); - this->turn_off_service_->add_data("entity_id", linked_lights); - } -} - -void TuyaLightControl::set_default_brightness(float brightness) { - this->default_brightness_ = brightness > 1 ? 1 : brightness; - this->set_brightness(); -} - -void TuyaLightControl::on_day_night_changed(std::string state) { - if (state == "Day") { - this->default_brightness_ = this->day_brightness_; - } - else if (state == "Night") - { - this->default_brightness_ = this->night_brightness_; - } - this->set_brightness(); -} - -void TuyaLightControl::handle_datapoint(esphome::tuya::TuyaDatapoint datapoint) { - if (datapoint.id == *this->switch_id_) { - this->is_on_ = datapoint.value_bool; - if (this->has_linked_lights_) { - if (this->is_on_) { - this->turn_on_service_->play(); - } - else { - this->turn_off_service_->play(); - } - } - this->set_brightness(); - } - else if (datapoint.id == *this->dimmer_id_) { - this->brightness_pct_ = static_cast(datapoint.value_uint * 100 / this->max_value_); - if (this->has_linked_lights_) { - if (this->is_on_) { - this->turn_on_service_->play(); - } - } - } -} - -void TuyaLightControl::set_brightness() { - if (!this->is_on_) { - auto brightness_int = static_cast(this->default_brightness_ * this->max_value_); - brightness_int = std::max(brightness_int, this->min_value_); - esphome::tuya::TuyaDatapoint datapoint{}; - datapoint.id = *this->dimmer_id_; - datapoint.type = esphome::tuya::TuyaDatapointType::INTEGER; - datapoint.value_uint = brightness_int; - this->parent_->set_datapoint_value(datapoint); - } -} \ No newline at end of file