#pragma once #ifdef USE_COVER class HoermannDoorx; #include "esphome.h" #include "hoermann.h" #include "hciemulator.h" //#include "cover.h" #define RS485 Serial2 #define TX_ON 25 //#define configMAX_PRIORITIES 25 namespace esphome { namespace hoermann_door { class HoermannDoor : public Component, public cover::Cover { private: HoermannMainComponent* mainComponent; public: cover::CoverTraits get_traits() override { auto traits = cover::CoverTraits(); traits.set_is_assumed_state(false); traits.set_supports_position(true); traits.set_supports_tilt(false); traits.set_supports_stop(true); traits.set_supports_toggle(true); return traits; } //u_int8_t stopAt == 0; bool manual = false; void control(const cover::CoverCall &call) override { ESP_LOGW(TAG, "In func control door"); // This will be called every time the user requests a state change. if (call.get_position().has_value()) { float pos = *call.get_position(); //emulator(&RS485); // Write pos (range 0-1) to cover // ... if(pos == 1.0){ mainComponent->getEmulator()->openDoor(); manual = false; } else if(pos == 0.0){ mainComponent->getEmulator()->closeDoor(); manual = false; } else{ ESP_LOGD("Door controller", "Not yet supported"); } } if (call.get_stop()) { mainComponent->getEmulator()->stopDoor(); } //if(call.get_close()) { //emulator.closeDoor(); //} } void setup() override { //HoermannSingleton::getInstance()->initializeEmulator(); } void set_emulator_component(HoermannMainComponent* component){ this->mainComponent = component; } void open(){ //emulator.openDoor(); } void close(){ //emulator.closeDoor(); } void stop(){ //emulator.stopDoor(); } int count = 0; unsigned long lastStatus = 0; u_int8_t pos = 255; void loop() override { u_int8_t position = mainComponent->getEmulator()->getState().doorCurrentPosition; if(pos != position){ this->position = (float) position / 200.0; this->publish_state(); pos = position; } } }; } // namespace hoermann } // namespace esphome #endif