98_help.pm / FHEM Befehle mit Grossbuchstaben

Begonnen von dev0, 31 Juli 2017, 08:42:37

Vorheriges Thema - Nächstes Thema

dev0

Wenn ein FHEM Befehl, der Großbuchstaben im Namen enthält (zB. getURL), existiert und "help getURL" aufgerufen wird, dann ist danach dieser Befehl nicht mehr aufrufbar: "Unknown command geturl, try help". Anscheinend wird dieses Verhalten durch die Umwandlung in Kleinbuchstaben, in den 98_help.pm Zeilen 37 und 54, ausgelöst.

Lässt sich dieses, aus meiner Sicht, unerwünschte Verhalten abstellen?

dev0

Ein Workaround (oder die Lösung?) ist im Befehls Modul den Key im globalen command name hash %cmds klein zu schreiben:


sub getURL_Initialize($$)
{
  $cmds{geturl} = {
    Fn  => "CommandGetURL",
    Hlp => "Usage: getURL <url> [<device>:<reading>]"
  }
}

betateilchen

Danke für den Hinweis.

*grübel*

Aus irgendeinem Grund musste ich in 98_help.pm damals die Konvertierung in Kleinbuchstaben einbauen, im Moment fällt mir aber nicht mehr ein, was der Grund war.

Den Befehl in %cmds in Kleinbuchstaben einzutragen, ist auf jeden Fall ein Workaround, der das Problem behebt.

Noch besser fände ich es, wenn man eine Regel "FHEM Befehle müssen in Kleinbuchstaben in %cmds eingetragen werden" hätte, die in die Entwicklungsrichtlinien aufgenommen wird.




Nach einigem Nachdenken meine ich mich daran zu erinnern, warum ich die Kleinbuchstaben damals verwenden musste.

Die Kleinbuchstabenkonvertierung wurde eingebaut, damit der Benutzer bei "help <irgendwas>" nicht wissen muss, ob <irgendwas> in Kleinbuchstaben, Großbuchstaben oder gemischt geschrieben werden muss, um die Hilfe zu erhalten.

Wobei es aktuell nur ein einziges Modul gibt, das tatsächlich Großbuchstaben in %cmds einträgt, nämlich 98_CULflash.pm (zumindest habe ich bei der Suche eben kein weiteres Modul gefunden, das sich so verhält)

Wir sollten mal im Developer-Bereich darüber diskutieren, ob man sich auf eine generelle Kleinschreibung in %cmds verständigen kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dev0

Ich dachte mir schon, dass Du das nicht "einfach so" eingebaut hast, sonst hätte ich auch einen Patch angehangen.
Danke für's grübeln ;)

dev0

Nachdem das Thema hier weiter erörtert, gibt es (erneut?) ein Problem mit der Gross/Kleinschreibung.
Nach einem FHEM Neustart sind die FHEM Befehle case-insensitive. Nach dem beliebigen Aufruf von 'help' in einer Telnet Sitzung sind die FHEM Befehle case-sensitive und zwar so, wie sie in der Command Reference angezeigt werden.

betateilchen

Um welchen Befehl geht es?

Nachdem Rudi entschieden hat, dass telnet künftig gar nicht mehr standardmäßig in FHEM vorhanden sein wird, frage ich mich, ob ich mich darum überhaupt noch kümmern sollte  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatNachdem Rudi entschieden hat, dass telnet künftig gar nicht mehr standardmäßig in FHEM vorhanden sein wird,
Das ist zwar nicht falsch, suggeriert aber, dass ich telnet abschaffen will, was keineswegs der Fall ist.
Ich will nur die Anfaenger etwas weniger verwirren.

betateilchen

Zitat von: rudolfkoenig am 29 September 2018, 10:44:55
Ich will nur die Anfaenger etwas weniger verwirren.

das schaffst Du trotzdem (und nicht nur bei Anfängern), sogar ganz ohne telnet :) :)

Trotzdem kann ich das aktuelle Thema nicht nachvollziehen, da bei der Aufbereitung der Daten keine Unterscheidung nach telnet oder web in 98_help.pm gemacht wird. Die Unterscheidung betrifft nur die Ergebnisdarstellung.

Deshalb hatte ich nach dem "problematischen" Befehl gefragt, damit ich das eventuell bei mir nachstellen kann.
-----------------------
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: betateilchen am 29 September 2018, 10:39:25
Um welchen Befehl geht es?
Vermutlich um alle, die in der Command nicht nur in Kleinbuchstaben geschrieben sind: Getestet habe ich JsonList, JsonList2, XmlList, MSG und meinen eigenen Befehl getURL.

Vor dem Aufruf von help gibt es nur einen Key 'jsonlist2' in %cmds. Nach dem Aufruf von help gibt es zwei Einträge: 'jsonlist2' und 'JsonList2'.

dev0

Zitatda bei der Aufbereitung der Daten keine Unterscheidung nach telnet oder web in 98_help.pm gemacht wird
Es macht auch keinen Unterschied ob telnet oder FHEMWEB als Frontend verwendet wird. Auch nach dem Aufruf von zB. "help jsonlist2" in der FHEMWEB Gui tritt der beschriebene Effekt ebenfalls auf: Die Befehle sind case-sensitive und %cmds wird modifiziert. mMn ein No-Go, dass gefixt werden sollte.

betateilchen

Ja. Aber zuerst klang es ja so, dass es nur bei telnet auftritt. Sobald ich wieder etwas mehr Luft habe, werde ich mich darum kümmern.

Wobei die Frage bleibt, ob die Auswertung von %cmds nicht tatsächlich innerhalb von fhem.pl als case-insensitiv erfolgen sollte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Ich habe den Aufruf in fhem.pl gefixt, d.h. nach einem "help JsonList2" funktioniert der Aufruf als jsonlist2.

betateilchen

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

dev0

Ich danke ebenfalls.

Allerdings wird weiterhin der %cmds Hash vom help Befehl modifiziert, wenn man beispielsweise erst 'jsonlist2' und dann 'help jsonlist2' aufruft:

fhem-dev#> {Dumper \%cmds}
$VAR1 = {
...
          'jsonlist2' => {
                           'Hlp' => '[<devspec>],list definitions as JSON',
                           'Fn' => 'CommandJsonList2'
                         },
          'JsonList2' => {
                           'Fn' => undef,
                           'Hlp' => 'Command JsonList2 not loaded. Use "help JsonList2" for more help'
                         },
...
        };

dev0