UDP Transformer - sort (shipped)

Der UDP-Transformer sort sortiert eine Liste von Werten aufsteigend oder optional absteigend. 

Zurückgegeben werden die Werte aufsteigend sortiert, sowie die Indexe (d.h. der wievielte Wert ist in der sortierten Liste an welcher Position.

Aufruf des sort Transformers

Sortieren aufsteigend

publish sort <to/my/topic> <Wert1>:<Wert2>:<Wert3>:<....>

Beispiel mit Werten, übergeben mit einem Status-Baustein

publish sort sorttemperatures <v1.2>:<v2.2>:<v3.2>:<v4.2>

Sortieren absteigend

publish sort <to/my/topic> rsort:<Wert1>:<Wert2>:<Wert3>:<....>

Beispiel mit Werten, übergeben mit einem Status-Baustein

publish sort sorttemperatures rsort:<v1.2>:<v2.2>:<v3.2>:<v4.2>

Publish zusammenbauen

Der Transformer kann beliebig viele Werte sortieren, allerdings ist es schwierig, aus Loxone mehrere Werte gleichzeitig zu übergeben.

Man kann dafür den Status-Baustein benutzen - Bis zu vier Wert anschließen, und in einer Zeile des Statusbausteins bei Statustext <v1.2>:<v2.2>:<v3.2>:<v4.2>

Der String mit den Werten sind dann schon zusammengestellt, sodass das Publish dann so aussieht:

publish sort sorttemperatures <v>
bzw.

publish sort sorttemperatures rsort:<v>

Wenn mehr als vier Werte benötigt werden, müssen zwei oder mehrere Statusbausteine kaskadiert werden, sodass am Ende ein Sting mit allen Werten herauskommt.

Rückgabe

Damit die Rückgabe empfangen wird, muss das beim Publish angegebene Topic subscribed werden, z.B.

to/my/topic/#

sorttemperatures/#

Die Rückgabe erfolgt in Unterelementen des Topics, das du bei <to/my/topic> angegeben hast.

Zurückgegeben wird immer 1. die sortierte Liste der Werte, sowie 2. die Indexe der Werte

Liste der Werte

Als Beispiel, das publish überträgt 5:2:7:1

Ergebnis 

<topic>/val1 → 1
<topic>/val2 → 2
<topic>/val3 → 5
<topic>/val4 → 7

Indexe der Werte

Als Beispiel, das publish überträgt 5:2:7:1

Ergebnis

<topic>/index1 → 4
<topic>/index2 → 2
<topic>/index3 → 1
<topic>/index4 → 3

Das bedeutet:

index1 (das erste Ergebnis der sortierten Liste) ist der 4. Wert, den du übergeben hast (du hattest übergeben 5:2:7:1, der vierte Werte ist sortiert an erster Stelle)

index2 (das zweite Ergebnis der sortierten Liste) ist der 2. Wert, den du übergeben hast (du hattest übergeben 5:2:7:1, der zweite Werte ist sortiert an zweiter Stelle)

Damit ist es beispielsweise möglich, zwei Radiotasten-Bausteine mittels Analogeingang zu setzen mit den kleinsten und dem zweitkleinsten Wert.

Anwendungsmöglichkeiten

  • Initial entwickelt dafür, um bei mehreren Bewässerungskreisen immer jene zwei Kreise auszuwählen, die bisher am wenigsten Wasser abbekommen haben.
  • Es könnte dafür verwendet werden, mittels Statusbaustein die aktuell größten Stomverbraucher anzuzeigen.
  • Oder in einem Haus die drei höchsten Raumtemperaturen anzuzeigen.
  • Oder einfach für sonst alles, wo etwas sortiert werden muss (Lächeln)


Screenshots Beispielprogrammierung

Fünf Pumpen mit Betriebszeitzähler (die Pumpenausgänge habe ich der Einfachheit halber nicht eingebaut). 

Das Beispiel startet sich erstmal anhand eines "Startimpulses" (unten) von selbst. Das ist erforderlich, weil der Virtuelle Ausgangsbefehl (also der Aufruf der Berechnung) nur getriggert wird, wenn sich etwas ändert.

Mit den Statusbausteinen werden die Minuten der Betriebszeitzähler eingesammelt und zu einem String zusammengefasst. Da nur <v1>, <v2> usw. verwendet wurde, werden keine Kommazahlen übertragen, entsprechend wird auch nur bei jeder Minutenänderung die Wertliste an den sort-Transformer übertragen.

Links befinden sich zwei Virtuelle Eingänge betrieb_sortiert_index1 (die Nr. der Pumpe mit der geringsten Betriebszeit) und betrieb_sort_index2 mit der zweit-geringsten Betriebszeit. Die zurückgegebenen Werte dieser Indexe schalten die Radiotasten, sodass immer jene zwei Pumpen laufen, die am wenigsten Betriebszeit haben. 

Immer, wenn ein Betriebszeitzähler die Minutenschwelle überschreitet, setzen die Statusbausteine einen neuen String zusammen, übermitteln diesen per Virtueller Ausgangsbefehl an den sort-Transformer, dieser antwortet mit den neuen index1 und index2-Pumpen, worauf sich die Pumpen durch die Radiotasten umschalten.


Statusbausteine kaskadiert

Status-Baustein 1 (mit den zwei Anschlüssen)

Status-Baustein 2 (mit den vier Anschlüssen)

Virtueller Ausgangsbefehl