sortby – Devices nach Reading-Werten sortieren

Jeder der sich mit FHEM beschäftigt und eine größere Anzahl an Devices hat, wird bereits das Attribut "sortby" kennen. Mit diesem Attribut lassen sich Devices innerhalb einer Raum-Übersichtsseite sortieren. Im Normalfall verwendet man dazu natürliche  Zahlen - 0,1,2,3 usw. Die Devices werden dann entsprechend beginnend bei 0 sortiert. Man kann jedoch auch die Devices etwas flexibler sortieren. Zum Beispiel nach einem Wert eines Readings. Praktisch ist dies bei den Tankstellen-Devices. So lassen sich die Devices nach dem günstigsten Preis sortieren. In diesem Beitrag möchte ich euch zeigen, wie ihr dies macht.

sortby - Das Attribut für die Sortierung von Devices

Bevor ich nun anfange euch die flexible Sortierung zu erklären, fange ich zunächst beim eigentlichen Attribut "sortby" an. Das Attribut ist relativ simpel. Je nach höhe, der mit dem Attribut gesetzt Zahl, wird das Device sortiert. 

attr Flasche sortby 0; 
attr Stehlampe sortby 1;

In diesem Fall wird das Device "Flasche" am oberen Ende platziert und danach das Device "Stehlampe".

In diesem Fall ist die Sortierung jedoch statisch und passt sich nicht an.

Notify für die flexible Sortierung

Die Idee hinter der flexiblen Sortierung bekam ich durch eine Email eines Bolognesern. Er wies mich auf den Forums-Beitrag von Rudolf König hin, wo die Sortierung nach dem Zeitstempel behandelt wurde.

In diesem Fall wird ein Notify angesprochen, welches das Attribut "sortby" entsprechend setzt. In diesem Fall wurde als Wert "9999999999-time()" verwendet. Je höher der Zeitstempel also ist, desto niedrige der Wert für die Sortierung, desto höher wird das Device platziert. 

define n_sortby notify <regexp> { $attr{$NAME}{sortby} = 9999999999-time();; undef }

Das Ziel ist es nun also, dass das Notify anzusprechen sobald das Reading, nach welchem sortiert werden soll, geändert wird. 

Als Beispiel nehme ich drei Tankstellen Devices, welche ich mit Hilfe meines Blogbeitrages definiert habe. Das Ziel ist es, die Tankstellen-Devices nach dem Preis für SuperE10 zu Sortieren. Beginnend mit dem günstigsten Preis. 

define n_sortby notify TankstelleARAL:SuperE10:.*|TankstelleOWM:SuperE10:.*|TankstelleSHEL:SuperE10:.* { $attr{NAME}{sortby} = ReadingsVal("$NAME","SuperE10",0);; undef }

Änder sich nun das Reading "SuperE10" der Tankstellen-Devices, so wird das Notify angesprochen und das Attribut "sortby" wird gesetzt.

Zum Beginn solltet ihr die Readings der Devices neu einlesen, damit das Attribut gesetzt wird.

​set TankstelleOWM reread

Da das sortby-Attribut auch mit Kommazahlen umgehen kann, lautet die Sortierfolge zum Bespei wie folgt: "1.33 - 1.34 - 1.36". Das Device mit dem günstigsten SuperE10-Preis wird nun ganz oben platziert.

Durch Anpassung des Notifys können somit natürlich auch nach jedem beliebigen Reading sortiert werden. Vorausgesetzt natürlich, dass es sich um ein Zahlenreading handelt.

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
  Subscribe  
Benachrichtige mich zu: