Ugly but working playback code

This commit is contained in:
Daniele Verducci
2025-12-20 21:30:12 +01:00
parent 2eae9c28a2
commit 929da89c74

View File

@@ -22,6 +22,14 @@ wifi:
password: "SediaChinita@Terrazzo2017"
# ---------------------- Global variables ----------------------
globals:
- id: current_folder
type: int
restore_value: no
initial_value: '0'
# ---------------------- PN532 NFC Reader ----------------------
@@ -35,30 +43,31 @@ pn532_i2c:
update_interval: 1s
on_tag:
then:
- !lambda |-
if (tag.has_ndef_message()) {
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;
}
ESP_LOGD("Fabula", " Found record %s in tag, try to convert to int", record->get_payload().c_str());
// Note: exception handling is disabled in ESPHome: the following line may crash the microcontroller if a tag with a textual record if scanned
int folderId = std::stoi(record->get_payload());
ESP_LOGD("Fabula", " Found valid record in tag: playing folder %d", folderId);
id(current_folder) = folderId;
return folderId;
}
}
ESP_LOGD("Fabula", " No valid record found in tag. Please add a text field containing the folder number, e.g. 001");
id(current_folder) = 0;
return 0;
# - logger.log:
# format: "NFC Tag found: %s"
# args: [ 'tag.get_ndef_message()->get_records()[0]->get_payload().c_str()' ]
- dfplayer.play_folder:
loop: True
# Crashes somewhere here in the lambda
folder: !lambda |-
if (tag.has_ndef_message()) {
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;
}
ESP_LOGD("Fabula", " Found record %s in tag, try to convert to int", record->get_payload().c_str());
// Note: exception handling is disabled in ESPHome: the following line may crash the microcontroller if a tag with a textual record if scanned
int folderId = std::stoi(record->get_payload());
ESP_LOGD("Fabula", " Found valid record in tag: playing folder %d", folderId);
return folderId;
}
}
ESP_LOGD("Fabula", " No valid record found in tag. Please add a text field containing the folder number, e.g. 001");
return 0;
folder:
on_tag_removed:
then:
- logger.log: "NFC Tag removed"