Hallo,
folgende Situation:
KUbuntu 15.04, konsole oder xterm, Telnet zu fhem auf Port 7072 (Verbindung mit der FHEM-Kommandozeile/Konsole).
Bei Eingabe des Kommandos help
- bekomme ich eine überschüssige HTML-Kommentare,
- bekomme ich in der Description aber nicht bei Parameter < und > statt < und > angezeigt,
- fehlt der Befehl version.
Ausgabe unten.
Grüße
Boris
help
Possible commands:
Command Parameter
Description
----------------------------------------------------------------------
<!--header:command-->use "help <!--header:command-->" for more help
IF use "help IF" for more help
apptime [clear|<field>] [top|all] [<filter>]
application function calls and duration
attr <devspec> <attrname> [<attrval>]
set attribute for <devspec>
attributes use "help attributes" for more help
cancel [<id> [quiet]]
list sleepers, cancel sleeper with <id>
command use "help command" for more help
commands use "help commands" for more help
createlog use "help createlog" for more help
define <name> <type> <options>
define a device
defmod <name> <type> <options>
define or modify a device
delete <devspec>
delete the corresponding definition(s)
deleteattr <devspec> [<attrname>]
delete attribute for <devspec>
deletereading <devspec> [<attrname>]
delete user defined reading for <devspec>
devspec use "help devspec" for more help
displayattr <devspec> [attrname]
display attributes
encoding [utf8|latin1]
query and set the character encoding for the current telnet session
exit
end the client session
fheminfo use "help fheminfo" for more help
get <devspec> <type dependent>
request data from <devspec>
getstate use "help getstate" for more help
global use "help global" for more help
help [<moduleName>]
get help (this screen or module dependent docu)
include <filename>
read the commands from <filenname>
inform {on|off|log|raw|timer|status}
echo all events to this client
iowrite <iodev> <data>
write raw data with iodev
list [devspec]
list definitions and status info
modify device <options>
modify the definition (e.g. at, notify)
notice use "help notice" for more help
perl use "help perl" for more help
quit
end the client session
reload <module-name>
reload the given module (e.g. 99_PRIV)
rename <old> <new>
rename a definition
rereadcfg [configfile]
read in the config after deleting everything
restore [list] [<filename|directory>]
restore files saved by update
save [configfile]
write the configfile and the statefile
set <devspec> <type dependent>
transmit code for <devspec>
setdefaultattr <attrname> <attrvalue>
set attr for following definitions
setreading <devspec> <reading> <value>
set reading for <devspec>
setstate <devspec> <state>
set the state shown in the command list
shutdown [restart|exitValue]
terminate the server
sleep <sec> [<id>] [quiet]
sleep for sec, 3 decimal places
trigger <devspec> <state>
trigger notify command
update [<fileName>|all|check|force] [http://.../controlfile]
update FHEM
usb use "help usb" for more help
xmllist
list definitions and status info as xml
Zitat von: Dr. Boris Neubert am 13 Februar 2016, 09:35:29
- fehlt der Befehl version.
Der Befehl "version" taucht erst auf, sobald er einmalig ausgeführt wurde seit Systemstart. Das Modul ist mit der Ordnungszahl 98 versehen und wird erst beim ausführen geladen.
Gruß
Markus
Verstehe, Markus. Mit update wäre es wohl genauso. Aber das hatte ich vorher ausgeführt.
Stellen wir uns help wirklich so vor? Was nützt mir die Übersicht über die Befehle, wenn sie mir nur die Befehle anzeigt, die aus fhem.pl kommen, während ich die anderen Befehle bereits kennen muss, um sie ausgeführt zu haben und dann angezeigt zu bekommen.
Ich brauche das persönlich alles nicht, und ich weiß auch, wie man commandref bedient. Aber dann können wir uns zumindest die Übersicht auch gleich schenken, statt den Benutzer in die Irre zu führen.
help version gibt mir übrigens was zurück, ohne version vorher ausgeführt zu haben. Danach ist version immer noch nicht geladen. Erst wenn ich version einmal ausführe, erscheint es dann in der Übersicht.
Viele Grüße
Boris
Zitat von: Dr. Boris Neubert am 13 Februar 2016, 09:52:20
help version gibt mir übrigens was zurück, ohne version vorher ausgeführt zu haben.
Logisch. Help mit Angabe eines Modulnamens liest den commandref-Teil der Moduldatei direkt aus dem Dateisystem, genau wie bei "Device specific help" in der Detailansicht eines devices auch.
Zitat von: Dr. Boris Neubert am 13 Februar 2016, 09:35:29
- bekomme ich eine überschüssige HTML-Kommentare,
Das kommt aus der kürzlich neu eingeführten Klassifizierung der Module, das muss ich mir bei Gelegenheit anschauen.
"help version" extrahiert ja die commandref zu 98_version.pm direkt aus dem Perl-Modul, ohne es zu laden.
Wenn man jetzt sagen würde, alle Command-Module bekommen Ordnungszahl 99 und werden somit immer geladen, wäre das bei apptime bspw. fatal, weil es dann sofort loslegt sich einzuklinken. Somit würden aber alle Command-Befehle die als Modul separiert sind in der help usage sofort auftauchen.
Prinzipiell wird ja was sowas angeht eigentlich immer auf die commandref verwiesen in der alle möglichen Befehle aufgelistet und dokumentiert sind. Die Ausgabe von "help" soll ja nur als Gedankenstütze dienen und weniger als vollwertige Referenz aller möglichen Befehle. So verstehe ich das zumindest.
Gruß
Markus
Zitat von: Markus Bloch am 13 Februar 2016, 09:59:17
Die Ausgabe von "help" soll ja nur als Gedankenstütze dienen und weniger als vollwertige Referenz aller möglichen Befehle. So verstehe ich das zumindest.
so verstehe ich das auch.
Es ist ausserdem schon immer so, dass commands, die eigene Moduldateien besitzen, nicht in "help" angezeigt werden, solange der Befehl noch nicht ausgeführt wurde (und das Modul somit noch nicht geladen ist).
Vermutlich wäre es die sauberste und einfachste Lösung, wenn fhem.pl eim Start alle Module abläuft und CommandFoobar abholt und sich merkt.
aaahhh... jetzt verstehe ich das von Boris beschriebene Problem erst in seinem ganzen Ausmaß.
Früher habe ich in 98_help.pm die Liste der möglichen Befehle direkt aus der commandref_frame gelesen.
Das geht nun nicht mehr, bzw. nur noch für die Befehle, die nach wie vor in der commandref_frame stehen.
Da muss ich mir grundsätzlich eine andere Lösung ausdenken.
Zitat von: Dr. Boris Neubert am 13 Februar 2016, 10:18:30
Vermutlich wäre es die sauberste und einfachste Lösung, wenn fhem.pl eim Start alle Module abläuft und CommandFoobar abholt und sich merkt.
Das meinst Du aber jetzt hoffentlich nicht ernst...
Zu deinem ursprünglichen Beitrag:
Zitat von: Dr. Boris Neubert am 13 Februar 2016, 09:35:29
- bekomme ich eine überschüssige HTML-Kommentare,
bekomme ich bei mir nicht:
fhem> help
Possible commands:
Command Parameter
Description
----------------------------------------------------------------------
addstruct <structure> <devspec>
add <devspec> to <structure>
attr <devspec> <attrname> [<attrval>]
set attribute for <devspec>
cancel [<id> [quiet]]
list sleepers, cancel sleeper with <id>
createlog <device>
create log/weblink for <device>
define <name> <type> <options>
define a device
defmod <name> <type> <options>
define or modify a device
delete <devspec>
delete the corresponding definition(s)
deleteattr <devspec> [<attrname>]
delete attribute for <devspec>
deletereading <devspec> [<attrname>]
delete user defined reading for <devspec>
delstruct <structure> <devspec>
delete <devspec> from <structure>
displayattr <devspec> [attrname]
display attributes
encoding [utf8|latin1]
query and set the character encoding for the current telnet sessi on
exit
end the client session
fheminfo [send]
show or send Fhem statistics
get <devspec> <type dependent>
request data from <devspec>
help [<moduleName>]
get help (this screen or module dependent docu)
include <filename>
read the commands from <filenname>
inform {on|off|log|raw|timer|status}
echo all events to this client
iowrite <iodev> <data>
write raw data with iodev
list [devspec]
list definitions and status info
modify device <options>
modify the definition (e.g. at, notify)
quit
end the client session
reload <module-name>
reload the given module (e.g. 99_PRIV)
rename <old> <new>
rename a definition
rereadcfg [configfile]
read in the config after deleting everything
restore [list] [<filename|directory>]
restore files saved by update
save [configfile]
write the configfile and the statefile
set <devspec> <type dependent>
transmit code for <devspec>
setdefaultattr <attrname> <attrvalue>
set attr for following definitions
setreading <devspec> <reading> <value>
set reading for <devspec>
setstate <devspec> <state>
set the state shown in the command list
shutdown [restart|exitValue]
terminate the server
sleep <sec> [<id>] [quiet]
sleep for sec, 3 decimal places
trigger <devspec> <state>
trigger notify command
update [<fileName>|all|check|force] [http://.../controlfile]
update FHEM
usb [scan|create]
display or create fhem-entries for USB devices
version [<filter>] [noheader]
print SVN version of loaded modules
fhem>
Zitat von: Dr. Boris Neubert am 13 Februar 2016, 09:35:29
- bekomme ich in der Description aber nicht bei Parameter < und > statt < und > angezeigt,
Patch:
Index: FHEM/98_help.pm
===================================================================
--- FHEM/98_help.pm (revision 10807)
+++ FHEM/98_help.pm (working copy)
@@ -137,12 +137,9 @@
next if($cl && $cmds{$cmd}{ClientFilter} &&
$cl->{TYPE} !~ m/$cmds{$cmd}{ClientFilter}/);
my @a = split(",", $cmds{$cmd}{Hlp}, 2);
- # $a[0] =~ s/</</g;
- # $a[0] =~ s/>/>/g;
$a[1] //= "";
$a[1] = " $a[1]";
- $a[1] =~ s/</</g;
- $a[1] =~ s/>/>/g;
+
$str .= sprintf("%-15s%-50s\n%s\n", $cmd, $a[0], $a[1]);
}
getestet mit telnet und FHEMWEB. In FHEMWEB wird der Output in <pre>-Tags ausgegeben, dadurch werden html-Entities nicht ersetzt.
Die überschüssigen html-Kommentare bekomme ich aber auch.
(http://up.picr.de/24571262vg.png)
Wie schon geschrieben, die kommen aus commandref_frame
Wahrscheinlich weil bei euch das IF command geladen ist.
bei mir mit Sicherheit nicht.
Vermutlich hast Du bei Dir einfach nicht die aktuellen Dateiversionen von commandref.* in Verwendung
Die beiden Probleme mit der Kommentarzeile und dem < habe ich inzwischen beseitigt.
Das andere Problem - die unvollständige Liste - muss ich von Grund auf überdenken.
Zitat von: betateilchen am 13 Februar 2016, 10:40:28
Vermutlich hast Du bei Dir einfach nicht die aktuellen Dateiversionen von commandref.* in Verwendung
Die beiden Probleme mit der Kommentarzeile und dem < habe ich inzwischen beseitigt.
Hab gerade mal nachgeforscht. Liegt daran, dass die Ordnerstruktur bei mir anders ist. Ich nutze das fhem-Paket für Synology-NAS von Martin Fischer (http://www.fischer-net.de/hausautomation/downloads/category/4-synology.html). Dort ist die Ordnerstruktur etwas anders:
/usr/local/FHEM/bin/fhem.pl
/usr/local/FHEM/share/fhem/FHEM/XX_modules.pm
In global ist als modpath konfiguriert: /usr/local/FHEM/share/fhem
In cref_search_cmd nutzt du als Pfad zur commandref_frame.html "./docs/commandref_frame.html", daher kann er bei mir die verfügbaren Commands aus der commandref Frame nicht parsen. Hier müsste man den Pfad aus modpath benutzen.
Gruß
Markus
nun warte doch mal ab...
- Ich werde künftig den command-Block der lokalen commandref lesen.
- Wenn die lokale commandref nicht vorhanden ist bzw. per exclude_from_update nicht regelmäßig generiert wird, wird eine entsprechende Fehlermeldung ausgegeben.
Punkt 1 funktioniert hier schon
Punkt 2 wird im Laufe des Wochenendes funktionieren