From 631c54d0d9a21f17f7e5eaf63ad941356cbeb7fe Mon Sep 17 00:00:00 2001 From: T0RST3N Date: Mon, 2 Jul 2018 21:20:59 +0200 Subject: [PATCH 1/4] Fix double dispatch -fix: dispatching twice --- FHEM/71_XiaomiSmartHome.pm | 9 +++++---- controls_mish.txt | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/FHEM/71_XiaomiSmartHome.pm b/FHEM/71_XiaomiSmartHome.pm index b8d2b13..d41feff 100644 --- a/FHEM/71_XiaomiSmartHome.pm +++ b/FHEM/71_XiaomiSmartHome.pm @@ -51,7 +51,7 @@ sub XiaomiSmartHome_Notify($$); sub XiaomiSmartHome_updateSingleReading($$); my $iv="\x17\x99\x6d\x09\x3d\x28\xdd\xb3\xba\x69\x5a\x2e\x6f\x58\x56\x2e"; -my $version = "1.30"; +my $version = "1.31"; my %XiaomiSmartHome_gets = ( "getDevices" => ["get_id_list", '^.+get_id_list_ack' ], @@ -160,14 +160,15 @@ sub XiaomiSmartHome_Read($) { } if ($modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} eq $hash->{NAME}) { Log3 $name, 5, "$name: Read> XiaomiSmartHome_Device known! " . "SID: " . $rsid . " " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " " . $hash->{NAME}; + Log3 $name, 5, "$name: Read> Dispatching " . $buf . " " . $hash->{NAME}; + Dispatch($hash, $buf, undef); } elsif ($modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} ne $hash->{NAME}) { Log3 $name, 5, "$name: Read> Wrong Modul HASH Trying to find the right one " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " <> " . $hash->{NAME} ; $hash = $modules{XiaomiSmartHome_Device}{defptr}{$rsid}->{IODev}; - Log3 $name, 5, "$name: Read> Using this GW " . $hash->{NAME}; + Log3 $name, 5, "$name: Read> Using this GW " . $hash->{NAME} . " no Dispatching!"; } - Log3 $name, 5, "$name: Read> Dispatching " . $buf . " " . $hash->{NAME}; - Dispatch($hash, $buf, undef); + } elsif (!$modules{XiaomiSmartHome}{defptr}{$rsid}){ Log3 $name, 1, "$name: Read> GW not defined " . $buf; diff --git a/controls_mish.txt b/controls_mish.txt index 5cc5954..b320560 100644 --- a/controls_mish.txt +++ b/controls_mish.txt @@ -1,2 +1,2 @@ -UPD 2018-06-22_13:29:31 38872 FHEM/71_XiaomiSmartHome.pm +UPD 2018-07-02_21:06:31 38896 FHEM/71_XiaomiSmartHome.pm UPD 2018-06-22_12:45:46 29142 FHEM/71_XiaomiSmartHome_Device.pm From d3d96436a294b1a2560f83df1b24db4eff73bf73 Mon Sep 17 00:00:00 2001 From: Torte Date: Sun, 9 Sep 2018 12:52:58 +0200 Subject: [PATCH 2/4] Support for new Sensors vibration -add support for sensor vibration -fix some fixes for multigw support. --- FHEM/71_XiaomiSmartHome.pm | 49 ++++++++++++++++++++----------- FHEM/71_XiaomiSmartHome_Device.pm | 15 ++++++++-- controls_mish.txt | 4 +-- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/FHEM/71_XiaomiSmartHome.pm b/FHEM/71_XiaomiSmartHome.pm index d41feff..0463251 100644 --- a/FHEM/71_XiaomiSmartHome.pm +++ b/FHEM/71_XiaomiSmartHome.pm @@ -51,7 +51,7 @@ sub XiaomiSmartHome_Notify($$); sub XiaomiSmartHome_updateSingleReading($$); my $iv="\x17\x99\x6d\x09\x3d\x28\xdd\xb3\xba\x69\x5a\x2e\x6f\x58\x56\x2e"; -my $version = "1.31"; +my $version = "1.33"; my %XiaomiSmartHome_gets = ( "getDevices" => ["get_id_list", '^.+get_id_list_ack' ], @@ -107,7 +107,8 @@ sub XiaomiSmartHome_Initialize($) { "17:XiaomiSmartHome_Device" => "^.+smoke", "18:XiaomiSmartHome_Device" => "^.+weather.v1", "19:XiaomiSmartHome_Device" => "^.+sensor_motion.aq2", - "20:XiaomiSmartHome_Device" => "^.+sensor_wleak.aq1"}; + "20:XiaomiSmartHome_Device" => "^.+sensor_wleak.aq1", + "21:XiaomiSmartHome_Device" => "^.+vibration"}; FHEM_colorpickerInit(); } ##################################### @@ -130,7 +131,7 @@ sub XiaomiSmartHome_Read($) { InternalTimer(gettimeofday() + 2, "XiaomiSmartHome_connect", $hash, 0); return; } - my $json = $hash->{helper}{JSON}->incr_parse($buf); + my $json = $hash->{helper}{JSON}->incr_parse($buf); my $decoded = eval{decode_json($buf)}; if ($@) { Log3 $name, 1, "$name: Read> Error while request: $@"; @@ -145,6 +146,7 @@ sub XiaomiSmartHome_Read($) { Log3 $name, 5, "$name: Read> [PLAIN] " . $buf; my $rsid = $decoded->{'sid'}; if ($decoded->{'cmd'} eq 'read_ack' || $decoded->{'cmd'} eq 'report' && $decoded->{'model'} ne 'gateway'|| $decoded->{'cmd'} eq 'heartbeat' && $decoded->{'model'} ne 'gateway' || $decoded->{'cmd'} eq 'write_ack' && $decoded->{'model'} ne 'gateway') { + # devices does not exist yet if (!$modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME}){ Log3 $name, 5, "$name: Read> XiaomiSmartHome_Device unknown trying autocreate" ; my $def=$modules{XiaomiSmartHome}{defptr}; @@ -155,36 +157,49 @@ sub XiaomiSmartHome_Read($) { Log3 $value->{NAME}, 5, "$value->{NAME}: $rsid is sensor from $value->{NAME}"; Dispatch($value, $buf, undef); return; - } + } } } - if ($modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} eq $hash->{NAME}) { + # devices available with proper gw + elsif ($modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} eq $hash->{NAME}) { Log3 $name, 5, "$name: Read> XiaomiSmartHome_Device known! " . "SID: " . $rsid . " " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " " . $hash->{NAME}; Log3 $name, 5, "$name: Read> Dispatching " . $buf . " " . $hash->{NAME}; - Dispatch($hash, $buf, undef); - } + } + # Senosoren check elsif ($modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} ne $hash->{NAME}) { Log3 $name, 5, "$name: Read> Wrong Modul HASH Trying to find the right one " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " <> " . $hash->{NAME} ; $hash = $modules{XiaomiSmartHome_Device}{defptr}{$rsid}->{IODev}; - Log3 $name, 5, "$name: Read> Using this GW " . $hash->{NAME} . " no Dispatching!"; + Log3 $name, 5, "$name: Read> Using this GW " . $hash->{NAME} ; } - + Log3 $name, 5, "$name: Read> Dispatching " . $buf . " " . $hash->{NAME}; + Dispatch($hash, $buf, undef); + } + # gateway sensor list + elsif ($decoded->{'cmd'} eq 'get_id_list_ack'){ + $self = $modules{XiaomiSmartHome}{defptr}{$rsid}; + Log3 $name, 5, "$name: Read> Reading Sensorlist with $self->{NAME}" ; + XiaomiSmartHome_Reading ($self, $buf); + return; } + # gateway not definded elsif (!$modules{XiaomiSmartHome}{defptr}{$rsid}){ - Log3 $name, 1, "$name: Read> GW not defined " . $buf; - return; + Log3 $name, 1, "$name: Read> GW not defined " . $buf; + return; } + # gateway defined but not the right modul instance - change elsif ( $modules{XiaomiSmartHome}{defptr}{$rsid}->{SID} ne $hash->{SID} ){ $self = $modules{XiaomiSmartHome}{defptr}{$rsid}; - Log3 $name, 5, "$name: Read> Change HASH Ref to $self->{NAME}"; - XiaomiSmartHome_Reading ($self, $buf); + Log3 $name, 5, "$name: Read> Wrong Modul HASH skipping $self->{NAME}"; + #XiaomiSmartHome_Reading ($self, $buf); + return; } - else - { + #gateway defined and the right modul instance - nothing to change + elsif ( $modules{XiaomiSmartHome}{defptr}{$rsid}->{SID} eq $hash->{SID} ){ Log3 $name, 5, "$name: Read> HASH correctly"; XiaomiSmartHome_Reading ($hash, $buf); - } - } + return; + } + } } ##################################### sub XiaomiSmartHome_Reading ($@) { diff --git a/FHEM/71_XiaomiSmartHome_Device.pm b/FHEM/71_XiaomiSmartHome_Device.pm index 2035e76..e49c0fb 100644 --- a/FHEM/71_XiaomiSmartHome_Device.pm +++ b/FHEM/71_XiaomiSmartHome_Device.pm @@ -27,7 +27,7 @@ use warnings; -my $version = "1.30"; +my $version = "1.33"; sub XiaomiSmartHome_Device_updateSReading($); @@ -38,7 +38,7 @@ sub XiaomiSmartHome_Device_Initialize($) { my ($hash) = @_; - $hash->{Match} = ".*magnet.*|.*motion.*|sensor_ht|.*switch.*|plug|.*cube.*|86sw1|86sw2|ctrl_neutral1|ctrl_neutral2|rgbw_light|curtain|ctrl_ln1|ctrl_ln2|86plug|natgas|smoke|weather.v1|sensor_wleak.aq1"; + $hash->{Match} = ".*magnet.*|.*motion.*|sensor_ht|.*switch.*|plug|.*cube.*|86sw1|86sw2|ctrl_neutral1|ctrl_neutral2|rgbw_light|curtain|ctrl_ln1|ctrl_ln2|86plug|natgas|smoke|weather.v1|sensor_wleak.aq1|vibration"; $hash->{DefFn} = "XiaomiSmartHome_Device_Define"; $hash->{SetFn} = "XiaomiSmartHome_Device_Set"; $hash->{UndefFn} = "XiaomiSmartHome_Device_Undef"; @@ -362,11 +362,20 @@ sub XiaomiSmartHome_Device_Read($$$){ readingsBulkUpdate($hash, "arlarm", "$data->{curtain_level}", 1 ); } #curtain end + #vibration Start + if (defined $data->{'coordination'}){ + Log3 $name, 3, "$name: DEV_Read>" . " Name: " . $hash->{NAME} . " SID: " . $sid . " Type: " . $hash->{MODEL} . " Coordination: " . $data->{coordination}; + readingsBulkUpdate($hash, "coordination", "$data->{coordination}", 1 ); + } + if (defined $data->{'final_tilt_angle'}){ + Log3 $name, 3, "$name: DEV_Read>" . " Name: " . $hash->{NAME} . " SID: " . $sid . " Type: " . $hash->{MODEL} . " Final tilt angle: " . $data->{final_tilt_angle}; + readingsBulkUpdate($hash, "final_tilt_angle", "$data->{final_tilt_angle}", 1 ); + } + #vibration end if ($decoded->{'cmd'} eq 'heartbeat'){ readingsBulkUpdate($hash, 'heartbeat', $decoded->{'sid'} , 1 ); } - readingsEndUpdate( $hash, 1 ); XiaomiSmartHome_Device_update($hash); return $hash->{NAME}; diff --git a/controls_mish.txt b/controls_mish.txt index b320560..6a117e8 100644 --- a/controls_mish.txt +++ b/controls_mish.txt @@ -1,2 +1,2 @@ -UPD 2018-07-02_21:06:31 38896 FHEM/71_XiaomiSmartHome.pm -UPD 2018-06-22_12:45:46 29142 FHEM/71_XiaomiSmartHome_Device.pm +UPD 2018-09-09 12:43:14 39606 FHEM/71_XiaomiSmartHome.pm +UPD 2018-09-09 12:43:16 29789 FHEM/71_XiaomiSmartHome_Device.pm From fbd347aae3eb61cc1543800a2f50fd4b9ea3e07e Mon Sep 17 00:00:00 2001 From: Torte Date: Sat, 24 Nov 2018 00:00:42 +0100 Subject: [PATCH 3/4] add support -add support for sensor Singel Rocker -add support for sensor Double Rocker -add support for sensor Wirless Mini Switch -add function for reconnect if disconnected --- FHEM/71_XiaomiSmartHome.pm | 31 ++++++++++++++++++++++++++----- FHEM/71_XiaomiSmartHome_Device.pm | 5 +++-- controls_mish.txt | 4 ++-- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/FHEM/71_XiaomiSmartHome.pm b/FHEM/71_XiaomiSmartHome.pm index 0463251..ca31207 100644 --- a/FHEM/71_XiaomiSmartHome.pm +++ b/FHEM/71_XiaomiSmartHome.pm @@ -51,7 +51,7 @@ sub XiaomiSmartHome_Notify($$); sub XiaomiSmartHome_updateSingleReading($$); my $iv="\x17\x99\x6d\x09\x3d\x28\xdd\xb3\xba\x69\x5a\x2e\x6f\x58\x56\x2e"; -my $version = "1.33"; +my $version = "1.36"; my %XiaomiSmartHome_gets = ( "getDevices" => ["get_id_list", '^.+get_id_list_ack' ], @@ -76,7 +76,7 @@ my %sets = ( sub XiaomiSmartHome_Initialize($) { my ($hash) = @_; - $hash->{Clients} = "XiaomiSmartHome_Device"; + $hash->{Clients} = 'XiaomiSmartHome_Device'; $hash->{DefFn} = 'XiaomiSmartHome_Define'; $hash->{UndefFn} = 'XiaomiSmartHome_Undef'; $hash->{NotifyFn} = 'XiaomiSmartHome_Notify'; @@ -84,8 +84,9 @@ sub XiaomiSmartHome_Initialize($) { $hash->{GetFn} = 'XiaomiSmartHome_Get'; $hash->{AttrFn} = 'XiaomiSmartHome_Attr'; $hash->{ReadFn} = 'XiaomiSmartHome_Read'; - $hash->{WriteFn} = "XiaomiSmartHome_Write"; - $hash->{AttrList} = "disable:1,0 " . + $hash->{ReadyFn} = 'XiaomiSmartHome_Ready'; + $hash->{WriteFn} = 'XiaomiSmartHome_Write'; + $hash->{AttrList} = 'disable:1,0 ' . $readingFnAttributes; $hash->{MatchList} = { "1:XiaomiSmartHome_Device" => ".*magnet.*", @@ -108,7 +109,10 @@ sub XiaomiSmartHome_Initialize($) { "18:XiaomiSmartHome_Device" => "^.+weather.v1", "19:XiaomiSmartHome_Device" => "^.+sensor_motion.aq2", "20:XiaomiSmartHome_Device" => "^.+sensor_wleak.aq1", - "21:XiaomiSmartHome_Device" => "^.+vibration"}; + "21:XiaomiSmartHome_Device" => "^.+vibration", + "22:XiaomiSmartHome_Device" => "^.*b186acn01", + "23:XiaomiSmartHome_Device" => "^.*b286acn01", + "24:XiaomiSmartHome_Device" => "^.*b1acn01"}; FHEM_colorpickerInit(); } ##################################### @@ -563,6 +567,22 @@ sub XiaomiSmartHome_EncryptKey($) } ##################################### +sub XiaomiSmartHome_Ready($) +{ + my ($hash) = @_; + + # Versuch eines Verbindungsaufbaus, sofern die Verbindung beendet ist. + return DevIo_OpenDev($hash, 1, undef ) if ( $hash->{STATE} eq "disconnected" ); + + # This is relevant for Windows/USB only + if(defined($hash->{USBDev})) { + my $po = $hash->{USBDev}; + my ( $BlockingFlags, $InBytes, $OutBytes, $ErrorFlags ) = $po->status; + return ( $InBytes > 0 ); + } +} +##################################### + sub XiaomiSmartHome_Get($@) { my ($hash , $name, $opt, $args ) = @_; @@ -1090,3 +1110,4 @@ sub XiaomiSmartHome_updateAllReadings($) =cut + diff --git a/FHEM/71_XiaomiSmartHome_Device.pm b/FHEM/71_XiaomiSmartHome_Device.pm index e49c0fb..8db21f8 100644 --- a/FHEM/71_XiaomiSmartHome_Device.pm +++ b/FHEM/71_XiaomiSmartHome_Device.pm @@ -27,7 +27,7 @@ use warnings; -my $version = "1.33"; +my $version = "1.36"; sub XiaomiSmartHome_Device_updateSReading($); @@ -38,7 +38,7 @@ sub XiaomiSmartHome_Device_Initialize($) { my ($hash) = @_; - $hash->{Match} = ".*magnet.*|.*motion.*|sensor_ht|.*switch.*|plug|.*cube.*|86sw1|86sw2|ctrl_neutral1|ctrl_neutral2|rgbw_light|curtain|ctrl_ln1|ctrl_ln2|86plug|natgas|smoke|weather.v1|sensor_wleak.aq1|vibration"; + $hash->{Match} = ".*magnet.*|.*motion.*|sensor_ht|.*switch.*|plug|.*cube.*|86sw1|86sw2|ctrl_neutral1|ctrl_neutral2|rgbw_light|curtain|ctrl_ln1|ctrl_ln2|86plug|natgas|smoke|weather.v1|sensor_wleak.aq1|vibration|remote.b186acn01|remote.b286acn01|remote.b1acn01"; $hash->{DefFn} = "XiaomiSmartHome_Device_Define"; $hash->{SetFn} = "XiaomiSmartHome_Device_Set"; $hash->{UndefFn} = "XiaomiSmartHome_Device_Undef"; @@ -739,3 +739,4 @@ sub XiaomiSmartHome_round { =end html_DE =cut + diff --git a/controls_mish.txt b/controls_mish.txt index 6a117e8..358c111 100644 --- a/controls_mish.txt +++ b/controls_mish.txt @@ -1,2 +1,2 @@ -UPD 2018-09-09 12:43:14 39606 FHEM/71_XiaomiSmartHome.pm -UPD 2018-09-09 12:43:16 29789 FHEM/71_XiaomiSmartHome_Device.pm +UPD 2018-11-23 23:51:54 40279 FHEM/71_XiaomiSmartHome.pm +UPD 2018-11-23 23:51:53 29839 FHEM/71_XiaomiSmartHome_Device.pm From 2b637d9066ffd4385e2d82ca572f11d87faaad40 Mon Sep 17 00:00:00 2001 From: Torte Date: Wed, 20 Mar 2019 12:00:35 +0100 Subject: [PATCH 4/4] fix multiple events close #18 no response, i didnt find/understand the problem. close #20 no response -fix: If more than one gateway is used, only one event is now triggered. -fix: Fixed spelling errors in german help. --- FHEM/71_XiaomiSmartHome.pm | 114 +++++++++++++++++------------- FHEM/71_XiaomiSmartHome_Device.pm | 77 +++++++++++--------- controls_mish.txt | 4 +- 3 files changed, 109 insertions(+), 86 deletions(-) diff --git a/FHEM/71_XiaomiSmartHome.pm b/FHEM/71_XiaomiSmartHome.pm index ca31207..19e54a5 100644 --- a/FHEM/71_XiaomiSmartHome.pm +++ b/FHEM/71_XiaomiSmartHome.pm @@ -45,13 +45,10 @@ return "\nERROR: Please install Net::Ping" if($@); use Color; use SetExtensions; - - -sub XiaomiSmartHome_Notify($$); sub XiaomiSmartHome_updateSingleReading($$); my $iv="\x17\x99\x6d\x09\x3d\x28\xdd\xb3\xba\x69\x5a\x2e\x6f\x58\x56\x2e"; -my $version = "1.36"; +my $version = "1.40"; my %XiaomiSmartHome_gets = ( "getDevices" => ["get_id_list", '^.+get_id_list_ack' ], @@ -164,19 +161,25 @@ sub XiaomiSmartHome_Read($) { } } } - # devices available with proper gw - elsif ($modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} eq $hash->{NAME}) { - Log3 $name, 5, "$name: Read> XiaomiSmartHome_Device known! " . "SID: " . $rsid . " " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " " . $hash->{NAME}; - Log3 $name, 5, "$name: Read> Dispatching " . $buf . " " . $hash->{NAME}; + # devices available with proper and HEARTBEAT gw + elsif ($decoded->{'cmd'} eq 'heartbeat' && $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} eq $hash->{NAME}) { + Log3 $name, 5, "$name: Read> Dispatching! " . "SID: " . $rsid . " " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " " . $hash->{NAME}; + Dispatch($hash, $buf, undef); + return; } - # Senosoren check - elsif ($modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} ne $hash->{NAME}) { - Log3 $name, 5, "$name: Read> Wrong Modul HASH Trying to find the right one " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " <> " . $hash->{NAME} ; + elsif ($decoded->{'cmd'} eq 'report' && $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} eq $hash->{NAME}) { + Log3 $name, 5, "$name: Read> Dispatching! " . "SID: " . $rsid . " " . $modules{XiaomiSmartHome_Device}{defptr}{$rsid}{IODev}->{NAME} . " " . $hash->{NAME}; + Dispatch($hash, $buf, undef); + return; + } + # Senosoren check change to right GW + elsif ($decoded->{'cmd'} eq 'read_ack') { $hash = $modules{XiaomiSmartHome_Device}{defptr}{$rsid}->{IODev}; - Log3 $name, 5, "$name: Read> Using this GW " . $hash->{NAME} ; + Log3 $name, 4, "$name: Read> Dispatching using this GW " . $hash->{NAME} ; + Dispatch($hash, $buf, undef); + return; } - Log3 $name, 5, "$name: Read> Dispatching " . $buf . " " . $hash->{NAME}; - Dispatch($hash, $buf, undef); + } # gateway sensor list elsif ($decoded->{'cmd'} eq 'get_id_list_ack'){ @@ -190,14 +193,14 @@ sub XiaomiSmartHome_Read($) { Log3 $name, 1, "$name: Read> GW not defined " . $buf; return; } - # gateway defined but not the right modul instance - change + # gateway defined but not the right modul instance - change elsif ( $modules{XiaomiSmartHome}{defptr}{$rsid}->{SID} ne $hash->{SID} ){ $self = $modules{XiaomiSmartHome}{defptr}{$rsid}; Log3 $name, 5, "$name: Read> Wrong Modul HASH skipping $self->{NAME}"; - #XiaomiSmartHome_Reading ($self, $buf); + #XiaomiSmartHome_Reading ($self, $buf); no reading anymore! return; } - #gateway defined and the right modul instance - nothing to change + #gateway defined and the right modul instance - nothing to change elsif ( $modules{XiaomiSmartHome}{defptr}{$rsid}->{SID} eq $hash->{SID} ){ Log3 $name, 5, "$name: Read> HASH correctly"; XiaomiSmartHome_Reading ($hash, $buf); @@ -610,7 +613,18 @@ sub XiaomiSmartHome_Notify($$) { my ($hash, $dev_hash) = @_; my $ownName = $hash->{NAME}; # own name / hash - Log3 $ownName, 5, "$ownName: Notify> NotifyStart"; + #my $evName = $dev_hash->{NAME}; # triggered device + #my $rsid = $dev_hash->{SID}; + Log3 $ownName, 5, "$ownName: Notify> NotifyStart";# . $rsid . " " . $evName; + + # gateway defined but not the right modul instance + #if ( $modules{XiaomiSmartHome}{defptr}{$rsid}->{SID} ne $hash->{SID} ){ + # Log3 $ownName, 5, "$ownName: Notify> Wrong Event-Modul HASH skipping " . $evName; + # #XiaomiSmartHome_Reading ($self, $buf); + # return; + #} + + return "" if(IsDisabled($ownName)); # Return without any further action if the module is disabled $attr{$hash->{NAME}}{webCmd} = "pct:rgb:rgb ff0000:rgb 00ff00:rgb 0000ff:on:off" if ( ! $attr{$hash->{NAME}}{webCmd} || $attr{$hash->{NAME}}{webCmd} eq "rgb:rgb ff0000:rgb 00ff00:rgb 0000ff:on:off" ); readingsSingleUpdate($hash, "pct", 100, 1) if ( ! $hash->{READINGS}{pct}{VAL}); @@ -957,17 +971,17 @@ sub XiaomiSmartHome_updateAllReadings($)
  • smoke: smoke alarm detector
    • 0: disarm
    • -
    • 1: arlarm
    • -
    • 8: battery arlarm
    • -
    • 64: arlarm sensitivity
    • +
    • 1: alarm
    • +
    • 8: battery alarm
    • +
    • 64: alarm sensitivity
    • 32768: ICC communication failure
  • gas: gas alarm detector
    • 0: disarm
    • -
    • 1: arlarm
    • -
    • 2: analog arlarm
    • -
    • 64: arlarm sensitivity
    • +
    • 1: alarm
    • +
    • 2: analog alarm
    • +
    • 64: alarm sensitivity
    • 32768: ICC communication failure
    @@ -1015,9 +1029,9 @@ sub XiaomiSmartHome_updateAllReadings($) XiaomiSmartHome Steuern des XiaomiSmartHome Gateway und deren verbundener Sensoren.
    - Vorraussetzungen + Voraussetzungen
      -
    • Diese Pakete müssen installiert sein: apt-get install libio-socket-multicast-perl libjson-perl libcrypt-cbc-perl
    • +
    • Diese Pakete müssen installiert sein: apt-get install libio-socket-multicast-perl libjson-perl libcrypt-cbc-perl
    • Und mit CPAN: cpan Crypt::Cipher::AES

    @@ -1029,11 +1043,11 @@ sub XiaomiSmartHome_updateAllReadings($)


    - Entwicklermodus am Gatway setzen! + Entwicklermodus am Gateway setzen!
      -

      Ohne Entwicklermodus ist keine Komunikation mit dem Gateway möglich. -
      Zum setzen des Entwicklermoduses braucht man ein android oder ios Gerät mit installierter MI APP. -
      Um das versteckte Menü zu öffnen muss man mehrmals auf die Versionsnummer der MI APP klicken. +

      Ohne Entwicklermodus ist keine Kommunikation mit dem Gateway möglich. +
      Zum setzen des Entwicklermodusses braucht man ein android oder ios Gerät mit installierter MI APP. +
      Um das versteckte Menü zu öffnen muss man mehrmals auf die Versionsnummer der MI APP klicken.
      Hier finden Sie eine Anleitung mit Bildern.
      Android -> https://louiszl.gitbooks.io/lumi-gateway-local-api/content/device_discover.html
      IOS -> https://github.com/fooxy/homeassistant-aqara/wiki/Enable-dev-mode @@ -1042,33 +1056,33 @@ sub XiaomiSmartHome_updateAllReadings($)
      Unterstütze Sensoren

        -
      • magnet: Magnetischer Fenster/Tür Sensor
      • +
      • magnet: Magnetischer Fenster/Tür Sensor
      • motion: Bewegungsmelder
      • sensor_ht: Temperatur und Luftdruck
      • switch: Funkschalter
      • plug & 86plug: Schaltbare Funksteckdose
      • -
      • cube: Würfel Sensor
      • +
      • cube: Würfel Sensor
      • 86sw1: Einfacher Wandfunkschalter
      • 86sw2: Wandfunkschalter doppelt
      • ctrl_neutral1: Einfacher Wandschalter schaltbar
      • ctrl_neutral2: Doppelter Wandschalter schaltbar
      • rgbw_light: RBGW Lampe (nur Anzeige)
      • -
      • curtain: Vorhangmotor (ohne das das device den curtain_level gemeldet hat ist ein steuern nicht möglich)
      • +
      • curtain: Vorhangmotor (ohne dass das Device den curtain_level gemeldet hat ist ein Steuern nicht möglich)
      • water: Wasser Sensor
      • smoke: Rauchmelder
        • 0: disarm
        • -
        • 1: arlarm
        • -
        • 8: battery arlarm
        • -
        • 64: arlarm sensitivity
        • +
        • 1: alarm
        • +
        • 8: battery alarm
        • +
        • 64: alarm sensitivity
        • 32768: ICC communication failure
      • gas: Gasmelder
        • 0: disarm
        • -
        • 1: arlarm
        • -
        • 2: analog arlarm
        • -
        • 64: arlarm sensitivity
        • +
        • 1: alarm
        • +
        • 2: analog alarm
        • +
        • 64: alarm sensitivity
        • 32768: ICC communication failure
      @@ -1077,29 +1091,29 @@ sub XiaomiSmartHome_updateAllReadings($)
      • Das XiaomiSmartHome Gateway sendet alle 10 seconds einen heartbeat
      • Jedes XiaomiSmartHome Devices sendet alle 60 Minuten einen heartbeat
      • -
      • Das Reading heartbeat wird mit der SID des jeweiligen Gerätes beim empfang eines Heartbeat aktualisiert
      • +
      • Das Reading heartbeat wird mit der SID des jeweiligen Gerätes beim Empfang eines Heartbeat aktualisiert

      Set: Gateway
        -
      • password: Ohne Passwort ist ein Schalten des GATEWAY nicht möglich. Das Passwort findet man in der MI APP
      • +
      • password: Ohne Passwort ist ein Schalten des GATEWAY nicht möglich. Das Passwort findet man in der MI APP
      • RGB(Colorpicker): Einstellen der LED Farbe des Gateways
      • PCT(Slider): Einstellen der Helligkeit des Gateways
      • -
      • intervals: Einschalten des gateway für einen Zeitraum zb. set intervals 07:00-08:00
      • -
      • ringtone: Wiedergeben eines Arlarmtones 0-8,13,21-29,10001-.. Benutzerdefinierte| 10000 = aus
      • -
      • volume: Einstellen der Lautstärke des Arlarmtones 1-100, (100 ist sehr laut!)
      • -
      • ringvol: Wiedergeben eines Arlamtones und gleichzeitiges verändern der Lautstärke set [GWNAME] ringvol 21 10
      • -
      • learn: Anlernen neuer Sensoren, nach dem Set an dem neuem Sensor den Button drücken
      • +
      • intervals: Einschalten des Gateways für einen Zeitraum zb. set intervals 07:00-08:00
      • +
      • ringtone: Wiedergeben eines Alarmtones 0-8,13,21-29,10001-.. Benutzerdefinierte| 10000 = aus
      • +
      • volume: Einstellen der Lautstärke des Alarmtones 1-100, (100 ist sehr laut!)
      • +
      • ringvol: Wiedergeben eines Arlamtones und gleichzeitiges verändern der Lautstärke set [GWNAME] ringvol 21 10
      • +
      • learn: Anlernen neuer Sensoren, nach dem Set an dem neuen Sensor den Button drücken

      Set: Devices
      • motionOffTimer: (nur Bewegungsmelder) -
        Durch setzen des Parameters ist es möglich das das Reading des Bewegungsmelder nach 1, 5 oder 10 Sekunden +
        Durch setzen des Parameters ist es möglich, dass das Reading des Bewegungsmelder nach 1, 5 oder 10 Sekunden
        automatisch wieder auf off gestellt wird. -
        Hintergrund: Der Bewegungsmelder sendet kein selber kein off. -
        Der Bewegungsmelder sendet no_motion nach 120, 180, 300, 600, 1200 Sekunden wenn keine Bewegung festgestellt wurde.
      • -
      • Power: (nur Funksteckdose) on off Funktsteckdose ein oder ausschalten
      • +
        Hintergrund: Der Bewegungsmelder sendet selber kein off. +
        Der Bewegungsmelder sendet no_motion nach 120, 180, 300, 600, 1200 Sekunden, wenn keine Bewegung festgestellt wurde. +
      • Power: (nur Funksteckdose) on off Funksteckdose ein oder ausschalten
      • ctrl: (nur Funkschalter) on off Funkschalter
      • channel_0: (nur Doppelter Wandschalter schaltbar) ein oder ausschalten
      • channel_1: (nur Doppelter Wandschalter schaltbar) ein oder ausschalten
      • diff --git a/FHEM/71_XiaomiSmartHome_Device.pm b/FHEM/71_XiaomiSmartHome_Device.pm index 8db21f8..6a7ab0c 100644 --- a/FHEM/71_XiaomiSmartHome_Device.pm +++ b/FHEM/71_XiaomiSmartHome_Device.pm @@ -27,7 +27,7 @@ use warnings; -my $version = "1.36"; +my $version = "1.40"; sub XiaomiSmartHome_Device_updateSReading($); @@ -43,6 +43,7 @@ sub XiaomiSmartHome_Device_Initialize($) $hash->{SetFn} = "XiaomiSmartHome_Device_Set"; $hash->{UndefFn} = "XiaomiSmartHome_Device_Undef"; $hash->{ParseFn} = "XiaomiSmartHome_Device_Parse"; + $hash->{FingerprintFn} = "XiaomiSmartHome_Device_Fingerprint"; $hash->{AttrList} = "follow-on-for-timer:1,0 follow-on-timer ". "do_not_notify:1,0 ignore:1,0 dummy:1,0 showtime:1,0 valueFn:textField-long ". @@ -359,7 +360,7 @@ sub XiaomiSmartHome_Device_Read($$$){ #curtain start if (defined $data->{curtain_level}){ Log3 $name, 3, "$name: DEV_Read>" . " Name: " . $hash->{NAME} . " SID: " . $sid . " Type: " . $hash->{MODEL} . " Curtain: " . $data->{curtain_level}; - readingsBulkUpdate($hash, "arlarm", "$data->{curtain_level}", 1 ); + readingsBulkUpdate($hash, "alarm", "$data->{curtain_level}", 1 ); } #curtain end #vibration Start @@ -486,6 +487,14 @@ sub XiaomiSmartHome_Device_Define($$) { } return undef; } +##################################### +sub XiaomiSmartHome_Device_Fingerprint($$){ + my ($io_name, $msg) = @_; + Log3 $io_name, 4, "$io_name: Fingerprint> for $msg"; + return ($io_name, $msg ); + +} + ##################################### sub XiaomiSmartHome_Device_updateSReading($) { @@ -587,17 +596,17 @@ sub XiaomiSmartHome_round {
      • smoke: smoke alarm detector
        • 0: disarm
        • -
        • 1: arlarm
        • -
        • 8: battery arlarm
        • -
        • 64: arlarm sensitivity
        • +
        • 1: alarm
        • +
        • 8: battery alarm
        • +
        • 64: alarm sensitivity
        • 32768: ICC communication failure
      • gas: gas alarm detector
        • 0: disarm
        • -
        • 1: arlarm
        • -
        • 2: analog arlarm
        • -
        • 64: arlarm sensitivity
        • +
        • 1: alarm
        • +
        • 2: analog alarm
        • +
        • 64: alarm sensitivity
        • 32768: ICC communication failure
      @@ -645,9 +654,9 @@ sub XiaomiSmartHome_round { XiaomiSmartHome Steuern des XiaomiSmartHome Gateway und deren verbundener Sensoren.
      - Vorraussetzungen + Voraussetzungen
        -
      • Diese Pakete müssen installiert sein: apt-get install libio-socket-multicast-perl libjson-perl libcrypt-cbc-perl
      • +
      • Diese Pakete müssen installiert sein: apt-get install libio-socket-multicast-perl libjson-perl libcrypt-cbc-perl
      • Und mit CPAN: cpan Crypt::Cipher::AES

      @@ -659,11 +668,11 @@ sub XiaomiSmartHome_round {


    - Entwicklermodus am Gatway setzen! + Entwicklermodus am Gateway setzen!
      -

      Ohne Entwicklermodus ist keine Komunikation mit dem Gateway möglich. -
      Zum setzen des Entwicklermoduses braucht man ein android oder ios Gerät mit installierter MI APP. -
      Um das versteckte Menü zu öffnen muss man mehrmals auf die Versionsnummer der MI APP klicken. +

      Ohne Entwicklermodus ist keine Kommunikation mit dem Gateway möglich. +
      Zum setzen des Entwicklermodusses braucht man ein android oder ios Gerät mit installierter MI APP. +
      Um das versteckte Menü zu öffnen muss man mehrmals auf die Versionsnummer der MI APP klicken.
      Hier finden Sie eine Anleitung mit Bildern.
      Android -> https://louiszl.gitbooks.io/lumi-gateway-local-api/content/device_discover.html
      IOS -> https://github.com/fooxy/homeassistant-aqara/wiki/Enable-dev-mode @@ -672,33 +681,33 @@ sub XiaomiSmartHome_round {
      Unterstütze Sensoren

        -
      • magnet: Magnetischer Fenster/Tür Sensor
      • +
      • magnet: Magnetischer Fenster/Tür Sensor
      • motion: Bewegungsmelder
      • sensor_ht: Temperatur und Luftdruck
      • switch: Funkschalter
      • plug & 86plug: Schaltbare Funksteckdose
      • -
      • cube: Würfel Sensor
      • +
      • cube: Würfel Sensor
      • 86sw1: Einfacher Wandfunkschalter
      • 86sw2: Wandfunkschalter doppelt
      • ctrl_neutral1: Einfacher Wandschalter schaltbar
      • ctrl_neutral2: Doppelter Wandschalter schaltbar
      • rgbw_light: RBGW Lampe (nur Anzeige)
      • -
      • curtain: Vorhangmotor (ohne das das device den curtain_level gemeldet hat ist ein steuern nicht möglich)
      • +
      • curtain: Vorhangmotor (ohne dass das Device den curtain_level gemeldet hat ist ein Steuern nicht öglich)
      • water: Wasser Sensor
      • smoke: Rauchmelder
        • 0: disarm
        • -
        • 1: arlarm
        • -
        • 8: battery arlarm
        • -
        • 64: arlarm sensitivity
        • +
        • 1: alarm
        • +
        • 8: battery alarm
        • +
        • 64: alarm sensitivity
        • 32768: ICC communication failure
      • gas: Gasmelder
        • 0: disarm
        • -
        • 1: arlarm
        • -
        • 2: analog arlarm
        • -
        • 64: arlarm sensitivity
        • +
        • 1: alarm
        • +
        • 2: analog alarm
        • +
        • 64: alarm sensitivity
        • 32768: ICC communication failure
      @@ -707,29 +716,29 @@ sub XiaomiSmartHome_round {
      • Das XiaomiSmartHome Gateway sendet alle 10 seconds einen heartbeat
      • Jedes XiaomiSmartHome Devices sendet alle 60 Minuten einen heartbeat
      • -
      • Das Reading heartbeat wird mit der SID des jeweiligen Gerätes beim empfang eines Heartbeat aktualisiert
      • +
      • Das Reading heartbeat wird mit der SID des jeweiligen Gerätes beim Empfang eines Heartbeat aktualisiert

      Set: Gateway
        -
      • password: Ohne Passwort ist ein Schalten des GATEWAY nicht möglich. Das Passwort findet man in der MI APP
      • +
      • password: Ohne Passwort ist ein Schalten des GATEWAY nicht möglich. Das Passwort findet man in der MI APP
      • RGB(Colorpicker): Einstellen der LED Farbe des Gateways
      • PCT(Slider): Einstellen der Helligkeit des Gateways
      • -
      • intervals: Einschalten des gateway für einen Zeitraum zb. set intervals 07:00-08:00
      • -
      • ringtone: Wiedergeben eines Arlarmtones 0-8,13,21-29,10001-.. Benutzerdefinierte| 10000 = aus
      • -
      • volume: Einstellen der Lautstärke des Arlarmtones 1-100, (100 ist sehr laut!)
      • -
      • ringvol: Wiedergeben eines Arlamtones und gleichzeitiges verändern der Lautstärke set [GWNAME] ringvol 21 10
      • -
      • learn: Anlernen neuer Sensoren, nach dem Set an dem neuem Sensor den Button drücken
      • +
      • intervals: Einschalten des Gateways für einen Zeitraum zb. set intervals 07:00-08:00
      • +
      • ringtone: Wiedergeben eines Alarmtones 0-8,13,21-29,10001-.. Benutzerdefinierte| 10000 = aus
      • +
      • volume: Einstellen der Lautstärke des Alarmtones 1-100, (100 ist sehr laut!)
      • +
      • ringvol: Wiedergeben eines Arlamtones und gleichzeitiges verändern der Lautstärke set [GWNAME] ringvol 21 10
      • +
      • learn: Anlernen neuer Sensoren, nach dem Set an dem neuen Sensor den Button drücken

      Set: Devices
      • motionOffTimer: (nur Bewegungsmelder) -
        Durch setzen des Parameters ist es möglich das das Reading des Bewegungsmelder nach 1, 5 oder 10 Sekunden +
        Durch setzen des Parameters ist es möglich, dass das Reading des Bewegungsmelder nach 1, 5 oder 10 Sekunden
        automatisch wieder auf off gestellt wird. -
        Hintergrund: Der Bewegungsmelder sendet kein selber kein off. -
        Der Bewegungsmelder sendet no_motion nach 120, 180, 300, 600, 1200 Sekunden wenn keine Bewegung festgestellt wurde.
      • -
      • Power: (nur Funksteckdose) on off Funktsteckdose ein oder ausschalten
      • +
        Hintergrund: Der Bewegungsmelder sendet selber kein off. +
        Der Bewegungsmelder sendet no_motion nach 120, 180, 300, 600, 1200 Sekunden, wenn keine Bewegung festgestellt wurde. +
      • Power: (nur Funksteckdose) on off Funksteckdose ein oder ausschalten
      • ctrl: (nur Funkschalter) on off Funkschalter
      • channel_0: (nur Doppelter Wandschalter schaltbar) ein oder ausschalten
      • channel_1: (nur Doppelter Wandschalter schaltbar) ein oder ausschalten
      • diff --git a/controls_mish.txt b/controls_mish.txt index 358c111..9554b9f 100644 --- a/controls_mish.txt +++ b/controls_mish.txt @@ -1,2 +1,2 @@ -UPD 2018-11-23 23:51:54 40279 FHEM/71_XiaomiSmartHome.pm -UPD 2018-11-23 23:51:53 29839 FHEM/71_XiaomiSmartHome_Device.pm +UPD 2019-03-20 11:54:55 40740 FHEM/71_XiaomiSmartHome.pm +UPD 2019-03-20 11:32:54 30100 FHEM/71_XiaomiSmartHome_Device.pm