readingsGroup mit numerischer Sortierung - Default für "leere" Werte nach hinten

Begonnen von reibuehl, 12 Januar 2021, 10:50:38

Vorheriges Thema - Nächstes Thema

reibuehl

Ich benutze eine readingsGroup um mir die Müllabfuhrtermine aus einem Abfall Kalender anzeigen zu lassen. Dieser ist nach Tagen bis zur Abholung sortiert.

Leider werden aber die Zeilen, für die momentan kein Wert vorhanden ist (Dargestellt in der Tabelle mit dem Wert "-") direkt nach der 0 und vor den anderen Numerischen Werten einsortiert (siehe Screenshot).

Ich hab auch schon versucht statt "-" ein nur ein Leerzeichen zu verwenden oder den String länger zu machen ("- -") aber ich schaffe es nicht, die Zeilen ohne Wert ans Ende der Tabelle zu bekommen.

Habt Ihr mir da einen Tipp?
Reiner.

OdfFhem

Tipps sind zielführender, wenn man ein list der fraglichen readingsGroup vor Augen hat ...

reibuehl

Ich weiß nicht, ob das in dem Fall auch so ist, aber ich hänge ein List der readingsGroup natürlich gerne hier an:

Internals:
   DEF        Muelltermine:<Tag>,<Datum>,<>,<Ereignis>,<Tage>,
Muelltermine:Abfallkalender_GelberSackTonne_weekday,Abfallkalender_GelberSackTonne_date,<%dustbin@yellow>,Abfallkalender_GelberSackTonne_text,Abfallkalender_GelberSackTonne_days
Muelltermine:Abfallkalender_Biotonne_weekday,Abfallkalender_Biotonne_date,<%dustbin@limegreen>,Abfallkalender_Biotonne_text,Abfallkalender_Biotonne_days
Muelltermine:Abfallkalender_Papiertonne_weekday,Abfallkalender_Papiertonne_date,<%dustbin@royalblue>,Abfallkalender_Papiertonne_text,Abfallkalender_Papiertonne_days
Muelltermine:Abfallkalender_Restmuell2-woechentlich_weekday,Abfallkalender_Restmuell2-woechentlich_date,<%dustbin@black>,Abfallkalender_Restmuell2-woechentlich_text,Abfallkalender_Restmuell2-woechentlich_days
Muelltermine:!Abfallkalender_Schadstoffsammlung_weekday,!Abfallkalender_Schadstoffsammlung_date,<%dustbin@black>,!Abfallkalender_Schadstoffsammlung_text,!Abfallkalender_Schadstoffsammlung_days
Muelltermine:!Abfallkalender_Warentauschtag_weekday,!Abfallkalender_Warentauschtag_date,<%recycling@green>,!Abfallkalender_Warentauschtag_text,!Abfallkalender_Warentauschtag_days
   FUUID      5c59d11a-f33f-3bc6-5d76-b146b7b55931f527
   NAME       rg_Abfallkalender
   NR         620
   NTFY_ORDER 50-rg_Abfallkalender
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
     Muelltermine 1
   CONTENT2:
   DEVICES:
     ARRAY(0xa3d6140)
     ARRAY(0x9350ab8)
     ARRAY(0x9e09b44)
     ARRAY(0xa22d554)
     ARRAY(0x8fd78f4)
     ARRAY(0x92c3a10)
     ARRAY(0x9449a50)
   fhem:
     lastDefChange 38
     last_update 1610444784.25364
   helper:
     DEF       
     valueFormat {
if ($VALUE eq "Abfallkalender_Schadstoffsammlung_text") {
    return 'Schadstoffsammlung';;
} elsif ($VALUE eq "Abfallkalender_Warentauschtag_text") {
    return 'Warentauschtag';;
} elsif ($VALUE =~ /_weekday/) {
    return '-';;
} elsif ($VALUE =~ /_days/) {
    return '-';;
} elsif ($VALUE =~ /_date/) {
    return '-';;
} else {
    return $VALUE;;
}
}
     positions:
       Muelltermine.Abfallkalender_Biotonne_date 3:2
       Muelltermine.Abfallkalender_Biotonne_days 3:5
       Muelltermine.Abfallkalender_Biotonne_text 3:4
       Muelltermine.Abfallkalender_Biotonne_weekday 3:1
       Muelltermine.Abfallkalender_GelberSackTonne_date 2:2
       Muelltermine.Abfallkalender_GelberSackTonne_days 2:5
       Muelltermine.Abfallkalender_GelberSackTonne_text 2:4
       Muelltermine.Abfallkalender_GelberSackTonne_weekday 2:1
       Muelltermine.Abfallkalender_Papiertonne_date 4:2
       Muelltermine.Abfallkalender_Papiertonne_days 4:5
       Muelltermine.Abfallkalender_Papiertonne_text 4:4
       Muelltermine.Abfallkalender_Papiertonne_weekday 4:1
       Muelltermine.Abfallkalender_Restmuell2-woechentlich_date 5:2
       Muelltermine.Abfallkalender_Restmuell2-woechentlich_days 5:5
       Muelltermine.Abfallkalender_Restmuell2-woechentlich_text 5:4
       Muelltermine.Abfallkalender_Restmuell2-woechentlich_weekday 5:1
       Muelltermine.Abfallkalender_Schadstoffsammlung_date 6:2
       Muelltermine.Abfallkalender_Schadstoffsammlung_days 6:5
       Muelltermine.Abfallkalender_Schadstoffsammlung_text 6:4
       Muelltermine.Abfallkalender_Schadstoffsammlung_weekday 6:1
       Muelltermine.Abfallkalender_Warentauschtag_date 7:2
       Muelltermine.Abfallkalender_Warentauschtag_days 7:5
       Muelltermine.Abfallkalender_Warentauschtag_text 7:4
       Muelltermine.Abfallkalender_Warentauschtag_weekday 7:1
     recalc:
       undef
       ARRAY(0x9ae7488)
       ARRAY(0x9de0548)
       undef
       ARRAY(0xa1a64f4)
       ARRAY(0x9a23044)
     values:
       formated:
         undef
         ARRAY(0x8c59610)
         ARRAY(0x9930a3c)
         undef
         ARRAY(0x9e72758)
         ARRAY(0xa267650)
       orig:
         undef
         ARRAY(0xa2620f8)
         ARRAY(0x9eaa39c)
         undef
         ARRAY(0x9a621ac)
         ARRAY(0x9d3e90c)
       prefixsuffix:
         undef
         ARRAY(0x8ebcf18)
         ARRAY(0x93ad7b0)
         undef
         ARRAY(0x922cdf4)
         ARRAY(0x9467940)
Attributes:
   DbLogExclude .*
   alias      Müllabfuhrtermine
   group      Kalender
   icon       recycling
   nonames    1
   room       Haus
   sortColumn 5
   valueFormat {
if ($VALUE eq "Abfallkalender_Schadstoffsammlung_text") {
    return 'Schadstoffsammlung';;
} elsif ($VALUE eq "Abfallkalender_Warentauschtag_text") {
    return 'Warentauschtag';;
} elsif ($VALUE =~ /_weekday/) {
    return '-';;
} elsif ($VALUE =~ /_days/) {
    return '-';;
} elsif ($VALUE =~ /_date/) {
    return '-';;
} else {
    return $VALUE;;
}
}
Reiner.

OdfFhem

... Eine kleine Zwischenfrage ...
Beim Betrachten vom list fällt auf, dass im Attribut valueFormat $VALUE mit Readingnamen verglichen wird. Ist dies tatsächlich möglich? Bei meiner nachgestellten readingsGroup komme ich damit jedenfalls auf keinen grünen Zweig. Bei Dir stehen die "-" vermutlich schon im eigentlichen Reading, oder?

... eigentliches Thema ...
Vom Wert gilt bei numerischer Sortierung nur der numerische Anteil eines Wertes. Bei "-" oder "--" entspricht dies dem Wert 0.

Im einfachsten Fall kann/muss man dem zu ignorierenden Wert eine hohe Zahl unterjubeln, um diese Zeile ans Ende zu bringen. Mögliche Werte wären z.B. "> 90 Tage", o.ä.

Schöner wäre es vielleicht, die datumlose Zeile gar nicht erst darzustellen. Dies geschieht im Attribut valueFormat, indem man bei "positivem" Vergleich den Wert undef zurückgibt. Wichtig dabei ist aber, dies für jede Spalte einer auszublendenden Zeile zu tun.

reibuehl

Der Vergleich von $VALUE mit dem Reading Namen funktioniert in dem Fall, weil das wohl ein Nebeneffekt des ! vor dem Reading Namen im DEF ist. Wenn man über vorangestelltes "!" das Anzeigen von leeren Readings erzwingt - in meinem Fall um das Icon an der richtigen Stelle in der Tabelle zu haben und nicht ganz vorne - dann wird der Name des Readings als $VALUE verwendet.

Vielleicht wäre es in meinem Fall besser, das Icon bei den datumlosen Zeilen irgendwie zu unterdrücken. Die anderen Felder sind ja schon leer... muss ich mir mal ansehen.   
Reiner.

reibuehl

Das Unterdrücken der Icons scheint irgendwie nicht zu funktionieren :(

Ich habe versucht, mit $VALUE =~ /recycling\@green/ && ReadingsVal("Muelltermine", "Abfallkalender_Warentauschtag_days", "") eq "" die richtige Spalte in der richtigen Zeile zu erwischen und diese dann als undef zurückzugeben aber das funktioniert so nicht. Scheinbar ist bei den Icons irgendwas anderes im Wert - vermute ich mal.

Reiner.

OdfFhem

Ich habe mal ein wenig rumprobiert und auch festgestellt, dass hartverdrahtete Icons wohl nicht unterdrückt werden können.

Verwende ich aber ein "wildes" Reading an der Stelle und

  • will die Spalte unterdrücken, dann undef in valueFormat
  • soll die Spalte dargestellt werden, dann das gewünschte Icon in valueIcon ermitteln

Da ich kein ABFALL-Device verwende, weiß ich nicht, ob noch ein zusätzliches Reading zur jeweiligen Abfallart existiert. Wenn ja, dann sollte es klappen; wenn nein, dann ...