Hallo,
Vielleicht kann mir ja jemand helfen, ich komme nicht weiter. Egal was ich auch versuche den Request auszuwerten bekomme ich die Meldung:
Can't use string ("{"status":"ok","result":[{"power"...) as a HASH ref while "strict refs" in use at
hab schon stundenlang gegoogled und probiert aber nix hilft.
Print geht immer - siehe # ....
Sobald ich sonst etwas mit $message machen will kommt die Meldung.
Was mache ich falsch oder was habe ich vergessen.
Gruß
Thomas
use strict;
use warnings;
use JSON;
use Time::Piece;
use Data::Dumper;
use LWP::UserAgent;
use HTTP::Request;
use Mozilla::CA;
sub
DISCOVERGY_Initialize($)
{
my ($hash) = @_;
$hash->{DefFn} = "DISCOVERGY_Define";
$hash->{AttrList} = "delay loglevel:0,1,2,3,4,5,6 ".
"stateS ".
$readingFnAttributes;
}
sub
DISCOVERGY_Define($$)
{
my ($hash, $def) = @_;
my $name=$hash->{NAME}||"";
my @a = split("[ \t][ \t]*", $def);
my $user = $a[2]||"";
my $password = $a[3]||"";
my $meterid = $a[4]||"";
my $reading = $a[5]||"";
my $delay = $a[6]||"";
$attr{$name}{delay}=$delay if $delay;
return "Wrong syntax: use define <name> DISCOVERGY <user> <password> <meterId> <Wert:power/energy> <poll-delay>" if(int(@a) != 7);
$hash->{user} = $user;
$hash->{password} = $password;
$hash->{meterid} = $meterid;
$hash->{Reading} = $reading;
InternalTimer(gettimeofday(), "DISCOVERGY_GetStatus", $hash, 0);
return undef;
}
sub
DISCOVERGY_GetStatus($)
{
my ($hash) = @_;
my $name = $hash->{NAME}||"";
my $meterid = $hash->{meterid}||"";
my $password = $hash->{password}||"";
my $reading = $hash->{Reading}||"";
#
my $delay=$attr{$name}{delay}||300;
#
InternalTimer(gettimeofday()+$delay, "DISCOVERGY_GetStatus", $hash, 0);
#
if(!defined($hash->{user})) { return("");
}
my $user = $hash->{user}||"";
my $URL="https://my.discovergy.com/json/Api.get".$reading."?&user=".$user."&password=".$password."&meterId=".$meterid."&numOfSeconds=2";
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $URL);
my $resp = $ua->request($req);
if ($resp->is_success) {
my $message = $resp->decoded_content;
print Dumper($message);
# $VAR1 = '{"status":"ok","result":[{"power":263320,"time":1373995968579}]}';
print "Received reply: $message\n";
# {"status":"ok","result":[{"power":501610,"time":1373922658794}]}
}
else {
print "HTTP GET error code: ", $resp->code, "\n";
print "HTTP GET error message: ", $resp->message, "\n";
}
}
1;
kommentiere mal die erste Zeile Deines Codings aus.
Hallo,
die Meldung kommt dann nicht mehr aber wenn ich das hier versuche:
print "Status = " . $message->{'status'} . "\n";
my @result = @{$message->{'result'}};
foreach my $f (@result) {
print $f->{'power'} . "\n";
}
bekomme ich diese Meldung:
Use of uninitialized value in array dereference at
was mach ich nur falsch ?
Gruß
Thomas