diff --git a/fhem/FHEM/42_SYSMON.pm b/fhem/FHEM/42_SYSMON.pm index ddaf79668..171c75b43 100644 --- a/fhem/FHEM/42_SYSMON.pm +++ b/fhem/FHEM/42_SYSMON.pm @@ -30,7 +30,7 @@ package main; use strict; use warnings; -my $VERSION = "1.7.1"; +my $VERSION = "1.8.0"; use constant { PERL_VERSION => "perl_version", @@ -1822,50 +1822,80 @@ sub SYSMON_FBVersionInfo($$) #------------------------------------------------------------------------------ # Systemparameter als HTML-Tabelle ausgeben -# Parameter: Name des SYSMON-Geraetes (muss existieren), dessen Daten zur Anzeige gebracht werden sollen. +# Parameter: Name des SYSMON-Geraetes (muss existieren, kann auch anderer Modul genutzt werden), dessen Daten zur Anzeige gebracht werden sollen. # (optional) Liste der anzuzeigenden Werte (ReadingName[:Comment:[Postfix]],...) # Beispiel: define sysv weblink htmlCode {SYSMON_ShowValuesHTML('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: °C', 'cpu_freq:CPU Frequenz: MHz'))} #------------------------------------------------------------------------------ sub SYSMON_ShowValuesHTML ($;@) { my ($name, @data) = @_; - return SYSMON_ShowValuesFmt($name, 1, @data); + return SYSMON_ShowValuesFmt($name, undef, 1, @data); +} + +#------------------------------------------------------------------------------ +# Systemparameter als HTML-Tabelle ausgeben. Zusätzlich wird eine Ueberschrift ausgegeben. +# Parameter: Name des SYSMON-Geraetes (muss existieren, kann auch anderer Modul genutzt werden), dessen Daten zur Anzeige gebracht werden sollen. +# Title: Ueberschrift (Text) +# (optional) Liste der anzuzeigenden Werte (ReadingName[:Comment:[Postfix]],...) +# Beispiel: define sysv weblink htmlCode {SYSMON_ShowValuesHTML('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: °C', 'cpu_freq:CPU Frequenz: MHz'))} +#------------------------------------------------------------------------------ +sub SYSMON_ShowValuesHTMLTitled ($$;@) +{ + my ($name, $title, @data) = @_; + return SYSMON_ShowValuesFmt($name, $title, 1, @data); } #------------------------------------------------------------------------------ # Systemparameter im Textformat ausgeben -# Parameter: Name des SYSMON-Geraetes (muss existieren), dessen Daten zur Anzeige gebracht werden sollen. +# Parameter: Name des SYSMON-Geraetes (muss existieren, kann auch anderer Modul genutzt werden), dessen Daten zur Anzeige gebracht werden sollen. # (optional) Liste der anzuzeigenden Werte (ReadingName[:Comment:[Postfix]],...) # Beispiel: define sysv weblink htmlCode {SYSMON_ShowValuesText('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: °C', 'cpu_freq:CPU Frequenz: MHz'))} #------------------------------------------------------------------------------ sub SYSMON_ShowValuesText ($;@) { my ($name, @data) = @_; - return SYSMON_ShowValuesFmt($name, 0, @data); + return SYSMON_ShowValuesFmt($name, undef, 0, @data); +} + +#------------------------------------------------------------------------------ +# Systemparameter im Textformat ausgeben +# Parameter: Name des SYSMON-Geraetes (muss existieren, kann auch anderer Modul genutzt werden), dessen Daten zur Anzeige gebracht werden sollen. +# Title: Ueberschrift (Text) +# (optional) Liste der anzuzeigenden Werte (ReadingName[:Comment:[Postfix]],...) +# Beispiel: define sysv weblink htmlCode {SYSMON_ShowValuesText('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: °C', 'cpu_freq:CPU Frequenz: MHz'))} +#------------------------------------------------------------------------------ +sub SYSMON_ShowValuesTextTitled ($$;@) +{ + my ($name, $title, @data) = @_; + return SYSMON_ShowValuesFmt($name, $title, 0, @data); } #------------------------------------------------------------------------------ # Systemparameter formatiert ausgeben # Parameter: -# Format: 0 = Text, 1 = HTML # Name des SYSMON-Geraetes (muss existieren), dessen Daten zur Anzeige gebracht werden sollen. +# Title: Ueberschrift +# Format: 0 = Text, 1 = HTML # (optional) Liste der anzuzeigenden Werte (ReadingName[:Comment:[Postfix]],...) #------------------------------------------------------------------------------ -sub SYSMON_ShowValuesFmt ($$;@) +sub SYSMON_ShowValuesFmt ($$$;@) { - my ($name, $format, @data) = @_; + my ($name, $title, $format, @data) = @_; - if($format != 0 && $format != 1) { - return "unknown output format\r\n"; - } + if($format != 0 && $format != 1) { + return "unknown output format\r\n"; + } - my $hash = $main::defs{$name}; + my $hash = $main::defs{$name}; - #if(!defined($cur_readings_map)) { - # SYSMON_updateCurrentReadingsMap($hash); - #} + #if(!defined($cur_readings_map)) { + # SYSMON_updateCurrentReadingsMap($hash); + #} + # nur, wenn es sich um eine SYSMON Instanz handelt + if($hash->{TYPE} eq 'SYSMON') { SYSMON_updateCurrentReadingsMap($hash); + } #Log 3, "SYSMON $>name, @data<"; my @dataDescription = @data; if(scalar(@data)<=0) { @@ -1913,7 +1943,17 @@ sub SYSMON_ShowValuesFmt ($$;@) } } - my $map = SYSMON_obtainParameters($hash, 1); + my $map; + if($hash->{TYPE} eq 'SYSMON') { + $map = SYSMON_obtainParameters($hash, 1); + } else { + # Wenn nicht SYSMON, dann versuchen, die Daten aus den Readings auszulesen + #$map = SYSMON_obtainReadings($hash); + foreach my $rname (keys ($hash->{READINGS})) { + my $rval=$hash->{READINGS}->{$rname}->{VAL}; + $map->{$rname}=$rval; + } + } my $div_class="sysmon"; @@ -1926,6 +1966,16 @@ sub SYSMON_ShowValuesFmt ($$;@) } } + if(defined $title) { + if($format == 1) { + $htmlcode .= "".$title.""; + } else { + if($format == 0) { + $htmlcode .= sprintf("%s\r\n", $title); + } + } + } + # oben definierte Werte anzeigen foreach (@dataDescription) { my($rName, $rComment, $rPostfix) = split(/:/, $_); @@ -2617,6 +2667,7 @@ If one (or more) of the multiplier is set to zero, the corresponding readings is
+ Text output method (see Weblink): SYSMON_ShowValuesHTMLTitled(<SYSMON-Instance>,<Title>[,<Liste>])

+
Text output method (see Weblink): SYSMON_ShowValuesText(<SYSMON-Instance>[,<Liste>])


+ Text output method (see Weblink): SYSMON_ShowValuesTextTitled(<SYSMON-Instance>,<Title>[,<Liste>])

+
Reading values with perl: SYSMON_getValues([<array of desired keys>])