code cleaning and new code style

change login method
This commit is contained in:
Marko Oldenburg 2021-02-27 04:44:16 +01:00
parent d6254e937b
commit f734d0e071
3 changed files with 156 additions and 90 deletions

View File

@ -2,7 +2,7 @@
# #
# Developed with Kate # Developed with Kate
# #
# (c) 2017-2019 Copyright: Marko Oldenburg (leongaultier at gmail dot com) # (c) 2017-2021 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# This script is free software; you can redistribute it and/or modify # This script is free software; you can redistribute it and/or modify
@ -180,7 +180,6 @@ my %paths = (
'powerwalls' => 'powerwalls', 'powerwalls' => 'powerwalls',
'registration' => 'customer/registration', 'registration' => 'customer/registration',
'status' => 'status', 'status' => 'status',
'login' => 'login/Basic',
'gridstatus' => 'system_status/grid_status', 'gridstatus' => 'system_status/grid_status',
); );
@ -189,9 +188,9 @@ my %cmdPaths = (
'powerwallsrun' => 'sitemaster/run', 'powerwallsrun' => 'sitemaster/run',
); );
sub Initialize($) { sub Initialize {
my ($hash) = @_; my $hash = shift;
# Consumer # Consumer
$hash->{GetFn} = 'FHEM::TeslaPowerwall2AC::Get'; $hash->{GetFn} = 'FHEM::TeslaPowerwall2AC::Get';
@ -207,8 +206,10 @@ sub Initialize($) {
return FHEM::Meta::InitMod( __FILE__, $hash ); return FHEM::Meta::InitMod( __FILE__, $hash );
} }
sub Define($$) { sub Define {
my ( $hash, $def ) = @_; my $hash = shift;
my $def = shift;
my @a = split( '[ \t][ \t]*', $def ); my @a = split( '[ \t][ \t]*', $def );
return $@ unless ( FHEM::Meta::SetInternals($hash) ); return $@ unless ( FHEM::Meta::SetInternals($hash) );
@ -234,8 +235,10 @@ sub Define($$) {
return undef; return undef;
} }
sub Undef($$) { sub Undef {
my ( $hash, $arg ) = @_; my $hash = shift;
my $arg = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
@ -244,7 +247,7 @@ sub Undef($$) {
return undef; return undef;
} }
sub Attr(@) { sub Attr {
my ( $cmd, $name, $attrName, $attrVal ) = @_; my ( $cmd, $name, $attrName, $attrVal ) = @_;
my $hash = $defs{$name}; my $hash = $defs{$name};
@ -304,8 +307,10 @@ sub Attr(@) {
return undef; return undef;
} }
sub Notify($$) { sub Notify {
my ( $hash, $dev ) = @_; my $hash = shift;
my $dev = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
return if ( IsDisabled($name) ); return if ( IsDisabled($name) );
@ -324,8 +329,10 @@ sub Notify($$) {
return; return;
} }
sub Get($@) { sub Get {
my ( $hash, $name, $cmd ) = @_; my $hash = shift;
my $name = shift;
my $cmd = shift;
my $arg; my $arg;
if ( $cmd eq 'statusSOE' ) { if ( $cmd eq 'statusSOE' ) {
@ -381,7 +388,7 @@ sub Get($@) {
return undef; return undef;
} }
sub Set($@) { sub Set {
my ( $hash, $name, $cmd, @args ) = @_; my ( $hash, $name, $cmd, @args ) = @_;
my $arg; my $arg;
@ -403,7 +410,7 @@ sub Set($@) {
return undef; return undef;
} }
sub Timer_GetData($) { sub Timer_GetData {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -413,12 +420,16 @@ sub Timer_GetData($) {
and scalar( @{ $hash->{actionQueue} } ) == 0 ) and scalar( @{ $hash->{actionQueue} } ) == 0 )
{ {
if ( not IsDisabled($name) ) { if ( not IsDisabled($name) ) {
if ( !defined( $hash->{TOKEN}) ) {
unshift( @{ $hash->{actionQueue} }, 'login' );
}
else {
while ( my $obj = each %paths ) { while ( my $obj = each %paths ) {
unshift( @{ $hash->{actionQueue} }, $obj ); unshift( @{ $hash->{actionQueue} }, $obj );
} }
}
Write($hash); Write($hash);
} }
else { else {
readingsSingleUpdate( $hash, 'state', 'disabled', 1 ); readingsSingleUpdate( $hash, 'state', 'disabled', 1 );
@ -431,8 +442,8 @@ sub Timer_GetData($) {
"TeslaPowerwall2AC ($name) - Call InternalTimer Timer_GetData"; "TeslaPowerwall2AC ($name) - Call InternalTimer Timer_GetData";
} }
sub Write($) { sub Write {
my ($hash) = @_; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my ( $uri, $method, $header, $data, $path ) = my ( $uri, $method, $header, $data, $path ) =
@ -464,8 +475,11 @@ sub Write($) {
Log3 $name, 4, "TeslaPowerwall2AC ($name) - Send with URI: https://$uri"; Log3 $name, 4, "TeslaPowerwall2AC ($name) - Send with URI: https://$uri";
} }
sub ErrorHandling($$$) { sub ErrorHandling {
my ( $param, $err, $data ) = @_; my $param = shift;
my $err = shift;
my $data = shift;
my $hash = $param->{hash}; my $hash = $param->{hash};
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -538,8 +552,11 @@ sub ErrorHandling($$$) {
ResponseProcessing( $hash, $param->{setCmd}, $data ); ResponseProcessing( $hash, $param->{setCmd}, $data );
} }
sub ResponseProcessing($$$) { sub ResponseProcessing {
my ( $hash, $path, $json ) = @_; my $hash = shift;
my $path = shift;
my $json = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $decode_json; my $decode_json;
my $readings; my $readings;
@ -570,7 +587,8 @@ sub ResponseProcessing($$$) {
$readings = ReadingsProcessing_Powerwalls( $hash, $decode_json ); $readings = ReadingsProcessing_Powerwalls( $hash, $decode_json );
} }
elsif ( $path eq 'login' ) { elsif ( $path eq 'login' ) {
return $hash->{TOKEN} = $decode_json->{token}; $hash->{TOKEN} = $decode_json->{token};
return Timer_GetData($hash);
} }
elsif ( $path eq 'meterssite' ) { elsif ( $path eq 'meterssite' ) {
$readings = ReadingsProcessing_Meters_Site( $hash, $decode_json ); $readings = ReadingsProcessing_Meters_Site( $hash, $decode_json );
@ -585,8 +603,11 @@ sub ResponseProcessing($$$) {
WriteReadings( $hash, $path, $readings ); WriteReadings( $hash, $path, $readings );
} }
sub WriteReadings($$$) { sub WriteReadings {
my ( $hash, $path, $readings ) = @_; my $hash = shift;
my $path = shift;
my $readings = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
Log3 $name, 4, "TeslaPowerwall2AC ($name) - Write Readings"; Log3 $name, 4, "TeslaPowerwall2AC ($name) - Write Readings";
@ -610,6 +631,7 @@ sub WriteReadings($$$) {
) * ReadingsVal( $name, 'statussoe-percentage', 0 ) ) * ReadingsVal( $name, 'statussoe-percentage', 0 )
) )
); );
readingsBulkUpdateIfChanged( $hash, 'actionQueue', readingsBulkUpdateIfChanged( $hash, 'actionQueue',
scalar( @{ $hash->{actionQueue} } ) . ' entries in the Queue' ); scalar( @{ $hash->{actionQueue} } ) . ' entries in the Queue' );
readingsBulkUpdateIfChanged( readingsBulkUpdateIfChanged(
@ -623,11 +645,14 @@ sub WriteReadings($$$) {
. ' paths in actionQueue' . ' paths in actionQueue'
) )
); );
readingsEndUpdate( $hash, 1 ); readingsEndUpdate( $hash, 1 );
} }
sub ReadingsProcessing_Aggregates($$) { sub ReadingsProcessing_Aggregates {
my ( $hash, $decode_json ) = @_; my $hash = shift;
my $decode_json = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my %readings; my %readings;
@ -645,8 +670,10 @@ sub ReadingsProcessing_Aggregates($$) {
return \%readings; return \%readings;
} }
sub ReadingsProcessing_Powerwalls($$) { sub ReadingsProcessing_Powerwalls {
my ( $hash, $decode_json ) = @_; my $hash = shift;
my $decode_json = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my %readings; my %readings;
@ -674,8 +701,10 @@ sub ReadingsProcessing_Powerwalls($$) {
return \%readings; return \%readings;
} }
sub ReadingsProcessing_Site_Info($$) { sub ReadingsProcessing_Site_Info {
my ( $hash, $decode_json ) = @_; my $hash = shift;
my $decode_json = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my %readings; my %readings;
@ -693,8 +722,10 @@ sub ReadingsProcessing_Site_Info($$) {
return \%readings; return \%readings;
} }
sub ReadingsProcessing_Meters_Site($$) { sub ReadingsProcessing_Meters_Site {
my ( $hash, $decode_json ) = @_; my $hash = shift;
my $decode_json = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my %readings; my %readings;
@ -704,7 +735,7 @@ sub ReadingsProcessing_Meters_Site($$) {
if ( ref( $decode_json->[0] ) eq 'HASH' ) { if ( ref( $decode_json->[0] ) eq 'HASH' ) {
while ( my $obj = each %{ $decode_json->[0] } ) { while ( my $obj = each %{ $decode_json->[0] } ) {
if ( ref( $decode_json->[0]->{$obj} ) eq 'ARRAY' if ( ref( $decode_json->[0]->{$obj} ) eq 'ARRAY'
or ref( $decode_json->[0]->{$obj} ) eq 'HASH' ) || ref( $decode_json->[0]->{$obj} ) eq 'HASH' )
{ {
if ( ref( $decode_json->[0]->{$obj} ) eq 'HASH' ) { if ( ref( $decode_json->[0]->{$obj} ) eq 'HASH' ) {
while ( my ( $r, $v ) = while ( my ( $r, $v ) =
@ -740,8 +771,10 @@ sub ReadingsProcessing_Meters_Site($$) {
return \%readings; return \%readings;
} }
sub ReadingsProcessing_Meters_Solar($$) { sub ReadingsProcessing_Meters_Solar {
my ( $hash, $decode_json ) = @_; my $hash = shift;
my $decode_json = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my %readings; my %readings;
@ -751,7 +784,7 @@ sub ReadingsProcessing_Meters_Solar($$) {
if ( ref( $decode_json->[0] ) eq 'HASH' ) { if ( ref( $decode_json->[0] ) eq 'HASH' ) {
while ( my $obj = each %{ $decode_json->[0] } ) { while ( my $obj = each %{ $decode_json->[0] } ) {
if ( ref( $decode_json->[0]->{$obj} ) eq 'ARRAY' if ( ref( $decode_json->[0]->{$obj} ) eq 'ARRAY'
or ref( $decode_json->[0]->{$obj} ) eq 'HASH' ) || ref( $decode_json->[0]->{$obj} ) eq 'HASH' )
{ {
if ( ref( $decode_json->[0]->{$obj} ) eq 'HASH' ) { if ( ref( $decode_json->[0]->{$obj} ) eq 'HASH' ) {
while ( my ( $r, $v ) = while ( my ( $r, $v ) =
@ -787,35 +820,31 @@ sub ReadingsProcessing_Meters_Solar($$) {
return \%readings; return \%readings;
} }
sub CreateUri($$) { sub CreateUri {
my ( $hash, $path ) = @_; my $hash = shift;
my $path = shift;
my $host = $hash->{HOST}; my $host = $hash->{HOST};
my $header = ( defined($hash->{TOKEN}) ? 'Cookie: AuthCookie=' . $hash->{TOKEN} : undef );
my $method = 'GET'; my $method = 'GET';
my $uri; my $uri = ( defined($paths{$path}) ? $host . '/api/' . $paths{$path} : undef );
my $header;
my $data; my $data;
if ( $path eq 'powerwallsstop'
or $path eq 'powerwallsruns' )
{
$uri = $host . '/api/' . $cmdPaths{$path};
}
else {
$uri = $host . '/api/' . $paths{$path};
}
if ( $path eq 'sitemasterrun' ) { if ( $path eq 'login' ) {
$header = 'Authorization: Bearer' . $hash->{TOKEN};
}
elsif ( $path eq 'login' ) {
$method = 'POST'; $method = 'POST';
$header = 'Content-Type: application/json'; $header = 'Content-Type: application/json';
$uri = 'login/Basic',
$data = '{"username":"","password":"S' $data = '{"username":"","password":"S'
. ReadingsVal( $hash->{NAME}, . ReadingsVal( $hash->{NAME},
'powerwalls-wall_0_PackageSerialNumber', 0 ) 'powerwalls-wall_0_PackageSerialNumber', 0 )
. '","force_sm_off":false}'; . '","force_sm_off":false}';
} }
elsif ( $path eq 'powerwallsstop'
|| $path eq 'powerwallsruns' )
{
$uri = $host . '/api/' . $cmdPaths{$path};
}
return ( $uri, $method, $header, $data, $path ); return ( $uri, $method, $header, $data, $path );
} }
@ -911,7 +940,7 @@ sub CreateUri($$) {
], ],
"release_status": "under develop", "release_status": "under develop",
"license": "GPL_2", "license": "GPL_2",
"version": "v0.7.3", "version": "v0.7.99",
"author": [ "author": [
"Marko Oldenburg <leongaultier@gmail.com>" "Marko Oldenburg <leongaultier@gmail.com>"
], ],

View File

37
hooks/pre-commit Executable file
View File

@ -0,0 +1,37 @@
#!/usr/bin/perl -w
use File::Basename;
use POSIX qw(strftime);
use strict;
my @filenames = ( 'FHEM/46_TeslaPowerwall2AC.pm');
my $controlsfile = 'controls_TeslaPowerwall2AC.txt';
open(FH, ">$controlsfile") || return("Can't open $controlsfile: $!");
for my $filename (@filenames) {
my @statOutput = stat($filename);
if (scalar @statOutput != 13) {
printf 'error: stat has unexpected return value for ' . $filename . "\n";
next;
}
my $mtime = $statOutput[9];
my $date = POSIX::strftime("%Y-%m-%d", localtime($mtime));
my $time = POSIX::strftime("%H:%M:%S", localtime($mtime));
my $filetime = $date."_".$time;
my $filesize = $statOutput[7];
printf FH 'UPD ' . $filetime . ' ' . $filesize . ' ' .$filename . "\n";
}
close(FH);
system("git add $controlsfile");
print 'Create controls File succesfully' . "\n";
exit 0;