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);
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.
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.
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
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".
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.
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
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
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);
ach siehste. Danke
vg
Jörg
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);
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.
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.
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.
@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.
Ich gehöre, glaub ich zumindest, zu den von betateilchen angedeuteten "problemen".
Bin absolut dagegen den device namen auf 32 zeichen einzugrenzen! Könnte man nicht dbLog auf zb 255 zeichen erweitern?
Grüße
wozu sollte man die DB permanent aufblasen nur um einen rein theoretischen seltenen fehler durchgehen zu lassen? beschränkung der länge mit fehlermeldung sollte IMHO den zweck besser erfüllen.
ganz zu schweigen davon daß auch bei 255 zeichen länge der gleiche fehler mit der gleichen fehlermeldung erneut abgefangen werden muss ;)
LG, florian
Fuer DB-Neulinge: ein Datensatz gleicher Laenge (sagen wir 10 Bytes) gespeichert in der Spalte mit varchar(255) nimmt genausoviel Platz auf der Festplatte ein wie in der Spalte mit varchar(32). Merke: varchar != char.
Du hast ja recht. Aber ist nunmal auf 32 gesetzt und nicht auf 255 :)
Wobei ich auch nach wie vor der Meinung bin, 32 Zeichen für einen device-Bezeichner sollten durchaus ausreichend sein.