Autor Thema: Der Befehls-Hash %cmds und Großbuchstaben  (Gelesen 670 mal)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13521
  • Das "S" in "IoT" steht für "Security"
Der Befehls-Hash %cmds und Großbuchstaben
« 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.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2898
    • _.:|:._
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #1 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.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 17092
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #2 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.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13521
  • Das "S" in "IoT" steht für "Security"
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #3 am: 03 August 2017, 10:38:32 »
schau ich mir an, danke für die Hinweise.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2898
    • _.:|:._
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #4 am: 03 August 2017, 11:12:51 »
Meiner Meinung nach würde ein Hinweis im Wiki völlig ausreichen.

Soll/darf ich das kurz anpassen oder gibt es Bedenken?

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 17092
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #5 am: 03 August 2017, 13:22:21 »
Zitat
Soll/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.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13521
  • Das "S" in "IoT" steht für "Security"
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #6 am: 03 August 2017, 15:52:24 »
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 ;)

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.



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.



- 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! -->
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13521
  • Das "S" in "IoT" steht für "Security"
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #7 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*
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13521
  • Das "S" in "IoT" steht für "Security"
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #8 am: 04 August 2017, 15:06:51 »
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)
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13521
  • Das "S" in "IoT" steht für "Security"
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #9 am: 05 August 2017, 15:33:53 »
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.
« Letzte Änderung: 05 August 2017, 18:31:17 von betateilchen »
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 17092
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #10 am: 06 August 2017, 14:03:21 »
Zitat
aber "culflash" als eingegebener Befehl funktioniert trotzdem nicht (https://forum.fhem.de/Smileys/default/wink.gif)
Ab sofort schon.

Zitat
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.
Ich habe alle Befehle in commandref_frame.html und commandref_frame_DE.html "korrekt" gekennzeichnet, waere nett, wenn jemand das verifiziert.

Zitat
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.
Logischer: ja, sinnvoller: nein. Man muss nicht jede Funktion als Modul implementieren, nur weil es geht.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13521
  • Das "S" in "IoT" steht für "Security"
Antw:Der Befehls-Hash %cmds und Großbuchstaben
« Antwort #11 am: 06 August 2017, 14:26:33 »
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" ...)

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.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

 

decade-submarginal