#!/usr/bin/perl

use strict;
use REST::Client;
use Data::Dumper;
use JSON;

my $loglevel = 0;

# Pfad zur Klimaanlage
my $url="http://192.168.178.27/api.cgi"; 


#-----   Client-Objekt  ------------------------------------------------------

my $client;
$client = REST::Client->new();
$client->addHeader('Content-Type', 'application/json');
$client->addHeader('charset', 'UTF-8');
$client->addHeader('Accept', 'application/json');


#-----   Einloggen  ----------------------------------------------------------

# Login-Request zusammensetzen
my $auth_req  = "{\"command\":\"login\",\"data\":{\"username\"";
   $auth_req .= ":\"admin\",\"password\":\"xxxxxxxx\"}}";
my $result = send_cmd($auth_req,"login");

# Pruefung, ob Login erfolgreich
if ($result == -1) {
   print "\nLogin fehlgeschlagen\n";
   exit;
}

# Session-Id abspeichern
my $key = $result->{'data'}->{'id'}->{'sessionID'};
if ($loglevel > 1) { print "\nSessionID  $key\n"; }


#-----   Signal-Werte holen  -------------------------------------------------

# Request fuer Signals
my $signals_req  = "{\"command\":\"getdatapointvalue\",\"data\":";
   $signals_req .= "{\"sessionID\":\"";
   $signals_req .= $key;
   $signals_req .= "\",\"uid\":\"all\"}}";
$result = send_cmd($signals_req,"getdpv");

# Uebertragen der Signal-Werte in Array
my $dpv = $result->{'data'}->{'dpval'};
my @values;
for my $record (@$dpv) {
   $values[$record->{'uid'}] = $record->{'value'};
}

print "\n";
print "Ein/Aus          $values[1]\n"; 
print "Betriebsart      $values[2]\n"; 
print "Luefter          $values[4]\n"; 
print "Lamellen         $values[5]\n"; 
print "Soll-Temperatur  $values[9]\n"; 
print "Ruecklauf-Temp   $values[10]\n"; 
print "Betriebsstunden  $values[13]\n"; 
print "Aussentemperatur $values[37]\n"; 


#-----   Ausloggen  ----------------------------------------------------------

my $logout_req  = "{\"command\":\"logout\",\"data\":";
   $logout_req .= "{\"sessionID\":\"";
   $logout_req .= $key;
   $logout_req .= "\"}}";
$result = send_cmd($logout_req,"logout");

exit;


#-----  send_cmd  ------------------------------------------------------------

sub send_cmd {
   my ($cmd,$msg)  = @_;
   my $result;
   my $answer;
   my $check;

   $client->POST($url, $cmd);
   $answer = $client->responseContent();
   $result = decode_json($answer); 
   $check  = $result->{'success'};

   if ($loglevel > 0) {
      if ($check == 1) { print "$msg OK\n"; }
      else             { print "$msg failed\n"; }
   }

   # wenn cmd fehlgeschlagen
   if ($check == 0) { return (-1); }

   if ($loglevel > 1) { print "$msg: $answer\n"; }

   if ($loglevel > 2) { print "\n"; print Dumper ($result); print "\n"; }

   return ($result);
}

#-----------------------------------------------------------------------------
