FHEMWEB - Sortierreihenfolge erzeugter Readings

Begonnen von DS_Starter, 30 Dezember 2019, 11:03:56

Vorheriges Thema - Nächstes Thema

DS_Starter

Hallo zusammen,

ich erstelle gerade eine Anwendung, bei der es darauf angekommt, dass die angezeigte Reihenfolge der erzeugten Readings im FHEMWEB erhalten bleibt.
Dazu habe ich vor dem Readingnamen eine Indexnummer gesetzt.
Allerdings klappt das nicht wie gewünscht, z.B. erscheinen Zahlen 1x vor 2:


     2019-12-30 10:42:44   0_01_summary    Whisky Tasting
     2019-12-30 10:42:44   0_02_bdate      2019-11-23
     2019-12-30 10:42:44   0_03_btime      17:00:00
     2019-12-30 10:42:44   0_04_edate      2019-11-23
     2019-12-30 10:42:44   0_05_etime      23:00:00
     2019-12-30 10:42:44   0_06_btimestamp 1574524800
     2019-12-30 10:42:44   0_07_etimestamp 1574546400
     2019-12-30 10:42:44   0_08_description
     2019-12-30 10:42:44   0_09_location   GREEN IRISCH PUB Gaststätte Restaurant
Weberstraße 25, 06712 Zeitz, Deutschland
     2019-12-30 10:42:44   0_10_gps       
     2019-12-30 10:42:44   0_11_timezone   Europe/Berlin
     2019-12-30 10:42:44   0_12_status     tentative
     2019-12-30 10:42:44   0_13_isAllday   
     2019-12-30 10:42:44   0_14_isRepeatEvt
     2019-12-30 10:42:44   0_15_repeatRule
     2019-12-30 10:42:44   0_16_calname    Heikos Kalender
     2019-12-30 10:42:44   0_99_---------------------- --------------------------------------------------------------------
     2019-12-30 10:42:44   10_01_summary   Termin
     2019-12-30 10:42:44   10_02_bdate     2019-12-16
     2019-12-30 10:42:44   10_03_btime     13:30:00
     2019-12-30 10:42:44   10_04_edate     2019-12-16
     2019-12-30 10:42:44   10_05_etime     14:30:00
     2019-12-30 10:42:44   10_06_btimestamp 1576499400
     2019-12-30 10:42:44   10_07_etimestamp 1576503000
     2019-12-30 10:42:44   10_08_description Testtermin
     2019-12-30 10:42:44   10_09_location 
     2019-12-30 10:42:44   10_10_gps       
     2019-12-30 10:42:44   10_11_timezone  Europe/Berlin
     2019-12-30 10:42:44   10_12_status    needs-action
     2019-12-30 10:42:44   10_13_isAllday 
     2019-12-30 10:42:44   10_14_isRepeatEvt
     2019-12-30 10:42:44   10_15_repeatRule
     2019-12-30 10:42:44   10_16_calname   Heikos Kalender
     2019-12-30 10:42:44   10_99_---------------------- --------------------------------------------------------------------
     2019-12-30 10:42:44   11_01_summary   Urlaub - abwesend
     2019-12-30 10:42:44   11_02_bdate     2019-12-23
     2019-12-30 10:42:44   11_03_btime     00:00:00
     2019-12-30 10:42:44   11_04_edate     2019-12-24
     2019-12-30 10:42:44   11_05_etime     00:00:00
     2019-12-30 10:42:44   11_06_btimestamp 1577055600
     2019-12-30 10:42:44   11_07_etimestamp 1577142000
     2019-12-30 10:42:44   11_08_description
     2019-12-30 10:42:44   11_09_location 
     2019-12-30 10:42:44   11_10_gps       
     2019-12-30 10:42:44   11_11_timezone 
     2019-12-30 10:42:44   11_12_status    tentative
     2019-12-30 10:42:44   11_13_isAllday  1
     2019-12-30 10:42:44   11_14_isRepeatEvt
     2019-12-30 10:42:44   11_15_repeatRule
     2019-12-30 10:42:44   11_16_calname   Heikos Kalender
     2019-12-30 10:42:44   11_99_---------------------- --------------------------------------------------------------------
.....
.....
     2019-12-30 10:42:44   1_01_summary    Circe de soleil
     2019-12-30 10:42:44   1_02_bdate      2019-10-25
     2019-12-30 10:42:44   1_03_btime      18:00:00
     2019-12-30 10:42:44   1_04_edate      2019-10-25
     2019-12-30 10:42:44   1_05_etime      19:00:00
     2019-12-30 10:42:44   1_06_btimestamp 1572019200
     2019-12-30 10:42:44   1_07_etimestamp 1572022800
     2019-12-30 10:42:44   1_08_description
     2019-12-30 10:42:44   1_09_location   
     2019-12-30 10:42:44   1_10_gps       
     2019-12-30 10:42:44   1_11_timezone   Europe/Berlin
     2019-12-30 10:42:44   1_12_status     tentative
     2019-12-30 10:42:44   1_13_isAllday   
     2019-12-30 10:42:44   1_14_isRepeatEvt
     2019-12-30 10:42:44   1_15_repeatRule
     2019-12-30 10:42:44   1_16_calname    Heikos Kalender
     2019-12-30 10:42:44   1_99_---------------------- --------------------------------------------------------------------
     2019-12-30 10:42:44   2_01_summary    Treffen Parkgaststätte Lützen
     2019-12-30 10:42:44   2_02_bdate      2019-11-09
     2019-12-30 10:42:44   2_03_btime      18:00:00
     2019-12-30 10:42:44   2_04_edate      2019-11-09
     2019-12-30 10:42:44   2_05_etime      23:00:00
     2019-12-30 10:42:44   2_06_btimestamp 1573318800
     2019-12-30 10:42:44   2_07_etimestamp 1573336800
     2019-12-30 10:42:44   2_08_description
     2019-12-30 10:42:44   2_09_location   Parkrestaurant
     2019-12-30 10:42:44   2_10_gps       
     2019-12-30 10:42:44   2_11_timezone   Europe/Berlin
     2019-12-30 10:42:44   2_12_status     tentative
     2019-12-30 10:42:44   2_13_isAllday   
     2019-12-30 10:42:44   2_14_isRepeatEvt
     2019-12-30 10:42:44   2_15_repeatRule
     2019-12-30 10:42:44   2_16_calname    Heikos Kalender
.....


Kann man FHEMWEB momentan programmtechnisch beibringen, dass die angezeigte Reihenfolge einer numerischen Sortierung 1,2,3,4,5,6,7,8,9,10,11,12,... folgt ?

Im DbRep werde ich auf das gleiche Thema stoßen, wenn ich versuchen würde die aktuellen Readingnamen gegen ein Kontrukt Indexnummer+(kurzen) String per Attribut umschaltbar zu gestalten.

Danke und allerseits einen guten Rutsch !

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

FW_makeTable() sortiert die Schluessel alphabetisch, sie erstellt die Tabellen fuer Internals, Readings und  Attribute, eine anderweitige Sortierung ist z.Zt. nicht moeglich.

In dem gezeigten Fall waere eine numerische Sortierung nicht moeglich, da die Namen keine Zahlen sind.
Dagegen wuerde die alphabetische Sortierung weiterhin funktionieren, wenn man die Zahlen im Namen mit mehr 0'en ergaenzen wuerde.

Generell bin ich der Meinung, dass wenn man auf solche Probleme stoesst, irgendetwas in der Architektur falsch ist.
Spontan frage ich mich, warum man nicht fuer jede Gruppe eine eigene Instanz anlegt.


DS_Starter

Hallo Rudi,

ZitatSpontan frage ich mich, warum man nicht fuer jede Gruppe eine eigene Instanz anlegt.

Die Readings entsprechen den Einträgen eines Synology Kalenders der über eine API abgefragt wird. Es ist im Vorfeld nicht determiniert welche Readings entstehen werden (Anzahl in der Gruppe oder nur eine Auswahl) bzw. wieviele Gruppen. Es könnte auch nur eine sein.

Die Ergänzung mit führenden Nullen ist im vorliegenden Fall möglich. Mehr als 3 Stellen wird man wohl nicht sinnvoll anwenden können. Das stelle ich mal so um.

Danke Rudi ! und vllt. kann man zukünftig eine mögliche numerische Sortierung in FHEMWEB mit vorsehen falls eine solche Funktionalität auch anderweitig hilfreich wäre.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Christoph Morrison

Mich hatte die falscheunnatürliche Sortierreihenfolge im Nmap-Modul mal so abgenervt, dass ich mir mein FHEMWEB auf natural sort order umgepatcht habe:


diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm
index 2f38d03d6..c3356ebc0 100644
--- a/fhem/FHEM/01_FHEMWEB.pm
+++ b/fhem/FHEM/01_FHEMWEB.pm
@@ -8,6 +8,7 @@ use TcpServerUtils;
use HttpUtils;
use Blocking;
use Time::HiRes qw(gettimeofday);
+use Sort::Key::Natural qw(natsort);

#########################
# Forward declaration
@@ -1249,7 +1250,7 @@ FW_makeTable($$$@)

   my $row = 1;
   my $prefix = ($title eq "Attributes" ? "a-" : "");
-  foreach my $n (sort keys %{$hash}) {
+  foreach my $n (natsort keys %{$hash}) {
     next if(!$si && $n =~ m/^\./);      # Skip "hidden" Values
     my $val = $hash->{$n};
     $val = "" if(!defined($val));


https://bitbucket.org/christoph-morrison/fhem-patches/raw/e2bf20c5c01bc27bd6e94f8307a021a5a7ad2b00/FHEM/01_FHEMWEB.pm/Eez6deiPhi.patch

DS_Starter

Hallo Christoph,

danke für den Tipp. Damit sieht es natürlich astrein aus und so wie ich es erwarten würde.   :D
Mit dieser Sortierung könnte ich sogar einen Anzeigeindex für die fetchrows Funktion im DbRep problemlos umsetzen um dem User eine evtl. gewünschte generelle Umschaltung der Readingerstellung per Attribut zu ermöglichen (geht ja zum Teil jetzt schon).

Problem ist nur, dass Sort::Key::Natural nicht per Standard ausgeliefert wird und (wie bei mir) nachinstalliert werden muss. Somit fällt es wohl für eine generelle Anpassung über diesen Weg weg, es sei denn man baut die Funktionalität irgendwie nach. Habe in Sort::Key::Natural noch nicht reingeschaut, ist vermutlich aber auch kein Hexenwerk.

Das wärs jedenfalls ...

Grüße und guten Rutsch,
Heiko

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Christoph Morrison

Hallo Heiko,

Zitat von: DS_Starter am 31 Dezember 2019, 09:14:56
Problem ist nur, dass Sort::Key::Natural nicht per Standard ausgeliefert wird und (wie bei mir) nachinstalliert werden muss. Somit fällt es wohl für eine generelle Anpassung über diesen Weg weg, es sei denn man baut die Funktionalität irgendwie nach. Habe in Sort::Key::Natural noch nicht reingeschaut, ist vermutlich aber auch kein Hexenwerk.

natsort ist im Prinzip ein Wrapper auf eine 10-Zeilen-Subroutine ohne weitere Abhängigkeiten, 80% des Moduls ist Dokumentation. Also ja, man könnte natsort auch einfach nativ in FHEMWEB integrieren wenn man das wollte. Allerdings kommt FHEM ja jetzt schon mit Abhängigkeiten - bei einer Neuinstallation z.B. über betateilchens Deb-Modul wäre das kein Thema, eher problematisch bei Bestandsinstallationen. Müsste man dann entsprechend absichern. Ich könnte mir vorstellen, dass man FHEMWEB ein Attribut spendiert, z.B. sortOrder, über das man steuern kann wie sortiert werden soll. Ist Sort::Key::Natural nicht installiert gibt es eben die Auswahl "natürlich" nicht.

Guten Rutsch.

DS_Starter

Also ich würde mich sehr freuen wenn Rudi offen für diese Erweiterung wäre. Ich bin mir sicher, dass diese Sortiermöglichkeit einen direkten Mehrwehrt für Nutzer und Modulautoren darstellen würde.
Ich würde das entsprechende Attribut jedenfalls bei mir sofort im FHEMWEB aktivieren.  ;)

LG
Heiko

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

CoolTux

#7
Ich wäre auch dafür sofern das Modul über die Debian Repo angeboten wird. Muss mal eben schauen


Nachtrag: Auf den ersten Blick konnte ich leider kein passendes Debian Packet finden.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Christoph Morrison

Zitat von: CoolTux am 31 Dezember 2019, 12:40:56
Ich wäre auch dafür sofern das Modul über die Debian Repo angeboten wird. Muss mal eben schauen

Sort::Key::Natural gibt es leider nicht als Debian-Paket. Ich würde dann dafür plädieren, das Modul direkt mit FHEM auszuliefern. Die letzte Änderung im Modul war im April 2014 - das sieht mir sehr stable aus. So hätte man auch das Thema Bestandsinstallationen erschlagen.

rudolfkoenig

Ich will fuer solche exotischen Faelle in FHEMWEB keine "nicht Standard" Module verenden.
Und ich bin immer noch der Ansicht, dass wenn so ein Problem auftritt, irgendetwas mit der Architektur falsch ist.

Es sei denn, ich werde aufgeklaert.

Christoph Morrison

Zitat von: rudolfkoenig am 31 Dezember 2019, 12:53:42
Ich will fuer solche exotischen Faelle in FHEMWEB keine "nicht Standard" Module verenden.

Auch nicht wenn es mit FHEM ausgeliefert wird?

Zitat von: rudolfkoenig am 31 Dezember 2019, 12:53:42
Und ich bin immer noch der Ansicht, dass wenn so ein Problem auftritt, irgendetwas mit der Architektur falsch ist.
Es sei denn, ich werde aufgeklaert.

Das betrifft ja nicht nur DbRep, sondern z.B. auch nmap. nmap erzeugt Readings im Stil <ip_adresse>_alias usw. - und die sind aktuell auch nicht natürlich sortiert.
Beispiel:

Ohne natsort:

$VAR1 = '192.168.0.100_alias';
$VAR2 = '192.168.0.101_alias';
$VAR3 = '192.168.0.102_alias';
$VAR4 = '192.168.0.103_alias';
$VAR5 = '192.168.0.104_alias';
$VAR6 = '192.168.0.105_alias';
$VAR7 = '192.168.0.106_alias';
$VAR8 = '192.168.0.107_alias';
$VAR9 = '192.168.0.108_alias';
$VAR10 = '192.168.0.109_alias';
$VAR11 = '192.168.0.10_alias';
$VAR12 = '192.168.0.110_alias';
$VAR13 = '192.168.0.111_alias';
$VAR14 = '192.168.0.112_alias';
$VAR15 = '192.168.0.113_alias';
$VAR16 = '192.168.0.114_alias';
$VAR17 = '192.168.0.115_alias';
$VAR18 = '192.168.0.116_alias';
$VAR19 = '192.168.0.117_alias';
$VAR20 = '192.168.0.118_alias';
$VAR21 = '192.168.0.119_alias';
$VAR22 = '192.168.0.11_alias';
$VAR23 = '192.168.0.120_alias';
usw.


Mit natsort:

$VAR1 = '192.168.0.1_alias';
$VAR2 = '192.168.0.2_alias';
$VAR3 = '192.168.0.3_alias';
$VAR4 = '192.168.0.4_alias';
$VAR5 = '192.168.0.5_alias';
$VAR6 = '192.168.0.6_alias';
$VAR7 = '192.168.0.7_alias';
$VAR8 = '192.168.0.8_alias';
$VAR9 = '192.168.0.9_alias';
$VAR10 = '192.168.0.10_alias';
$VAR11 = '192.168.0.11_alias';
$VAR12 = '192.168.0.12_alias';
$VAR13 = '192.168.0.13_alias';
$VAR14 = '192.168.0.14_alias';
$VAR15 = '192.168.0.15_alias';
usw.

DS_Starter

Es ist ganz einfach natürlich zu lesen wenn die Readings statt so:


0_xxx
10_xxx
11_xxx
...
19_xxx
1_xxx
2_xxx


so:


0_xxx
1_xxx
2_xxx
...
10_xxx
11_xxx
....


dargestellt/sortiert werden. Unabhängig vom Modul bzw. dem Inhalt.
Das ist zumindest meine Sichtweise.
Und in manchen Fällen (wie z.B. die Anzeige von Datenbanksätzen aus einer DB) ist die Reihenfolge wesentlich.

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

ZitatAuch nicht wenn es mit FHEM ausgeliefert wird?
Dafuer brauche ich noch mehr Motivation, und nmap liefert es mir auch nicht. Und auch kein "EDITOR" Modul, der die Zeilen einer Datei als Readings darstellt.

KernSani

Hi zusammen,

aus meiner Sicht gibt es hier mehrere Punkte:
1. Darstellung: Hier ist ein natural sort sicher in einigen Fällen von Vorteil
2. Verarbeitung der Daten: Da bin ich bei Rudi - Readings können m.E. keine Reihenfolge per se haben, auf die man sich verlassen kann, daher sollte man Wege finden das anders zu lösen.
3. Mögliche Umsetzung in FHEM: Bezüglich der Auslieferung von Bibliotheken mit FHEM gibt es ja schon eine Diskussion an anderer Stelle, aus meiner Sicht ist das zu vermeiden. Gegen eine Umsetzung als FHEM-eigenes Modul spricht aber aus meiner Sicht wenig. Die Frage wäre dann nur noch, ob ein nat. sort generell verwendet werden kann (oder führt das an anderer Stelle zu Problemen?) oder über Attribut steuerbar (zu vermeiden, versteht eh kein Mensch) oder vom Modulautor vorgegeben werden kann (verwirrt den Anwender ggf. auch, wenn mal so, mal so.).

So, damit wünsche ich einen Guten Rutsch!

Oli

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

justme1968

readings lassen sich mit einer readingsGroup völlig frei sortieren und anzeigen. auch ip adressen aus dem nmap modul. dazu gibt es extra eine vergleichsfunktion.

und es gibt die möglichkeit interaktiv im frontend die sortierung zu beeinflussen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968