mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-22 20:24:36 +00:00
21_N4HMODULE: DbLog_splitFn implemented
git-svn-id: https://svn.fhem.de/fhem/trunk@12428 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
44ca2f0ec0
commit
9dc5f23a06
@ -1,4 +1,4 @@
|
|||||||
##############################################################################
|
#############################################################################
|
||||||
#
|
#
|
||||||
# 21_N4HMODULE.pm
|
# 21_N4HMODULE.pm
|
||||||
#
|
#
|
||||||
@ -33,8 +33,9 @@ use SetExtensions;
|
|||||||
|
|
||||||
sub N4HMODULE_Set($@);
|
sub N4HMODULE_Set($@);
|
||||||
sub N4HMODULE_Update($@);
|
sub N4HMODULE_Update($@);
|
||||||
|
sub N4HMODULE_DbLog_splitFn($);
|
||||||
|
|
||||||
my $n4hmodule_Version = "1.0.1.0 - 22.10.2016";
|
my $n4hmodule_Version = "1.0.1.2 - 25.10.2016";
|
||||||
|
|
||||||
|
|
||||||
my %OT_devices = (
|
my %OT_devices = (
|
||||||
@ -103,9 +104,6 @@ my %OT_devices = (
|
|||||||
{ "cmd" => "360000", "ID" => "4", "Text" => "Zählerwert lesen (nur LCD)", "Type" => "Button" },
|
{ "cmd" => "360000", "ID" => "4", "Text" => "Zählerwert lesen (nur LCD)", "Type" => "Button" },
|
||||||
] },
|
] },
|
||||||
"999" => {"name" => "Messwert,N56", "OTcanSet" => "false", "OTcanReq" => "true", "fields" => [] },
|
"999" => {"name" => "Messwert,N56", "OTcanSet" => "false", "OTcanReq" => "true", "fields" => [] },
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
##################################################################################
|
##################################################################################
|
||||||
@ -128,6 +126,7 @@ sub N4HMODULE_Initialize($) {
|
|||||||
$hash->{AttrList} = "IoDev dummy:1,0 Interval sendack:on,off setList ".
|
$hash->{AttrList} = "IoDev dummy:1,0 Interval sendack:on,off setList ".
|
||||||
"$readingFnAttributes ";
|
"$readingFnAttributes ";
|
||||||
"OT:" .join(",", sort @otlist);
|
"OT:" .join(",", sort @otlist);
|
||||||
|
$hash->{DbLog_splitFn} = "N4HMODULE_DbLog_splitFn";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -177,7 +176,9 @@ sub N4HMODULE_Define($$) {
|
|||||||
($ot == 25) or #Licht
|
($ot == 25) or #Licht
|
||||||
($ot == 26) or #Luftfeuchte
|
($ot == 26) or #Luftfeuchte
|
||||||
($ot == 240) or #Wind
|
($ot == 240) or #Wind
|
||||||
|
($ot == 241) or #Sonne
|
||||||
($ot == 242) or #Luftdruck
|
($ot == 242) or #Luftdruck
|
||||||
|
($ot == 246) or #Luftdruck-Tendenz
|
||||||
($ot == 245)) { #Regenmenge l/h
|
($ot == 245)) { #Regenmenge l/h
|
||||||
|
|
||||||
RemoveInternalTimer($hash);
|
RemoveInternalTimer($hash);
|
||||||
@ -188,7 +189,6 @@ sub N4HMODULE_Define($$) {
|
|||||||
Log3 $hash, 3, "N4HMODULE_Define (set timer) -> $name ($ot)";
|
Log3 $hash, 3, "N4HMODULE_Define (set timer) -> $name ($ot)";
|
||||||
InternalTimer( gettimeofday() + 30 + int(rand(15)) , "N4HMODULE_Start", $hash, 0 );
|
InternalTimer( gettimeofday() + 30 + int(rand(15)) , "N4HMODULE_Start", $hash, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,7 +211,6 @@ sub N4HMODULE_Start($)
|
|||||||
InternalTimer(gettimeofday() + $interval, "N4HMODULE_Start", $hash, 1 );
|
InternalTimer(gettimeofday() + $interval, "N4HMODULE_Start", $hash, 1 );
|
||||||
N4HMODULE_Update( $hash );
|
N4HMODULE_Update( $hash );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -228,10 +227,42 @@ sub N4HMODULE_Undefine($$) {
|
|||||||
delete($modules{N4HMODULE}{defptr}{$c}{$dname})
|
delete($modules{N4HMODULE}{defptr}{$c}{$dname})
|
||||||
if($modules{N4HMODULE}{defptr}{$c}{$dname} == $hash);
|
if($modules{N4HMODULE}{defptr}{$c}{$dname} == $hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##################################################################################
|
||||||
|
sub N4HMODULE_DbLog_splitFn($$) {
|
||||||
|
##################################################################################
|
||||||
|
my ($event, $device) = @_;
|
||||||
|
my ($reading, $value, $unit) = "";
|
||||||
|
my $hash = $defs{$device};
|
||||||
|
|
||||||
|
my @parts = split(/ /,$event);
|
||||||
|
$value = $parts[1];
|
||||||
|
|
||||||
|
if ($event =~ m/temperature/) {
|
||||||
|
$reading = 'temperature';
|
||||||
|
$unit = '°C';
|
||||||
|
} elsif ($event =~ m/humidity/) {
|
||||||
|
$reading = 'humidity';
|
||||||
|
$unit = '%';
|
||||||
|
} elsif ($event =~ m/pressure/) {
|
||||||
|
$reading = 'pressure';
|
||||||
|
$unit = 'hPas';
|
||||||
|
} elsif ($event =~ m/co2/) {
|
||||||
|
$reading = 'co2';
|
||||||
|
$unit = 'ppm';
|
||||||
|
} elsif ($event =~ m/rain/) {
|
||||||
|
$reading = 'rain';
|
||||||
|
$unit = 'l/h';
|
||||||
|
} elsif ($event =~ m/brightness/) {
|
||||||
|
$reading = 'brightness';
|
||||||
|
$unit = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($reading, $value, $unit);
|
||||||
|
}
|
||||||
|
|
||||||
##################################################################################
|
##################################################################################
|
||||||
sub N4HMODULE_Parse($$) {
|
sub N4HMODULE_Parse($$) {
|
||||||
##################################################################################
|
##################################################################################
|
||||||
@ -390,9 +421,7 @@ sub N4HMODULE_ParsePayload($@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
readingsEndUpdate( $hash , 1);
|
readingsEndUpdate( $hash , 1);
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -402,7 +431,6 @@ sub N4HMODULE_paramToText($@) {
|
|||||||
|
|
||||||
my ($hash, $ddata) = @_;
|
my ($hash, $ddata) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
my $rettype = "unbekannte Formel / Parameter";
|
my $rettype = "unbekannte Formel / Parameter";
|
||||||
my $w = hex(substr($ddata,6,2))*256+hex(substr($ddata,8,2));
|
my $w = hex(substr($ddata,6,2))*256+hex(substr($ddata,8,2));
|
||||||
my $ret = $w;
|
my $ret = $w;
|
||||||
@ -410,7 +438,7 @@ sub N4HMODULE_paramToText($@) {
|
|||||||
|
|
||||||
# +++++++++++++++++++ Licht analog - IN_HW_NR_IS_LICHT_ANALOG
|
# +++++++++++++++++++ Licht analog - IN_HW_NR_IS_LICHT_ANALOG
|
||||||
if (hex(substr($ddata,2,2)) == 5 ){
|
if (hex(substr($ddata,2,2)) == 5 ){
|
||||||
$rettype = "Licht";
|
$rettype = "brightness";
|
||||||
}
|
}
|
||||||
|
|
||||||
# +++++++++++++++++++ Uhrzeit - IN_HW_NR_IS_CLOCK
|
# +++++++++++++++++++ Uhrzeit - IN_HW_NR_IS_CLOCK
|
||||||
@ -505,7 +533,6 @@ sub N4HMODULE_paramToText($@) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return ($rettype, $ret);
|
return ($rettype, $ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -573,7 +600,6 @@ sub N4HMODULE_Set($@) {
|
|||||||
$ddata = sprintf ("%02x%s", (length($fieldcmd)/2), $fieldcmd);
|
$ddata = sprintf ("%02x%s", (length($fieldcmd)/2), $fieldcmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
readingsSingleUpdate($hash, "state", "$cmd", 1);
|
readingsSingleUpdate($hash, "state", "$cmd", 1);
|
||||||
IOWrite($hash, $ipdst, $ddata, 0);
|
IOWrite($hash, $ipdst, $ddata, 0);
|
||||||
return undef;
|
return undef;
|
||||||
@ -623,7 +649,6 @@ sub N4HMODULE_Update($@) {
|
|||||||
my $cs = "";
|
my $cs = "";
|
||||||
my $cmd = "";
|
my $cmd = "";
|
||||||
|
|
||||||
|
|
||||||
if ($ot == 24) {
|
if ($ot == 24) {
|
||||||
|
|
||||||
# +++++++ 65 D0_VALUE_ACK (101)
|
# +++++++ 65 D0_VALUE_ACK (101)
|
||||||
@ -658,6 +683,32 @@ sub N4HMODULE_Update($@) {
|
|||||||
}
|
}
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
elsif ($ot == 25) { # Licht
|
||||||
|
|
||||||
|
# +++++++ 65 D0_VALUE_ACK
|
||||||
|
# +++++++ 05 Licht
|
||||||
|
# +++++++ 01 USE_FROMEL
|
||||||
|
|
||||||
|
my $ddata1 = "650506";
|
||||||
|
|
||||||
|
if (defined $value) {
|
||||||
|
$cmd = $value;
|
||||||
|
readingsSingleUpdate($hash, "brightness", "$cmd", 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
($cmd, undef) = split(/ /, ReadingsVal($name , "brightness","")); }
|
||||||
|
|
||||||
|
if (defined $cmd) {
|
||||||
|
my $cs = $cmd;
|
||||||
|
$ddata1 = $ddata1.sprintf ("%02X", (0x00) );
|
||||||
|
$ddata1 = $ddata1.sprintf ("%02X", ( ($cs) ) );
|
||||||
|
$ddata = sprintf ("%02x%s", (length($ddata1)/2), $ddata1);
|
||||||
|
|
||||||
|
Log3 $hash, 5, "N4MODULE (set brightness): $name to $cmd - $ddata, $ddata1, $ipdst";
|
||||||
|
IOWrite($hash, 32767, $ddata, $ipdst);
|
||||||
|
}
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
elsif ($ot == 26) { # Luftfeuchte
|
elsif ($ot == 26) { # Luftfeuchte
|
||||||
|
|
||||||
# +++++++ 65 D0_VALUE_ACK
|
# +++++++ 65 D0_VALUE_ACK
|
||||||
@ -779,7 +830,6 @@ sub N4HMODULE_Update($@) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
my $n56 = N4HMODULE_CreateN56($value,0,0,0,2);
|
my $n56 = N4HMODULE_CreateN56($value,0,0,0,2);
|
||||||
$ddata1 = $ddata1.$n56;
|
$ddata1 = $ddata1.$n56;
|
||||||
$ddata = sprintf ("%02x%s", (length($ddata1)/2), $ddata1);
|
$ddata = sprintf ("%02x%s", (length($ddata1)/2), $ddata1);
|
||||||
@ -892,6 +942,18 @@ sub N4HMODULE_ParseN56($) {
|
|||||||
<ul>
|
<ul>
|
||||||
<code>define n4h_28204 N4HMODULE n4h 24 28204</code><br />
|
<code>define n4h_28204 N4HMODULE n4h 24 28204</code><br />
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
Currently the following values are supported:
|
||||||
|
|
||||||
|
<b>Measurement</b>
|
||||||
|
<ul>
|
||||||
|
<li> 24 - Measurement,Temperature</li>
|
||||||
|
<li> 25 - Measurement,Brightness</li>
|
||||||
|
<li> 26 - Measurement,Humidity</li>
|
||||||
|
<li>240 - Measurement,Wind</li>
|
||||||
|
<li>242 - Measurement,Pressure</li>
|
||||||
|
<li>245 - Measurement,Rain</li>
|
||||||
|
</ul>
|
||||||
</ul><br />
|
</ul><br />
|
||||||
|
|
||||||
<a name="N4HMODULE_Readings"></a>
|
<a name="N4HMODULE_Readings"></a>
|
||||||
@ -930,6 +992,19 @@ sub N4HMODULE_ParseN56($) {
|
|||||||
<ul>
|
<ul>
|
||||||
<code>define MyN4HMODULEice N4HMODULE 24 26004</code><br />
|
<code>define MyN4HMODULEice N4HMODULE 24 26004</code><br />
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
Derzeit werden folgende Typen unterstützt:
|
||||||
|
|
||||||
|
<b>Messwerte</b>
|
||||||
|
<ul>
|
||||||
|
<li> 24 - Messwert,Temperatur</li>
|
||||||
|
<li> 25 - Messwert,Helligkeit</li>
|
||||||
|
<li> 26 - Messwert,Feuchte</li>
|
||||||
|
<li>240 - Messwert,Wind</li>
|
||||||
|
<li>242 - Messwert,Luftdruck</li>
|
||||||
|
<li>245 - Messwert,Regenmenge</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
</ul><br />
|
</ul><br />
|
||||||
|
|
||||||
<a name="N4HMODULE_Readings"></a>
|
<a name="N4HMODULE_Readings"></a>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user