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 .= "
<ReadingName>[:<Comment>[:<Postfix>]]
.ReadingName
is the Name of desired Reading, Comment
is used as the display name and postfix is displayed after eihentlichen value (such as units or as MHz can be displayed).Comment
is specified, an internally predefined description is used.define sysv1 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon')}
define sysv2 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: °C', 'cpu_freq:CPU Frequenz: MHz'))}
<ReadingName>[:<Comment>[:<Postfix>]]
an.ReadingName
den anzuzeigenden Reading an, der Wert aus Comment
wird als der Anzeigename verwendet
@@ -3163,11 +3223,22 @@ If one (or more) of the multiplier is set to zero, the corresponding readings is
define sysv2 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: °C', 'cpu_freq:CPU Frequenz: MHz'))}