Merge pull request 'devel' (#40) from devel into testing

Reviewed-on: #40
Reviewed-by: Marko Oldenburg <marko@noreply@cooltux.net>
This commit is contained in:
Sebastian Schwaz 2021-07-23 11:27:48 +02:00
commit 2af38efe42
3 changed files with 42 additions and 28 deletions

View File

@ -366,6 +366,7 @@ sub Notify {
@{$events}
)
)
&& $init_done
);
getDevices($hash)
@ -385,7 +386,7 @@ sub Notify {
&& (
grep /^state:.Connected$/,
@{$events} or grep /^lastRequestState:.request_error$/,
@{$events}
@{$events}
)
)
{
@ -483,6 +484,7 @@ sub Write {
{
url => $hash->{URL} . $uri,
timeout => 15,
incrementalTimeout => 1,
hash => $hash,
device_id => $deviceId,
data => $payload,
@ -519,8 +521,8 @@ sub ErrorHandling {
my $dname = $dhash->{NAME};
Log3 $name, 4, "GardenaSmartBridge ($name) - Request: $data";
my $decode_json = eval { decode_json($data) };
my $decode_json = eval { decode_json($data) } if ( length($data) > 0 );
if ($@) {
Log3 $name, 3, "GardenaSmartBridge ($name) - JSON error while request";
}
@ -981,7 +983,6 @@ sub getDevices {
my $hash = shift;
my $name = $hash->{NAME};
RemoveInternalTimer($hash);
if ( not IsDisabled($name) ) {
@ -992,12 +993,17 @@ sub getDevices {
for my $gardenaDev (@list){
push( @{ $hash->{helper}{deviceList} }, $gardenaDev );
}
Write( $hash, undef, undef, undef );
Log3 $name, 4,
"GardenaSmartBridge ($name) - fetch device list and device states";
if ( AttrVal( $name, 'gardenaAccountEmail', 'none' ) ne 'none'
&& (
defined( ReadPassword( $hash, $name ) )
))
{
Write( $hash, undef, undef, undef );
Log3 $name, 4,
"GardenaSmartBridge ($name) - fetch device list and device states";
} # fi gardenaAccountEmail
}
else {
readingsSingleUpdate( $hash, 'state', 'disabled', 1 );
Log3 $name, 3, "GardenaSmartBridge ($name) - device is disabled";
}
@ -1027,16 +1033,6 @@ sub getToken {
if ( defined( $hash->{helper}{locations_id} )
&& $hash->{helper}{locations_id} );
# Write(
# $hash,
# '"sessions": {"email": "'
# . AttrVal( $name, 'gardenaAccountEmail', 'none' )
# . '","password": "'
# . ReadPassword( $hash, $name ) . '"}',
# undef,
# undef
# );
Write(
$hash,
'"data": {"type":"token", "attributes":{"username": "'
@ -1047,8 +1043,9 @@ sub getToken {
undef
);
Log3 $name, 4, '"data": {"type":"token", "attributes":{"username": "' . AttrVal( $name, 'gardenaAccountEmail', 'none' ) . '","password": "'
. ReadPassword( $hash, $name ) . '", "client_id":"smartgarden-jwt-client"}}';
Log3 $name, 4, '"data": {"type":"token", "attributes":{"username": "'
.AttrVal( $name, 'gardenaAccountEmail', 'none' ) . '","password": "'
.ReadPassword( $hash, $name ) . '", "client_id":"smartgarden-jwt-client"}}';
Log3 $name, 3,
"GardenaSmartBridge ($name) - send credentials to fetch Token and locationId";
@ -1214,13 +1211,14 @@ sub createHttpValueStrings {
$payload = '{}' if ( !defined($payload) );
if ( $payload eq '{}' ) {
$method = 'GET';
$method = 'GET' if (defined( $hash->{helper}{session_id} ) );
$payload = '';
$uri .= '/locations?locatioId=null&user_id=' . $hash->{helper}{user_id}
if ( exists( $hash->{helper}{user_id} )
&& !defined( $hash->{helper}{locations_id} ) );
readingsSingleUpdate( $hash, 'state', 'fetch locationId', 1 )
if ( !defined( $hash->{helper}{locations_id} ) );
if ( exists( $hash->{helper}{user_id} )
&& !defined( $hash->{helper}{locations_id} ) );
$uri .= '/devices'
if (!defined($abilities)
&& defined( $hash->{helper}{locations_id} ) );
@ -1228,6 +1226,7 @@ sub createHttpValueStrings {
$uri = '/devices/'.InternalVal($hash->{helper}{debug_device}, 'DEVICEID', 0 ) if ( exists ($hash->{helper}{debug_device}));
$uri = '/auth/token' if ( !defined( $hash->{helper}{session_id} ) );
if ( defined( $hash->{helper}{locations_id} ) ) {
if ( defined($abilities) && $abilities =~ /.*_settings/ ) {
@ -1488,7 +1487,7 @@ sub DeletePassword {
],
"release_status": "stable",
"license": "GPL_2",
"version": "v2.4.2",
"version": "v2.4.4",
"author": [
"Marko Oldenburg <leongaultier@gmail.com>"
],

View File

@ -407,12 +407,12 @@ sub Set {
}
elsif ( lc $cmd eq 'on' || lc $cmd eq 'off' || lc $cmd eq 'on-for-timer' ) {
my $val = (
defined($aArg) && ref($aArg) eq 'ARRAY'
scalar(!@$aArg == 0) && ref($aArg) eq 'ARRAY'
? $aArg->[0] * 60
: lc $cmd
);
$payload = '"properties":{"value":"' . $val . '"}';
$payload = '"properties":{"name":"power_timer", "value":"' . $val . '"}';
}
### Watering ic24
elsif ( $cmd =~ m{\AmanualDurationValve\d\z}xms ) {
@ -502,7 +502,7 @@ sub Set {
if ( AttrVal( $name, 'model', 'unknown' ) eq 'sensor'
&& ReadingsVal($name, 'device_info-category', 'unknown') eq 'sensor' );
$list .= 'on:noArg off:noArg on-for-timer:slider,0,1,60'
$list .= 'on:noArg off:noArg on-for-timer:slider,0,1,720'
if ( AttrVal( $name, 'model', 'unknown' ) eq 'power' );
# all devices has abilitie to fall a sleep
$list .= ' winter_mode:awake,hibernate';
@ -653,6 +653,21 @@ sub WriteReadings {
|| $decode_json->{abilities}[$abilities]{name} . '-'
. $propertie->{name} eq 'light-light' )
);
readingsBulkUpdateIfChanged(
$hash,
$decode_json->{abilities}[$abilities]{name} . '-'
. $propertie->{name}
. '_timestamp',
Time::Piece->strptime(RigReadingsValue( $hash, $propertie->{timestamp} ), "%Y-%m-%d %H:%M:%S")->strftime('%s')
)
if (
defined( $propertie->{value} )
&& ( $decode_json->{abilities}[$abilities]{name} . '-'
. $propertie->{name} eq 'mower_timer-mower_timer'
)
);
readingsBulkUpdateIfChanged(
$hash,

View File

@ -1,2 +1,2 @@
UPD 2021-06-05_18:47:30 46871 FHEM/73_GardenaSmartBridge.pm
UPD 2021-06-05_09:32:03 55505 FHEM/74_GardenaSmartDevice.pm
UPD 2021-06-28_15:56:58 47009 FHEM/73_GardenaSmartBridge.pm
UPD 2021-07-16_20:26:01 56217 FHEM/74_GardenaSmartDevice.pm