Autor Thema: update readingsGroup: sortierbarkeit  (Gelesen 4317 mal)

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2000
Antw:update readingsGroup: sortierbarkeit
« Antwort #15 am: 04 Mai 2017, 13:37:21 »
Hi Andre,

die Möglichkeit klingt super, auch wenn ich sie jetzt erst entdeckt habe :)

Könntest du Analog zu "<tfoot>" noch ein "<thead>" ermöglichen, ab dessen Vorkommen überhaupt erst sortiert wird?
Bei meinen Readingsgroups gibt es fast immer einen Header mit trennender Linie darunter (genauso wie einen Footer mit Linie abgetrennt). Damit kann ich das auch direkt auf Oberflächen wie TabletUI einbinden, und habe eine nette Optik (zumindest für mich) :).

Ich habe das mal versucht, aber es wird immer die obere Trennlinie mit sortiert :)

Außerdem wird vor dem Pfeil immer umgebrochen, sodass der Pfeil unter dem Titelwort steht. Kann ich das mit einem Style anpassen?

Danke schon mal...

Grüße
Reiner

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2000
Antw:update readingsGroup: sortierbarkeit
« Antwort #16 am: 04 Mai 2017, 16:06:30 »
Hi Andre,

was mir noch aufgefallen ist:
Wenn ich nach einer Spalte sortiert habe, werden die im Fußbereich stehenden Summen nicht per longpoll aktualisiert.
Nach einem Seiten-Reload wird die Summe wieder korrekt angezeigt.

Da scheint etwas mit den Longpoll-FeldIDs schief zu gehen, wenn die dargestellte Reihenfolge wegen der Sortierung verändert wurde...
Das habe ich aber noch nicht weiter untersucht, sondern nur bemerkt. Vielleicht kannst du es ja nachstellen :)

Grüße
Reiner

Offline mi.ke

  • Full Member
  • ***
  • Beiträge: 483
  • Nice Boys don't play Rock'n'Roll
Antw:update readingsGroup: sortierbarkeit
« Antwort #17 am: 10 Mai 2017, 10:34:40 »
Bei der Sortierung nach Spalten (sortColumn) scheint es bei 1-stelligen Zahlenwerten zu Problemen zu kommen.

Ich denke, hab 'ne Lösung in Perl gefunden, aber für einen Patch-Vorschlag reicht mein Perl nicht aus.

IST:
@Test=(1..20);
sort(@Test));

SOLL:
@Test=(1..20);
sort{$a<=>$b}(@Test));

@justme1968
Bin ich da auf dem richtigen Weg?
FHEM 5.8 | Cubietruck + 8 x RPi(Z) + FB 7590 + FB 6842 LTE über LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX433(e) + 2 x HMLan + Ardunio433 + 3 x LGW + CO2 +++
FS20, FHT, FMS, Elro(mod)AB440/R/S/D, OWL-CM160, Revolt-5461, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301

Offline mi.ke

  • Full Member
  • ***
  • Beiträge: 483
  • Nice Boys don't play Rock'n'Roll
Antw:update readingsGroup: sortierbarkeit
« Antwort #18 am: 13 Mai 2017, 11:42:05 »
so, hatte mit einem anderen Readings die Erkenntnis, das es funktioniert.

sobald aber die Einheiten drangehängt werden, sortiert es wieder nicht richtig.
valueFormat {moisture => "%.0f %%"}
Ohne valueFormat einwandfrei
FHEM 5.8 | Cubietruck + 8 x RPi(Z) + FB 7590 + FB 6842 LTE über LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX433(e) + 2 x HMLan + Ardunio433 + 3 x LGW + CO2 +++
FS20, FHT, FMS, Elro(mod)AB440/R/S/D, OWL-CM160, Revolt-5461, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17767
Antw:update readingsGroup: sortierbarkeit
« Antwort #19 am: 13 Mai 2017, 22:17:58 »
sorry für die späte antwort...

@Reinerlein: <thead> wird automatisch über das headerRows attribut gesteuert.

das problem mit dem nicht aktualisieren kann ich nicht reproduzieren. mein standard test beispiel ganz oben aus dem ersten post zeigt das problem nicht. kannst du mal damit testen bzw. ein beispiel posten bei dem es passiert?

@mi.ke: das sortieren passiert komplett auf javascript seite im browser. d.h. auf perl seite etwas zu ändern hilft nichts. der sorttable javascript code versucht den spalten typ anhand des ersten zeichens zu erkennen. das ist leider nicht 100% sicher und scheint gerade bei denen daten schief zu gehen. im prinzip kann man den daten typ einer spalte auch von aussen fest vorgeben. das geht aber aus der readingsGroup nicht.

man kann aber über ein 'missbrauchtes' valueColumns attribut für dieses reading { "sorttable_customkey='$NUM'"} einen workaround bauen. damit wird einer tabellen zelle direkt der numerische teil des readings als key zugeordnet.
« Letzte Änderung: 13 Mai 2017, 22:22:08 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2000
Antw:update readingsGroup: sortierbarkeit
« Antwort #20 am: 14 Mai 2017, 13:03:06 »
Hi Andre,

hmm, das mit der fehlenden Longpoll-Aktualisierung konnte ich jetzt auch nicht mehr nachstellen... sorry dafür... war wahrscheinlich eine komische Konstellation...

Aber zum Header: wenn ich das Attribut "headerRows" auf 2 setze (Eine Textzeile und ein <hr> als Kopf), dann erhalte ich sofort beim Aufruf der Seite die Fehlermeldung aus dem Screenshot 1.
Wenn ich dort eine 1 eintrage, sortiert er das <hr> wieder mit.

Hier mal das Define des Devices:
defmod heizung_Sammler_Stellventile readingsGroup <Name>,<Modus>,<Wunschtemperatur>,<Ventilstellung> <hr> type=HeatingThermostat:mode,desiredTemperature,valveposition <tfoot> <hr> heizung_Sammler_Stellventile:<Max.&nbsp;;Ventilstellung>,<>,<>,$max(:3)@ventilmax
attr heizung_Sammler_Stellventile userattr event-on-change-reading
attr heizung_Sammler_Stellventile alias Heizung Stellventile
attr heizung_Sammler_Stellventile alwaysTrigger 2
attr heizung_Sammler_Stellventile group 1. Grundsätzliches
attr heizung_Sammler_Stellventile nameStyle style="font-weight: bold;; text-align: left;;"
attr heizung_Sammler_Stellventile room Heizung
attr heizung_Sammler_Stellventile sortColumn 4
attr heizung_Sammler_Stellventile valueFormat { 'desiredTemperature.on' => "on", 'desiredTemperature.off' => "off", 'desiredTemperature.comfort' => "comfort", 'desiredTemperature.boost' => "boost", 'desiredTemperature.eco' => "eco", desiredTemperature => "%.1f °C", valveposition => "%i %%", ventilmax => "%i %%" }
attr heizung_Sammler_Stellventile valueStyle { desiredTemperature => 'style="text-align:right"', valveposition => 'style="text-align:right"', ventilmax => 'style="text-align:right"' }

Was mir noch aufgefallen ist: Die Sortierung ist nicht deterministisch, bedeutet, dass bei jedem Aktualisieren eines Devices mittels longpoll die Liste u.U. anders sortiert wird, wenn die Einträge der sortcolumn gleich sind.
Folgende Situation:
- Alle meine Heizungsventile sind geschlossen, ich zeige meine ReadingsGroup an, und sortiere absteigend nach der Ventilstellung. Da alle Werte 0% enthalten, wird nach dem Namen der Devices absteigend sortiert -> Super
- Jetzt drücke ich bei einem Thermostat auf Boost, damit ein Eintrag auf 80% wechselt. Nach der Aktualisierung mittels longpoll steht der Eintrag mit den 80% jetzt oben, der Rest der Liste mit den 0% wird jetzt hinter den 80% aufsteigend nach Name sortiert (Screenshot 2) -> Auch Super
- Wenn ich jetzt den Boostmodus wieder abschalte, wird irgendwie gar nicht mehr sortiert, und die Reihenfolge ist beliebig, und wechselt nach jedem longpoll-Aktualisieren eine Devices auch noch (Screenshot 3). Da ist ab jetzt also ständig Bewegung drin, da jedes Geräte ja alle 5 Minuten aktualisiert wird.

Außerdem wäre für mich eine Umkehrung des Pfeil-Icons passender. Momentan ist der Pfeil nach oben, wenn absteigend sortiert wird. Intuitiv wäre doch die dünne Spitze der kleine Zahlenwert, und die breite Kante der große Zahlenwert bei der Sortierung, oder? Aber das ist vielleicht auch einfach Geschmackssache :)

Grüße
Reiner

Offline mi.ke

  • Full Member
  • ***
  • Beiträge: 483
  • Nice Boys don't play Rock'n'Roll
Antw:update readingsGroup: sortierbarkeit
« Antwort #21 am: 14 Mai 2017, 19:10:45 »
Außerdem wäre für mich eine Umkehrung des Pfeil-Icons passender. Momentan ist der Pfeil nach oben, wenn absteigend sortiert wird. Intuitiv wäre doch die dünne Spitze der kleine Zahlenwert, und die breite Kante der große Zahlenwert bei der Sortierung, oder? Aber das ist vielleicht auch einfach Geschmackssache :)


Definitiv Geschmackssache :)
Ich finde die Pfeilrichtung so wie z.Z. verwendet genau richtig.



man kann aber über ein 'missbrauchtes' valueColumns attribut für dieses reading { "sorttable_customkey='$NUM'"} einen workaround bauen. damit wird einer tabellen zelle direkt der numerische teil des readings als key zugeordnet.


Damit funktioniert die Sortierung auch mit dem valueFormat und den Einheiten wie erwartet.
Klasse, dank Dir.

FHEM 5.8 | Cubietruck + 8 x RPi(Z) + FB 7590 + FB 6842 LTE über LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX433(e) + 2 x HMLan + Ardunio433 + 3 x LGW + CO2 +++
FS20, FHT, FMS, Elro(mod)AB440/R/S/D, OWL-CM160, Revolt-5461, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301

Offline stefan-dd

  • Full Member
  • ***
  • Beiträge: 197
Antw:update readingsGroup: sortierbarkeit
« Antwort #22 am: 13 Oktober 2017, 22:38:26 »
Kann man auch eine Sortierung versteckt fest vorgeben?
Ich möchte die Räume nach meiner Vorgabe sortieren. Entweder über ein Reading was nicht mit dargestellt wird, oder kann man die Reihenfolge fest vorgeben?
In der 1. Spalte habe ich die Räume stehen, die jetzt Alphabetisch sortiert werden. Das gefällt mir aber nicht.

Offline HomeAuto_User

  • Developer
  • Full Member
  • ****
  • Beiträge: 258
Antw:update readingsGroup: sortierbarkeit
« Antwort #23 am: 30 Oktober 2017, 13:18:55 »
Hallo,

ich habe mal die Funktion ausgetestet mit "sortColumn Spalte" und erhalte sorttable.js line 203:
TypeError: table.tHead is null

Woran liegt dies? FHEM ist aktuell.

MfG
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: 3x FHT 80b | 5x FHT 80 TF-2 | 2x S300TH | 1x WS7000-20 | 5x "Hideki" | THR128 und andere ;-)

Online MadMax-FHEM

  • Hero Member
  • *****
  • Beiträge: 4100
  • NIVEAu ist keine Creme...
Antw:update readingsGroup: sortierbarkeit
« Antwort #24 am: 31 Oktober 2017, 12:14:18 »
Hallo,

gleiches Problem (fhem Update gestern).

Allerdings (wie hier: https://forum.fhem.de/index.php/topic,69858.0.html) nur wenn ich in den Raum "Everything" gehe.

Rufe ich einen Raum auf wo die readingsGroup und noch ein zwei andere Dinge drin sind funktioniert es ohne Fehler.

Bin gestern über die Möglichkeit zu sortieren gestolpert: TOLL!! DANKE!!

Ich habe eine readingsGroup wo ich mir die Batteriewechsel anzeige und da wäre es toll, wenn das nach Datum ginge :)

Zunächst hatte ich meine readingsGroup wie folgt definiert:

define rgLastBateryChange readingsGroup NAME=dmLastBatteryChange:.*
Allerdings habe ich dann den "Sortierungspfeil" beim ersten Datum.
Optisch unschön und die Zeile wurde dann nicht mit sortiert...
...doppelt unschön.

Daher habe ich erweitert auf:

define rgLastBateryChange readingsGroup <Gerät>,<>,<Datum> NAME=dmLastBatteryChange:.*Also mit Headline.

Zuvor war es optisch unschön aber ohne genannten Fehler...
...jetzt war es optisch so wie gewollt aber eben mit dem genannten Fehler.

Ich habe mir mal die Stelle angeschaut (Zeile 203) und eigentlich wird ja etwas weiter oben geprüft, ob thead === undefined ist.
Hätte erwartet, dass dort dann entsprechend rausgesprungen wird?

Allerdings ist 'thead' bei mir eben nicht 'undefined' sondern eben 'null' (hab im Debugger geschaut)...

Hier ein list der readingsGroup:

Internals:
   DEF        <Gerät>,<>,<Datum> NAME=dmLastBatteryChange:.*
   NAME       rgLastBatteryChange
   NR         159
   NTFY_ORDER 50-rgLastBatteryChange
   STATE      Initialized
   TYPE       readingsGroup
   mayBeVisible 1
   CONTENT:
     dmLastBatteryChange 1
   CONTENT2:
   DEVICES:
     ARRAY(0x51345b0)
     ARRAY(0x471abb8)
   fhem:
     lastDefChange 51
     last_update 1509447859.39155
   helper:
     DEF
     mapping    $READING
     positions:
       dmLastBatteryChange.Heizkoerperthermostat_EssZi 1:1
       dmLastBatteryChange.Heizkoerperthermostat_FabiZi 1:2
       dmLastBatteryChange.Heizkoerperthermostat_Kueche 1:3
       dmLastBatteryChange.Heizkoerperthermostat_SchlaZi 1:4
       dmLastBatteryChange.Heizkoerperthermostat_WoZi 1:5
       dmLastBatteryChange.Wandthermostat_Bad 1:6
       dmLastBatteryChange.Wandthermostat_EssZi 1:7
       dmLastBatteryChange.Wandthermostat_FabiZi 1:8
       dmLastBatteryChange.Wandthermostat_Kueche 1:9
       dmLastBatteryChange.Wandthermostat_SchlaZi 1:10
       dmLastBatteryChange.Wandthermostat_WC 1:11
       dmLastBatteryChange.Wandthermostat_WoZi 1:12
     values:
       formated:
         undef
         ARRAY(0x50879e0)
         ARRAY(0x3d43de8)
         ARRAY(0x5149330)
         ARRAY(0x4cf6c98)
         ARRAY(0x51417a8)
         ARRAY(0x52bc500)
         ARRAY(0x50c1818)
         ARRAY(0x5166d98)
         ARRAY(0x4f049c8)
         ARRAY(0x52bd100)
         ARRAY(0x510f958)
         ARRAY(0x51071c0)
       orig:
         undef
         ARRAY(0x5135968)
         ARRAY(0x5181e98)
         ARRAY(0x435e610)
         ARRAY(0x52bb0c8)
         ARRAY(0x4ef98f0)
         ARRAY(0x51360a0)
         ARRAY(0x514b578)
         ARRAY(0x4ff96f0)
         ARRAY(0x52bcfb0)
         ARRAY(0x5334e10)
         ARRAY(0x4c9fa50)
         ARRAY(0x508d970)
       prefixsuffix:
         undef
         ARRAY(0x4d66928)
         ARRAY(0x5135998)
         ARRAY(0x4ef9398)
         ARRAY(0x5081af0)
         ARRAY(0x45fbef0)
         ARRAY(0x510ecb8)
         ARRAY(0x4a8f270)
         ARRAY(0x52bb170)
         ARRAY(0x5164c08)
         ARRAY(0x46d9310)
         ARRAY(0x514ba40)
         ARRAY(0x3ff6558)
Attributes:
   alias      Übersicht Batteriewechsel
   mapping    $READING
   nolinks    1
   room       Overview,Overview Battery
   sortColumn 3
   sortby     09

Wenn ich die Zeile drüber von Prüfung 'thead === undefined' auf 'thead === null' ändere habe ich (natürlich) den Fehler nicht aber welche anderen Auswirkungen das hat weiß ich nat. nicht...

//      if( table.tHead === undefined ) {
      if( table.tHead === null ) {
        console.log( 'doSort: table has no heading' );
        return;
      }

EDIT: Browser Firefox 56.0 (64-bit) auf Ubuntu 14.04 LTS 64Bit

EDIT3: Tritt auch bei meinem Android-Phone mit Chrome auf (also auch "nur", wenn ich auf die "Everything" Seite gehe. Die Batterie-Übersichtsseite [dort zeige ich nur 2 readingsGroup an eine davon mit dem sortColum] geht auch hier ohne Fehler)

EDIT2: noch ein list des Dummy

Internals:
   NAME       dmLastBatteryChange
   NR         161
   STATE      ???
   TYPE       dummy
   READINGS:
     2017-06-18 21:09:49   Heizkoerperthermostat_EssZi Battery changed:
     2017-07-08 12:36:35   Heizkoerperthermostat_FabiZi Battery changed:
     2017-08-31 22:59:44   Heizkoerperthermostat_Kueche Battery changed:
     2017-01-18 01:23:19   Heizkoerperthermostat_SchlaZi Battery changed:
     2016-11-14 00:55:22   Heizkoerperthermostat_WoZi Battery changed:
     2017-08-14 07:38:04   Wandthermostat_Bad Battery changed:
     2017-05-06 23:30:38   Wandthermostat_EssZi Battery changed:
     2017-05-03 07:28:45   Wandthermostat_FabiZi Battery changed:
     2017-03-19 11:55:00   Wandthermostat_Kueche Battery changed:
     2017-04-22 06:51:20   Wandthermostat_SchlaZi Battery changed:
     2017-03-19 11:56:34   Wandthermostat_WC Battery changed:
     2017-04-14 09:11:26   Wandthermostat_WoZi Battery changed:
Attributes:
   event-on-change-reading .*

Gruß, Joachim
« Letzte Änderung: 31 Oktober 2017, 13:27:50 von MadMax-FHEM »
FHEM 5.8 PI3: HM-CFG-USB, 40x HM, ZWave-USB, 6x ZWave, EnOcean-PI, 3x EnOcean, DashButtons, CO2, ESP-Multisensor, FireTV, NanoLeaf, ...
FHEM 5.8 PI2: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, KODI, ha-bridge, ...
FHEM 5.8 PI3 (Test): HM-MOD-PCB, Alexa (alexa-fhem), Google Home

Offline sd

  • New Member
  • *
  • Beiträge: 6
Antw:update readingsGroup: sortierbarkeit
« Antwort #25 am: 04 November 2018, 20:24:34 »
Hallo,
tolle Funktionalität, aber wenn ich die Readingsgroup in das Dashboard einbinde, kommt folgender Fehler:

sorttable.js line 203:
TypeError: table.tHead is null

Hat jemand eine Idee?