mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-25 03:44:52 +00:00
LandroidUtils.pm: seems to work now (Forum #111959)
git-svn-id: https://svn.fhem.de/fhem/trunk@27410 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
e47612226b
commit
ed454e9570
@ -119,9 +119,15 @@ MQTT2_CLIENT_connect($;$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $cfn = AttrVal($hash->{NAME}, "connectFn", undef); # for AWS-IOT / auth
|
my $cfn = AttrVal($hash->{NAME}, "connectFn", undef); # for AWS-IOT / auth
|
||||||
if($cfn && !$calledFromConnectFn) {
|
if($cfn) {
|
||||||
$cfn = EvalSpecials($cfn, ("%NAME" => $hash->{NAME}));
|
if($calledFromConnectFn) {
|
||||||
return AnalyzeCommand(undef, $cfn);
|
delete($hash->{inConnectFn});
|
||||||
|
} else {
|
||||||
|
return if($hash->{inConnectFn}); # called by readyFn
|
||||||
|
$hash->{inConnectFn} = 1;
|
||||||
|
$cfn = EvalSpecials($cfn, ("%NAME" => $hash->{NAME}));
|
||||||
|
return AnalyzeCommand(undef, $cfn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
my $disco = (DevIo_getState($hash) eq "disconnected");
|
my $disco = (DevIo_getState($hash) eq "disconnected");
|
||||||
@ -458,7 +464,8 @@ MQTT2_CLIENT_Set($@)
|
|||||||
MQTT2_CLIENT_Disco($hash) if($init_done);
|
MQTT2_CLIENT_Disco($hash) if($init_done);
|
||||||
|
|
||||||
} elsif($a[0] eq "connect") {
|
} elsif($a[0] eq "connect") {
|
||||||
$hash->{nrFailedConnects} = 0;
|
delete($hash->{inConnectFn});
|
||||||
|
delete($hash->{nrFailedConnects});
|
||||||
MQTT2_CLIENT_connect($hash) if(!$hash->{FD});
|
MQTT2_CLIENT_connect($hash) if(!$hash->{FD});
|
||||||
|
|
||||||
} elsif($a[0] eq "disconnect") {
|
} elsif($a[0] eq "disconnect") {
|
||||||
|
@ -9,8 +9,9 @@ use warnings;
|
|||||||
# Usage:
|
# Usage:
|
||||||
# define m2c MQTT2_CLIENT xx
|
# define m2c MQTT2_CLIENT xx
|
||||||
# attr m2c username a@bc.de
|
# attr m2c username a@bc.de
|
||||||
# attr m2c connectFn {use LandroidUtils;;Landroid_connect($NAME,"worx")}
|
# attr m2c connectFn {use LandroidUtils;;Landroid_connect($NAME,"worx",1)}
|
||||||
# set m2c password mySecret
|
# set m2c password mySecret
|
||||||
|
# If the last parameter to Landroid_connect is 1, devices will be autocreated
|
||||||
|
|
||||||
my %types = (
|
my %types = (
|
||||||
worx => {
|
worx => {
|
||||||
@ -41,9 +42,9 @@ my %types = (
|
|||||||
|
|
||||||
# Step 1: check parameters, request & parse the access_token
|
# Step 1: check parameters, request & parse the access_token
|
||||||
sub
|
sub
|
||||||
Landroid_connect($$)
|
Landroid_connect($$;$)
|
||||||
{
|
{
|
||||||
my ($m2c_name, $type) = @_;
|
my ($m2c_name, $type, $autocreate) = @_;
|
||||||
my $errPrefix = "ERROR: Landroid_connect $m2c_name -";
|
my $errPrefix = "ERROR: Landroid_connect $m2c_name -";
|
||||||
my $m2c = $defs{$m2c_name};
|
my $m2c = $defs{$m2c_name};
|
||||||
my $usr = AttrVal($m2c_name, "username", "");
|
my $usr = AttrVal($m2c_name, "username", "");
|
||||||
@ -55,6 +56,7 @@ Landroid_connect($$)
|
|||||||
return Log 1, "$errPrefix unknown type $type" if(!$types{$type});
|
return Log 1, "$errPrefix unknown type $type" if(!$types{$type});
|
||||||
|
|
||||||
$m2c->{landroidType} = $type;
|
$m2c->{landroidType} = $type;
|
||||||
|
$m2c->{autocreate} = 1 if($autocreate);
|
||||||
my $t = $types{$type};
|
my $t = $types{$type};
|
||||||
RemoveInternalTimer("landroidTmr_$m2c_name");
|
RemoveInternalTimer("landroidTmr_$m2c_name");
|
||||||
|
|
||||||
@ -87,7 +89,10 @@ Landroid_connect($$)
|
|||||||
setReadingsVal($m2c, ".refresh_token",
|
setReadingsVal($m2c, ".refresh_token",
|
||||||
$m2c->{".auth"}{refresh_token}, TimeNow());
|
$m2c->{".auth"}{refresh_token}, TimeNow());
|
||||||
InternalTimer(gettimeofday()+$ra-60,
|
InternalTimer(gettimeofday()+$ra-60,
|
||||||
sub(){ Landroid_connect($m2c_name, $type)}, "landroidTmr_$m2c_name", 0);
|
sub(){
|
||||||
|
Log3 $m2c, 4, "$m2c_name: requesting new token";
|
||||||
|
Landroid_connect($m2c_name, $type)
|
||||||
|
}, "landroidTmr_$m2c_name", 0) if($ra > 60);
|
||||||
Landroid_connect2($m2c_name);
|
Landroid_connect2($m2c_name);
|
||||||
},
|
},
|
||||||
header => {
|
header => {
|
||||||
@ -98,7 +103,7 @@ Landroid_connect($$)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
# Step 2: get userId & mqttEndpoint
|
# Step 2: get userId
|
||||||
sub
|
sub
|
||||||
Landroid_connect2($)
|
Landroid_connect2($)
|
||||||
{
|
{
|
||||||
@ -121,11 +126,10 @@ Landroid_connect2($)
|
|||||||
return Log3 $m2c, 1, "$errPrefix no data" if(!$d);
|
return Log3 $m2c, 1, "$errPrefix no data" if(!$d);
|
||||||
Log3 $m2c, 5, $d;
|
Log3 $m2c, 5, $d;
|
||||||
my $me = json2nameValue($d);
|
my $me = json2nameValue($d);
|
||||||
return Log3 $m2c, 1, "$errPrefix no userId/mqttEndpoint"
|
return Log3 $m2c, 1, "$errPrefix no userId"
|
||||||
if(!$me->{id} || !$me->{mqtt_endpoint});
|
if(!$me->{id});
|
||||||
Log3 $m2c, 4, "$m2c_name: Got userId/mqttEndpoint";
|
Log3 $m2c, 4, "$m2c_name: Got userId: $me->{id}";
|
||||||
$m2c->{userId} = $me->{id};
|
$m2c->{userId} = $me->{id};
|
||||||
$m2c->{mqttEndpoint} = $me->{mqtt_endpoint};
|
|
||||||
Landroid_connect3($m2c_name);
|
Landroid_connect3($m2c_name);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -168,7 +172,7 @@ Landroid_connect3($)
|
|||||||
my $sn = $dl->{$i1."_serial_number"};
|
my $sn = $dl->{$i1."_serial_number"};
|
||||||
last if(!$sn);
|
last if(!$sn);
|
||||||
my $m2d = $sn{$sn};
|
my $m2d = $sn{$sn};
|
||||||
if(!$m2d) {
|
if(!$m2d && $m2c->{autocreate}) {
|
||||||
my $m2d_name = makeDeviceName($m2c_name."_".$dl->{$i1."_name"});
|
my $m2d_name = makeDeviceName($m2c_name."_".$dl->{$i1."_name"});
|
||||||
DoTrigger("global", "UNDEFINED $m2d_name MQTT2_DEVICE $sn");
|
DoTrigger("global", "UNDEFINED $m2d_name MQTT2_DEVICE $sn");
|
||||||
$m2d = $defs{$m2d_name};
|
$m2d = $defs{$m2d_name};
|
||||||
@ -183,13 +187,14 @@ Landroid_connect3($)
|
|||||||
my $val = $dl->{$key};
|
my $val = $dl->{$key};
|
||||||
next if(!defined($val));
|
next if(!defined($val));
|
||||||
$val =~ s,\\/,/,g; # Bug in the backend?
|
$val =~ s,\\/,/,g; # Bug in the backend?
|
||||||
setReadingsVal($m2d, $readingName, $val, $now);
|
setReadingsVal($m2d, $readingName, $val, $now) if($m2c->{autocreate});
|
||||||
push @subs, $val if($readingName eq "mqtt_topics_command_out");
|
push @cmds, $val if($readingName eq "mqtt_topics_command_in");
|
||||||
if($readingName eq "mqtt_topics_command_in") {
|
if($readingName eq "mqtt_topics_command_out") {
|
||||||
push @cmds, $val;
|
push @subs, $val;
|
||||||
$attr{$m2d->{NAME}}{readingList}="$val:.* {json2nameValue(\$EVENT)}"
|
$attr{$m2d->{NAME}}{readingList}="$val:.* {json2nameValue(\$EVENT)}"
|
||||||
if(!$attr{$m2d->{NAME}}{readingList});
|
if(!$attr{$m2d->{NAME}}{readingList} && $m2c->{autocreate});
|
||||||
}
|
}
|
||||||
|
$m2c->{mqttEndpoint} = $val if($readingName eq "mqtt_endpoint");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my $a = $attr{$m2c_name};
|
my $a = $attr{$m2c_name};
|
||||||
@ -229,7 +234,8 @@ Landroid_connect4($)
|
|||||||
my $a = $attr{$m2c_name};
|
my $a = $attr{$m2c_name};
|
||||||
$a->{keepaliveTimeout} = 600;
|
$a->{keepaliveTimeout} = 600;
|
||||||
$a->{maxFailedConnects} = 1;
|
$a->{maxFailedConnects} = 1;
|
||||||
MQTT2_CLIENT_connect($defs{$m2c_name}, 1);
|
MQTT2_CLIENT_Disco($m2c, 1); # Make sure reconnect will work
|
||||||
|
MQTT2_CLIENT_connect($m2c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -842,11 +842,13 @@ while (1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach my $p (keys %readyfnlist) {
|
foreach my $p (keys %readyfnlist) {
|
||||||
next if(!$readyfnlist{$p}); # due to rereadcfg / delete
|
my $h = $readyfnlist{$p};
|
||||||
|
next if(!$h); # due to rereadcfg / delete
|
||||||
|
next if($h->{NEXT_OPEN} && gettimeofday() < $h->{NEXT_OPEN});
|
||||||
|
|
||||||
if(CallFn($readyfnlist{$p}{NAME}, "ReadyFn", $readyfnlist{$p})) {
|
if(CallFn($h->{NAME}, "ReadyFn", $h)) {
|
||||||
if($readyfnlist{$p}) { # delete itself inside ReadyFn
|
if($readyfnlist{$p}) { # delete itself inside ReadyFn
|
||||||
CallFn($readyfnlist{$p}{NAME}, "ReadFn", $readyfnlist{$p});
|
CallFn($h->{NAME}, "ReadFn", $h);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user