wink.pl
Last modified by Richard Johnson on 2018/08/01 00:46
#!/usr/bin/perl -w # use Time::Local "timelocal"; #use XML::Parser; #use XML::Simple; #use IO::Handle; use Data::Dumper; #use URI::Escape; use lib "/opt/local/lib/perl5/site_perl/5.12.4"; use JSON; #require HTTP::Request; require LWP::UserAgent; my $host = ''; # # Get my token # my $URL = $host . '/oauth2/token'; my %data = ('client_id' => 'my_client_id_from wink', 'client_secret' => 'my_client_secret_from_wink', 'username' => 'my_wink_account_email', 'password' => 'my_wink_account_password', 'grant_type' => 'password'); my $json = encode_json \%data; my $h = HTTP::Headers->new( Content_Length => length($json), Content_Type => 'application/json' ); my $browser = LWP::UserAgent->new(); my $r = HTTP::Request->new('POST', $URL, $h, $json); my $response = $browser->request($r); #die 'Error ' unless $response->is_success; # $browser->default_header(content_type => "application/json"); #print $response; #print $response->content_type; #print $response->as_string; #print $response->content; # Parse the JSON response $resp = decode_json $response->content; #print Dumper($resp); #print $resp->{access_token}, "\n"; #print $resp->{data}->{access_token}, "\n"; # # Have my token, now get device list # $token = $resp->{access_token}; #$refresh = $resp->{refresh_token}; # Now create my new query with this access token #$URL = $host . '/users/me/wink_devices'; $URL = $host . '/users/me/light_bulbs'; # my %data = ('Authorization' => 'Bearer ' . $resp->{access_token}); # my $json = encode_json \%data; #print "Getting device list, query is\n"; # print $json; #print "\n"; $h = HTTP::Headers->new( Content_Type => 'application/json', Authorization => 'Bearer ' . $resp->{access_token} ); $browser = LWP::UserAgent->new(); $r = HTTP::Request->new('GET', $URL, $h); $response = $browser->request($r); #print "\n", "List of all devices:\n"; #print "\n", $response->as_string; $resp = decode_json $response->content; #print Dumper($resp); $count = $resp->{pagination}->{count}; #print "Count = ", $count; my $i = 0; for ($j = 0 ; $j <= $#ARGV ; $j++) { for ($i = 0 ; $i < $count ; $i++) { if ("$resp->{data}[$i]->{name}" eq "$ARGV[$j]") { # # Set "OFF" as 0 and "ON" as 1 # $state = 2; $val = uc $ARGV[$j+1]; if ($val eq "OFF") {$state = 0;} if ($val eq "ON") {$state = 1;} if ($state == 2) { print "Must use 'ON' or 'OFF' specifically\n"; exit; } $id = $resp->{data}[$i]->{light_bulb_id}; # # Set the powered state # $h = HTTP::Headers->new( Content_Type => 'application/json', Authorization => 'Bearer ' . $token ); $browser = LWP::UserAgent->new(); $URL = $host . '/light_bulbs/' . $id; %power = ('powered' => $state, 'brightness' => 1); %data2 = ('desired_state' => \%power); $json = encode_json \%data2; $r = HTTP::Request->new('PUT', $URL, $h, $json); $response = $browser->request($r); system("/bin/echo -n $ARGV[$j] $ARGV[$j+1] \" : \" >> /usr/local/etc/wink.log"); system("date >> /usr/local/etc/wink.log"); goto next_arg; } # end "if" } # end "for $j" next_arg: $j++; } # end "for $i" exit 0;