fix little model bugs #12
@@ -64,8 +64,7 @@ sub Initialize {
 | 
			
		||||
    $hash->{NotifyFn} = \&FHEM::Devices::Nuki::Bridge::Notify;
 | 
			
		||||
    $hash->{AttrFn}   = \&FHEM::Devices::Nuki::Bridge::Attr;
 | 
			
		||||
    $hash->{AttrList} =
 | 
			
		||||
        'disable:1 '
 | 
			
		||||
      . 'port ' 
 | 
			
		||||
        'disable:1 ' . 'port '
 | 
			
		||||
      . 'webhookFWinstance:'
 | 
			
		||||
      . $webhookFWinstance . ' '
 | 
			
		||||
      . 'webhookHttpHostname '
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
UPD 2021-11-27_18:02:39 9224 FHEM/73_NUKIBridge.pm
 | 
			
		||||
UPD 2021-11-27_18:01:59 7548 FHEM/74_NUKIDevice.pm
 | 
			
		||||
UPD 2021-11-27_18:08:11 40444 lib/FHEM/Devices/Nuki/Bridge.pm
 | 
			
		||||
UPD 2021-11-27_15:28:59 15728 lib/FHEM/Devices/Nuki/Device.pm
 | 
			
		||||
UPD 2021-11-27_18:39:55 9217 FHEM/73_NUKIBridge.pm
 | 
			
		||||
UPD 2021-11-27_18:40:10 7548 FHEM/74_NUKIDevice.pm
 | 
			
		||||
UPD 2021-11-27_18:39:14 40112 lib/FHEM/Devices/Nuki/Bridge.pm
 | 
			
		||||
UPD 2021-11-27_18:44:10 16135 lib/FHEM/Devices/Nuki/Device.pm
 | 
			
		||||
 
 | 
			
		||||
@@ -145,6 +145,7 @@ sub Define {
 | 
			
		||||
    use version 0.60; our $VERSION = FHEM::Meta::Get( $hash, 'version' );
 | 
			
		||||
 | 
			
		||||
    my ( $name, undef, $host, $token ) = split( m{\s+}xms, $def );
 | 
			
		||||
 | 
			
		||||
    #     return ('too few parameters: define <name> NUKIBridge <HOST> <TOKEN>')
 | 
			
		||||
    #       if ( !defined($host)
 | 
			
		||||
    #         || !defined($token) );
 | 
			
		||||
@@ -236,7 +237,8 @@ sub Attr {
 | 
			
		||||
        }
 | 
			
		||||
        elsif ( $cmd eq 'del' ) {
 | 
			
		||||
            $hash->{PORT} = 8080;
 | 
			
		||||
            ::Log3( $name, 3, "NUKIBridge ($name) - set bridge port to default" );
 | 
			
		||||
            ::Log3( $name, 3,
 | 
			
		||||
                "NUKIBridge ($name) - set bridge port to default" );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -395,9 +397,7 @@ sub removeExtension {
 | 
			
		||||
 | 
			
		||||
    ::Log3( $name, 2,
 | 
			
		||||
        "NUKIBridge ($name) - Unregistering NUKIBridge for webhook URL $url..."
 | 
			
		||||
    )
 | 
			
		||||
      if ( defined($name) );
 | 
			
		||||
    
 | 
			
		||||
    ) if ( defined($name) );
 | 
			
		||||
 | 
			
		||||
    delete $::data{FWEXT}{$url};
 | 
			
		||||
 | 
			
		||||
@@ -656,6 +656,7 @@ sub Distribution {
 | 
			
		||||
    my $json  = shift;
 | 
			
		||||
 | 
			
		||||
    my $hash = $param->{hash};
 | 
			
		||||
 | 
			
		||||
    #     my $doTrigger = $param->{doTrigger};
 | 
			
		||||
    my $name = $hash->{NAME};
 | 
			
		||||
    my $host = $hash->{HOST};
 | 
			
		||||
@@ -1110,8 +1111,8 @@ sub getCallbackList {
 | 
			
		||||
 | 
			
		||||
            if ( scalar( @{ $decode_json->{callbacks} } ) > 0 ) {
 | 
			
		||||
                for my $cb ( @{ $decode_json->{callbacks} } ) {
 | 
			
		||||
                    $aHref =
 | 
			
		||||
                        "<a href=\""
 | 
			
		||||
                    $aHref = "<a href=\""
 | 
			
		||||
 | 
			
		||||
                      #                       . $::FW_httpheader->{host}
 | 
			
		||||
                      . "/fhem?cmd=set+"
 | 
			
		||||
                      . $name
 | 
			
		||||
@@ -1276,17 +1277,20 @@ sub BridgeDiscover {
 | 
			
		||||
    my $endpoint = shift;
 | 
			
		||||
    my $bridge   = shift;
 | 
			
		||||
    my $name     = $hash->{NAME};
 | 
			
		||||
    my $url         = ( $endpoint eq 'discover' && !defined($bridge)
 | 
			
		||||
    my $url      = (
 | 
			
		||||
        $endpoint eq 'discover' && !defined($bridge)
 | 
			
		||||
        ? 'https://api.nuki.io/discover/bridges'
 | 
			
		||||
            : 'http://' . $bridge->{'ip'} . ':' . $bridge->{'port'} . '/auth' );
 | 
			
		||||
    my $timeout     = ( $endpoint eq 'discover' && !defined($bridge)
 | 
			
		||||
        : 'http://' . $bridge->{'ip'} . ':' . $bridge->{'port'} . '/auth'
 | 
			
		||||
    );
 | 
			
		||||
    my $timeout = (
 | 
			
		||||
        $endpoint eq 'discover' && !defined($bridge)
 | 
			
		||||
        ? 5
 | 
			
		||||
            : 35 );
 | 
			
		||||
        : 35
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if ( $endpoint eq 'discover' ) {
 | 
			
		||||
        ::Log3( $name, 3,
 | 
			
		||||
    "NUKIBridge ($name) - Bridge device defined. run discover mode"
 | 
			
		||||
        );
 | 
			
		||||
            "NUKIBridge ($name) - Bridge device defined. run discover mode" );
 | 
			
		||||
 | 
			
		||||
        ::readingsSingleUpdate( $hash, 'state', 'run discovery', 1 );
 | 
			
		||||
    }
 | 
			
		||||
@@ -1297,7 +1301,6 @@ sub BridgeDiscover {
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    ::HttpUtils_NonblockingGet(
 | 
			
		||||
        {
 | 
			
		||||
            url      => $url,
 | 
			
		||||
@@ -1316,8 +1319,7 @@ sub BridgeDiscover {
 | 
			
		||||
        "NUKIBridge ($name) - Send Discover request to Nuki Cloud" )
 | 
			
		||||
      if ( $endpoint eq 'discover' );
 | 
			
		||||
 | 
			
		||||
    ::Log3( $name, 3,
 | 
			
		||||
        "NUKIBridge ($name) - get API Token from the Bridge" )
 | 
			
		||||
    ::Log3( $name, 3, "NUKIBridge ($name) - get API Token from the Bridge" )
 | 
			
		||||
      if ( $endpoint eq 'getApiToken' );
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
@@ -1331,18 +1333,17 @@ sub BridgeDiscoverRequest {
 | 
			
		||||
    my $hash = $param->{hash};
 | 
			
		||||
    my $name = $hash->{NAME};
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    if ( defined($err)
 | 
			
		||||
        && $err ne '' )
 | 
			
		||||
    {
 | 
			
		||||
        return ::Log3( $name, 3,
 | 
			
		||||
                    "NUKIBridge ($name) - Error: $err");
 | 
			
		||||
        return ::Log3( $name, 3, "NUKIBridge ($name) - Error: $err" );
 | 
			
		||||
    }
 | 
			
		||||
    elsif ( exists( $param->{code} )
 | 
			
		||||
        && $param->{code} != 200 )
 | 
			
		||||
    {
 | 
			
		||||
        return ::Log3( $name, 3,
 | 
			
		||||
                    "NUKIBridge ($name) - HTTP error Code present. Code: $param->{code}");
 | 
			
		||||
            "NUKIBridge ($name) - HTTP error Code present. Code: $param->{code}"
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    my $decode_json;
 | 
			
		||||
@@ -1354,14 +1355,16 @@ sub BridgeDiscoverRequest {
 | 
			
		||||
 | 
			
		||||
    if ( $param->{endpoint} eq 'discover' ) {
 | 
			
		||||
 | 
			
		||||
        return ::readingsSingleUpdate($hash, 'state', 'no bridges discovered', 1)
 | 
			
		||||
        return ::readingsSingleUpdate( $hash, 'state', 'no bridges discovered',
 | 
			
		||||
            1 )
 | 
			
		||||
          if ( scalar( @{ $decode_json->{bridges} } ) == 0
 | 
			
		||||
            && $decode_json->{errorCode} == 0 );
 | 
			
		||||
 | 
			
		||||
        return BridgeDiscover_getAPIToken( $hash, $decode_json );
 | 
			
		||||
    }
 | 
			
		||||
    elsif ( $param->{endpoint} eq 'getApiToken' ) {
 | 
			
		||||
        ::readingsSingleUpdate($hash, 'state', 'modefined bridge device in progress', 1);
 | 
			
		||||
        ::readingsSingleUpdate( $hash, 'state',
 | 
			
		||||
            'modefined bridge device in progress', 1 );
 | 
			
		||||
 | 
			
		||||
        $decode_json->{host} = $param->{host};
 | 
			
		||||
        $decode_json->{port} = $param->{port};
 | 
			
		||||
@@ -1369,7 +1372,8 @@ sub BridgeDiscoverRequest {
 | 
			
		||||
        return ModefinedBridgeDevices( $hash, $decode_json )
 | 
			
		||||
          if ( $decode_json->{success} == 1 );
 | 
			
		||||
 | 
			
		||||
        return ::readingsSingleUpdate($hash, 'state', 'get api token failed', 1);
 | 
			
		||||
        return ::readingsSingleUpdate( $hash, 'state', 'get api token failed',
 | 
			
		||||
            1 );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return;
 | 
			
		||||
@@ -1380,7 +1384,8 @@ sub BridgeDiscover_getAPIToken {
 | 
			
		||||
    my $decode_json = shift;
 | 
			
		||||
    my $name        = $hash->{NAME};
 | 
			
		||||
 | 
			
		||||
    my $pullApiKeyMessage   = 'When issuing this API-call the bridge turns on its LED for 30 seconds.
 | 
			
		||||
    my $pullApiKeyMessage =
 | 
			
		||||
      'When issuing this API-call the bridge turns on its LED for 30 seconds.
 | 
			
		||||
The button of the bridge has to be pressed within this timeframe. Otherwise the bridge returns a negative success and no token.';
 | 
			
		||||
 | 
			
		||||
    ::readingsSingleUpdate( $hash, 'state', $pullApiKeyMessage, 1 );
 | 
			
		||||
@@ -1398,7 +1403,6 @@ sub ModefinedBridgeDevices {
 | 
			
		||||
    my $decode_json = shift;
 | 
			
		||||
    my $name        = $hash->{NAME};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    ::CommandAttr( undef, $name . ' port ' . $decode_json->{port} )
 | 
			
		||||
      if ( $decode_json->{port} != 8080 );
 | 
			
		||||
    ::CommandDefMod( undef,
 | 
			
		||||
@@ -1410,5 +1414,4 @@ sub ModefinedBridgeDevices {
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
1;
 | 
			
		||||
 
 | 
			
		||||
@@ -464,7 +464,6 @@ sub Parse {
 | 
			
		||||
      #             ::Log3( $name, 2, "NUKIDevice ($name) - redefined Defmod" );
 | 
			
		||||
      #         }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        ::Log3( $name, 4,
 | 
			
		||||
@@ -557,11 +556,18 @@ sub WriteReadings {
 | 
			
		||||
            && $t ne 'deviceType'
 | 
			
		||||
            && $t ne 'paired'
 | 
			
		||||
            && $t ne 'batteryCritical'
 | 
			
		||||
            && $t ne 'batteryChargeState'
 | 
			
		||||
            && $t ne 'batteryCharging'
 | 
			
		||||
            && $t ne 'timestamp' );
 | 
			
		||||
 | 
			
		||||
        ::readingsBulkUpdate( $hash, $t,
 | 
			
		||||
            ( $v =~ m/^[0-9]$/ ? $lockStates{$v}{ $hash->{DEVICETYPEID} } : $v ) )
 | 
			
		||||
          if ( $t eq 'state' );
 | 
			
		||||
        ::readingsBulkUpdate(
 | 
			
		||||
            $hash, $t,
 | 
			
		||||
            (
 | 
			
		||||
                  $v =~ m/^[0-9]$/
 | 
			
		||||
                ? $lockStates{$v}{ $hash->{DEVICETYPEID} }
 | 
			
		||||
                : $v
 | 
			
		||||
            )
 | 
			
		||||
        ) if ( $t eq 'state' );
 | 
			
		||||
 | 
			
		||||
        ::readingsBulkUpdate( $hash, $t, $modes{$v}{ $hash->{DEVICETYPEID} } )
 | 
			
		||||
          if ( $t eq 'mode' );
 | 
			
		||||
@@ -572,9 +578,15 @@ sub WriteReadings {
 | 
			
		||||
        ::readingsBulkUpdate( $hash, $t, ( $v == 1 ? 'true' : 'false' ) )
 | 
			
		||||
          if ( $t eq 'paired' );
 | 
			
		||||
          
 | 
			
		||||
        ::readingsBulkUpdate( $hash, $t, ( $v == 1 ? 'true' : 'false' ) )
 | 
			
		||||
          if ( $t eq 'batteryCharging' );
 | 
			
		||||
 | 
			
		||||
        ::readingsBulkUpdate( $hash, 'batteryState',
 | 
			
		||||
            ( ( $v eq 'true' or $v == 1 ) ? 'low' : 'ok' ) )
 | 
			
		||||
            ( $v == 1 ? 'low' : 'ok' ) )
 | 
			
		||||
          if ( $t eq 'batteryCritical' );
 | 
			
		||||
 | 
			
		||||
        ::readingsBulkUpdate( $hash, 'batteryPercent', $v )
 | 
			
		||||
          if ( $t eq 'batteryChargeState' );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ::readingsEndUpdate( $hash, 1 );
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user