Der Befehls-Hash %cmds und Großbuchstaben

Begonnen von betateilchen, 02 August 2017, 23:56:22

Vorheriges Thema - Nächstes Thema

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dev0

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.

rudolfkoenig

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.

betateilchen

schau ich mir an, danke für die Hinweise.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dev0

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?

rudolfkoenig

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.

betateilchen

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


  • die commandref-Teile in commandref_frame.html keine Ende-Kennzeichnung für den Befehl beinhalten
  • deshalb die "internen" Commands von 98_help.pm nicht verarbeitet werden

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! -->
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#9
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

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.

betateilchen

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:


  • Wenn XmlList und JsonList2 eigene Module sind, warum dann nicht auch "list"?
  • Warum muss der ganze Ballast an CommandXyz() Funktionen in jeder laufenden Installation rumgeschleppt werden, wenn man (wie ich) einen Großteil der 25 in fhem.pl definierten Befehle nie oder nur extrem selten benutzt? (sleep, cancel, rereadcfg, rename ...)

Meiner Meinung nach gäbe es eine ganze Reihen von Befehlen, bei denen ein Auslagern in eigene Module nicht schaden würde.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!