Seite 1 von 1
String-Funktionen
Verfasst: Mo Jan 24, 2022 3:48 pm
von KFloo
Hallo zusammen,
ich bin neu hier und erkunde die Möglichkeiten.
Bzgl. der Logikbausteine fehlen mir String-Funktionen sehr!
(Ich könnte mir auch vorstellen, statt in Logikbausteinen, solche Anpassungen/Zerlegungen auch als Nachverarbeitung im Objektmanager anzubieten (vor der Zuführung zu Zielen wie KNX oder Logiken).)
Ich bitte um Nachsicht, wenn einige Bezeichnungen von mir nicht ganz getroffen sind - ich habe den Timberwolf erst seit kurzem im Einsatz.
Hier ganz kontrete Anwendungsbeispiele:
1) Abruf der aktuellen Raumtemperaturen via REST (Steuerung, die noch zwecks Heizung verwendet wird)
- Rückgabewert ist ein CSV-String in den JSON-Elementen: Temperatur IST;Temperatur SOLL;Ventilöffnung;Betriebsmodus;Korrektur
- Hier müsste ich den String bei den Semikolons zerteilen und dann die einzelnen Werte weiterverarbeiten
- Den Wert zum Betriebsmodus würde ich gerne zusätzlich umwandeln in einen sprechenden Text: "Komfortbetrieb", "Absenkbetrieb",..
2) Abruf der aktuellen Werte meiner KWL (Pluggit) via ModbusTCP
- Der Betriebsmodus kommt als UINT. Würde sie gerne in einen sprechenden Text umwandeln und auf den KNX-Bus schicken, zB: "Bedarfsmodus", "Wochenmodus",...
Zusatzfrage: Können nach Senden eines Wertes alle Werte erneut abgerufen werden (ein kompletter Trigger durch Objektänderung, zusätzlich zum periodischem Abruf, vgl. HTTP-API)?
- Hintergrund: Durch Setzen eines Betriebsmodus können sich auch andere Werte als nur der Betriebsmodus ändern (Bypass, RPM,..)
3) Einlesen der aktuellen Werte meiner Enthärtungsanlage (Grünbeck) via MQTT:
- Der Wert des MQTT-Topics zum Salzverbrauch ist ein JSON-String (mit mehreren Details darin) - diesen würde ich gerne einem (weiteren) Logikbaustein zuführen und weiterverarbeiten.
4) Verbinden von mehreren Strings
- Mischung aus variablen Eingangswerten und vorgegebenen Strings
Viele Grüße,
Florian
Re: String-Funktionen
Verfasst: Mo Jan 24, 2022 5:24 pm
von StefanW
Hallo Florian,
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pmBzgl. der Logikbausteine fehlen mir String-Funktionen sehr!
Ja, mit den neuen Möglichkeiten über Modbus, MQTT und Rest-API kommt hier Bedarf auf, wir arbeiten auch daran.
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pmIch könnte mir auch vorstellen, statt in Logikbausteinen, solche Anpassungen/Zerlegungen auch als Nachverarbeitung im Objektmanager anzubieten (vor der Zuführung zu Zielen wie KNX oder Logiken).)
Ja, der Timberwolf Server ist dahingehend ausgelegt, dass man möglichst wenig von der Logik in Anspruch nehmen muss, weil die meisten Dinge entweder automatisch funktionieren oder in den Subsystemen gelöst sind.
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pm- Rückgabewert ist ein CSV-String in den JSON-Elementen: Temperatur IST;Temperatur SOLL;Ventilöffnung;Betriebsmodus;Korrektur
Ja, es steht auf unserer ToDo Liste, dass wir Arrays in JSON noch unterstützen wollen bei Zerlegung (und auch beim Schreiben)
==> Konkrete Beispiele helfen uns, also bitte mal das ganze JSON posten bitte
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pm- Den Wert zum Betriebsmodus würde ich gerne zusätzlich umwandeln in einen sprechenden Text: "Komfortbetrieb", "Absenkbetrieb",..
Ja, verstanden, ein Mapping-Feature haben wir auch auf der Liste, sollte aber mit der Logik bereits funktionieren
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pm- Der Betriebsmodus kommt als UINT. Würde sie gerne in einen sprechenden Text umwandeln und auf den KNX-Bus schicken, zB: "Bedarfsmodus", "Wochenmodus",...
Ja, das gleiche Thema, steht auch auf der Liste. Software wird eben nie fertig
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pmZusatzfrage: Können nach Senden eines Wertes alle Werte erneut abgerufen werden (ein kompletter Trigger durch Objektänderung, zusätzlich zum periodischem Abruf, vgl. HTTP-API)?
Schreiben per Trigger geht schon, Lesen auf Trigger steht auf der Liste
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pm3) Einlesen der aktuellen Werte meiner Enthärtungsanlage (Grünbeck) via MQTT:
- Der Wert des MQTT-Topics zum Salzverbrauch ist ein JSON-String (mit mehreren Details darin) - diesen würde ich gerne einem (weiteren) Logikbaustein zuführen und weiterverarbeiten.
Ist das Thema Array
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pm Verbinden von mehreren Strings; Mischung aus variablen Eingangswerten und vorgegebenen Strings
Ist bereits in Entwicklung
lg
Stefan
Re: String-Funktionen
Verfasst: Di Jan 25, 2022 10:04 am
von KFloo
Vorweg: Das mit dem MQTT/Grünbeck möchste ich etwas relativieren. Es ist vom Hersteller geplant, Anlagen direkt via MQTT einbinden zu können. Aktuell läuft das indirekt via iobroker und MQTT.
Hallo Stefan,
vielen Dank für deine Antwort - das hört sich ja ganz großartig an!
Ich finde es wirklich toll, dass Nutzer sich direkt mit dem Hersteller austauschen können.
Hier zwei JSON-Strings:
Raumtemperaturen:
(Temperatur IST;Temperatur SOLL;Ventilöffnung;Betriebsmodus;Korrektur)
{
"item0": {
"sumstate": {
"value": "22.20000076293945;22.00;41.44;8;1;0.00;0;"
}
},
"item1": {
"sumstate": {
"value": "23.10000038146973;18.00;0.00;16;1;1.50;0;"
}
},
"item2": {
"sumstate": {
"value": "21.60000038146973;21.00;1.72;8;1;-1.00;0;"
}
(gekürzt - sind noch weitere items)
}
Energiekosten:
(Act.power;Energy today;Energy month;Energy sum;Power max.;Unit energy;Unit power;Energy today 0-6;6-12;12-18;18-24;Energy yesterd. 0-6;6-12;12-18;18-24;1=Act.Power available)
{
"item0": {
"sumstate": {
"value": "0.48;5.10;419.31;27879.24;10.00;kWh;kW;2233;2869;0;0;2066;6875;10065;3630;1;"
}
},
"item1": {
"sumstate": {
"value": "13.70;39.00;1206.00;57008.00;25.00;kWh;kW;11000;28000;0;0;7000;27000;18000;11000;1;"
}
}
}
Ich kann mir vorstellen, dass der Hersteller das einfach unschön implementiert hat.
Aber ich denke, es kommt durchaus vor, dass manchmal mehrere Stringverarbeitungen hintereinander durchgeführt werden müssen, zB. CSV in JSON oder JSON in MQTT.
Viele Grüße,
Florian
Re: String-Funktionen
Verfasst: Mo Feb 14, 2022 1:01 am
von adimaster
StefanW hat geschrieben: ↑Mo Jan 24, 2022 5:24 pm
KFloo hat geschrieben: ↑Mo Jan 24, 2022 3:48 pm Verbinden von mehreren Strings; Mischung aus variablen Eingangswerten und vorgegebenen Strings
Ist bereits in Entwicklung
Wenn ich das richtig verstehe, dann würde mir dieses Feature helfen.
Denn ich finde gerade keine Möglichkeit, wie ich mit dem Uhr-Zeit-Modul ein Datum in ein bestimmtes Format bringen kann (für einen HTTP-API-Request --> Abfrage, ob heute Feiertag ist oder nicht).
So würde ich mir das vorstellen (nur exemplarisch; sOutDate ist festgeschrieben, weil ich leider keine Möglichkeit kenne).
Frage: Muss ich hierzu auf obiges Modul warten oder gibt es bereits heute schon andere Möglichkeiten über den TWS?
Mir würde höchstens noch einfallen, über eine Rule in OpenHAB etwas zu erstellen; würde ich aber gerne vermeiden wollen

.
Re: String-Funktionen
Verfasst: Do Mai 02, 2024 12:05 am
von Thimo
In der Version 4.0 Insider Preview 11 ließe sich der gewünschte String über
Printf und
Concat zusammenbauen.
Cheers,
Thimo
Re: String-Funktionen
Verfasst: Mo Okt 14, 2024 7:12 pm
von SchlaubySchlu
Hallo zusammen,
ich möchte das Thema noch mal aufgreifen und eine Implementierung der folgenden drei String-Funktionen in die Logik anregen.
Funktion 1: Stringlänge ermitteln
- Input: Beliebiger String
- Output: Länge des String als Integer
Funktion 2: String auf ein Zeichen / eine Zeichenkette durchsuchen und neben True/Falls auch die Position / Startposition bezogen auf den Beginn des String zurückgeben.
- Input 1: String
- Input 2: Zeichen / Zeichenkette die gesucht werden soll
- Output 1: Meldung ob Zeichen / Zeichenkette gefunden wurde (true/false)
- Output 2: Position bei der das Zeichen / Zeichenkette gefunden wurde, Zählbeginn ist der String-Start (Integer)
Funktion 3: String an einer vorgegeben Position in zwei Teile teilen, bzw. aus einem String an einer Position ein bestimmtes Stück mit einer definierbaren Länge herausschneiden.
- Input 1: String
- Input 2: Position an der der Ausschnitt beginnen soll
- Input 3: Länge des Ausschnitt (wenn 0 angegeben wird, dann wird der Rest des String ab der Position von Input 2 ausgegeben)
- Output 1: Teilstring / Reststring (wie mit Input 2 und Input 3 definiert)
Evtl. könnte noch ein Error-Händling / Error-Out nützlich sein.
Damit sollten die String-Funktionen der Logik wieder ein Stück vollständiger sein.
Gruß
Ralf