mirror of
https://github.com/esphome/esphome.git
synced 2024-12-27 16:01:43 +01:00
Try this
This commit is contained in:
parent
687eb008e8
commit
1047df8eac
2 changed files with 41 additions and 8 deletions
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace ebyte_lora {
|
namespace ebyte_lora {
|
||||||
|
static const uint8_t SWITCH_PUSH = 0x55;
|
||||||
|
static const uint8_t SWITCH_INFO = 0x66;
|
||||||
void EbyteLoraComponent::setup() {
|
void EbyteLoraComponent::setup() {
|
||||||
this->pin_aux_->setup();
|
this->pin_aux_->setup();
|
||||||
this->pin_m0_->setup();
|
this->pin_m0_->setup();
|
||||||
|
@ -116,16 +118,16 @@ void EbyteLoraComponent::dump_config() {
|
||||||
LOG_PIN("M0 Pin:", this->pin_m0_);
|
LOG_PIN("M0 Pin:", this->pin_m0_);
|
||||||
LOG_PIN("M1 Pin:", this->pin_m1_);
|
LOG_PIN("M1 Pin:", this->pin_m1_);
|
||||||
};
|
};
|
||||||
void EbyteLoraComponent::digital_write(uint8_t pin, bool value) { this->send_pin_info_(pin, value); }
|
void EbyteLoraComponent::digital_write(uint8_t pin, bool value) { this->send_switch_push_(pin, value); }
|
||||||
void EbyteLoraComponent::send_pin_info_(uint8_t pin, bool value) {
|
void EbyteLoraComponent::send_switch_push_(uint8_t pin, bool value) {
|
||||||
if (!EbyteLoraComponent::can_send_message_()) {
|
if (!EbyteLoraComponent::can_send_message_()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint8_t data[3];
|
uint8_t data[3];
|
||||||
data[1] = 1; // number one to indicate
|
data[0] = SWITCH_PUSH; // number one to indicate
|
||||||
data[1] = pin; // Pin to send
|
data[1] = pin; // Pin to send
|
||||||
data[2] = value; // Inverted for the pcf8574
|
data[2] = value; // Inverted for the pcf8574
|
||||||
ESP_LOGD(TAG, "Sending message");
|
ESP_LOGD(TAG, "Sending message to remote lora");
|
||||||
ESP_LOGD(TAG, "PIN: %u ", data[1]);
|
ESP_LOGD(TAG, "PIN: %u ", data[1]);
|
||||||
ESP_LOGD(TAG, "VALUE: %u ", data[2]);
|
ESP_LOGD(TAG, "VALUE: %u ", data[2]);
|
||||||
this->write_array(data, sizeof(data));
|
this->write_array(data, sizeof(data));
|
||||||
|
@ -143,7 +145,19 @@ void EbyteLoraComponent::loop() {
|
||||||
this->read_byte(&c);
|
this->read_byte(&c);
|
||||||
data.push_back(c);
|
data.push_back(c);
|
||||||
}
|
}
|
||||||
if (data.size() >= 4) {
|
if (data[0] == SWITCH_PUSH) {
|
||||||
|
ESP_LOGD(TAG, "GOT SWITCH PUSH ", data.size());
|
||||||
|
}
|
||||||
|
if (data[0] == SWITCH_INFO) {
|
||||||
|
ESP_LOGD(TAG, "GOT INFO ", data.size());
|
||||||
|
uint8_t i = 1;
|
||||||
|
while (i < data.size()) {
|
||||||
|
ESP_LOGD(TAG, "PIN: %u ", data[i]);
|
||||||
|
ESP_LOGD(TAG, "VALUE: %u ", data[i + 1]);
|
||||||
|
i = +2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data.size() == 4) {
|
||||||
ESP_LOGD(TAG, "Total: %u ", data.size());
|
ESP_LOGD(TAG, "Total: %u ", data.size());
|
||||||
ESP_LOGD(TAG, "Start bit: ", data[0]);
|
ESP_LOGD(TAG, "Start bit: ", data[0]);
|
||||||
ESP_LOGD(TAG, "PIN: %u ", data[1]);
|
ESP_LOGD(TAG, "PIN: %u ", data[1]);
|
||||||
|
@ -158,7 +172,25 @@ void EbyteLoraComponent::loop() {
|
||||||
sensor->got_state_message(data[2]);
|
sensor->got_state_message(data[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
send_switch_info_();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void EbyteLoraComponent::send_switch_info_() {
|
||||||
|
if (!EbyteLoraComponent::can_send_message_()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::vector<uint8_t> data;
|
||||||
|
for (auto *sensor : this->sensors_) {
|
||||||
|
uint8_t pin = sensor->get_pin();
|
||||||
|
uint8_t value = sensor->state;
|
||||||
|
data.push_back(SWITCH_INFO); // number one to indicate
|
||||||
|
data.push_back(pin);
|
||||||
|
data.push_back(value); // Pin to send
|
||||||
|
}
|
||||||
|
ESP_LOGD(TAG, "Sending info back");
|
||||||
|
this->write_array(data);
|
||||||
|
this->setup_wait_response_(5000);
|
||||||
|
ESP_LOGD(TAG, "Successfully put in queue");
|
||||||
|
}
|
||||||
} // namespace ebyte_lora
|
} // namespace ebyte_lora
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -51,7 +51,8 @@ class EbyteLoraComponent : public PollingComponent, public uart::UARTDevice {
|
||||||
// checks the aux port to see if it is done setting
|
// checks the aux port to see if it is done setting
|
||||||
void setup_wait_response_(uint32_t timeout = 1000);
|
void setup_wait_response_(uint32_t timeout = 1000);
|
||||||
bool can_send_message_();
|
bool can_send_message_();
|
||||||
void send_pin_info_(uint8_t pin, bool value);
|
void send_switch_push_(uint8_t pin, bool value);
|
||||||
|
void send_switch_info_();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool update_needed_ = false;
|
bool update_needed_ = false;
|
||||||
|
|
Loading…
Reference in a new issue