diff --git a/interface/src/project/EMSESPSettingsController.tsx b/interface/src/project/EMSESPSettingsController.tsx index 8385577e1..9a139ec2f 100644 --- a/interface/src/project/EMSESPSettingsController.tsx +++ b/interface/src/project/EMSESPSettingsController.tsx @@ -155,7 +155,7 @@ function EMSESPSettingsControllerForm(props: EMSESPSettingsControllerFormProps) /> product_id(); deviceRoot["version"] = emsdevice->version(); } - - response->setLength(); - request->send(response); } + response->setLength(); + request->send(response); } } // namespace emsesp \ No newline at end of file diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 6232d92eb..25b00e4a3 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -256,6 +256,9 @@ void Mqtt::start(AsyncMqttClient * mqttClient) { #ifndef EMSESP_STANDALONE mqttClient_->setWill(make_topic(will_topic_, "status"), 1, true, "offline"); // with qos 1, retain true + mqttClient_->onMessage([this](char * topic, char * payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) { + on_message(topic, payload, len); + }); #endif } diff --git a/src/roomcontrol.cpp b/src/roomcontrol.cpp index e1ab12430..96e801dbb 100644 --- a/src/roomcontrol.cpp +++ b/src/roomcontrol.cpp @@ -65,18 +65,17 @@ void Roomctrl::check(const uint8_t addr, const uint8_t * data) { if (hc_ > 3) { return; } - // no reply if the temperature is not set - if (remotetemp[hc_] == EMS_VALUE_SHORT_NOTSET) { - return; - } // reply to writes with write nack byte if (addr & 0x80) { // it's a write to us nack_write(); // we don't accept writes. return; } - // for now we only reply to version and remote temperature + // reads: for now we only reply to version and remote temperature + // empty message back if temperature not set or unknown message type if (data[2] == 0x02) { version(addr, data[0]); + } else if (remotetemp[hc_] == EMS_VALUE_SHORT_NOTSET) { + unknown(addr, data[0], data[2], data[3]); } else if (data[2] == 0xAF && data[3] == 0) { temperature(addr, data[0]); } else { diff --git a/src/telegram.cpp b/src/telegram.cpp index e8092c211..d0309195c 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -205,11 +205,6 @@ void RxService::add(uint8_t * data, uint8_t length) { message_length = length - 6 - shift; } - // if we don't have a type_id or empty data block, exit - if ((type_id == 0) || (message_length == 0)) { - return; - } - // if we're watching and "raw" print out actual telegram as bytes to the console if (EMSESP::watch() == EMSESP::Watch::WATCH_RAW) { uint16_t trace_watch_id = EMSESP::watch_id(); @@ -222,6 +217,11 @@ void RxService::add(uint8_t * data, uint8_t length) { LOG_DEBUG(F("[DEBUG] New Rx [#%d] telegram, message length %d"), rx_telegram_id_, message_length); #endif + // if we don't have a type_id or empty data block, exit + if ((type_id == 0) || (message_length == 0)) { + return; + } + // create the telegram auto telegram = std::make_shared(Telegram::Operation::RX, src, dest, type_id, offset, message_data, message_length); @@ -233,7 +233,6 @@ void RxService::add(uint8_t * data, uint8_t length) { rx_telegrams_.emplace_back(rx_telegram_id_++, std::move(telegram)); // add to queue } - // // Tx CODE starts here... //