[patch] fhem.pl - Maximale Länge für Device Namen

Begonnen von maxritti, 01 Juni 2014, 17:30:28

Vorheriges Thema - Nächstes Thema

maxritti

In diesem Post wurde beschrieben, dass Device-Namen auf 32 Zeichen beschränkt sind.

http://forum.fhem.de/index.php/topic,24165.msg173129.html#msg173129

Allerdings ist es derzeit möglich längere Device-Namen zu definieren.

Macht es Sinn, diese durch folgende Zeile(n) in der fhem.pl abzufangen?

1522a1523,1524
> return "Maximum allowed characters for device-names are 32 characters"
> if (length($name) > 32);


betateilchen

#1
Diese Frage hat Popcorn-Potenzial  8)

Ich finde den Vorschlag übrigens gut, da DbLog die Devicename-Länge auf 32 Zeichen begrenzt hat.
Daran habe ich mich bei der Entwicklung von configDB orientiert und 32 Zeichen als Maximallänge übernommen.

Der vorgeschlagene Patch führt allerdings dazu, dass beim nächsten fhem-Start alle bestehenden Installationen lahmgelegt werden, in denen Devicenamen vorkommen, die länger als 32 Zeichen sind. Vielleicht wäre das Loggen einer entsprechenden Hinweismeldung mit dem Hinweis, dass solche Überlängen "deprecated" sind, sinnvoller. Dann kann man die echte Fehlermeldung in einem späteren Major Release einbauen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

maxritti

Dann werde ich mir mal ein Tütchen holen.  ;)

Eventuell kann dann ein Moderator das Thema in den Bereich Wunschliste packen?
Ist wohl dann dort besser aufgehoben.

betateilchen

Nönö, das ist hier schon ganz richtig.

Hier, Dein Tütchen  8)

(http://www.news.at/_storage/asset/2069400/storage/newsat:key-visual/file/25015184/mann-joint-kiffen.jpg)

Quelle: www.news.at
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

maxritti

Interessanter Ansatz, macht so manches erträglicher  :P

Mal so in die Wolken der Tüte gedacht:

Kann man das define nicht ab sofort so restriktiv umsetzen, dass keine längeren Namen als 32 Zeichen mehr zulässt.
Und dann noch eine Funktion, welche alle längeren Device-Namen als 32 Zeichen aufführt, damit Benutzer dies anpassen können?

Damit würden dann die langen Device-Namen doch irgendwann "aussterben".

betateilchen

fhem kennt - vereinfacht gesagt - keine Unterscheidung zwischen bestehenden und neuen define.

Sowohl das Anlegen von devices beim fhem Neustart (oder rereadcfg) als auch das Neuanlegen während des Betriebs wird über die gleichen Funktionen abgewickelt. Dass Rudi sich darauf einläßt, an dieser Stelle eine generelle Unterscheidung einzubauen, kann ich mir schwer vorstellen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

herrmannj

ZitatKann man das define nicht ab sofort so restriktiv umsetzen, dass keine längeren Namen als 32 Zeichen mehr zulässt.

ne, da defines beim start ausgeführt werden würde das ebenfalls "einige"  :) lahmlegen 

Würde es aber begrüßen wenn wir da einen Standard hätten (vielleicht gibt es den ja auch schon und ich kenne ihn nicht).
Die erlaubten Zeichen sind ein weiteres Thema. Punkte ? Bindestriche ?

vg
Jörg

herrmannj

ZitatDass Rudi sich darauf einläßt, an dieser Stelle eine generelle Unterscheidung einzubauen, kann ich mir schwer vorstellen.

finde Deinen Vorschlag mit der Wanrung "depraced" gut, dann kann man da langsam migrieren und es kann bei einer def bleiben. Evtl per Atrribut so ala "strict" oder so.

vg
Jörg

betateilchen

Zitat von: herrmannj am 01 Juni 2014, 18:49:50
Die erlaubten Zeichen sind ein weiteres Thema. Punkte ? Bindestriche ?

Das ist bereits festgelegt:


  return "Invalid characters in name (not A-Za-z0-9.:_): $name"
                        if($name !~ m/^[a-z0-9.:_]*$/i);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

herrmannj


betateilchen

Die Lösung ist eigentlich ganz einfach. Der untenstehende Patch verbindet sowohl das Loggen einer Hinweismeldung (legt das bereits in der Konfiguration gespeicherte Device aber trotzdem mit vollständigem Namen an) als auch das Unterbinden der Neuanlage von Devices mit mehr als 32 Zeichen.


2014.06.01 19:04:58 0: Server shutdown
2014.06.01 19:05:00 1: Including fhem.cfg
2014.06.01 19:05:00 3: telnetPort: port 7072 opened
2014.06.01 19:05:00 3: WEB: port 8083 opened
2014.06.01 19:05:00 3: WEBphone: port 8084 opened
2014.06.01 19:05:00 3: WEBtablet: port 8085 opened
2014.06.01 19:05:00 2: eventTypes: loaded 2 events from ./log/eventTypes.txt
2014.06.01 19:05:00 1: abcdefghijklmnopqrstuvwxyz1234567890: devicenames longer than 32 chars are deprecated!
2014.06.01 19:05:00 1: Including ./log/fhem.save


(http://up.picr.de/18471774bm.png)


Jetzt muss eigentlich nur Rudi das Ganze noch wohlwollend prüfen.



Index: fhem.pl
===================================================================
--- fhem.pl (revision 6027)
+++ fhem.pl (working copy)
@@ -1517,6 +1517,10 @@
   my $name = $a[0];
   return "Usage: define <name> <type> <type dependent arguments>"
    if(int(@a) < 2);
+  if(length($name) > 32) {
+    Log3 $name,1,"$name: devicenames longer than 32 chars are deprecated!";
+    return "Maximum length 32 for name exceeded!" if $init_done;
+  }
   return "$name already defined, delete it first" if(defined($defs{$name}));
   return "Invalid characters in name (not A-Za-z0-9.:_): $name"
                         if($name !~ m/^[a-z0-9.:_]*$/i);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

maxritti

#11
Na schau mal einer an.
Da habe ich mein Popcorn noch gar nicht leer und da ist es hier schon fast zu Ende.  ;D

Prima.
Ich finde die Idee auch gut genial.

Und dank betateilchen und den anderen die sich hier wohlwollend für FHEM einsetzen, lernt man immer wieder in der grossen weiten FHEM Welt dazu.
Danke dafür.

betateilchen

Zitat von: maxritti am 01 Juni 2014, 19:26:53
Da habe ich mein Popcorn noch gar nicht leer und da ist es hier schon fast zu Ende.

abwarten, denn die Diskussion, wegen der es Popcorn erfordern könnte, hat ja bisher noch gar nicht angefangen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Man sollte keine FHEM-Vorschlaege unter Tuetchen-Einfluss machen.

Wieso sollten die, die kein DbLog verwenden (ca 98% der FHEM Anwender) ploetzlich alles umbenennen, nur weil dieses Modul eine willkuerliche Einschraenkung eingefuehrt hat? Hat eigentlich keiner daran gedacht, aus dem DbLog Modul diese Begrenzung zu entfernen? MWn ist es jeder DB egal, ob eine Spalte als varchar(32) oder als varchar(255) definiert wird. Und ich gehe davon aus, dass DbLog keine Spalte mit dem Geraetenamen (als Name, nicht Inhalt) anlegt, nur in diesem Fall waere diese Begrenzung verstaendlich.

P.S.: Die Idee mit dem verschieben nach "Wunschliste" finde ich klasse, das lese ich aus Prinzip nicht. Wuensche habe ich auch viele, fuer den Fall dass ich Zeit und Energie uebrig habe, da muss ich keine leihen.

betateilchen

@maxritti JETZT kannst Du das Popcorn holen ;)

Zitat von: rudolfkoenig am 02 Juni 2014, 09:36:47
Wieso sollten die, die kein DbLog verwenden (ca 98% der FHEM Anwender) ploetzlich alles umbenennen

Man sollte aber auch unter Tütcheneinfluß nicht auf die Idee kommen, dass bei 98% der fhem Anwender alle Devicenamen länger als 32 Zeichen sind 8)

Ich gebe Dir aber recht, dass die Beschränkung auf 32 Zeichen rein willkürlich ist. Bisher sind mir zwei Fälle bekannt, in denen hier im Forum von "Problemen" berichtet wurde, weil das nicht ausreichte. In beiden Fällen wurde das Problem durch Umbenennen pragmatisch gelöst. Einen tatsächlichen Handlungsbedarf sehe ich grundsätzlich auch nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!