From 307da99ccca6304d2ba0346856e87b5e1da6253f Mon Sep 17 00:00:00 2001 From: Spencer Owen Date: Tue, 14 Jan 2025 14:47:22 -0700 Subject: [PATCH 1/2] Fix temperatures --- firmware/bambu.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/firmware/bambu.h b/firmware/bambu.h index e179dab..d38c358 100644 --- a/firmware/bambu.h +++ b/firmware/bambu.h @@ -125,14 +125,21 @@ namespace bambulabs return {}; } + int min_temp = doc_in["min_temp"].as(); + int max_temp = doc_in["max_temp"].as(); + if (min_temp < 0 || min_temp > 300 || max_temp < 0 || max_temp > 300) { + ESP_LOGE("bambu", "Temperature values out of valid range"); + return {}; + } + JsonObject print = doc_out.createNestedObject("print"); print["sequence_id"] = "0"; print["command"] = "ams_filament_setting"; print["ams_id"] = ams_id; print["tray_id"] = ams_tray; print["tray_color"] = doc_in["color_hex"].as() + "FF"; - print["nozzle_temp_min"] = uint16_t(doc_in["min_temp"]); // if not string or int, will fall back to 0 - print["nozzle_temp_max"] = uint16_t(doc_in["max_temp"]); // if not string or int, will fall back to 0 + print["nozzle_temp_min"] = static_cast(min_temp); + print["nozzle_temp_max"] = static_cast(max_temp); print["tray_type"] = doc_in["type"]; print["setting_id"] = ""; print["tray_info_idx"] = get_bambu_code(doc_in["type"], doc_in["brand"]); From ade576a0f6063347b6573f5e08eefebf549e0d9f Mon Sep 17 00:00:00 2001 From: Spencer Owen Date: Mon, 20 Jan 2025 18:20:18 -0700 Subject: [PATCH 2/2] Remove upload settings button --- firmware/conf.d/automation.yaml | 86 --------------------------------- firmware/conf.d/filament.yaml | 12 ----- 2 files changed, 98 deletions(-) diff --git a/firmware/conf.d/automation.yaml b/firmware/conf.d/automation.yaml index 8504a3c..15f0468 100644 --- a/firmware/conf.d/automation.yaml +++ b/firmware/conf.d/automation.yaml @@ -22,92 +22,6 @@ script: return output; }; return pretty_json(); -- id: publish_filament_setting - then: - - if: - condition: - and: - - lambda: |- - if (id(filament_brand).state == "" || id(filament_brand).state == "Unknown") { - ESP_LOGE("main", "Filament Brand cannot be empty"); - return false; - } else { - return true; - } - - lambda: |- - if (id(filament_brand_code).state == "" || id(filament_brand_code).state == "Unknown") { - ESP_LOGE("main", "Filament Brand Code cannot be empty"); - return false; - } else { - return true; - } - - lambda: |- - if (id(filament_color_hex).state == "") { - ESP_LOGE("main", "Filament Color Hex cannot be empty"); - return false; - } else { - return true; - } - - lambda: |- - if (id(filament_max_temp).state >= 300) { - ESP_LOGE("main", "Filament Min Temp must be less than 300"); - return false; - } else { - return true; - } - - lambda: |- - if (id(filament_min_temp).state <= 150) { - ESP_LOGE("main", "Filament Max Temp must be greater than 150"); - return false; - } else { - return true; - } - - lambda: |- - if (id(filament_type).state == "") { - ESP_LOGE("main", "Filament Type cannot be empty"); - return false; - } else { - return true; - } - - lambda: |- - if (id(filament_type).state == "") { - ESP_LOGE("main", "Filament Type cannot be empty"); - return false; - } else { - return true; - } - - lambda: |- - if (id(bambu_serial_number).state == "") { - ESP_LOGE("main", "Bambu Serial Number cannot be empty"); - return false; - } else { - return true; - } - # TODO: Check if mqtt is enabled once this is merged: https://github.com/esphome/esphome/pull/7716 - then: - - mqtt.publish: - # topic: device/${bambu_serial_number}/request - topic: !lambda 'return "device/" + id(bambu_serial_number).state + "/request";' - payload: !lambda |- - auto data = json::build_json([=](JsonObject root) { - auto print = root.createNestedObject("print"); - print["sequence_id"] = "0"; - print["command"] = "ams_filament_setting"; - print["ams_id"] = 255; //TODO: support multiple AMS - print["tray_id"] = 254; //TODO: support multiple trays - std::string color = id(filament_color_hex).state + "FF"; - print["tray_color"] = color; - print["nozzle_temp_min"] = int8_t(id(filament_min_temp).state); - print["nozzle_temp_max"] = int8_t(id(filament_max_temp).state); - print["tray_type"] = id(filament_type).state.c_str(); - print["setting_id"] = ""; - print["tray_info_idx"] = id(filament_brand_code).state.c_str(); - print["tray_type"] = id(filament_type).state.c_str(); - //print["tray_sub_brands"] = "TPU"; //TODO: support sub brands - - }); - ESP_LOGI("main", "Publishing %s", data.c_str()); - return data; - id: generate_filament_brand_code # TODO: Replace with filament_mappings() then: - lambda: |- diff --git a/firmware/conf.d/filament.yaml b/firmware/conf.d/filament.yaml index 712ebfb..e8436e1 100644 --- a/firmware/conf.d/filament.yaml +++ b/firmware/conf.d/filament.yaml @@ -265,15 +265,3 @@ text_sensor: on_value: then: - script.execute: preview_rfid_data -button: -- platform: template - name: Upload Settings - id: upload_filament_settings - state_topic: - icon: mdi:upload - web_server: - sorting_group_id: sorting_group_filament_settings - sorting_weight: 200 - on_press: - then: - - script.execute: publish_filament_setting