21_N4HMODULE.pm: some simplification in definitions

git-svn-id: https://svn.fhem.de/fhem/trunk@12460 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
okoerber
2016-10-28 19:00:30 +00:00
parent b8a80adcb3
commit 3c13d4a3b6

View File

@@ -33,10 +33,9 @@ use SetExtensions;
sub N4HMODULE_Set($@); sub N4HMODULE_Set($@);
sub N4HMODULE_Update($@); sub N4HMODULE_Update($@);
sub N4HMODULE_DbLog_splitFn($); sub N4HMODULE_DbLog_splitFn($$);
my $n4hmodule_Version = "1.0.1.2 - 25.10.2016";
my $n4hmodule_Version = "1.0.1.3 - 27.10.2016";
my %OT_devices = ( my %OT_devices = (
"1" => {"name" => "leer", "OTcanSet" => "false", "OTcanReq" => "false", "fields" => [] }, "1" => {"name" => "leer", "OTcanSet" => "false", "OTcanReq" => "false", "fields" => [] },
@@ -111,9 +110,8 @@ sub N4HMODULE_Initialize($) {
################################################################################## ##################################################################################
my ($hash) = @_; my ($hash) = @_;
my @otlist; my @otlist;
foreach my $model (keys %OT_devices){ foreach my $model (keys %OT_devices){
push @otlist,$OT_devices{$model}->{name}; push @otlist,$OT_devices{$model}->{name};
} }
@@ -125,7 +123,7 @@ sub N4HMODULE_Initialize($) {
$hash->{AttrFn} = "N4HMODULE_Attr"; $hash->{AttrFn} = "N4HMODULE_Attr";
$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"; $hash->{DbLog_splitFn} = "N4HMODULE_DbLog_splitFn";
} }
@@ -137,7 +135,7 @@ sub N4HMODULE_Define($$) {
my ($hash, $def) = @_; my ($hash, $def) = @_;
my @args = split("[ \t]+", $def); my @args = split("[ \t]+", $def);
my ($name, $type, $n4hbus, $ot, $objadr) = @args; my ($name, $type, $n4hbus, $ot, $objadr) = @args;
my ($readings) = "";
if(@args < 4) { if(@args < 4) {
my $msg = "Usage: define <name> N4HMODULE <N4HBUS> <OBJECTTYPE> <OBJADDR>"; my $msg = "Usage: define <name> N4HMODULE <N4HBUS> <OBJECTTYPE> <OBJADDR>";
@@ -168,10 +166,10 @@ sub N4HMODULE_Define($$) {
if ($hash->{OTcanSet}eq"true") { if ($hash->{OTcanSet}eq"true") {
$hash->{helper}{state} = 'undefined'; $hash->{helper}{state} = 'undefined';
} }
$attr{$name}{room} = "net4home" if( !defined($attr{$name}{room}) );
# Timer zum regelmäßigem aktualisieren auf dem Bus starten
# Timer zum regelmäßigem aktualisieren auf dem Bus starten
if (($ot == 24) or #Temperatur if (($ot == 24) or #Temperatur
($ot == 25) or #Licht ($ot == 25) or #Licht
($ot == 26) or #Luftfeuchte ($ot == 26) or #Luftfeuchte
@@ -181,6 +179,33 @@ sub N4HMODULE_Define($$) {
($ot == 246) or #Luftdruck-Tendenz ($ot == 246) or #Luftdruck-Tendenz
($ot == 245)) { #Regenmenge l/h ($ot == 245)) { #Regenmenge l/h
my $state_format;
if( $ot == 24 ) { #Temperatur
$state_format .= " " if( $state_format );
$state_format .= "T: temperature";
} elsif( $ot == 25 ) {
$state_format .= " " if( $state_format );
$state_format .= "L: brightness";
} elsif( $ot == 26 ) {
$state_format .= " " if( $state_format );
$state_format .= "H: humidity";
} elsif( $ot == 240 ) {
$state_format .= " " if( $state_format );
$state_format .= "W: wind";
} elsif( $ot == 241 ) {
$state_format .= " " if( $state_format );
$state_format .= "L: brightness";
} elsif( $ot == 242 ) {
$state_format .= " " if( $state_format );
$state_format .= "P: pressure";
} elsif( $ot == 245 ) {
$state_format .= " " if( $state_format );
$state_format .= "R: rain";
}
$attr{$name}{stateFormat} = $state_format if( !defined($attr{$name}{stateFormat}) && defined($state_format) );
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
$hash->{Interval} = 30; $hash->{Interval} = 30;
@@ -213,20 +238,16 @@ sub N4HMODULE_Start($)
} }
} }
################################################################################## ##################################################################################
sub N4HMODULE_Undefine($$) { sub N4HMODULE_Undefine($$) {
################################################################################## ##################################################################################
my ($hash,$arg) = @_; my ($hash,$arg) = @_;
my $name = $hash->{NAME};
# ToDo : Aufräumen noch mal ansehen Log3 $hash, 3, "N4HMODULE_Undefine -> $name";
RemoveInternalTimer( $hash );
my $c = $hash->{OBJADR}; delete($modules{N4HMODULE}{defptr}{$hash->{OBJADR}});
foreach my $dname (keys %{ $modules{N4HMODULE}{defptr}{$c} }) {
delete($modules{N4HMODULE}{defptr}{$c}{$dname})
if($modules{N4HMODULE}{defptr}{$c}{$dname} == $hash);
}
return undef; return undef;
} }
@@ -270,7 +291,7 @@ sub N4HMODULE_Parse($$) {
my ($iodev, $msg, $local) = @_; my ($iodev, $msg, $local) = @_;
my $ioName = $iodev->{NAME}; my $ioName = $iodev->{NAME};
my $object = ""; my $object = "";
# Modul suchen # Modul suchen
my $type8 = hex(substr($msg,0,2)); my $type8 = hex(substr($msg,0,2));
my $ipsrc = substr($msg,4,2).substr($msg,2,2); my $ipsrc = substr($msg,4,2).substr($msg,2,2);
@@ -280,8 +301,9 @@ sub N4HMODULE_Parse($$) {
my $ddata = substr($msg,16, ($datalen*2)); my $ddata = substr($msg,16, ($datalen*2));
my $pos = $datalen*2+16; my $pos = $datalen*2+16;
# Log3 "xx", 1, "(DECOMP2): T8($type8) - MI$ipsrc DST-> $ipdst SRC<-$objsrc";
if ( length($msg) <= $pos ) { if ( length($msg) <= $pos ) {
# Log3 $hash, 5, "N4MODULE (parse) -> ($msg) (ddata:$ddata) (pos:$pos)";
return undef; return undef;
} }
@@ -290,7 +312,6 @@ sub N4HMODULE_Parse($$) {
my $len = substr($msg,$pos+4,2); my $len = substr($msg,$pos+4,2);
my $posb = substr($msg,$pos+6,2); my $posb = substr($msg,$pos+6,2);
if ($ipdst == 32767) { if ($ipdst == 32767) {
$object = $objsrc; $object = $objsrc;
} else { } else {
@@ -338,8 +359,10 @@ sub N4HMODULE_ParsePayload($@) {
if (hex(substr($ddata,2,2))== hex("00")) { if (hex(substr($ddata,2,2))== hex("00")) {
readingsBulkUpdate($hash,"state", "off"); readingsBulkUpdate($hash,"state", "off");
$hash->{STATE} = "off";
} else { } else {
readingsBulkUpdate($hash,"state", "on"); readingsBulkUpdate($hash,"state", "on");
$hash->{STATE} = "on";
} }
} }
@@ -351,6 +374,14 @@ sub N4HMODULE_ParsePayload($@) {
# +++++++ D0_TOGGLE # +++++++ D0_TOGGLE
if ($dev_funcion == hex("35")) { if ($dev_funcion == hex("35")) {
readingsBulkUpdate($hash,"cmd", "D0_TOGGLE"); readingsBulkUpdate($hash,"cmd", "D0_TOGGLE");
if (ReadingsVal($name, "state", "") eq "on") {
readingsBulkUpdate($hash,"state", "off");
$hash->{STATE} = "off";
} elsif (ReadingsVal($name, "state", "") eq "off") {
readingsBulkUpdate($hash,"state", "on");
$hash->{STATE} = "on";
}
} }
# +++++++ D0_ACTOR_ACK # +++++++ D0_ACTOR_ACK
@@ -378,34 +409,6 @@ sub N4HMODULE_ParsePayload($@) {
my ($valtype, $lastval) = N4HMODULE_paramToText($hash, $ddata); my ($valtype, $lastval) = N4HMODULE_paramToText($hash, $ddata);
if( defined($lastval)) { readingsBulkUpdate($hash, $valtype, $lastval); } if( defined($lastval)) { readingsBulkUpdate($hash, $valtype, $lastval); }
my $state_format;
my $readings = "";
if( $readings =~ m/temperature/ ) {
$state_format .= " " if( $state_format );
$state_format .= "T: temperature";
}
if( $readings =~ m/humidity/ ) {
$state_format .= " " if( $state_format );
$state_format .= "H: humidity";
}
if( $readings =~ m/windstrength/ ) {
$state_format .= " " if( $state_format );
$state_format .= "W: windstrength (windangle°)";
}
if( $readings =~ m/co2/ ) {
$state_format .= " " if( $state_format );
$state_format .= "C: co2 ppm";
}
if( $readings =~ m/pressure/ ) {
$state_format .= " " if( $state_format );
$state_format .= "P: pressure";
}
$attr{$name}{stateFormat} = $state_format if( !defined($attr{$name}{stateFormat}) && defined($state_format) );
} }
# +++++++ D0_VALUE_REQ # +++++++ D0_VALUE_REQ
@@ -639,7 +642,7 @@ sub N4HMODULE_Update($@) {
my $value = shift(@a); my $value = shift(@a);
my $name = $hash->{NAME}; my $name = $hash->{NAME};
return unless (defined($hash->{NAME})); return unless (defined($hash->{NAME}) and defined $value );
Log3 $hash, 5, "N4MODULE (update): ($name) ($value)"; Log3 $hash, 5, "N4MODULE (update): ($name) ($value)";
@@ -943,9 +946,10 @@ sub N4HMODULE_ParseN56($) {
<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: Currently the following values are supported:<br />
<b>Measurement</b><br />
<b>Measurement</b>
<ul> <ul>
<li> 24 - Measurement,Temperature</li> <li> 24 - Measurement,Temperature</li>
<li> 25 - Measurement,Brightness</li> <li> 25 - Measurement,Brightness</li>
@@ -993,9 +997,10 @@ sub N4HMODULE_ParseN56($) {
<code>define MyN4HMODULEice N4HMODULE 24 26004</code><br /> <code>define MyN4HMODULEice N4HMODULE 24 26004</code><br />
</ul> </ul>
Derzeit werden folgende Typen unterst&uuml;tzt: Derzeit werden folgende Typen unterst&uuml;tzt:<br />
<b>Messwerte</b><br />
<b>Messwerte</b>
<ul> <ul>
<li> 24 - Messwert,Temperatur</li> <li> 24 - Messwert,Temperatur</li>
<li> 25 - Messwert,Helligkeit</li> <li> 25 - Messwert,Helligkeit</li>