# $Id: 98_help.pm 8032 2015-02-18 18:36:37Z betateilchen $ # package main; use strict; use warnings; sub CommandHelp; sub help_Initialize($$) { my %hash = ( Fn => "CommandHelp", Hlp => "[],get help (this screen or module dependent docu)" ); $cmds{help} = \%hash; } sub CommandHelp { my ($cl, $arg) = @_; my ($mod,$lang) = split(" ",$arg); $lang //= AttrVal('global','language','en'); $lang = (lc($lang) eq 'de') ? '_DE' : ''; if($mod) { $mod = lc($mod); my %mods; my $modPath = AttrVal('global','modpath','.'); my @modDir = ("$modPath/FHEM"); foreach my $modDir (@modDir) { opendir(DH, $modDir) || die "Cant open $modDir: $!\n"; while(my $l = readdir DH) { next if($l !~ m/^\d\d_.*\.pm$/); my $of = $l; $l =~ s/.pm$//; $l =~ s/^[0-9][0-9]_//; $mods{lc($l)} = "$modDir/$of"; } } return "Module $mod not found" unless defined($mods{$mod}); my $output = ""; my $skip = 1; my ($err,@text) = FileRead({FileName => $mods{$mod}, ForceType => 'file'}); return $err if $err; foreach my $l (@text) { if($l =~ m/^=begin html$lang$/) { $skip = 0; } elsif($l =~ m/^=end html$lang$/) { $skip = 1; } elsif(!$skip) { $output .= $l; } } $output = "Keine deutsche Hilfe gefunden!\n\n". CommandHelp(undef, "$mod en") unless $output; if( $cl && $cl->{TYPE} eq 'telnet' ) { $output =~ s/
/\n/g; $output =~ s//\n/g; $output =~ s/<\/a>//g; $output =~ s///g; $output =~ s/
    /\n/g; $output =~ s/<\/ul>/\n/g; $output =~ s/
  • /-/g; $output =~ s/<\/li>/\n/g; $output =~ s///g; $output =~ s/<\/code>//g; $output =~ s/<//g; $output =~ s/<[bui]>/\ /g; $output =~ s/<\/[bui]>/\ /g; $output =~ s/\ \ +/\ /g; $output =~ s/\t+/ /g; $output =~ s/\n\n/\n/g; $output =~ s/ä/ä/g; $output =~ s/Ä/Ä/g; $output =~ s/ö/ö/g; $output =~ s/Ö/Ö/g; $output =~ s/ü/ü/g; $output =~ s/Ü/Ü/g; $output =~ s/ß/ß/g; return $output; } return "$output"; } else { my $str = "\n" . "Possible commands:\n\n" . "Command Parameter Description\n" . "-----------------------------------------------\n"; for my $cmd (sort keys %cmds) { next if(!$cmds{$cmd}{Hlp}); next if($cl && $cmds{$cmd}{ClientFilter} && $cl->{TYPE} !~ m/$cmds{$cmd}{ClientFilter}/); my @a = split(",", $cmds{$cmd}{Hlp}, 2); $str .= sprintf("%-9s %-25s %s\n", $cmd, $a[0], $a[1]); } return $str; } } 1; =pod =begin html

    ?, help

      ? [<moduleName>] []
      help [<moduleName>] []

      • Returns a list of available commands, when called without a moduleName.
      • Returns a module dependent helptext, same as in commandref.
      • language will be determined in following order:
        • valid parameter <language> given
        • global attribute language
        • nothing founde: return english
    =end html =begin html_DE

    ?, help

      ? [<moduleName>] []
      help [<moduleName>] []

      • Liefert eine Liste aller Befehle mit einer Kurzbeschreibung zurück.
      • Falls moduleName spezifiziert ist, wird die modul-spezifische Hilfe aus commandref zurückgeliefert.
      • Die anzuzeigende Sprache wird in folgender Reihenfolge bestimmt:
        • gültiger Parameter <language> beim Aufruf übergeben
        • globales Attribut language
        • falls alles fehlt: englisch
    =end html_DE =cut