docs: update JSON handling in API and Bambu modules for improved object management

This commit is contained in:
Manuel Weiser 2025-02-21 16:53:45 +01:00
parent 5cbbe1d231
commit 4992f5f433
2 changed files with 22 additions and 22 deletions

View File

@ -60,10 +60,10 @@ JsonDocument fetchSpoolsForWebsite() {
JsonArray filteredSpools = filteredDoc.to<JsonArray>(); JsonArray filteredSpools = filteredDoc.to<JsonArray>();
for (JsonObject spool : spools) { for (JsonObject spool : spools) {
JsonObject filteredSpool = filteredSpools.createNestedObject(); JsonObject filteredSpool = filteredSpools.add<JsonObject>();
filteredSpool["extra"]["nfc_id"] = spool["extra"]["nfc_id"]; filteredSpool["extra"]["nfc_id"] = spool["extra"]["nfc_id"];
JsonObject filament = filteredSpool.createNestedObject("filament"); JsonObject filament = filteredSpool["filament"].to<JsonObject>();
filament["sm_id"] = spool["id"]; filament["sm_id"] = spool["id"];
filament["id"] = spool["filament"]["id"]; filament["id"] = spool["filament"]["id"];
filament["name"] = spool["filament"]["name"]; filament["name"] = spool["filament"]["name"];
@ -73,7 +73,7 @@ JsonDocument fetchSpoolsForWebsite() {
filament["price_meter"] = spool["filament"]["extra"]["price_meter"]; filament["price_meter"] = spool["filament"]["extra"]["price_meter"];
filament["price_gramm"] = spool["filament"]["extra"]["price_gramm"]; filament["price_gramm"] = spool["filament"]["extra"]["price_gramm"];
JsonObject vendor = filament.createNestedObject("vendor"); JsonObject vendor = filament["vendor"].to<JsonObject>();
vendor["id"] = spool["filament"]["vendor"]["id"]; vendor["id"] = spool["filament"]["vendor"]["id"];
vendor["name"] = spool["filament"]["vendor"]["name"]; vendor["name"] = spool["filament"]["vendor"]["name"];
} }
@ -110,13 +110,13 @@ JsonDocument fetchAllSpoolsInfo() {
JsonArray filteredSpools = filteredDoc.to<JsonArray>(); JsonArray filteredSpools = filteredDoc.to<JsonArray>();
for (JsonObject spool : spools) { for (JsonObject spool : spools) {
JsonObject filteredSpool = filteredSpools.createNestedObject(); JsonObject filteredSpool = filteredSpools.add<JsonObject>();
filteredSpool["price"] = spool["price"]; filteredSpool["price"] = spool["price"];
filteredSpool["remaining_weight"] = spool["remaining_weight"]; filteredSpool["remaining_weight"] = spool["remaining_weight"];
filteredSpool["used_weight"] = spool["used_weight"]; filteredSpool["used_weight"] = spool["used_weight"];
filteredSpool["extra"]["nfc_id"] = spool["extra"]["nfc_id"]; filteredSpool["extra"]["nfc_id"] = spool["extra"]["nfc_id"];
JsonObject filament = filteredSpool.createNestedObject("filament"); JsonObject filament = filteredSpool["filament"].to<JsonObject>();
filament["id"] = spool["filament"]["id"]; filament["id"] = spool["filament"]["id"];
filament["name"] = spool["filament"]["name"]; filament["name"] = spool["filament"]["name"];
filament["material"] = spool["filament"]["material"]; filament["material"] = spool["filament"]["material"];
@ -125,11 +125,11 @@ JsonDocument fetchAllSpoolsInfo() {
filament["spool_weight"] = spool["filament"]["spool_weight"]; filament["spool_weight"] = spool["filament"]["spool_weight"];
filament["color_hex"] = spool["filament"]["color_hex"]; filament["color_hex"] = spool["filament"]["color_hex"];
JsonObject vendor = filament.createNestedObject("vendor"); JsonObject vendor = filament["vendor"].to<JsonObject>();
vendor["id"] = spool["filament"]["vendor"]["id"]; vendor["id"] = spool["filament"]["vendor"]["id"];
vendor["name"] = spool["filament"]["vendor"]["name"]; vendor["name"] = spool["filament"]["vendor"]["name"];
JsonObject extra = filament.createNestedObject("extra"); JsonObject extra = filament["extra"].to<JsonObject>();
extra["nozzle_temperature"] = spool["filament"]["extra"]["nozzle_temperature"]; extra["nozzle_temperature"] = spool["filament"]["extra"]["nozzle_temperature"];
extra["price_gramm"] = spool["filament"]["extra"]["price_gramm"]; extra["price_gramm"] = spool["filament"]["extra"]["price_gramm"];
extra["price_meter"] = spool["filament"]["extra"]["price_meter"]; extra["price_meter"] = spool["filament"]["extra"]["price_meter"];
@ -186,7 +186,7 @@ bool updateSpoolTagId(String uidString, const char* payload) {
} }
// Überprüfe, ob die erforderlichen Felder vorhanden sind // Überprüfe, ob die erforderlichen Felder vorhanden sind
if (!doc.containsKey("sm_id") || doc["sm_id"] == "") { if (!doc["sm_id"].is<JsonObject>() || doc["sm_id"].as<String>() == "") {
Serial.println("Keine Spoolman-ID gefunden."); Serial.println("Keine Spoolman-ID gefunden.");
return false; return false;
} }
@ -368,7 +368,7 @@ bool checkSpoolmanExtraFields() {
for (uint8_t s = 0; s < extraLength; s++) { for (uint8_t s = 0; s < extraLength; s++) {
bool found = false; bool found = false;
for (JsonObject field : doc.as<JsonArray>()) { for (JsonObject field : doc.as<JsonArray>()) {
if (field.containsKey("key") && field["key"] == extraFields[s]) { if (field["key"].is<JsonObject>() && field["key"] == extraFields[s]) {
Serial.println("Feld gefunden: " + extraFields[s]); Serial.println("Feld gefunden: " + extraFields[s]);
found = true; found = true;
break; break;
@ -430,7 +430,7 @@ bool checkSpoolmanInstance(const String& url) {
String payload = http.getString(); String payload = http.getString();
JsonDocument doc; JsonDocument doc;
DeserializationError error = deserializeJson(doc, payload); DeserializationError error = deserializeJson(doc, payload);
if (!error && doc.containsKey("status")) { if (!error && doc["status"].is<JsonObject>()) {
const char* status = doc["status"]; const char* status = doc["status"];
http.end(); http.end();
@ -469,7 +469,7 @@ bool saveSpoolmanUrl(const String& url) {
String loadSpoolmanUrl() { String loadSpoolmanUrl() {
JsonDocument doc; JsonDocument doc;
if (loadJsonValue("/spoolman_url.json", doc) && doc.containsKey("url")) { if (loadJsonValue("/spoolman_url.json", doc) && doc["url"].is<JsonObject>()) {
return doc["url"].as<String>(); return doc["url"].as<String>();
} }
Serial.println("Keine gültige Spoolman-URL gefunden."); Serial.println("Keine gültige Spoolman-URL gefunden.");

View File

@ -58,7 +58,7 @@ bool saveBambuCredentials(const String& ip, const String& serialnr, const String
bool loadBambuCredentials() { bool loadBambuCredentials() {
JsonDocument doc; JsonDocument doc;
if (loadJsonValue("/bambu_credentials.json", doc) && doc.containsKey("bambu_ip")) { if (loadJsonValue("/bambu_credentials.json", doc) && doc["bambu_ip"].is<JsonObject>()) {
// Temporäre Strings für die Werte // Temporäre Strings für die Werte
String ip = doc["bambu_ip"].as<String>(); String ip = doc["bambu_ip"].as<String>();
String code = doc["bambu_accesscode"].as<String>(); String code = doc["bambu_accesscode"].as<String>();
@ -270,9 +270,9 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
} }
// Prüfen, ob "print->upgrade_state" und "print.ams.ams" existieren // Prüfen, ob "print->upgrade_state" und "print.ams.ams" existieren
if (doc["print"].containsKey("upgrade_state")) { if (doc["print"]["upgrade_state"].is<JsonObject>()) {
// Prüfen ob AMS-Daten vorhanden sind // Prüfen ob AMS-Daten vorhanden sind
if (!doc["print"].containsKey("ams") || !doc["print"]["ams"].containsKey("ams")) { if (!doc["print"]["ams"].is<JsonObject>() || !doc["print"]["ams"]["ams"].is<JsonObject>()) {
return; return;
} }
@ -315,7 +315,7 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
} }
// Prüfe die externe Spule // Prüfe die externe Spule
if (!hasChanges && doc["print"].containsKey("vt_tray")) { if (!hasChanges && doc["print"]["vt_tray"].is<JsonObject>()) {
JsonObject vtTray = doc["print"]["vt_tray"]; JsonObject vtTray = doc["print"]["vt_tray"];
bool foundExternal = false; bool foundExternal = false;
@ -363,7 +363,7 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
ams_count = amsArray.size(); ams_count = amsArray.size();
// Wenn externe Spule vorhanden, füge sie hinzu // Wenn externe Spule vorhanden, füge sie hinzu
if (doc["print"].containsKey("vt_tray")) { if (doc["print"]["vt_tray"].is<JsonObject>()) {
JsonObject vtTray = doc["print"]["vt_tray"]; JsonObject vtTray = doc["print"]["vt_tray"];
int extIdx = ams_count; // Index für externe Spule int extIdx = ams_count; // Index für externe Spule
ams_data[extIdx].ams_id = 255; // Spezielle ID für externe Spule ams_data[extIdx].ams_id = 255; // Spezielle ID für externe Spule
@ -387,14 +387,14 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
JsonArray wsArray = wsDoc.to<JsonArray>(); JsonArray wsArray = wsDoc.to<JsonArray>();
for (int i = 0; i < ams_count; i++) { for (int i = 0; i < ams_count; i++) {
JsonObject amsObj = wsArray.createNestedObject(); JsonObject amsObj = wsArray.add<JsonObject>();
amsObj["ams_id"] = ams_data[i].ams_id; amsObj["ams_id"] = ams_data[i].ams_id;
JsonArray trays = amsObj.createNestedArray("tray"); JsonArray trays = amsObj["tray"].to<JsonArray>();
int maxTrays = (ams_data[i].ams_id == 255) ? 1 : 4; int maxTrays = (ams_data[i].ams_id == 255) ? 1 : 4;
for (int j = 0; j < maxTrays; j++) { for (int j = 0; j < maxTrays; j++) {
JsonObject trayObj = trays.createNestedObject(); JsonObject trayObj = trays.add<JsonObject>();
trayObj["id"] = ams_data[i].trays[j].id; trayObj["id"] = ams_data[i].trays[j].id;
trayObj["tray_info_idx"] = ams_data[i].trays[j].tray_info_idx; trayObj["tray_info_idx"] = ams_data[i].trays[j].tray_info_idx;
trayObj["tray_type"] = ams_data[i].trays[j].tray_type; trayObj["tray_type"] = ams_data[i].trays[j].tray_type;
@ -427,14 +427,14 @@ void mqtt_callback(char* topic, byte* payload, unsigned int length) {
JsonArray wsArray = wsDoc.to<JsonArray>(); JsonArray wsArray = wsDoc.to<JsonArray>();
for (int j = 0; j < ams_count; j++) { for (int j = 0; j < ams_count; j++) {
JsonObject amsObj = wsArray.createNestedObject(); JsonObject amsObj = wsArray.add<JsonObject>();
amsObj["ams_id"] = ams_data[j].ams_id; amsObj["ams_id"] = ams_data[j].ams_id;
JsonArray trays = amsObj.createNestedArray("tray"); JsonArray trays = amsObj["tray"].to<JsonArray>();
int maxTrays = (ams_data[j].ams_id == 255) ? 1 : 4; int maxTrays = (ams_data[j].ams_id == 255) ? 1 : 4;
for (int k = 0; k < maxTrays; k++) { for (int k = 0; k < maxTrays; k++) {
JsonObject trayObj = trays.createNestedObject(); JsonObject trayObj = trays.add<JsonObject>();
trayObj["id"] = ams_data[j].trays[k].id; trayObj["id"] = ams_data[j].trays[k].id;
trayObj["tray_info_idx"] = ams_data[j].trays[k].tray_info_idx; trayObj["tray_info_idx"] = ams_data[j].trays[k].tray_info_idx;
trayObj["tray_type"] = ams_data[j].trays[k].tray_type; trayObj["tray_type"] = ams_data[j].trays[k].tray_type;