Ich habe mir von einem LLM helfen lassen. Bis auf die Regular-Expression ist der Code aber trivial und sehr überschaubar.
RegEx "kann" ich nicht, daher keine Gewähr, dass die Expression für alle Datentypen und Geräte immer funktioniert. Es gibt einige Attribute (wie z.B. "State") die je Geräte-ID mehrfach existieren. In dem Fall liefert die RegEx immer den ersten Treffer.
Code: Alles auswählen
{
"_Meta": {
"Name": "GardenaRegEx",
"Description": "Extrahiert Datenpunkte zu mehreren Device-IDs aus einem JSON-String der Gardena Cloud.",
"Author": "andererStefan & MetaPro (Gemini)",
"Version": "2.0.1"
// LIZENZ: Der Schöpfer überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.
},
"Input": [
["JSON Daten", "Komplette JSON-Antwort der HTTP-API (String, 16384 Byte)", "$in_json", "a"],
["Gerät 1", "Device-ID in der Form aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee, (String, 64 Byte)", "$in_DeviceId1", "c"],
["Datenpunkt 1.1", "Datenpunkt, z.B. soilHumidity oder activity, (String, 32 Byte)", "$in_Datapoint1_1", "c"],
["Datenpunkt 1.2", "Datenpunkt, z.B. soilHumidity oder activity, (String, 32 Byte)", "$in_Datapoint1_2", "c"],
["Gerät 2", "(String, 64 Byte)", "$in_DeviceId2", "c"],
["Datenpunkt 2.1", "(String, 32 Byte)", "$in_Datapoint2_1", "c"],
["Datenpunkt 2.2", "(String, 32 Byte)", "$in_Datapoint2_2", "c"]
// letzte Zeile ohne Komma abschließen
],
"Output": [
["Wert 1.1", "Der extrahierte Wert zum Datenpunkt 1 von Gerät 1, (String, 32 Byte)", "$out_DataStr1_1", "c"],
["Wert 1.2", "Der extrahierte Wert zum Datenpunkt 2 von Gerät 1, (String, 32 Byte)", "$out_DataStr1_2", "c"],
["Wert 2.1", "(String, 32 Byte)", "$out_DataStr2_1", "c"],
["Wert 2.2", "(String, 32 Byte)", "$out_DataStr2_2", "c"]
// letzte Zeile ohne Komma abschließen
],
"Level": [
// --- Eingänge ---
["$in_json", "string,16384", ""],
["$in_DeviceId1", "string,64", ""],
["$in_Datapoint1_1", "string,32", ""],
["$in_Datapoint1_2", "string,32", ""],
["$in_DeviceId2", "string,64", ""],
["$in_Datapoint2_1", "string,32", ""],
["$in_Datapoint2_2", "string,32", ""],
// --- Ausgänge ---
["$out_DataStr1_1", "string,32", ""],
["$out_DataStr1_2", "string,32", ""],
["$out_DataStr2_1", "string,32", ""],
["$out_DataStr2_2", "string,32", ""],
// --- Regex Bausteine (PCRE2 Syntax, JSON-escaped) ---
["$_RegexP1", "string", "(?s)\"id\"\\s*:\\s*\""],
["$_RegexP2", "string", "\"(?:(?!\"id\"\\s*:\\s*\").)*?\""],
["$_RegexP3", "string", "\"\\s*:\\s*\\{\\s*\"value\"\\s*:\\s*(?|\\\"([^\\\"]*)\\\"|([^,\\s}]+))"],
// --- Zusammengesetzte Regex Querys(PCRE2 Syntax, JSON-escaped) ---
["$_RegexMerged1_1", "string,256", ""],
["$_RegexMerged1_2", "string,256", ""],
["$_RegexMerged2_1", "string,256", ""],
["$_RegexMerged2_2", "string,256", ""]
// letzte Zeile ohne Komma abschließen
],
"Module": [
// --- 1. Dynamische RegEx Queries zusammenbauen ---
["Concat", ["$_RegexP1", "$in_DeviceId1", "$_RegexP2", "$in_Datapoint1_1", "$_RegexP3"], "$_RegexMerged1_1"],
["Concat", ["$_RegexP1", "$in_DeviceId1", "$_RegexP2", "$in_Datapoint1_2", "$_RegexP3"], "$_RegexMerged1_2"],
["Concat", ["$_RegexP1", "$in_DeviceId2", "$_RegexP2", "$in_Datapoint2_1", "$_RegexP3"], "$_RegexMerged2_1"],
["Concat", ["$_RegexP1", "$in_DeviceId2", "$_RegexP2", "$in_Datapoint2_2", "$_RegexP3"], "$_RegexMerged2_2"],
// --- 2. JSON durchsuchen und Wert extrahieren ---
["Regex", "$in_json", "$_RegexMerged1_1", 0, 0, "$out_DataStr1_1", 0, 0, 0, 0],
["Regex", "$in_json", "$_RegexMerged1_2", 0, 0, "$out_DataStr1_2", 0, 0, 0, 0],
["Regex", "$in_json", "$_RegexMerged2_1", 0, 0, "$out_DataStr2_1", 0, 0, 0, 0],
["Regex", "$in_json", "$_RegexMerged2_2", 0, 0, "$out_DataStr2_2", 0, 0, 0, 0]
// letzte Zeile ohne Komma abschließen
]
}