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

98_powerMap: improved modules support and change default reading name from pM_power to pM_consumption

git-svn-id: https://svn.fhem.de/fhem/trunk@13195 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jpawlowski 2017-01-22 20:20:16 +00:00
parent bc40337c95
commit 3d3708129a
2 changed files with 156 additions and 143 deletions

View File

@ -1,5 +1,9 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- change: 98_powerMap: default value for reading pM_power was renamed to
pM_consumption to circumvent overlapping of commonly
used reading 'power' where it is normally used as
boolean.
- update: 93_DbLog: its now version 2.10.4, some improvements and new - update: 93_DbLog: its now version 2.10.4, some improvements and new
attributes attributes
- update: 74_XiaomiFlowerSens: 0.6.0 rewrite subroutinen for better handling - update: 74_XiaomiFlowerSens: 0.6.0 rewrite subroutinen for better handling

View File

@ -111,6 +111,11 @@ my %powerMap_tmpl = (
# }, # },
# }, # },
# TYPE alias to mirror values
#
# '<TYPE1>' => '<TYPE2>',
#
FS20 => { FS20 => {
state => { state => {
0 => 0.5, 0 => 0.5,
@ -177,15 +182,23 @@ my %powerMap_tmpl = (
}, },
HUEBridge => { HUEBridge => {
model => 'modelid',
modelid => { modelid => {
BSB001 => { BSB001 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
0 => 0, 0 => 0,
'*' => 1.669, '*' => 1.669,
}, },
}, },
},
BSB002 => { BSB002 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
0 => 0, 0 => 0,
'*' => 1.669, '*' => 1.669,
@ -193,18 +206,24 @@ my %powerMap_tmpl = (
}, },
}, },
}, },
},
HUEDevice => { HUEDevice => {
model => 'modelid',
modelid => { modelid => {
# Hue Bulb # Hue Bulb
LCT001 => { LCT001 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
unreachable => 0, unreachable => 0,
0 => 0.4, 0 => 0.4,
100 => 8.5, 100 => 8.5,
}, },
}, },
},
# Hue Spot BR30 # Hue Spot BR30
LCT002 => {}, LCT002 => {},
@ -214,21 +233,29 @@ my %powerMap_tmpl = (
# Hue Bulb V2 # Hue Bulb V2
LCT007 => { LCT007 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
unreachable => 0, unreachable => 0,
0 => 0.4, 0 => 0.4,
100 => 10, 100 => 10,
}, },
}, },
},
# Hue Bulb V3 # Hue Bulb V3
LCT010 => { LCT010 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
unreachable => 0, unreachable => 0,
0 => 0.4, 0 => 0.4,
100 => 10, 100 => 10,
}, },
}, },
},
# Hue BR30 # Hue BR30
LCT011 => {}, LCT011 => {},
@ -268,24 +295,35 @@ my %powerMap_tmpl = (
# Hue LightStrip # Hue LightStrip
LST001 => { LST001 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
unreachable => 0, unreachable => 0,
0 => 0.4, 0 => 0.4,
100 => 12, 100 => 12,
}, },
}, },
},
# Hue LightStrip Plus # Hue LightStrip Plus
LST002 => { LST002 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
unreachable => 0, unreachable => 0,
0 => 0.4, 0 => 0.4,
100 => 20.5, 100 => 20.5,
}, },
}, },
},
# Living Whites Bulb # Living Whites Bulb
LWB001 => { LWB001 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
unreachable => 0, unreachable => 0,
0 => 0.4, 0 => 0.4,
@ -301,9 +339,13 @@ my %powerMap_tmpl = (
100 => 9.2, 100 => 9.2,
}, },
}, },
},
# Living Whites Bulb # Living Whites Bulb
LWB003 => { LWB003 => {
rname_E => 'energy',
rname_P => 'consumption',
map => {
state => { state => {
unreachable => 0, unreachable => 0,
0 => 0.4, 0 => 0.4,
@ -319,6 +361,7 @@ my %powerMap_tmpl = (
100 => 9.2, 100 => 9.2,
}, },
}, },
},
# Hue Lux # Hue Lux
LWB004 => {}, LWB004 => {},
@ -416,27 +459,6 @@ my %powerMap_tmpl = (
}, },
}, },
ONKYO_AVR => {
model => {
'TX-NR626' => {
stateAV => {
absent => 0,
off => 0,
muted => 85,
'*' => 140,
},
},
},
},
ONKYO_AVR_ZONE => {
stateAV => {
off => 0,
muted => 10,
'*' => 20,
},
},
Panstamp => { Panstamp => {
'Pumpe_Heizkreis' => { 'Pumpe_Heizkreis' => {
'off' => "0,Pumpe_Boiler,Brenner", 'off' => "0,Pumpe_Boiler,Brenner",
@ -452,18 +474,6 @@ my %powerMap_tmpl = (
}, },
}, },
PHTV => {
model => {
'55PFL8008S/12' => {
stateAV => {
absent => 0,
off => 0.1,
'*' => 90,
},
},
},
},
SONOSPLAYER => { SONOSPLAYER => {
model => { model => {
Sonos_S6 => { Sonos_S6 => {
@ -507,29 +517,6 @@ my %powerMap_tmpl = (
}, },
}, },
}, },
THINKINGCLEANER => {
model => {
Roomba_700_Series => {
presence => {
absent => 0,
},
deviceStatus => {
base => 0.1,
plug => 0.1,
base_recon => 33,
plug_recon => 33,
base_full => 33,
plug_full => 33,
base_trickle => 5,
plug_trickle => 5,
base_wait => 0.1,
plug_wait => 0.1,
'*' => 0,
},
},
},
},
); );
# initialize ################################################################### # initialize ###################################################################
@ -770,8 +757,13 @@ sub powerMap_Notify($$) {
Log3 $name, 4, "$TYPE: UPDATED for $2"; Log3 $name, 4, "$TYPE: UPDATED for $2";
} }
# device was newly defined, renamed or got deleted # device was deleted
elsif ( $event =~ m/^(DEFINED|RENAMED|DELETED)\s(.*)/ ) { elsif ( $event =~ m/^(DELETED)\s(.*)/ ) {
powerMap_unload( $name, $2 );
}
# device was newly defined, modified or renamed
elsif ( $event =~ m/^(DEFINED|MODIFIED|RENAMED)\s(.*)/ ) {
next unless ( powerMap_load( $name, $2 ) ); next unless ( powerMap_load( $name, $2 ) );
Log3 $name, 4, "$TYPE: INITIALIZED for $2"; Log3 $name, 4, "$TYPE: INITIALIZED for $2";
} }
@ -781,7 +773,7 @@ sub powerMap_Notify($$) {
} }
my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" ); my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" );
my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_power" ); my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_consumption" );
my $powerRecalcDone; my $powerRecalcDone;
@ -909,7 +901,7 @@ sub powerMap_load($$;$$) {
my $powerMap = $unload ? undef : AttrVal( $dev, $TYPE, undef ); my $powerMap = $unload ? undef : AttrVal( $dev, $TYPE, undef );
my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" ); my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" );
my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_power" ); my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_consumption" );
# Support for Unit.pm # Support for Unit.pm
$dev_hash->{readingsDesc}{$rname_e} = { rtype => 'whr', }; $dev_hash->{readingsDesc}{$rname_e} = { rtype => 'whr', };
@ -1047,32 +1039,43 @@ sub powerMap_findPowerMaps($;$) {
foreach foreach
my $TYPE ( $dev && $dev !~ /^:/ ? $defs{$dev}{TYPE} : keys %modules ) my $TYPE ( $dev && $dev !~ /^:/ ? $defs{$dev}{TYPE} : keys %modules )
{ {
next unless ( $modules{$TYPE}{powerMap} ); next
unless ( $modules{$TYPE}{powerMap}
&& keys %{ $modules{$TYPE}{powerMap} } );
my $t = $modules{$TYPE}{powerMap}; my $t = $modules{$TYPE}{powerMap};
my $modelSupport = 0; my $modelSupport = 0;
# modules w/ model support # modules w/ model support
unless ( $t->{map} ) { unless ( $t->{map} ) {
foreach my $a ( keys %{$t} ) { foreach my $ta ( keys %{$t} ) {
next unless ( ref( $t->{$a} ) eq "HASH" ); my $a = $t->{$ta};
$a = $t->{ $t->{$ta} }
if ( !ref( $t->{$ta} )
&& $t->{ $t->{$ta} } );
foreach my $m ( keys %{ $t->{$a} } ) { next unless ( ref($a) eq "HASH" && !$a->{map} );
next
unless ( ref( $t->{$a}{$m} ) eq "HASH" foreach my $tm ( keys %{$a} ) {
&& !$t->{$a}{map} );
my $m = $a->{$tm};
$m = $a->{ $a->{$tm} }
if ( !ref( $a->{$tm} )
&& $a->{ $a->{$tm} } );
next unless ( ref($m) eq "HASH" );
$modelSupport = 1; $modelSupport = 1;
foreach ( devspec2array("TYPE=$TYPE:FILTER=$a=$m") ) { foreach ( devspec2array("TYPE=$TYPE:FILTER=$ta=$tm") ) {
next if ( $maps{$_} ); next if ( $maps{$_} );
if ( $t->{$a}{$m}{map} ) { if ( $m->{map} ) {
next unless ( keys %{ $t->{$a}{$m}{map} } ); next unless ( keys %{ $m->{map} } );
$maps{$_} = $t->{$a}{$m}; $maps{$_} = $m;
} }
else { else {
next unless ( keys %{ $t->{$a}{$m} } ); next unless ( keys %{$m} );
$maps{$_}{map} = $t->{$a}{$m}; $maps{$_}{map} = $m;
} }
} }
} }
@ -1109,26 +1112,32 @@ sub powerMap_findPowerMaps($;$) {
my $modelSupport = 0; my $modelSupport = 0;
# modules w/ model support # modules w/ model support
foreach my $a ( keys %{$t} ) { foreach my $ta ( keys %{$t} ) {
next unless ( $t->{$a} );
foreach my $m ( keys %{ $t->{$a} } ) { my $a = $t->{$ta};
$a = $t->{ $t->{$ta} }
if ( !ref( $t->{$ta} )
&& $t->{ $t->{$ta} } );
next unless ( ref($a) eq "HASH" );
foreach my $m ( keys %{$a} ) {
next next
unless ( ref( $t->{$a}{$m} ) eq "HASH" unless ( ref( $a->{$m} ) eq "HASH"
&& !$t->{$a}{map} ); && !$a->{map} );
$modelSupport = 1; $modelSupport = 1;
foreach ( devspec2array("TYPE=$TYPE:FILTER=$a=$m") ) { foreach ( devspec2array("TYPE=$TYPE:FILTER=$ta=$m") ) {
next if ( $maps{$_} ); next if ( $maps{$_} );
if ( $t->{$a}{$m}{map} ) { if ( $a->{$m}{map} ) {
next unless ( keys %{ $t->{$a}{$m}{map} } ); next unless ( keys %{ $a->{$m}{map} } );
$maps{$_} = $t->{$a}{$m}; $maps{$_} = $a->{$m};
} }
else { else {
next unless ( keys %{ $t->{$a}{$m} } ); next unless ( keys %{ $a->{$m} } );
$maps{$_}{map} = $t->{$a}{$m}; $maps{$_}{map} = $a->{$m};
} }
} }
} }
@ -1177,7 +1186,7 @@ sub powerMap_findPowerMaps($;$) {
return {} return {}
if ( $dev && $dev !~ /^:/ && !defined( $maps{$dev} ) ); if ( $dev && $dev !~ /^:/ && !defined( $maps{$dev} ) );
return \$maps{$dev} if ( $dev && $dev !~ /^:/ ); return $maps{$dev}{map} if ( $dev && $dev !~ /^:/ );
return \%maps; return \%maps;
} }
@ -1460,7 +1469,7 @@ sub powerMap_energy($$;$) {
my $dev_hash = $defs{$dev}; my $dev_hash = $defs{$dev};
my $TYPE = $hash->{TYPE}; my $TYPE = $hash->{TYPE};
my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" ); my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" );
my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_power" ); my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_consumption" );
Log3 $name, 5, "$TYPE: Entering powerMap_energy() for $dev"; Log3 $name, 5, "$TYPE: Entering powerMap_energy() for $dev";
@ -1504,7 +1513,7 @@ sub powerMap_update($;$) {
Log3 $name, 5, "$TYPE: Entering powerMap_update() for $dev"; Log3 $name, 5, "$TYPE: Entering powerMap_update() for $dev";
my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" ); my $rname_e = powerMap_AttrVal( $name, $dev, "rname_E", "pM_energy" );
my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_power" ); my $rname_p = powerMap_AttrVal( $name, $dev, "rname_P", "pM_consumption" );
readingsBeginUpdate($dev_hash); readingsBeginUpdate($dev_hash);
@ -1610,7 +1619,7 @@ sub powerMap_update($;$) {
energy for the very first time. energy for the very first time.
</li><br> </li><br>
<li> <li>
<code>pM_power</code><br> <code>pM_consumption</code><br>
Current power consumption of device in W. Current power consumption of device in W.
</li> </li>
</ul><br> </ul><br>
@ -1651,7 +1660,7 @@ sub powerMap_update($;$) {
<li> <li>
<code>powerMap_rname_P</code><br> <code>powerMap_rname_P</code><br>
Sets reading name for power consumption.<br> Sets reading name for power consumption.<br>
Default value is 'pM_power'. Default value is 'pM_consumption'.
</li><br> </li><br>
<li> <li>
<code>powerMap<pre> <code>powerMap<pre>
@ -1777,7 +1786,7 @@ sub powerMap_update($;$) {
Ger&auml;t erstmalig Energie verbraucht hat. Ger&auml;t erstmalig Energie verbraucht hat.
</li><br> </li><br>
<li> <li>
<code>pM_power</code><br> <code>pM_consumption</code><br>
Die aktuelle Leistungsaufnahme des Ger&auml;tes in W. Die aktuelle Leistungsaufnahme des Ger&auml;tes in W.
</li> </li>
</ul><br> </ul><br>
@ -1822,7 +1831,7 @@ sub powerMap_update($;$) {
<code>powerMap_rname_P</code><br> <code>powerMap_rname_P</code><br>
Definiert den Reading Namen, in dem die aktuelle Leistungsaufnahme Definiert den Reading Namen, in dem die aktuelle Leistungsaufnahme
des Ger&auml;tes gespeichert wird.<br> des Ger&auml;tes gespeichert wird.<br>
Der Vorgabewert ist 'pM_power'. Der Vorgabewert ist 'pM_consumption'.
</li><br> </li><br>
<li> <li>
<code>powerMap<pre> <code>powerMap<pre>