esphome: name: test_device on_boot: - lambda: |- ESP_LOGD("test", "Host preferences test starting"); host: logger: level: DEBUG api: preferences: flash_write_interval: 0s # Disable automatic saving for test control switch: - platform: template name: "Test Switch" id: test_switch optimistic: true restore_mode: DISABLED # Don't auto-restore for test control number: - platform: template name: "Test Number" id: test_number min_value: 0 max_value: 100 step: 0.1 optimistic: true restore_value: false # Don't auto-restore for test control button: - platform: template name: "Save Preferences" on_press: - lambda: |- // Save current values to preferences ESPPreferenceObject switch_pref = global_preferences->make_preference(0x1234); ESPPreferenceObject number_pref = global_preferences->make_preference(0x5678); bool switch_value = id(test_switch).state; float number_value = id(test_number).state; if (switch_pref.save(&switch_value)) { ESP_LOGI("test", "Preference saved: key=switch, value=%.1f", switch_value ? 1.0 : 0.0); } if (number_pref.save(&number_value)) { ESP_LOGI("test", "Preference saved: key=number, value=%.1f", number_value); } // Force sync to disk global_preferences->sync(); - platform: template name: "Load Preferences" on_press: - lambda: |- // Load values from preferences ESPPreferenceObject switch_pref = global_preferences->make_preference(0x1234); ESPPreferenceObject number_pref = global_preferences->make_preference(0x5678); // Also try to load non-existent preferences (tests our fix) ESPPreferenceObject fake_pref1 = global_preferences->make_preference(0x9999); ESPPreferenceObject fake_pref2 = global_preferences->make_preference(0xAAAA); bool switch_value = false; float number_value = 0.0; uint32_t fake_value = 0; int loaded_count = 0; // These should not exist and shouldn't create map entries fake_pref1.load(&fake_value); fake_pref2.load(&fake_value); if (switch_pref.load(&switch_value)) { id(test_switch).publish_state(switch_value); ESP_LOGI("test", "Preference loaded: key=switch, value=%.1f", switch_value ? 1.0 : 0.0); loaded_count++; } else { ESP_LOGW("test", "Failed to load switch preference"); } if (number_pref.load(&number_value)) { id(test_number).publish_state(number_value); ESP_LOGI("test", "Preference loaded: key=number, value=%.1f", number_value); loaded_count++; } else { ESP_LOGW("test", "Failed to load number preference"); } // Log completion message for the test to detect ESP_LOGI("test", "Final load test: loaded %d preferences successfully", loaded_count); - platform: template name: "Verify Preferences" on_press: - lambda: |- // Verify current values match what we expect bool switch_value = id(test_switch).state; float number_value = id(test_number).state; // After loading, switch should be true (1.0) and number should be 42.5 if (switch_value == true && number_value == 42.5) { ESP_LOGI("test", "Preferences verified: values match!"); } else { ESP_LOGE("test", "Preferences mismatch: switch=%d, number=%.1f", switch_value, number_value); }