tibber/tibber.pl

65 lines
2.3 KiB
Perl
Executable File

#!/usr/bin/env perl
use 5.024;
use strict;
use warnings;
use autodie;
use Config::Tiny;
use Getopt::Long;
use HTTP::Tiny;
use JSON::PP;
use Data::Dumper;
GetOptions(
"config=s" => \(my $CONFIG),
);
my $USAGE = <<"END_USAGE";
Usage: $0 [-c config]
Options:
-c | --config text (no default)
END_USAGE
my @config_files = $CONFIG || grep { -e } ('./_tibber.conf', './.tibber.conf', './tibber.conf', "$ENV{'HOME'}/_tibber.conf", "$ENV{'HOME'}/.tibber.conf", "$ENV{'HOME'}/tibber.conf");
my $config = Config::Tiny->read($config_files[-1], 'utf8');
my $TOKEN = $config->{$APPLICATION}->{token} || die("$USAGE\nError: TOKEN not found.\n");
my $http = HTTP::Tiny->new;
my %HEADERS = ("Content-Type" => "application/json", "Authorization" => "Bearer $TOKEN");
my $uri = "https://api.tibber.com/v1-beta/gql";
my $request = HTTP::Tiny->new('default_headers' => \%HEADERS);
my $json = JSON::PP->new;
my $body = $json->encode({query => "{viewer{homes{currentSubscription{priceInfo{current{total energy tax startsAt} today{total energy tax startsAt} tomorrow{total energy tax startsAt}}}}}}"});
#print "$body\n";
my $response = $request->post($uri, {'content' => $body});
#print "$response->{'status'} $response->{'reason'}\n";
#print "$response->{'content'}\n";
my $data = $json->decode($response->{'content'})->{'data'}->{'viewer'}->{'homes'}[0]->{'currentSubscription'};
print "*** priceInfo ***\n";
print "current: ";
if (!length $data->{'priceInfo'}->{'current'}) {
print "price not set\n";
} else {
print "$data->{'priceInfo'}->{'current'}->{'total'} (Energy: $data->{'priceInfo'}->{'current'}->{'energy'}; Tax: $data->{'priceInfo'}->{'current'}->{'tax'})\n";
#print Dumper $data->{'priceInfo'}->{'current'};
}
print "today: ";
if (!length $data->{'priceInfo'}->{'today'}[0]) {
print "price not set\n";
} else {
print "$data->{'priceInfo'}->{'today'}[0]->{'total'} (Energy: $data->{'priceInfo'}->{'today'}[0]->{'energy'}; Tax: $data->{'priceInfo'}->{'today'}[0]->{'tax'})\n";
#print Dumper $data->{'priceInfo'}->{'today'}[0];
}
print "tomorrow: ";
if (!length $data->{'priceInfo'}->{'tomorrow'}[0]) {
print "price set at 13:00\n";
} else {
print "$data->{'priceInfo'}->{'tomorrow'}[0]->{'total'} (Energy: $data->{'priceInfo'}->{'tomorrow'}[0]->{'energy'}; Tax: $data->{'priceInfo'}->{'tomorrow'}[0]->{'tax'})\n";
#print Dumper $data->{'priceInfo'}->{'tomorrow'}[0];
}