FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: betateilchen am 02 August 2017, 23:56:22

Titel: Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: betateilchen am 02 August 2017, 23:56:22
Ausgangssituation ist hier beschrieben:

https://forum.fhem.de/index.php/topic,74903.0.html

Kurz zusammengefaßt: Trägt ein Befehlsmodul den Befehlsnamen mit Großbuchstaben in %cmds ein,

$cmds{CULflash} = \%chash;

gibt es Problem im Zusammenhang mit 98_help.pm, weil dort alle Befehle in Kleinbuchstaben konvertiert werden, um ein Finden der vollständigen Befehlsliste überhaupt zu ermöglichen und der Benutzer nicht wissen muss, ob er bei "help <irgendwas>" das <irgendwas> in Klein-/Großbuchstaben oder gar gemischt angeben muss, um die Hilfe zu finden.

Mein Vorschlag:

Man könnte sich darauf verständigen, FHEM Befehle immer in kleinbuchstaben in %cmds einzutragen und diese Regel in die Entwicklungsrichtlinien aufnehmen.

Aktuell würde die daraus resultierende Änderung nur ein einziges Modul betreffen: das oben genannte CULflash Zumindest habe ich bei meiner Suche keine anderen Befehlsmodule gefunden, die Großbuchstaben eintragen.

Danke an dev0 für den Hinweis auf das Problem.
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: dev0 am 03 August 2017, 06:38:24
Meiner Meinung nach würde ein Hinweis im Wiki völlig ausreichen.
Wenn der Befehlsname in Kleinbuchstaben registiert ist, dann muß beim Befehsaufruf auch nicht auf Groß-/Kleinschreibung geachtet werden.
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: rudolfkoenig am 03 August 2017, 07:59:04
Mir ist aufgefallen, dass help bei unbekannten Befehlen einen Eintrag in cmds macht:
fhem> help blubber
Module blubber not found
fhem> { join(",", sort keys %cmds) }
?,CULflash,HMinfo,HMtemplate,JsonList,JsonList2,MSG,XmlList,apptime,attr,backup,blubber,cancel,cmdalias,configdb,copy,count,createlog,define,defmod,delete,deleteattr,deletefile,deletereading,displayattr,encoding,exit,fhemdebug,fheminfo,get,help,include,inform,iowrite,list,modify,notice,quit,reload,rename,rereadcfg,restore,save,set,setdefaultattr,setreading,setstate,shutdown,sleep,template,trigger,update,updatefhem,uptime,usb,version


Falls ich das in der Zeile 46 behebe mit
      $mod = $cmds{$mod}{ModuleName} if defined($cmds{$mod}) && defined($cmds{$mod}{ModuleName});
dann habe ich mit help culflash gefolgt von CULflash keine Probleme mehr.

Dabei aufgefallen:
- use vars qw($FW_ME); oder vglb. fehlt, ohne FHEMWEB Instanz gibt es eine Warnung
- help list funktioniert nicht.
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: betateilchen am 03 August 2017, 10:38:32
schau ich mir an, danke für die Hinweise.
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: dev0 am 03 August 2017, 11:12:51
Zitat von: dev0 am 03 August 2017, 06:38:24
Meiner Meinung nach würde ein Hinweis im Wiki völlig ausreichen.

Soll/darf ich das kurz anpassen oder gibt es Bedenken?
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: rudolfkoenig am 03 August 2017, 13:22:21
ZitatSoll/darf ich das kurz anpassen oder gibt es Bedenken?
Ich meine es gibt keinen Grund fuer die Einschraenkung der Schreibweise. Ich waere mich aber nicht dagegen, falls ihr meint, das waere wichtig.
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: betateilchen am 03 August 2017, 15:52:24
Zitat von: rudolfkoenig am 03 August 2017, 07:59:04
Falls ich das in der Zeile 46 behebe mit
...
dann habe ich mit help culflash gefolgt von CULflash keine Probleme mehr.

aber "culflash" als eingegebener Befehl funktioniert trotzdem nicht ;)

Zitat von: rudolfkoenig am 03 August 2017, 13:22:21
Ich meine es gibt keinen Grund fuer die Einschraenkung der Schreibweise.

Naja, ich fände es schön, wenn man als Anwender die Schreibweise (GROSS/klein) nicht kennen müsste. CULflash ist im Moment der einzige Befehl, bei dem man die Großbuchstaben wissen (!) und beachten muss. Bei JsonList2.pm ist die Schreibweise des Befehls beispielsweise komplett in Kleinbuchstaben.




Zitat von: rudolfkoenig am 03 August 2017, 07:59:04
Dabei aufgefallen:
- use vars qw($FW_ME); oder vglb. fehlt, ohne FHEMWEB Instanz gibt es eine Warnung

Wieviele FHEM Installationen wird es wohl geben, in denen keine FHEMWEB Instanz existiert? Wer sowas bei vollem Bewusstsein einrichtet, der braucht vermutlich auch das "help" Modul nicht mehr. Aber wenn es Dich ruhiger schlafen lässt, baue ich das gerne ein.




Zitat von: rudolfkoenig am 03 August 2017, 07:59:04
- help list funktioniert nicht.

genauer: "help <die meisten Befehle aus fhem.pl>" funktioniert nicht.

Das hängt damit zusammen, dass


zu 1.: Schau Dir den Abschnitt "devspec" an, dann verstehst Du, was ich meine. Die Kennzeichnung wurde seinerzeit eingeführt, um die entsprechenden Textabschnitte eindeutig finden zu können.

Wenn Du alle internen Commands entsprechend kennzeichnest (und das bitte in EN und DE), kann ich die in 98_help.pm auch berücksichtigen.

Beispiel für "list":
<!-- list end - diese Zeile nicht entfernen! -->
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: betateilchen am 03 August 2017, 15:57:55
Ich stelle jetzt einfach mal die Frage in den Raum, ob es nicht ohnehin sinnvoller und/oder logischer wäre, alle CommandXYZ() aus der fhem.pl in eigene Moduldateien auszulagern.

*duck-und-weg*
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: betateilchen am 04 August 2017, 15:06:51
Zitat von: betateilchen am 03 August 2017, 15:52:24
Wieviele FHEM Installationen wird es wohl geben, in denen keine FHEMWEB Instanz existiert?

Antwort: 3 von 5642 Installationen, die in den letzten 12 Monaten Daten an den Statistikserver übertragen haben, besitzen keine FHEM Instanz. Das ist für mich kein Grund zur Besorgnis  8)
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: betateilchen am 05 August 2017, 15:33:53
Zitat von: betateilchen am 03 August 2017, 15:52:24
genauer: "help <die meisten Befehle aus fhem.pl>" funktioniert nicht.

Die internen Befehle werden zumindest mit "help commands" alle angezeigt.

Die gestern eingecheckte Version von help.pm erkennt alle korrekt gekennzeichneten Commands in commandref_frame.html nun automatisch, die bisher manuell gepflegte Liste in 98_help.pm entfällt.
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: rudolfkoenig am 06 August 2017, 14:03:21
Zitataber "culflash" als eingegebener Befehl funktioniert trotzdem nicht (https://forum.fhem.de/Smileys/default/wink.gif)
Ab sofort schon.

ZitatDie gestern eingecheckte Version von help.pm erkennt alle korrekt gekennzeichneten Commands in commandref_frame.html nun automatisch, die bisher manuell gepflegte Liste in 98_help.pm entfällt.
Ich habe alle Befehle in commandref_frame.html und commandref_frame_DE.html "korrekt" gekennzeichnet, waere nett, wenn jemand das verifiziert.

ZitatIch stelle jetzt einfach mal die Frage in den Raum, ob es nicht ohnehin sinnvoller und/oder logischer wäre, alle CommandXYZ() aus der fhem.pl in eigene Moduldateien auszulagern.
Logischer: ja, sinnvoller: nein. Man muss nicht jede Funktion als Modul implementieren, nur weil es geht.
Titel: Antw:Der Befehls-Hash %cmds und Großbuchstaben
Beitrag von: betateilchen am 06 August 2017, 14:26:33
Zitat von: rudolfkoenig am 06 August 2017, 14:03:21
Ich habe alle Befehle in commandref_frame.html und commandref_frame_DE.html "korrekt" gekennzeichnet, waere nett, wenn jemand das verifiziert.

Stichprobenweise mit ein paar Befehlen getestet, deren einzelne Hilfe vorher nicht kam: sieht gut aus ("help list" "help sleep" "help cancel" ...)

Zitat von: rudolfkoenig am 06 August 2017, 14:03:21
Logischer: ja, sinnvoller: nein. Man muss nicht jede Funktion als Modul implementieren, nur weil es geht.

Ok, ich bin ja bei Dir, wenn es beispielsweise um "define, set, get, attr" geht. Aber:


Meiner Meinung nach gäbe es eine ganze Reihen von Befehlen, bei denen ein Auslagern in eigene Module nicht schaden würde.