From ec10b1abf725e9c0ce251691267fa4f96a27740d Mon Sep 17 00:00:00 2001 From: okoerber <> Date: Fri, 28 Oct 2016 19:00:30 +0000 Subject: [PATCH] 21_N4HMODULE.pm: some simplification in definitions git-svn-id: https://svn.fhem.de/fhem/trunk@12460 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/21_N4HMODULE.pm | 113 ++++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 54 deletions(-) diff --git a/fhem/FHEM/21_N4HMODULE.pm b/fhem/FHEM/21_N4HMODULE.pm index 2fd24e618..e9d7ef178 100644 --- a/fhem/FHEM/21_N4HMODULE.pm +++ b/fhem/FHEM/21_N4HMODULE.pm @@ -33,10 +33,9 @@ use SetExtensions; sub N4HMODULE_Set($@); sub N4HMODULE_Update($@); -sub N4HMODULE_DbLog_splitFn($); - -my $n4hmodule_Version = "1.0.1.2 - 25.10.2016"; +sub N4HMODULE_DbLog_splitFn($$); +my $n4hmodule_Version = "1.0.1.3 - 27.10.2016"; my %OT_devices = ( "1" => {"name" => "leer", "OTcanSet" => "false", "OTcanReq" => "false", "fields" => [] }, @@ -111,9 +110,8 @@ sub N4HMODULE_Initialize($) { ################################################################################## my ($hash) = @_; - - my @otlist; + foreach my $model (keys %OT_devices){ push @otlist,$OT_devices{$model}->{name}; } @@ -125,7 +123,7 @@ sub N4HMODULE_Initialize($) { $hash->{AttrFn} = "N4HMODULE_Attr"; $hash->{AttrList} = "IoDev dummy:1,0 Interval sendack:on,off setList ". "$readingFnAttributes "; - "OT:" .join(",", sort @otlist); +# "OT:" .join(",", sort @otlist); $hash->{DbLog_splitFn} = "N4HMODULE_DbLog_splitFn"; } @@ -137,7 +135,7 @@ sub N4HMODULE_Define($$) { my ($hash, $def) = @_; my @args = split("[ \t]+", $def); my ($name, $type, $n4hbus, $ot, $objadr) = @args; - + my ($readings) = ""; if(@args < 4) { my $msg = "Usage: define N4HMODULE "; @@ -168,10 +166,10 @@ sub N4HMODULE_Define($$) { if ($hash->{OTcanSet}eq"true") { $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 ($ot == 25) or #Licht ($ot == 26) or #Luftfeuchte @@ -181,6 +179,33 @@ sub N4HMODULE_Define($$) { ($ot == 246) or #Luftdruck-Tendenz ($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); $hash->{Interval} = 30; @@ -213,20 +238,16 @@ sub N4HMODULE_Start($) } } - ################################################################################## sub N4HMODULE_Undefine($$) { ################################################################################## my ($hash,$arg) = @_; + my $name = $hash->{NAME}; - # ToDo : Aufräumen noch mal ansehen - - my $c = $hash->{OBJADR}; - foreach my $dname (keys %{ $modules{N4HMODULE}{defptr}{$c} }) { - delete($modules{N4HMODULE}{defptr}{$c}{$dname}) - if($modules{N4HMODULE}{defptr}{$c}{$dname} == $hash); - } + Log3 $hash, 3, "N4HMODULE_Undefine -> $name"; + RemoveInternalTimer( $hash ); + delete($modules{N4HMODULE}{defptr}{$hash->{OBJADR}}); return undef; } @@ -270,7 +291,7 @@ sub N4HMODULE_Parse($$) { my ($iodev, $msg, $local) = @_; my $ioName = $iodev->{NAME}; my $object = ""; - + # Modul suchen my $type8 = hex(substr($msg,0,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 $pos = $datalen*2+16; +# Log3 "xx", 1, "(DECOMP2): T8($type8) - MI$ipsrc DST-> $ipdst SRC<-$objsrc"; + if ( length($msg) <= $pos ) { -# Log3 $hash, 5, "N4MODULE (parse) -> ($msg) (ddata:$ddata) (pos:$pos)"; return undef; } @@ -290,7 +312,6 @@ sub N4HMODULE_Parse($$) { my $len = substr($msg,$pos+4,2); my $posb = substr($msg,$pos+6,2); - if ($ipdst == 32767) { $object = $objsrc; } else { @@ -338,8 +359,10 @@ sub N4HMODULE_ParsePayload($@) { if (hex(substr($ddata,2,2))== hex("00")) { readingsBulkUpdate($hash,"state", "off"); + $hash->{STATE} = "off"; } else { readingsBulkUpdate($hash,"state", "on"); + $hash->{STATE} = "on"; } } @@ -351,6 +374,14 @@ sub N4HMODULE_ParsePayload($@) { # +++++++ D0_TOGGLE if ($dev_funcion == hex("35")) { 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 @@ -378,34 +409,6 @@ sub N4HMODULE_ParsePayload($@) { my ($valtype, $lastval) = N4HMODULE_paramToText($hash, $ddata); 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 @@ -639,7 +642,7 @@ sub N4HMODULE_Update($@) { my $value = shift(@a); my $name = $hash->{NAME}; - return unless (defined($hash->{NAME})); + return unless (defined($hash->{NAME}) and defined $value ); Log3 $hash, 5, "N4MODULE (update): ($name) ($value)"; @@ -943,9 +946,10 @@ sub N4HMODULE_ParseN56($) { define n4h_28204 N4HMODULE n4h 24 28204
- Currently the following values are supported: + Currently the following values are supported:
+ + Measurement
- Measurement
  • 24 - Measurement,Temperature
  • 25 - Measurement,Brightness
  • @@ -993,9 +997,10 @@ sub N4HMODULE_ParseN56($) { define MyN4HMODULEice N4HMODULE 24 26004
- Derzeit werden folgende Typen unterstützt: + Derzeit werden folgende Typen unterstützt:
+ + Messwerte
- Messwerte
  • 24 - Messwert,Temperatur
  • 25 - Messwert,Helligkeit