From a646ecef4abe349138b0ba8443637382193e751d Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Tue, 4 Jun 2013 14:35:37 +0000 Subject: [PATCH] reopen + msgInterval added git-svn-id: https://svn.fhem.de/fhem/trunk@3245 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_FBAHA.pm | 31 +++++++++++++++++++++++++------ fhem/FHEM/10_FBDECT.pm | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 14 deletions(-) diff --git a/fhem/FHEM/00_FBAHA.pm b/fhem/FHEM/00_FBAHA.pm index cbf8a9109..83dc8c6ac 100755 --- a/fhem/FHEM/00_FBAHA.pm +++ b/fhem/FHEM/00_FBAHA.pm @@ -48,16 +48,15 @@ FBAHA_Define($$) return "wrong syntax: define FBAHA hostname:2002"; } - DevIo_CloseDev($hash); - my $name = $a[0]; my $dev = $a[2]; - $hash->{Clients} = ":FBDECT:"; my %matchList = ( "1:FBDECT" => ".*" ); $hash->{MatchList} = \%matchList; + DevIo_CloseDev($hash); $hash->{DeviceName} = $dev; + my $ret = DevIo_OpenDev($hash, 0, "FBAHA_DoInit"); return $ret; } @@ -69,7 +68,7 @@ FBAHA_Set($@) { my ($hash, @a) = @_; my $name = shift @a; - my %sets = ("createDevs"=>1, "reregister"=>1); + my %sets = ("createDevs"=>1, "reregister"=>1, "reopen"=>1); return "set $name needs at least one parameter" if(@a < 1); my $type = shift @a; @@ -90,6 +89,7 @@ FBAHA_Set($@) } if($type eq "reregister") { + # Release seems to be deadly on the 546e FBAHA_Write($hash, "02", "") if($hash->{HANDLE}); # RELEASE FBAHA_Write($hash, "00", "00010001"); # REGISTER my ($err, $data) = FBAHA_ReadAnswer($hash, "REGISTER", "^01"); @@ -102,6 +102,7 @@ FBAHA_Set($@) if($data =~ m/^01030010(........)/) { $hash->{STATE} = "Initialized"; $hash->{HANDLE} = $1; + Log 1, "FBAHA $hash->{NAME} registered with handle: $hash->{HANDLE}"; } else { my $msg = "Got bogus answer for REGISTER request: $data"; @@ -113,6 +114,12 @@ FBAHA_Set($@) FBAHA_Write($hash, "03", "0000028200000000"); # LISTEN } + if($type eq "reopen") { + DevIo_CloseDev($hash); + delete $hash->{HANDLE}; + return DevIo_OpenDev($hash, 0, "FBAHA_DoInit"); + } + return undef; } @@ -202,8 +209,6 @@ FBAHA_DoInit($) { my $hash = shift; my $name = $hash->{NAME}; - Log 1, "FBAHA_DoInit called"; - return FBAHA_Set($hash, ($name, "reregister")); } @@ -361,6 +366,12 @@ FBAHA_Ready($) create a FHEM device for each DECT device found on the AHA-Host, see also get devList. +
  • reopen
    + close and reopen the connection to the AHA server. Debugging only. +
  • +
  • reregister
    + release existing registration handle, and get a new one. Debugging only. +

  • @@ -436,6 +447,14 @@ FBAHA_Ready($) legt FHEM Geräte an für jedes auf dem AHA-Server gefundenen DECT Eintrag, siehe auch "get devList". +
  • reopen
    + Schließt und &oulm;ffnet die Verbindung zum AHA Server. Nur für + debugging. +
  • +
  • reregister
    + Gibt den AHA handle frei, und registriert sich erneut beim AHA Server. Nur + für debugging. +

  • diff --git a/fhem/FHEM/10_FBDECT.pm b/fhem/FHEM/10_FBDECT.pm index 3a7297d8a..96b9a7faa 100755 --- a/fhem/FHEM/10_FBDECT.pm +++ b/fhem/FHEM/10_FBDECT.pm @@ -70,7 +70,7 @@ FBDECT_Define($$) } ################################### -my %sets = ("on"=>1, "off"=>1); +my %sets = ("on"=>1, "off"=>1, "msgInterval"=>1); sub FBDECT_Set($@) { @@ -79,12 +79,28 @@ FBDECT_Set($@) my $cmd = $a[1]; if(!$sets{$cmd}) { - return SetExtensions($hash, join(" ", sort keys %sets), @a); + my $usage = join(" ", sort keys %sets); + return SetExtensions($hash, $usage, @a); + } + + my $relay; + if($cmd eq "on" || $cmd eq "off") { + my $relay = sprintf("%08x%04x0000%08x", 15, 4, $cmd eq "on" ? 1 : 0); + my $msg = sprintf("%04x0000%08x$relay", $hash->{id}, length($relay)/2); + IOWrite($hash, "07", $msg); + readingsSingleUpdate($hash, "state", "set_$cmd", 1); + } + if($cmd eq "msgInterval") { + return "msgInterval needs seconds as parameter" + if(!defined($a[2]) || $a[2] !~ m/^\d+$/); + # Set timer for RELAY, CURRENT, VOLTAGE, POWER, ENERGY, + # POWER_FACTOR, TEMP, RELAY_TIMES, + foreach my $i (24, 26, 27, 28, 29, 30, 31, 32) { + my $txt = sprintf("%08x%04x0000%08x", $i, 4, $a[2]); + my $msg = sprintf("%04x0000%08x$txt", $hash->{id}, length($txt)/2); + IOWrite($hash, "07", $msg); + } } - my $relay = sprintf("%08x%04x0000%08x", 15, 4, $cmd eq "on" ? 1 : 0); - my $msg = sprintf("%04x0000%08x$relay", $hash->{id}, length($relay)/2); - IOWrite($hash, "07", $msg); - readingsSingleUpdate($hash, "state", "set_$cmd", 1); return undef; } @@ -238,6 +254,8 @@ FBDECT_Undef($$) set the device on or off.
  • set extensions are supported.
  • +
  • msgInterval <sec>
    + Number of seconds between the sensor messages.
    @@ -312,9 +330,12 @@ FBDECT_Undef($$) Set
    • on/off
      - Gerät einschalten bzw. ausschalten.
    • + Gerät einschalten bzw. ausschalten.
    • - Die set extensions werden unterstützt.
    • + Die set extensions werden + unterstützt. +
    • msgInterval <sec>
      + Anzahl der Sekunden zwischen den Sensornachrichten.