Selecting folder by tag works, but invalid tags makes the device crash
This commit is contained in:
@@ -42,16 +42,22 @@ pn532_i2c:
|
|||||||
loop: True
|
loop: True
|
||||||
# Crashes somewhere here in the lambda
|
# Crashes somewhere here in the lambda
|
||||||
folder: !lambda |-
|
folder: !lambda |-
|
||||||
if (!tag.has_ndef_message()) {
|
if (tag.has_ndef_message()) {
|
||||||
return 0; // Plays "No tag found" audio
|
const auto &message = tag.get_ndef_message();
|
||||||
|
const auto &records = message->get_records();
|
||||||
|
for (const auto &record : records) {
|
||||||
|
if (record->get_type().c_str()[0] != 'T') {
|
||||||
|
ESP_LOGD("Fabula", " Ignoring non-text record %s", record->get_payload().c_str());
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
auto message = tag.get_ndef_message();
|
ESP_LOGD("Fabula", " Found record %s in tag, try to convert to int", record->get_payload().c_str());
|
||||||
auto records = message->get_records();
|
// Note: exception handling is disabled in ESPHome: the following line may crash the microcontroller if a tag with a textual record if scanned
|
||||||
for (auto &record : records) {
|
int folderId = std::stoi(record->get_payload());
|
||||||
std::string payload = record->get_payload();
|
ESP_LOGD("Fabula", " Found valid record in tag: playing folder %d", folderId);
|
||||||
ESP_LOGD("Fabula", "NFC NDEF record type %s - value %s - int value %d", record->get_type().c_str(), record->get_payload().c_str(), stoi(payload));
|
return folderId;
|
||||||
return stoi(payload);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
ESP_LOGD("Fabula", " No valid record found in tag. Please add a text field containing the folder number, e.g. 001");
|
||||||
return 0;
|
return 0;
|
||||||
on_tag_removed:
|
on_tag_removed:
|
||||||
then:
|
then:
|
||||||
|
|||||||
Reference in New Issue
Block a user