diff --git a/html/rfid.js b/html/rfid.js
index 7ba37d8..47562bf 100644
--- a/html/rfid.js
+++ b/html/rfid.js
@@ -266,7 +266,7 @@ function displayAmsData(amsData) {
const trayHTML = ams.tray.map(tray => {
// Prüfe ob überhaupt Daten vorhanden sind
- const relevantFields = ['tray_type', 'tray_sub_brands', 'tray_info_idx', 'setting_id'];
+ const relevantFields = ['tray_type', 'tray_sub_brands', 'tray_info_idx', 'setting_id', 'cali_idx'];
const hasAnyContent = relevantFields.some(field =>
tray[field] !== null &&
tray[field] !== undefined &&
@@ -324,7 +324,7 @@ function displayAmsData(amsData) {
{ key: 'tray_sub_brands', label: 'Sub Brands' },
{ key: 'tray_info_idx', label: 'Filament IDX' },
{ key: 'setting_id', label: 'Setting ID' },
- { key: 'cali_idx', label: 'Calibration IDX' } // Add new property
+ { key: 'cali_idx', label: 'Calibration IDX' }
];
// Nur gültige Felder anzeigen
@@ -454,17 +454,23 @@ function handleSpoolIn(amsId, trayId) {
nozzle_temp_max: parseInt(maxTemp),
type: selectedSpool.filament.material,
brand: selectedSpool.filament.vendor.name,
- tray_info_idx: selectedSpool.filament.extra.bambu_idx.replace(/['"]+/g, '').trim()
+ tray_info_idx: selectedSpool.filament.extra.bambu_idx.replace(/['"]+/g, '').trim(),
+ cali_idx: "-1" // Default-Wert setzen
}
};
+ // Prüfe, ob der Key cali_idx vorhanden ist und setze ihn
+ if (selectedSpool.filament.extra.bambu_cali_id) {
+ payload.payload.cali_idx = selectedSpool.filament.extra.bambu_cali_id.replace(/['"]+/g, '').trim();
+ }
+
// Prüfe, ob der Key bambu_setting_id vorhanden ist
if (selectedSpool.filament.extra.bambu_setting_id) {
- payload.payload.cali_idx = selectedSpool.filament.extra.bambu_setting_id.replace(/['"]+/g, '').trim();
- } else {
- payload.payload.cali_idx = "-1";
+ payload.payload.bambu_setting_id = selectedSpool.filament.extra.bambu_setting_id.replace(/['"]+/g, '').trim();
}
+ console.log("Spool-In Payload:", payload);
+
try {
socket.send(JSON.stringify(payload));
showNotification(`Spool set in AMS ${amsId} Tray ${trayId}. Pls wait`, true);
diff --git a/src/api.cpp b/src/api.cpp
index 6fac8ef..b706dcd 100644
--- a/src/api.cpp
+++ b/src/api.cpp
@@ -279,6 +279,7 @@ bool checkSpoolmanExtraFields() {
"price_meter",
"price_gramm",
"bambu_setting_id",
+ "bambu_cali_id",
"bambu_idx",
"bambu_k",
"bambu_flow_ratio",
@@ -312,7 +313,11 @@ bool checkSpoolmanExtraFields() {
"\"field_type\": \"text\","
"\"key\": \"bambu_setting_id\"}",
- "{\"name\": \"Bambu IDX\","
+ "{\"name\": \"Bambu Cali ID\","
+ "\"field_type\": \"text\","
+ "\"key\": \"bambu_cali_id\"}",
+
+ "{\"name\": \"Bambu Filament IDX\","
"\"field_type\": \"text\","
"\"key\": \"bambu_idx\"}",
diff --git a/src/bambu.cpp b/src/bambu.cpp
index 5ff8b96..b855ea5 100644
--- a/src/bambu.cpp
+++ b/src/bambu.cpp
@@ -137,43 +137,7 @@ bool sendMqttMessage(String payload) {
}
bool setBambuSpool(String payload) {
- /* payload
- //// set Spool
- {
- "print": {
- "sequence_id": 0,
- "command": "ams_filament_setting",
- "ams_id": 0, // AMS ID 0-3 oder externe Spule 255
- "tray_id": 0, // Tray ID 0-3 oder externe Spule 254
- "tray_color": "000000FF",
- "nozzle_temp_min": 170,
- "nozzle_temp_max": 200,
- "tray_type": "PETG",
- "setting_id": "",
- "tray_info_idx": "GFG99"
- }
- }
-
-
-
- //// Remove Spool
- {
- "print":{
- "ams_id":255,
- "command":"ams_filament_setting",
- "nozzle_temp_max": 0,
- "nozzle_temp_min": 0,
- "sequence_id": 0,
- "setting_id": "",
- "tray_color": "FFFFFFFF",
- "tray_id": 254,
- "tray_info_idx": "",
- "tray_type": "",
- }
- }
- */
-
- Serial.println("Setting spool");
+ Serial.println("Spool settings in");
Serial.println(payload);
// Parse the JSON
@@ -195,7 +159,8 @@ bool setBambuSpool(String payload) {
String brand = doc["brand"].as();
String tray_info_idx = (doc["tray_info_idx"].as() != "-1") ? doc["tray_info_idx"].as() : "";
if (tray_info_idx == "") tray_info_idx = (brand != "" && type != "") ? findFilamentIdx(brand, type) : "";
- String setting_id = doc["cali_idx"].as();
+ String setting_id = doc["bambu_setting_id"].as();
+ String cali_idx = doc["cali_idx"].as();
doc.clear();
@@ -207,13 +172,14 @@ bool setBambuSpool(String payload) {
doc["print"]["nozzle_temp_min"] = minTemp;
doc["print"]["nozzle_temp_max"] = maxTemp;
doc["print"]["tray_type"] = type;
- doc["print"]["setting_id"] = (setting_id != "") ? setting_id : "";
+ doc["print"]["cali_idx"] = (cali_idx != "") ? cali_idx : "";
doc["print"]["tray_info_idx"] = tray_info_idx;
+ doc["print"]["setting_id"] = setting_id;
// Serialize the JSON
String output;
serializeJson(doc, output);
-
+
if (sendMqttMessage(output)) {
Serial.println("Spool successfully set");
}
@@ -224,31 +190,65 @@ bool setBambuSpool(String payload) {
}
doc.clear();
+ yield();
- if (setting_id != "") {
+ if (cali_idx != "") {
+ yield();
doc["print"]["sequence_id"] = 0;
doc["print"]["command"] = "extrusion_cali_sel";
- doc["print"]["ams_id"] = amsId < 200 ? amsId : 255;
- doc["print"]["tray_id"] = trayId < 200 ? trayId : 254;
doc["print"]["filament_id"] = tray_info_idx;
doc["print"]["nozzle_diameter"] = "0.4";
- doc["print"]["cali_idx"] = setting_id.toInt();
+ doc["print"]["cali_idx"] = cali_idx.toInt();
+ doc["print"]["tray_id"] = trayId < 200 ? trayId : 254;
+ doc["print"]["ams_id"] = amsId < 200 ? amsId : 255;
// Serialize the JSON
String output;
serializeJson(doc, output);
-
+
if (sendMqttMessage(output)) {
- Serial.println("Setting ID successfully set");
+ Serial.println("Extrusion calibration successfully set");
}
else
{
- Serial.println("Failed to set setting ID");
+ Serial.println("Failed to set extrusion calibration");
return false;
}
doc.clear();
+ yield();
}
+/*
+ if (setting_id != "") {
+ yield();
+ doc["print"]["sequence_id"] = 0;
+ doc["print"]["command"] = "ams_filament_setting";
+ doc["print"]["nozzle_temp_min"] = minTemp;
+ doc["print"]["nozzle_temp_max"] = maxTemp;
+ doc["print"]["setting_id"] = setting_id;
+ doc["print"]["tray_color"] = color.length() == 8 ? color : color+"FF";
+ doc["print"]["ams_id"] = amsId < 200 ? amsId : 255;
+ doc["print"]["tray_id"] = trayId < 200 ? trayId : 254;
+ doc["print"]["tray_info_idx"] = tray_info_idx;
+ doc["print"]["tray_type"] = type;
+
+ // Serialize the JSON
+ String output;
+ serializeJson(doc, output);
+
+ if (sendMqttMessage(output)) {
+ Serial.println("Filament Setting successfully set");
+ }
+ else
+ {
+ Serial.println("Failed to set Filament setting");
+ return false;
+ }
+
+ doc.clear();
+ yield();
+ }
+*/
return true;
}
@@ -306,7 +306,8 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
JsonObject trayObj = trayArray[j];
if (trayObj["tray_info_idx"].as() != ams_data[storedIndex].trays[j].tray_info_idx ||
trayObj["tray_type"].as() != ams_data[storedIndex].trays[j].tray_type ||
- trayObj["tray_color"].as() != ams_data[storedIndex].trays[j].tray_color) {
+ trayObj["tray_color"].as() != ams_data[storedIndex].trays[j].tray_color ||
+ trayObj["cali_idx"].as() != ams_data[storedIndex].trays[j].cali_idx) {
hasChanges = true;
break;
}
@@ -323,7 +324,8 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
foundExternal = true;
if (vtTray["tray_info_idx"].as() != ams_data[i].trays[0].tray_info_idx ||
vtTray["tray_type"].as() != ams_data[i].trays[0].tray_type ||
- vtTray["tray_color"].as() != ams_data[i].trays[0].tray_color) {
+ vtTray["tray_color"].as() != ams_data[i].trays[0].tray_color ||
+ vtTray["cali_idx"].as() != ams_data[i].trays[0].cali_idx) {
hasChanges = true;
}
break;
@@ -353,7 +355,8 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
ams_data[i].trays[j].tray_color = trayObj["tray_color"].as();
ams_data[i].trays[j].nozzle_temp_min = trayObj["nozzle_temp_min"].as();
ams_data[i].trays[j].nozzle_temp_max = trayObj["nozzle_temp_max"].as();
- ams_data[i].trays[j].setting_id = trayObj["cali_idx"].as();
+ ams_data[i].trays[j].setting_id = trayObj["setting_id"].as();
+ ams_data[i].trays[j].cali_idx = trayObj["cali_idx"].as();
}
}
//Serial.println("----------------");
@@ -391,7 +394,8 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
ams_data[extIdx].trays[0].tray_color = vtTray["tray_color"].as();
ams_data[extIdx].trays[0].nozzle_temp_min = vtTray["nozzle_temp_min"].as();
ams_data[extIdx].trays[0].nozzle_temp_max = vtTray["nozzle_temp_max"].as();
- ams_data[extIdx].trays[0].setting_id = vtTray["cali_idx"].as();
+ ams_data[extIdx].trays[0].setting_id = vtTray["setting_id"].as();
+ ams_data[extIdx].trays[0].cali_idx = vtTray["cali_idx"].as();
ams_count++; // Erhöhe ams_count für die externe Spule
}
@@ -418,13 +422,61 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
trayObj["tray_color"] = ams_data[i].trays[j].tray_color;
trayObj["nozzle_temp_min"] = ams_data[i].trays[j].nozzle_temp_min;
trayObj["nozzle_temp_max"] = ams_data[i].trays[j].nozzle_temp_max;
- trayObj["cali_idx"] = ams_data[i].trays[j].setting_id;
+ trayObj["setting_id"] = ams_data[i].trays[j].setting_id;
+ trayObj["cali_idx"] = ams_data[i].trays[j].cali_idx;
}
}
serializeJson(wsArray, amsJsonData);
sendAmsData(nullptr);
}
+ // Neue Bedingung für ams_filament_setting
+ else if (doc["print"]["command"] == "ams_filament_setting") {
+ int amsId = doc["print"]["ams_id"].as();
+ int trayId = doc["print"]["tray_id"].as();
+ String settingId = doc["print"]["setting_id"].as();
+
+ // Finde das entsprechende AMS und Tray
+ for (int i = 0; i < ams_count; i++) {
+ if (ams_data[i].ams_id == amsId) {
+ // Update setting_id im entsprechenden Tray
+ ams_data[i].trays[trayId].setting_id = settingId;
+
+ // Erstelle neues JSON für WebSocket-Clients
+ JsonDocument wsDoc;
+ JsonArray wsArray = wsDoc.to();
+
+ for (int j = 0; j < ams_count; j++) {
+ JsonObject amsObj = wsArray.createNestedObject();
+ amsObj["ams_id"] = ams_data[j].ams_id;
+
+ JsonArray trays = amsObj.createNestedArray("tray");
+ int maxTrays = (ams_data[j].ams_id == 255) ? 1 : 4;
+
+ for (int k = 0; k < maxTrays; k++) {
+ JsonObject trayObj = trays.createNestedObject();
+ trayObj["id"] = ams_data[j].trays[k].id;
+ trayObj["tray_info_idx"] = ams_data[j].trays[k].tray_info_idx;
+ trayObj["tray_type"] = ams_data[j].trays[k].tray_type;
+ trayObj["tray_sub_brands"] = ams_data[j].trays[k].tray_sub_brands;
+ trayObj["tray_color"] = ams_data[j].trays[k].tray_color;
+ trayObj["nozzle_temp_min"] = ams_data[j].trays[k].nozzle_temp_min;
+ trayObj["nozzle_temp_max"] = ams_data[j].trays[k].nozzle_temp_max;
+ trayObj["setting_id"] = ams_data[j].trays[k].setting_id;
+ trayObj["cali_idx"] = ams_data[j].trays[k].cali_idx;
+ }
+ }
+
+ // Aktualisiere das globale amsJsonData
+ amsJsonData = "";
+ serializeJson(wsArray, amsJsonData);
+
+ // Sende an WebSocket Clients
+ sendAmsData(nullptr);
+ break;
+ }
+ }
+ }
}
void reconnect() {
diff --git a/src/bambu.h b/src/bambu.h
index c95972c..12e302e 100644
--- a/src/bambu.h
+++ b/src/bambu.h
@@ -13,6 +13,7 @@ struct TrayData {
int nozzle_temp_min;
int nozzle_temp_max;
String setting_id;
+ String cali_idx;
};
#define MAX_AMS 17 // 16 normale AMS + 1 externe Spule