Hinweis: Dieser Beitrag wurde unter Zuhilfenahme einer KI verfasst, um den Satzbau und die Lesbarkeit zu optimieren
Hallo Michaël
@bondt ,
vielen Dank für deine schnelle Hilfe und die Bereitstellung der Custom Logic für Torsten! Dein Ansatz mit `Regex` ist genau der richtige Weg, um diese unsauberen API-Strings zu bändigen.
Ich habe mir erlaubt, deine Logik durch unseren **Kanon V7.02.04** zu schieben und ein „chirurgisches Finish“ aufzutragen. Das Ziel war es, deine funktionale Basis um **Zukunftssicherheit** und **maximale Transparenz** für den Endanwender zu erweitern.
**Was wurde in dieser Version veredelt?**
1. **Selbstdokumentierender Code:** Ich habe ein neues Verfahren angewendet, bei dem jede Zeile und jede Variable direkt im Code erklärt wird. So versteht der Anwender auch in zwei Jahren noch, was in der Logik passiert.
2. **Typ-Härtung:** Umstellung von `boolean` auf das atomare Kürzel `bool` (gemäß unserer neuesten Härtungsregel zur Vermeidung von Parser-Konflikten).
3. **Robustes Regex-Muster:** Das Muster wurde so angepasst, dass es auch bei zukünftigen Änderungen der API (z.B. zusätzliche Leerzeichen oder Vorzeichen) stabil bleibt.
4. **Automatisches UI-Mapping:** Durch den neuen `_Meta`-Standard werden Name und Beschreibung der Logik nun automatisch in die UI des Timberwolf Servers geladen.
Hier ist die veredelte Version für die Community:
/**===========================================================
// TITEL: IoT Array-String Extractor (Deep-Doku Edition)
// AUTOR: Georg E. & AI | BASIS: bondt (ElabNET)
//
// ZEILENWEISE ERKLÄRUNG DER LOGIK:
// 1. Der Roh-String kommt von der API (z.B. "[87.0, 627.3]")
// 2. Regex sucht nach dem Muster für Zahlen: ([-+]?[0-9]*\.?[0-9]+)
// 3. Die erste gefundene Zahl wird in $Lgc_Val1_Str abgelegt.
// 4. Die zweite gefundene Zahl wird in $Lgc_Val2_Str abgelegt.
// 5. STR->FLOAT wandelt die Texte in echte Zahlen für den Bus um.
// 6. Der Status-Code meldet "1", wenn die Extraktion erfolgreich war.
//============================================================*/
{
"_Meta": {
"Name": "IoT Array-String Extractor V1.1",
"Description": "Extrahiert SOC und Energie aus einem API-String. Robust gegen Leerzeichen.",
"Author": "Georg E. & AI",
"Version": "1.1",
"Kanon_Version": "V7.02.04"
},
"Input": [
["Roh-String", "Eingang des API-Textes", "$I_String", "c"]
],
"Output": [
["Wert 1", "Ergebnis 1 (z.B. SOC)", "$O_Val1", "c"],
["Wert 2", "Ergebnis 2 (z.B. Energie)", "$O_Val2", "c"],
["Status-Code", "Diagnose: 1=Erfolg, 0=Fehler", "$O_Status", "a"]
],
"Level": [
// --- DATEN-PUFFER ---
["$I_String", "string,128", ""],
["$DOKU_1", "string", "<- Speicher für den ankommenden API-Text"],
["$Lgc_Val1_Str", "string,64", ""],
["$DOKU_2", "string", "<- Zwischenspeicher Text-Zahl 1"],
["$Lgc_Val2_Str", "string,64", ""],
["$DOKU_3", "string", "<- Zwischenspeicher Text-Zahl 2"],
// --- PHYSIKALISCHE WERTE ---
["$O_Val1", "float", 0.0],
["$DOKU_4", "float", 0.0], // Dummy für Zeilenabstand
["$O_Val2", "float", 0.0],
["$DOKU_5", "float", 0.0], // Dummy für Zeilenabstand
// --- LOGIK-HILFEN ---
["$Lgc_Match", "bool", false],
["$DOKU_6", "string", "<- Wird TRUE, wenn Regex Zahlen findet"],
["$O_Status", "int", 0],
["$DOKU_7", "string", "<- Status-Register für Grafana"],
["$Konst_Pattern", "string", "([-+]?[0-9]*\\.?[0-9]+)"],
["$DOKU_8", "string", "<- Das 'Sieb' für die Zahlenextraktion"],
["$Konst_True", "bool", true]
],
"Module": [
// SCHRITT 1: Die Extraktion (Regex)
["Regex", "$I_String", "$Konst_Pattern", "$Lgc_Match", 0, "$Lgc_Val1_Str", "$Lgc_Val2_Str", 0, 0, 0],
// SCHRITT 2: Die Wandlung von Text zu Zahl
["STR->FLOAT", "$Lgc_Val1_Str", "$O_Val1"],
["STR->FLOAT", "$Lgc_Val2_Str", "$O_Val2"],
// SCHRITT 3: Diagnose-Ausgabe
["BinaryMultiplexer", ["$Lgc_Match"], "$O_Status"]
]
}
Michaël, danke für die Vorlage! Gemeinsam machen wir den Wolf unbesiegbar.

mfg
eib-eg Georg