2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

Unit.pm: add time as new dimension for units Wh, kWh, MWh, GWh

git-svn-id: https://svn.fhem.de/fhem/trunk@12872 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jpawlowski 2016-12-24 11:57:36 +00:00
parent 65b094e56e
commit 748916554c

View File

@ -143,7 +143,7 @@ my $scales_sq = {
},
};
# scale helper for metric square numbers
# scale helper for metric cubic numbers
my $scales_cu = {
'scale_txt_cu' => chr(0x00B3),
'scale_txt_long_cu' => {
@ -156,25 +156,98 @@ my $scales_cu = {
my $scales_t = {
# second
'1' => {},
's' => {
'scale_txt_t' => 's',
'scale_txt_long_t' => {
de => 'Sekunde',
en => 'second',
},
'scale_txt_long_pl_t' => {
de => 'Sekunden',
en => 'seconds',
},
},
# minute
'60' => {},
'min' => {
'scale_txt_t' => {
de => 'Min',
en => 'min',
},
'scale_txt_long_t' => {
de => 'Minute',
en => 'minute',
},
'scale_txt_long_pl_t' => {
de => 'Minuten',
en => 'minutes',
},
},
# hour
'3600' => {},
'h' => {
'scale_txt_t' => 'h',
'scale_txt_long_t' => {
de => 'Stunde',
en => 'hour',
},
'scale_txt_long_pl_t' => {
de => 'Stunden',
en => 'hours',
},
},
# day
'86400' => {},
'd' => {
'scale_txt_t' => 'd',
'scale_txt_long_t' => {
de => 'Tag',
en => 'day',
},
'scale_txt_long_pl_t' => {
de => 'Tage',
en => 'days',
},
},
# week
'604800' => {},
'w' => {
'scale_txt_t' => 'w',
'scale_txt_long_t' => {
de => 'Woche',
en => 'week',
},
'scale_txt_long_pl_t' => {
de => 'Wochen',
en => 'weeks',
},
},
# month
'2592000' => {},
'm' => {
'scale_txt_t' => 'm',
'scale_txt_long_t' => {
de => 'Monat',
en => 'month',
},
'scale_txt_long_pl_t' => {
de => 'Monate',
en => 'month',
},
},
# year
'31536000' => {},
'a' => {
'scale_txt_t' => 'a',
'scale_txt_long_t' => {
de => 'Jahr',
en => 'year',
},
'scale_txt_long_pl_t' => {
de => 'Jahre',
en => 'years',
},
},
};
# scale helper for time related numbers
@ -623,9 +696,9 @@ my $rtype_base = {
# cross-references to $rtype_base, $scales_m, $scales_sq, $scales_cu, $scales_t
#
# ref_base => reference to $rtype_base id to include it's keys here
# ref_sq => include keys from $scales_sq here
# ref_cu => include keys from $scales_cu here
# ref_t => reference to $scales_t id to include it's keys here
# ref_sq => include keys from $scales_sq here; normally combined with a scale_sq reference as well
# ref_cu => include keys from $scales_cu here; normally combined with a scale_cu reference as well
# ref_t => reference to $scales_t id to include it's keys here; ; normally combined with a scale_t reference as well
# ref => self-reference to $rtype id to include it's keys here (RType alias helper)
my $rtypes = {
@ -1682,7 +1755,7 @@ my $rtypes = {
# time
sec => {
ref_base => 2,
scale_t => '1',
scale_t => 's',
suffix => {
de => 's',
en => 's',
@ -1699,7 +1772,7 @@ my $rtypes = {
min => {
ref_base => 2,
scale_t => '60',
scale_t => 'min',
suffix => {
de => 'Min',
en => 'min',
@ -1716,7 +1789,7 @@ my $rtypes = {
hr => {
ref_base => 2,
scale_t => '3600',
scale_t => 'h',
suffix => 'h',
txt => {
de => 'Stunde',
@ -1730,7 +1803,7 @@ my $rtypes = {
d => {
ref_base => 2,
scale_t => '86400',
scale_t => 'd',
suffix => {
de => 'T',
en => 'd',
@ -1747,7 +1820,7 @@ my $rtypes = {
w => {
ref_base => 2,
scale_t => '604800',
scale_t => 'w',
suffix => {
de => 'W',
en => 'w',
@ -1764,7 +1837,7 @@ my $rtypes = {
mon => {
ref_base => 2,
scale_t => '2592000',
scale_t => 'm',
suffix => {
de => 'M',
en => 'm',
@ -1781,7 +1854,7 @@ my $rtypes = {
y => {
ref_base => 2,
scale_t => '31536000',
scale_t => 'a',
suffix => {
de => 'J',
en => 'y',
@ -1798,7 +1871,7 @@ my $rtypes = {
epoch => {
ref_base => 2,
scale_t => '1',
scale_t => 's',
scope => { minValue => 0 },
rtype_description => {
de => 'Unix Epoche in s seit 1970-01-01T00:00:00Z',
@ -2220,17 +2293,18 @@ my $rtypes = {
whr => {
base_ref => 7,
ref => 'w',
ref_t => 'hr',
scale_m => '1.0e0',
ref_t => 'hr',
scale_t => 'h',
format => '%.0f',
tmpl => '%value%' . chr(0x00A0) . '%suffix%%suffix_t%',
tmpl => '%value%' . chr(0x00A0) . '%suffix%',
tmpl_long => {
de => '%value%' . chr(0x00A0) . '%txt%%txt_t%',
en => '%value%' . chr(0x00A0) . '%txt% %txt_t%',
de => '%value%' . chr(0x00A0) . '%txt%',
en => '%value%' . chr(0x00A0) . '%txt%',
},
tmpl_long_pl => {
de => '%value%' . chr(0x00A0) . '%txt%%txt_pl_t%',
en => '%value%' . chr(0x00A0) . '%txt% %txt_pl_t%',
de => '%value%' . chr(0x00A0) . '%txt_pl%',
en => '%value%' . chr(0x00A0) . '%txt_pl%',
},
rtype_description => {
de => 'Wattstunde',
@ -2241,17 +2315,18 @@ my $rtypes = {
kwhr => {
base_ref => 7,
ref => 'w',
ref_t => 'hr',
scale_m => '1.0e3',
ref_t => 'hr',
scale_t => 'h',
format => '%.0f',
tmpl => '%value%' . chr(0x00A0) . '%suffix%%suffix_t%',
tmpl => '%value%' . chr(0x00A0) . '%suffix%',
tmpl_long => {
de => '%value%' . chr(0x00A0) . '%txt%%txt_t%',
en => '%value%' . chr(0x00A0) . '%txt% %txt_t%',
de => '%value%' . chr(0x00A0) . '%txt%',
en => '%value%' . chr(0x00A0) . '%txt%',
},
tmpl_long_pl => {
de => '%value%' . chr(0x00A0) . '%txt%%txt_pl%',
en => '%value%' . chr(0x00A0) . '%txt% %txt_pl%',
de => '%value%' . chr(0x00A0) . '%txt_pl%',
en => '%value%' . chr(0x00A0) . '%txt_pl%',
},
rtype_description => {
de => 'Kilowattstunde',
@ -2262,8 +2337,9 @@ my $rtypes = {
mwhr => {
base_ref => 7,
ref => 'w',
ref_t => 'hr',
scale_m => '1.0e6',
ref_t => 'hr',
scale_t => 'h',
format => '%.0f',
tmpl => '%value%' . chr(0x00A0) . '%suffix%%suffix_t%',
tmpl_long => {
@ -2283,8 +2359,9 @@ my $rtypes = {
gwhr => {
base_ref => 7,
ref => 'w',
ref_t => 'hr',
scale_m => '1.0e9',
ref_t => 'hr',
scale_t => 'h',
format => '%.0f',
tmpl => '%value%' . chr(0x00A0) . '%suffix%%suffix_t%',
tmpl_long => {
@ -2887,7 +2964,7 @@ sub replaceTemplate ($$$$;$) {
# template support
#
# add metric name to suffix
# add metric name to suffix and txt
$desc->{suffix} = $desc->{scale_txt_m} . $desc->{suffix}
if ( $desc->{suffix}
&& $desc->{scale_txt_m} );
@ -2895,6 +2972,17 @@ sub replaceTemplate ($$$$;$) {
if ( $desc->{txt}
&& $desc->{scale_txt_long_m} );
# add time information to suffix and txt
$desc->{suffix} = $desc->{suffix} . $desc->{scale_txt_t}
if ( $desc->{suffix}
&& $desc->{scale_txt_t} );
$desc->{txt_pl} = $desc->{txt} . lc( $desc->{scale_txt_long_pl_t} )
if ( $desc->{txt}
&& $desc->{scale_txt_long_pl_t} );
$desc->{txt} = $desc->{txt} . lc( $desc->{scale_txt_long_t} )
if ( $desc->{txt}
&& $desc->{scale_txt_long_t} );
# add square information to suffix and txt
# if no separate suffix_sq and txt_sq was found
$desc->{suffix} = $desc->{suffix} . $desc->{scale_txt_sq}
@ -2913,6 +3001,18 @@ sub replaceTemplate ($$$$;$) {
if (!$desc->{txt_cu}
&& $desc->{scale_txt_long_cu} );
# add time information to suffix and txt
# if no separate suffix_t and txt_t was found
$desc->{suffix} = $desc->{suffix} . $desc->{scale_txt_t}
if (!$desc->{suffix_t}
&& $desc->{scale_txt_t} );
$desc->{txt_pl} = $desc->{txt} . lc( $desc->{scale_txt_long_pl_t} )
if (!$desc->{txt_t}
&& $desc->{scale_txt_long_pl_t} );
$desc->{txt} = $desc->{txt} . lc( $desc->{scale_txt_long_t} )
if (!$desc->{txt_t}
&& $desc->{scale_txt_long_t} );
# add metric name to suffix_sq
$desc->{suffix_sq} = $desc->{scale_txt_m_sq} . $desc->{suffix_sq}
if ( $desc->{suffix_sq}
@ -2922,7 +3022,7 @@ sub replaceTemplate ($$$$;$) {
if ( $desc->{txt_sq}
&& $desc->{scale_txt_long_m_sq} );
# # add square information to suffix_sq
# add square information to suffix_sq
$desc->{suffix_sq} = $desc->{suffix_sq} . $desc->{scale_txt_sq}
if ( $desc->{suffix_sq}
&& $desc->{scale_txt_sq} );
@ -2930,6 +3030,17 @@ sub replaceTemplate ($$$$;$) {
if ( $desc->{txt_sq}
&& $desc->{scale_txt_long_sq} );
# add time information to suffix_sq
$desc->{suffix_sq} = $desc->{suffix_sq} . $desc->{scale_txt_t}
if ( $desc->{suffix_sq}
&& $desc->{scale_txt_t} );
$desc->{txt_pl_sq} = $desc->{txt_sq} . lc( $desc->{scale_txt_long_pl_t} )
if ( $desc->{txt_sq}
&& $desc->{scale_txt_long_pl_t} );
$desc->{txt_sq} = $desc->{txt_sq} . lc( $desc->{scale_txt_long_t} )
if ( $desc->{txt_sq}
&& $desc->{scale_txt_long_t} );
# add metric name to suffix_cu
$desc->{suffix_cu} = $desc->{scale_txt_m_cu} . $desc->{suffix_cu}
if ( $desc->{suffix_cu}
@ -2946,6 +3057,17 @@ sub replaceTemplate ($$$$;$) {
if ( $desc->{txt_cu}
&& $desc->{scale_txt_long_cu} );
# add time information to suffix_cu
$desc->{suffix_cu} = $desc->{suffix_cu} . $desc->{scale_txt_t}
if ( $desc->{suffix_cu}
&& $desc->{scale_txt_t} );
$desc->{txt_pl_cu} = $desc->{txt_cu} . lc( $desc->{scale_txt_long_pl_t} )
if ( $desc->{txt_cu}
&& $desc->{scale_txt_long_pl_t} );
$desc->{txt_cu} = $desc->{txt_cu} . lc( $desc->{scale_txt_long_t} )
if ( $desc->{txt_cu}
&& $desc->{scale_txt_long_t} );
###############################
# generate short text string
#
@ -3507,6 +3629,13 @@ sub readingsDesc($;$) {
if ( !defined( $desc->{ $k . "_cu" } ) );
}
}
if ( $desc->{scale_t} ) {
my $ref = $desc->{scale_t};
foreach my $k ( keys %{ $scales_t->{$ref} } ) {
$desc->{$k} = $scales_t->{$ref}{$k}
if ( !defined( $desc->{$k} ) );
}
}
$desc->{ref_base} = 999 if ( !defined( $desc->{ref_base} ) );
my $ref = $desc->{ref_base};