From bcd7202d6daf409f1d7bb051d85e9e1ef2374a47 Mon Sep 17 00:00:00 2001 From: wuehler <> Date: Wed, 17 Jan 2018 22:38:27 +0000 Subject: [PATCH] 74_Unifi: added set command to en-/disable Site-Status-LEDs git-svn-id: https://svn.fhem.de/fhem/trunk@15918 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/74_Unifi.pm | 73 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index ec7958c42..ff6e9cd3e 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: 74_Unifi: add new set command to en-/disable Site Status-LEDs - bugfix: 74_XiaomiBTLESens: fix ssh gatttool which test - new: 74_XiaomiBTLESens: modul replace 74_XiaomiFlowerSens, add Support for Xiamomi Themometer/Hygrometer mit Display diff --git a/fhem/FHEM/74_Unifi.pm b/fhem/FHEM/74_Unifi.pm index c5760b9b9..2857d173c 100644 --- a/fhem/FHEM/74_Unifi.pm +++ b/fhem/FHEM/74_Unifi.pm @@ -1,6 +1,15 @@ ############################################################################## # $Id$ +# CHANGED +############################################################################## +# V2.0 +# - feature: 74_Unifi: add new set commands to block/unblock clients, +# enable/disable WLAN, new client-Reading essid +# V2.1 +# - feature: 74_Unifi: add new set command to en-/disable Site Status-LEDs + + package main; use strict; use warnings; @@ -50,6 +59,8 @@ sub Unifi_BlockClient_Send($@); sub Unifi_BlockClient_Receive($); sub Unifi_UnblockClient_Send($@); sub Unifi_UnblockClient_Receive($); +sub Unifi_SwitchSiteLEDs_Send($$); +sub Unifi_SwitchSiteLEDs_Receive($); sub Unifi_WlanconfRest_Send($$@); sub Unifi_WlanconfRest_Receive($); sub Unifi_NextUpdateFn($$); @@ -163,14 +174,14 @@ sub Unifi_Set($@) { my $apNames = Unifi_ApNames($hash); my $SSIDs = Unifi_SSIDs($hash); - if($setName !~ /archiveAlerts|restartAP|setLocateAP|unsetLocateAP|disconnectClient|update|clear|poeMode|blockClient|unblockClient|enableWLAN|disableWLAN/) { + if($setName !~ /archiveAlerts|restartAP|setLocateAP|unsetLocateAP|disconnectClient|update|clear|poeMode|blockClient|unblockClient|enableWLAN|disableWLAN|switchSiteLEDs/) { return "Unknown argument $setName, choose one of update:noArg " ."clear:all,readings,clientData " .((defined $hash->{alerts_unarchived}[0] && scalar @{$hash->{alerts_unarchived}}) ? "archiveAlerts:noArg " : "") .(($apNames && Unifi_CONNECTED($hash)) ? "restartAP:all,$apNames setLocateAP:all,$apNames unsetLocateAP:all,$apNames " : "") .(($clientNames && Unifi_CONNECTED($hash)) ? "disconnectClient:all,$clientNames " : "") ."poeMode enableWLAN:$SSIDs disableWLAN:$SSIDs " - ."blockClient:$clientNames unblockClient:$clientNames"; + ."blockClient:$clientNames unblockClient:$clientNames switchSiteLEDs:on,off"; } else { Log3 $name, 4, "$name: set $setName"; @@ -218,11 +229,18 @@ sub Unifi_Set($@) { Unifi_UnblockClient_Send($hash,keys(%{$hash->{clients}})); } } + elsif ($setName eq 'switchSiteLEDs') { + my $state="true"; + if ($setVal && $setVal eq 'off') { + $state="false"; + } + Unifi_SwitchSiteLEDs_Send($hash,$state); + } elsif ($setName eq 'disableWLAN') { my $wlan = Unifi_SSIDs($hash,$setVal,'makeID'); if (defined $hash->{wlans}->{$wlan}) { my $wlanconf = $hash->{wlans}->{$wlan}; - $wlanconf->{enabled}='false'; + $wlanconf->{enabled}=JSON::false; Unifi_WlanconfRest_Send($hash,$wlan,$wlanconf); } else { @@ -233,7 +251,7 @@ sub Unifi_Set($@) { my $wlan = Unifi_SSIDs($hash,$setVal,'makeID'); if (defined $hash->{wlans}->{$wlan}) { my $wlanconf = $hash->{wlans}->{$wlan}; - $wlanconf->{enabled}='true'; + $wlanconf->{enabled}=JSON::true; Unifi_WlanconfRest_Send($hash,$wlan,$wlanconf); } else { @@ -706,9 +724,9 @@ sub Unifi_GetWlans_Receive($) { for my $h (@{$data->{data}}) { $hash->{wlans}->{$h->{_id}} = $h; - #TODO: Passphrase ggf. verschlüsseln?! - #Ich musste diese Zeile rausnehmen, sonst ist das Json für enable/disableWLAN bei offenem WLAN (ohne Passphrase) falsch - #Aussternen geht nicht, sonst wird das PW unter Umständen darauf geändert. + #TODO: Passphrase ggf. verschl�sseln?! + #Ich musste diese Zeile rausnehmen, sonst ist das Json f�r enable/disableWLAN bei offenem WLAN (ohne Passphrase) falsch + #Aussternen geht nicht, sonst wird das PW unter Umst�nden darauf ge�ndert. #$hash->{wlans}->{$h->{_id}}->{x_passphrase} = '***'; # Don't show passphrase in list } } @@ -1148,6 +1166,45 @@ sub Unifi_UnblockClient_Receive($) { return undef; } + +############################################################################### +sub Unifi_SwitchSiteLEDs_Send($$) { + my ($hash,$state) = @_; + my ($name,$self) = ($hash->{NAME},Unifi_Whoami()); + Log3 $name, 5, "$name ($self) - executed with command: '".$state."'"; + + HttpUtils_NonblockingGet( { + %{$hash->{httpParams}}, + url => $hash->{unifi}->{url}."set/setting/mgmt", + callback => \&Unifi_SwitchSiteLEDs_Receive, + data => "{'led_enabled': ".$state."}", + } ); + return undef; +} +############################################################################### +sub Unifi_SwitchSiteLEDs_Receive($) { + my ($param, $err, $data) = @_; + my ($name,$self,$hash) = ($param->{hash}->{NAME},Unifi_Whoami(),$param->{hash}); + Log3 $name, 5, "$name ($self) - executed."; + + if ($err ne "") { + Unifi_ReceiveFailure($hash,{rc => 'Error while requesting', msg => $param->{url}." - $err"}); + } + elsif ($data ne "") { + if ($param->{code} == 200 || $param->{code} == 400 || $param->{code} == 401) { + eval { $data = decode_json($data); 1; } or do { $data = { meta => {rc => 'error.decode_json', msg => $@} }; }; + + if ($data->{meta}->{rc} eq "ok") { + Log3 $name, 5, "$name ($self) - state:'$data->{meta}->{rc}'"; + } + else { Unifi_ReceiveFailure($hash,$data->{meta}); } + } else { + Unifi_ReceiveFailure($hash,{rc => $param->{code}, msg => "Failed with HTTP Code $param->{code}."}); + } + } + + return undef; +} ############################################################################### sub Unifi_WlanconfRest_Send($$@) { my ($hash,$id,$data) = @_; @@ -1609,6 +1666,8 @@ Or you can use the other readings or set and get features to control your unifi- Disables WLAN with <ssid></li> <li><code>set <name> enableWLAN <ssid></code><br> Enables WLAN with <ssid></li> + <li><code>set <name> switchSiteLEDs <on|off></code><br> + Enables or disables the Status-LED settings of the site.</li> </ul>