Seite 1 von 1

[V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Fr Feb 27, 2026 4:47 pm
von ho5enth1en
Hallo,
ich hoffe hier kann mir jemand helfen.

Ich versuche krampfhaft den SOC von meinem Wasserspeicher über die API der My-PV Cloud in den Timberwolf zu bekommen. Über Modbus wird mir dieser Wert leider nicht ausgegeben.

Bild

Bild

Als Ergebnis bekomme ich nur ein Stringformat mit beiden, durch ein Komma getrennten Werten: "[87.09285714285714,627.3655590097011]"
Der Erste wäre der SOC und nach dem Komma die gespeicherte Energie.

Kann mir jemand sagen wie ich die Werte getrennt und in Fließkomma bekomme? Der erste Wert wäre mir besonders wichtig, kann auch eine Ganzzahl sein. Ich habe es auch schon mit Logiken probiert, bin da aber auch nicht weiter gekommen da der Stringwert inkl. Gänsefüßchen und eckiger Klammer steht.

Gruß
Torsten

Re: String Antwort aus 2 Werten in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Fr Feb 27, 2026 7:07 pm
von blaubaerli
Hallo Torsten,

bitte beachte die Forenregeln und stelle doch die Versionsangabe deines TWS in den Betreff (nicht in die Signatur!) und passe auch die Signatur entsprechend an. Details findest du oben in der blauen Box.

Danke :handgestures-salute:

Beste Grüße
Jens

Re: [V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Mo Mär 02, 2026 11:24 am
von StefanW
Hallo Thorsten,

wir sehen uns das gerne an, wenn Du dafür die Signatur richtig stellst und das bedeutet, die Versionsnummer daraus zu entfernen.

Merci

Stefan

Re: [V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Mo Mär 02, 2026 7:17 pm
von Sun1453
Ich habe mal KI befragt und diese sagte mir in dem Zusammenhang das:

Dieser String
" [87.09285714285714,627.3655590097011] " ist ein klassisches JSON-Array mit zwei numerischen Werten (wahrscheinlich SOC und Energie).
Um diese Werte im Timberwolf Server einzeln nutzbar zu machen, ist der effizienteste Weg die Nutzung eines Selektors (JSONPath).
1. Methode: Über den Selektor (Empfohlen)
Falls der String über eine HTTP-API oder MQTT empfangen wird, kannst du die Werte direkt beim Import trennen, ohne eine extra Logik bauen zu müssen:

Erster Wert: Nutze den Selektor $[0] (extrahiert 87.09...).
Zweiter Wert: Nutze den Selektor $[1] (extrahiert 627.36...).
Stelle den Datentyp auf Float, damit der Timberwolf die Werte direkt als Zahl verarbeitet.

2. Methode: Über die Logik-Engine (RegEx)
Falls der String bereits als ein einzelnes Objekt in der Logik vorliegt, nutzt du das RegEx-Modul (verfügbar ab V4.1).
Konfiguration für RegEx:
Um die Zahlen ohne die Klammern zu extrahieren, kannst du folgendes Muster verwenden:

Muster: ([-+]?[0-9]*\.?[0-9]+)
Dieses Muster findet alle Gleitkommazahlen im String.
In der Logik kannst du dann den 1. Treffer auf Ausgang A und den 2. Treffer auf Ausgang B legen.

3. Alternative: Custom Logik
Falls du auf einer älteren Version bist, kannst du eine Custom Logik erstellen, die den String mittels printf oder String-Manipulationen zerlegt. Da der String jedoch ein valides JSON-Format hat, ist der Weg über den Selektor (Methode 1) immer vorzuziehen, da er am wenigsten Ressourcen verbraucht.
Zusatz-Tipp: Wenn du die Werte in einer Zeitreihe speichern möchtest, aktiviere im Objektsystem die Datenaufzeichnung für die beiden extrahierten Einzelobjekte.
Soll ich dir bei der Erstellung eines spezifischen RegEx-Ausdrucks oder einer Custom-Logik für dein System helfen?

Re: [V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Mo Mär 02, 2026 9:10 pm
von eib-eg
Hinweis: Dieser Beitrag wurde unter Zuhilfenahme einer KI verfasst, um den Satzbau und die Lesbarkeit zu optimieren.

Hallo Torsten @ho5enth1en ,

Michael @Sun1453 hat dir bereits den technisch effizientesten Weg aufgezeigt: Die Nutzung von **JSONPath** direkt im HTTP-API Manager (`$[0]` und `$[1]`) ist der „Königsweg“, da er keine zusätzliche Logik-Rechenleistung benötigt.

Da wir uns hier im Bereich der energetischen Forensik bewegen, möchte ich dir noch ein paar Tipps aus unserem **gehärteten Kanon 7.02.04** mitgeben. In unserem Regelwerk sind für solche Cloud-Anbindungen einige Sicherheits-Prinzipien verankert, die über die reine Datenextraktion hinausgehen:

1. **Das Prinzip der Daten-Frische:**
In unserem Kanon ist festgeschrieben, dass man externen Werten (Cloud-APIs) niemals blind vertrauen darf. Wir empfehlen dir, in einer nachgeschalteten Logik zu prüfen, wie alt der Wert ist. Wenn die Cloud mal hängt, sollte dein System nicht mit einem „eingefrorenen“ SOC weiterrechnen, sondern nach einer definierten Zeit in einen sicheren Zustand gehen.

2. **Lokale Souveränität (Veto-Recht):**
Ein wichtiges Prinzip bei uns ist, dass Fern-Werte (API) niemals alleinige Entscheidungsgewalt über kritische Hardware (wie Heizstäbe) haben sollten. Wir verknüpfen solche Werte in der Logik immer mit einem „lokalen Veto“ – also einem echten Sensor vor Ort, der im Zweifelsfall die Cloud übersteuert.

3. **Einheiten-Normierung:**
Die API liefert Wh. Für eine saubere Vergleichbarkeit im Energiemanagement und eine übersichtliche Visualisierung empfiehlt es sich, diesen Wert direkt in der Logik auf kWh zu normieren. Das hält dein „digitales Scheckheft“ sauber.

4. **Visualisierungs-Tipp:**
Da API-Werte diskrete Sprünge machen (Abfrageintervalle), solltest du diese in Grafana zwingend als **„Step-After“** visualisieren. Nur so siehst du die physikalische Wahrheit der Datenübertragung ohne künstliche Schrägen.

Viel Erfolg bei der Einbindung deines myPV-Speichers!

mfg
eib-eg Georg

Re: [V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Mo Mär 02, 2026 11:21 pm
von ho5enth1en
Michael @Sun1453 super, danke, ich denke das sind genau die Infos die mir gefehlt haben, werde vermutlich aber erst am Wochenende dazu kommen es zu testen. API und Ich sind noch nicht wirklich Freunde, ich fuchse mich aber gerade rein.
Ich erweitere diesen Tread wenn es geklappt oder nicht geklappt hat.

Stefan @StefanW , vielen Dank, den VPN habe ich mal vorsorglich geöffnet, ich probiere aber erstmal Michael seinen Lösungsansatz und werde über den Erfolg berichten
Off Topic
Signatur ist angepasst, sorry bin hier noch in der Lernphase, habe es aber in der Wiki gefunden :dance:
Georg @eib-eg , danke auch für deine Hinweise / Kritiken, die Punkte sind mir bewusst. Da der benötigte Wert nur ein Nice-to-have-Wert als Information für meine Visu bzw das Pixeldisplay ist und nicht die die Steuerung des Heizsystems greift, ist mir das ziemlich hupe. Alle relevanten Werte gehen bei mir über Modbus. Nur für diesen Wert ist es leider nicht (ohne Weiteres) möglich

:bow-yellow: Torsten

Re: [V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Di Mär 03, 2026 9:33 am
von bondt
Guten Morgen Torsten (@ho5enth1en),

Den Königsweg von Michael (@Sun1453) funktioniert nur, wenn der Wert tatsächlich JSON ist. In diesem Fall wird das nicht funktionieren, da einen String ausgegeben wird.

Ein Custom Logik, der als Eingang den String (im Format "[0.0,0.0]") nimmt und als Output zwei Floats gibt, kann wie folgt aussehen:

Code: Alles auswählen

{
  "Level": [
    [ "$inArrayOfFloats", "string,128", "[0.0,0.0]" ],
    [ "$inArrayOfFloatsRegex", "string", "\\[([0-9.]+),([0-9.]+)\\]" ],
    [ "$hasMatch", "boolean", false ],
    [ "$outStrA", "string", "0.0" ],
    [ "$outStrB", "string", "0.0" ],
    [ "$outFloatA", "float", 0.0 ],
    [ "$outFloatB", "float", 0.0 ]
  ],
  "Input": [
    [ "Array of 2 floats", "Array of 2 floats", "$inArrayOfFloats", "a" ]
  ],
  "Module": [
    [
      "Regex",
      "$inArrayOfFloats",
      "$inArrayOfFloatsRegex",
      "-$hasMatch",
      0,
      "$outStrA",
      "$outStrB",
      0,
      0,
      0
    ],
    [ "STR->FLOAT", "$outStrA", "$outFloatA" ],
    [ "STR->FLOAT", "$outStrB", "$outFloatB" ]
  ],
  "Output": [
    [ "Float 1", "First of 2 floats", "$outFloatA", "a" ],
    [ "Float 2", "First of 2 floats", "$outFloatB", "a" ],
    [ "Format error", "Not an array of floats", "$hasMatch", "a" ]
  ]
}
Als Bonus gibt es noch einen Boolean, der dir sagt, ob das auseinanderziehen geklappt hat.

Hoffe das hilft! :-)

Re: [V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Di Mär 03, 2026 6:21 pm
von ho5enth1en
Hallo Michaël @bondt
vielen Dank, es funktioniert perfekt. :handgestures-thumbsup: :dance:
Gleichzeitig habe ich durch beide Ansätze einiges dazu gelernt. Danke an alle für die schnelle Hilfe :bow-yellow:

Re: [V4.8 IP6] Antwort aus 2 Werten im String in Fließkomma oder Ganzzahl (SoC Wasserspeicher, myPV)

Verfasst: Di Mär 03, 2026 8:12 pm
von eib-eg
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