#!/usr/bin/perl

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

my $debug = 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 ($debug > 1) { print "\nSessionID  $key\n"; }


#-----   Ein-/Ausschalten  ---------------------------------------------------

# Request fuer Steuerung
my $setv = "1";
my $setv_req  = "{\"command\":\"setdatapointvalue\",\"data\":";
   $setv_req .= "{\"sessionID\":\"";
   $setv_req .= $key;
   $setv_req .= "\",\"uid\":1,\"value\":";
   $setv_req .= $setv;
   $setv_req .= "}}";
$result = send_cmd($setv_req,"setdpv");


#-----   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 ($debug > 0) {
      if ($check == 1) { print "$msg OK\n"; }
      else             { print "$msg failed\n"; }
   }

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

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

   return ($result);
}

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