mirror of
https://github.com/esphome/esphome.git
synced 2025-02-24 05:48:14 +00:00
* Added support for Midea IoT climate devices via UART interface (USB-dongle) * Fixed lint checks * Fixed lint checks * CODEOWNERS update * Clang-format * Clang-format * Add network device notification message support (show WiFi sign on devices) * Make wifi_signal_sensor optional component * Some optimization * Optimizations and code formatting * Fixed lint checks * Fixed lint checks * Fixed sign error * Code changes * Network notify repeat every 10 min * Added log messages * Fixed lint checks * Refactoring: MideaClimate => MideaAC * Using enums instead literals in Midea states * Enum changed to be more correct * Shrink notify frame to 32 bytes * Fixed lint checks * Change notify frame appliance type to common broadcast * Control optimization * Fixed control error * Control command now don't reset others uncontrollable properties of device * Fixed lint checks * Some optimization * on_receive callback give const Frame * Fix control * Fixes * Some minor changes * Fixed lint error * No dependency from wifi_signal sensor for stretched WiFi icon. New option: stretched_icon instead wifi_signal_id. * Fix option name * Added export of outdoor temperature as sensor value * Fixed lint errors * Fixed pylint error * Minor fix * Fix temperature overflow in some cases * Added answer on QueryNetwork command from appliance. Now don't wait for ack on 0x0D command. * Fix lint error * Added humidity setpoint optional sensor * Added boolean options 'swing_horizontal' and 'swing_both' * Added debug frame output * Added debug frame output * Fix lints error * Some debug output optimization * Fix lint check * Some code optimization: adding templates * Fix lint error * Added sensors device classes * Python code reformatted with black formatter * RX frame debug message RX frame debug message now prints before checking * Remove CRC check for receiving frames * Added experimental power usage option * Added power usage option * Fixed lint errors * Major changes. See esp-docs. * Added tests in test4.yaml * Added tests in test1.yaml * Added wifi dependency * Fix test1.yaml * Some fix :) * One more refactoring * One more refactoring * One more refactoring
57 lines
1.4 KiB
C++
57 lines
1.4 KiB
C++
#pragma once
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/components/wifi/wifi_component.h"
|
|
#include "esphome/components/uart/uart.h"
|
|
#include "midea_frame.h"
|
|
|
|
namespace esphome {
|
|
namespace midea_dongle {
|
|
|
|
enum MideaApplianceType : uint8_t { DEHUMIDIFIER = 0xA1, AIR_CONDITIONER = 0xAC, BROADCAST = 0xFF };
|
|
enum MideaMessageType : uint8_t {
|
|
DEVICE_CONTROL = 0x02,
|
|
DEVICE_QUERY = 0x03,
|
|
NETWORK_NOTIFY = 0x0D,
|
|
QUERY_NETWORK = 0x63,
|
|
};
|
|
|
|
struct MideaAppliance {
|
|
/// Calling on update event
|
|
virtual void on_update() = 0;
|
|
/// Calling on frame receive event
|
|
virtual void on_frame(const Frame &frame) = 0;
|
|
};
|
|
|
|
class MideaDongle : public PollingComponent, public uart::UARTDevice {
|
|
public:
|
|
MideaDongle() : PollingComponent(1000) {}
|
|
float get_setup_priority() const override { return setup_priority::LATE; }
|
|
void update() override;
|
|
void loop() override;
|
|
void set_appliance(MideaAppliance *app) { this->appliance_ = app; }
|
|
void use_strength_icon(bool state) { this->rssi_timer_ = state; }
|
|
void write_frame(const Frame &frame);
|
|
|
|
protected:
|
|
MideaAppliance *appliance_{nullptr};
|
|
NotifyFrame notify_;
|
|
unsigned notify_timer_{1};
|
|
// Buffer
|
|
uint8_t buf_[36];
|
|
// Index
|
|
uint8_t idx_{0};
|
|
// Reverse receive counter
|
|
uint8_t cnt_{2};
|
|
uint8_t rssi_timer_{0};
|
|
bool need_notify_{false};
|
|
|
|
// Reset receiver state
|
|
void reset_() {
|
|
this->idx_ = 0;
|
|
this->cnt_ = 2;
|
|
}
|
|
};
|
|
|
|
} // namespace midea_dongle
|
|
} // namespace esphome
|