#pragma once #include "esphome/core/component.h" #include "esphome/core/log.h" #include "esphome/components/sensor/sensor.h" #include "esphome/components/binary_sensor/binary_sensor.h" #include "esphome/components/text_sensor/text_sensor.h" #include "esphome/components/switch/switch.h" #include "esphome/components/select/select.h" #include "esphome/components/number/number.h" #include "esphome/components/uart/uart.h" #include "select/tw7100_select.h" #include "number/tw7100_number.h" namespace esphome { namespace tw7100 { class tw7100Component : public PollingComponent, public uart::UARTDevice { private: unsigned long _max_loop_time = 30; unsigned long _readStringUntil_timeout = _max_loop_time/5; // number of milliseconds to wait for the next char before aborting timed read unsigned long _timeout_after_cmd = 1000; public: tw7100Component() = default; std::string readStringUntil(char terminator); void push_cmd(std::string cmd, std::string param); void update_sensor(std::pair data); std::pair parse_response(std::string data); int timedRead(void); void setup() override; void update() override; void loop() override; void dump_config() override; float get_setup_priority() const override { return setup_priority::BUS; } void set_powered(binary_sensor::BinarySensor *powered) { this->powered_ = powered; } void set_has_signal(binary_sensor::BinarySensor *has_signal) { this->has_signal_ = has_signal; } void set_lamp_hours(sensor::Sensor *lamp_hours) { this->lamp_hours_ = lamp_hours; } void set_power_status(sensor::Sensor *power_status) { this->power_status_ = power_status; } void set_signal_status(sensor::Sensor *signal_status) { this->signal_status_ = signal_status; } void set_luminance_level(sensor::Sensor *luminance_level) { this->luminance_level_ = luminance_level; } void set_serial(text_sensor::TextSensor *serial) { this->serial_ = serial; } void set_set_pwr(switch_::Switch *switch_) { this->power_switch_ = switch_; } void set_set_btaudio(switch_::Switch *switch_) { this->btaudio_switch_ = switch_; } void set_set_mute(switch_::Switch *switch_) { this->mute_switch_ = switch_; } void set_set_wlpwr(switch_::Switch *switch_) { this->wlan_power_switch_ = switch_; } void set_set_autohome(switch_::Switch *switch_) { this->autohome_switch_ = switch_; } void set_set_product(switch_::Switch *switch_) { this->product_switch_ = switch_; } void set_set_standbyconf(switch_::Switch *switch_) { this->standbyconf_switch_ = switch_; } void set_set_illum(switch_::Switch *switch_) { this->illumination_switch_ = switch_; } void set_set_vreverse(switch_::Switch *switch_) { this->vflip_switch_ = switch_; } void set_set_hreverse(switch_::Switch *switch_) { this->hflip_switch_ = switch_; } void set_set_audioout(switch_::Switch *switch_) { this->audioout_switch_ = switch_; } void set_set_imgproc(switch_::Switch *switch_) { this->img_processing_switch_ = switch_; } void set_set_4kenhance(switch_::Switch *switch_) { this->_4kenhance_switch_ = switch_; } void set_set_logto(switch_::Switch *switch_) { this->logto_switch_ = switch_; } void set_set_source(tw7100::tw7100Select *source_) { this->source_select_ = source_; } void set_set_luminance(tw7100::tw7100Select *luminance_) { this->luminance_select_ = luminance_; } void set_set_vol(tw7100::tw7100Number *number_) { this->volume_number_ = number_; } void set_set_vkeystone(tw7100::tw7100Number *number_) { this->vkeystone_number_ = number_; } void set_set_hkeystone(tw7100::tw7100Number *number_) { this->hkeystone_number_ = number_; } void set_set_bright(tw7100::tw7100Number *number_) { this->brightness_number_ = number_; } void set_set_contrast(tw7100::tw7100Number *number_) { this->contrast_number_ = number_; } void set_set_density(tw7100::tw7100Number *number_) { this->density_number_ = number_; } void set_set_tint(tw7100::tw7100Number *number_) { this->tint_number_ = number_; } void set_set_ctemp(tw7100::tw7100Number *number_) { this->ctemp_number_ = number_; } void set_set_fcolor(tw7100::tw7100Number *number_) { this->fcolor_number_ = number_; } void set_set_nrs(tw7100::tw7100Number *number_) { this->nrs_number_ = number_; } void set_set_mpegnrs(tw7100::tw7100Number *number_) { this->mpegnrs_number_ = number_; } void set_set_offsetr(tw7100::tw7100Number *number_) { this->offsetr_number_ = number_; } void set_set_offsetg(tw7100::tw7100Number *number_) { this->offsetg_number_ = number_; } void set_set_offsetb(tw7100::tw7100Number *number_) { this->oggsetb_number_ = number_; } void set_set_gainr(tw7100::tw7100Number *number_) { this->gainr_number_ = number_; } void set_set_gaing(tw7100::tw7100Number *number_) { this->gaing_number_ = number_; } void set_set_gainb(tw7100::tw7100Number *number_) { this->gainb_number_ = number_; } void set_set_shrf(tw7100::tw7100Number *number_) { this->shrf_number_ = number_; } void set_set_shrs(tw7100::tw7100Number *number_) { this->shrs_number_ = number_; } void set_set_derange(tw7100::tw7100Number *number_) { this->derange_number_ = number_; } void set_set_destrength(tw7100::tw7100Number *number_) { this->destrength_number_ = number_; } protected: binary_sensor::BinarySensor *powered_{nullptr}; binary_sensor::BinarySensor *has_signal_{nullptr}; sensor::Sensor *lamp_hours_{nullptr}; sensor::Sensor *power_status_{nullptr}; sensor::Sensor *signal_status_{nullptr}; sensor::Sensor *luminance_level_{nullptr}; text_sensor::TextSensor *serial_{nullptr}; switch_::Switch *power_switch_{nullptr}; switch_::Switch *btaudio_switch_{nullptr}; switch_::Switch *mute_switch_{nullptr}; switch_::Switch *wlan_power_switch_{nullptr}; switch_::Switch *autohome_switch_{nullptr}; switch_::Switch *product_switch_{nullptr}; switch_::Switch *standbyconf_switch_{nullptr}; switch_::Switch *illumination_switch_{nullptr}; switch_::Switch *vflip_switch_{nullptr}; switch_::Switch *hflip_switch_{nullptr}; switch_::Switch *audioout_switch_{nullptr}; switch_::Switch *img_processing_switch_{nullptr}; switch_::Switch *_4kenhance_switch_{nullptr}; switch_::Switch *logto_switch_{nullptr}; tw7100::tw7100Select *source_select_{nullptr}; tw7100::tw7100Select *luminance_select_{nullptr}; tw7100::tw7100Number *volume_number_{nullptr}; tw7100::tw7100Number *vkeystone_number_{nullptr}; tw7100::tw7100Number *hkeystone_number_{nullptr}; tw7100::tw7100Number *brightness_number_{nullptr}; tw7100::tw7100Number *contrast_number_{nullptr}; tw7100::tw7100Number *density_number_{nullptr}; tw7100::tw7100Number *tint_number_{nullptr}; tw7100::tw7100Number *ctemp_number_{nullptr}; tw7100::tw7100Number *fcolor_number_{nullptr}; tw7100::tw7100Number *nrs_number_{nullptr}; tw7100::tw7100Number *mpegnrs_number_{nullptr}; tw7100::tw7100Number *offsetr_number_{nullptr}; tw7100::tw7100Number *offsetg_number_{nullptr}; tw7100::tw7100Number *oggsetb_number_{nullptr}; tw7100::tw7100Number *gainr_number_{nullptr}; tw7100::tw7100Number *gaing_number_{nullptr}; tw7100::tw7100Number *gainb_number_{nullptr}; tw7100::tw7100Number *shrf_number_{nullptr}; tw7100::tw7100Number *shrs_number_{nullptr}; tw7100::tw7100Number *derange_number_{nullptr}; tw7100::tw7100Number *destrength_number_{nullptr}; }; } // namespace tw7100 } // namespace esphome