#!/usr/bin/perl

##########################
# Configuration vaiables #
##########################
my $powerlink = powermax;   # Powerlink address
my $port      = 7523;       # Powerlink telnet port
my $username  = root;       # Powerlink user
my $password  = vispl211;   # Powerlink password
my $language  = 1;          # 0 = English, 1 = Norwegian bm
my $logfile   = "/home/powermax/log/wc_log";

use strict;
use warnings;
use File::Temp;
use Net::FTP;
use Expect;
use Proc::PID::File;

if (Proc::PID::File->running()) {
    exit(0);
}


# begin binary data:
my $powerlink_bin = # 4592
"\x7F\x45\x4C\x46\x01\x01\x01\x61\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28".
"\x00\x01\x00\x00\x00\x4C\x85\x00\x00\x34\x00\x00\x00\xE0\x0D\x00\x00\x06\x02".
"\x00\x00\x34\x00\x20\x00\x06\x00\x28\x00\x1A\x00\x19\x00\x06\x00\x00\x00\x34".
"\x00\x00\x00\x34\x80\x00\x00\x34\x80\x00\x00\xC0\x00\x00\x00\xC0\x00\x00\x00".
"\x05\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\xF4\x00\x00\x00\xF4\x80\x00".
"\x00\xF4\x80\x00\x00\x13\x00\x00\x00\x13\x00\x00\x00\x04\x00\x00\x00\x01\x00".
"\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x44".
"\x0B\x00\x00\x44\x0B\x00\x00\x05\x00\x00\x00\x00\x80\x00\x00\x01\x00\x00\x00".
"\x44\x0B\x00\x00\x44\x0B\x01\x00\x44\x0B\x01\x00\x40\x01\x00\x00\x44\x01\x00".
"\x00\x06\x00\x00\x00\x00\x80\x00\x00\x02\x00\x00\x00\x58\x0B\x00\x00\x58\x0B".
"\x01\x00\x58\x0B\x01\x00\xC8\x00\x00\x00\xC8\x00\x00\x00\x06\x00\x00\x00\x04".
"\x00\x00\x00\x04\x00\x00\x00\x08\x01\x00\x00\x08\x81\x00\x00\x08\x81\x00\x00".
"\x20\x00\x00\x00\x20\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x2F\x6C\x69".
"\x62\x2F\x6C\x64\x2D\x6C\x69\x6E\x75\x78\x2E\x73\x6F\x2E\x32\x00\x00\x04\x00".
"\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x47\x4E\x55\x00\x00\x00\x00\x00\x02".
"\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00".
"\x0E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x04\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0F\x00\x00\x00\x09\x00\x00\x00\x00\x00".
"\x00\x00\x0D\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x05".
"\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x06\x00".
"\x00\x00\x0A\x00\x00\x00\x0C\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x00".
"\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x3F\x00\x00\x00\x8C\x84\x00\x00\x9C\x02\x00\x00\x12\x00\x00".
"\x00\x29\x00\x00\x00\x98\x84\x00\x00\x30\x00\x00\x00\x12\x00\x00\x00\x01\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x59\x00\x00\x00\xB0".
"\x84\x00\x00\x48\x00\x00\x00\x12\x00\x00\x00\x53\x00\x00\x00\xBC\x84\x00\x00".
"\x58\x01\x00\x00\x12\x00\x00\x00\x84\x00\x00\x00\xC8\x84\x00\x00\x00\x02\x00".
"\x00\x12\x00\x00\x00\x1A\x00\x00\x00\x9C\x8A\x00\x00\x04\x00\x00\x00\x11\x00".
"\x0E\x00\x69\x00\x00\x00\xD4\x84\x00\x00\x18\x02\x00\x00\x12\x00\x00\x00\x62".
"\x00\x00\x00\xE0\x84\x00\x00\xAC\x00\x00\x00\x12\x00\x00\x00\x31\x00\x00\x00".
"\xEC\x84\x00\x00\x08\x00\x00\x00\x12\x00\x00\x00\x4E\x00\x00\x00\xF8\x84\x00".
"\x00\x44\x00\x00\x00\x12\x00\x00\x00\x2A\x00\x00\x00\x04\x85\x00\x00\x4C\x00".
"\x00\x00\x12\x00\x00\x00\x70\x00\x00\x00\x10\x85\x00\x00\xAC\x01\x00\x00\x12".
"\x00\x00\x00\x7E\x00\x00\x00\x1C\x85\x00\x00\x64\x02\x00\x00\x12\x00\x00\x00".
"\x77\x00\x00\x00\x28\x85\x00\x00\x30\x00\x00\x00\x12\x00\x00\x00\x37\x00\x00".
"\x00\x34\x85\x00\x00\xFC\x00\x00\x00\x12\x00\x00\x00\x45\x00\x00\x00\x40\x85".
"\x00\x00\x34\x00\x00\x00\x12\x00\x00\x00\x00\x5F\x5F\x67\x6D\x6F\x6E\x5F\x73".
"\x74\x61\x72\x74\x5F\x5F\x00\x6C\x69\x62\x63\x2E\x73\x6F\x2E\x36\x00\x5F\x49".
"\x4F\x5F\x73\x74\x64\x69\x6E\x5F\x75\x73\x65\x64\x00\x73\x70\x72\x69\x6E\x74".
"\x66\x00\x66\x6F\x70\x65\x6E\x00\x73\x74\x72\x6E\x63\x6D\x70\x00\x61\x62\x6F".
"\x72\x74\x00\x73\x74\x72\x66\x74\x69\x6D\x65\x00\x66\x65\x6F\x66\x00\x66\x67".
"\x65\x74\x73\x00\x73\x74\x72\x70\x74\x69\x6D\x65\x00\x6D\x65\x6D\x63\x70\x79".
"\x00\x66\x63\x6C\x6F\x73\x65\x00\x6D\x61\x6C\x6C\x6F\x63\x00\x73\x73\x63\x61".
"\x6E\x66\x00\x73\x6C\x65\x65\x70\x00\x5F\x5F\x6C\x69\x62\x63\x5F\x73\x74\x61".
"\x72\x74\x5F\x6D\x61\x69\x6E\x00\x47\x4C\x49\x42\x43\x5F\x32\x2E\x31\x00\x47".
"\x4C\x49\x42\x43\x5F\x32\x2E\x30\x00\x00\x00\x02\x00\x02\x00\x00\x00\x02\x00".
"\x02\x00\x02\x00\x01\x00\x03\x00\x02\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02".
"\x00\x02\x00\x02\x00\x02\x00\x00\x00\x01\x00\x02\x00\x10\x00\x00\x00\x10\x00".
"\x00\x00\x00\x00\x00\x00\x11\x69\x69\x0D\x00\x00\x03\x00\x96\x00\x00\x00\x10".
"\x00\x00\x00\x10\x69\x69\x0D\x00\x00\x02\x00\xA0\x00\x00\x00\x00\x00\x00\x00".
"\x6C\x0C\x01\x00\x15\x03\x00\x00\x2C\x0C\x01\x00\x16\x01\x00\x00\x30\x0C\x01".
"\x00\x16\x02\x00\x00\x34\x0C\x01\x00\x16\x03\x00\x00\x38\x0C\x01\x00\x16\x04".
"\x00\x00\x3C\x0C\x01\x00\x16\x05\x00\x00\x40\x0C\x01\x00\x16\x06\x00\x00\x44".
"\x0C\x01\x00\x16\x08\x00\x00\x48\x0C\x01\x00\x16\x09\x00\x00\x4C\x0C\x01\x00".
"\x16\x0A\x00\x00\x50\x0C\x01\x00\x16\x0B\x00\x00\x54\x0C\x01\x00\x16\x0C\x00".
"\x00\x58\x0C\x01\x00\x16\x0D\x00\x00\x5C\x0C\x01\x00\x16\x0E\x00\x00\x60\x0C".
"\x01\x00\x16\x0F\x00\x00\x64\x0C\x01\x00\x16\x10\x00\x00\x68\x0C\x01\x00\x16".
"\x11\x00\x00\x04\xE0\x2D\xE5\x45\x00\x00\xEB\x66\x00\x00\xEB\x7A\x01\x00\xEB".
"\x04\xF0\x9D\xE4\x04\xE0\x2D\xE5\x04\xE0\x9F\xE5\x0E\xE0\x8F\xE0\x08\xF0\xBE".
"\xE5\x98\x87\x00\x00\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x98\xF7\xBC\xE5\x00\xC6".
"\x8F\xE2\x08\xCA\x8C\xE2\x90\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x88".
"\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x80\xF7\xBC\xE5\x00\xC6\x8F\xE2".
"\x08\xCA\x8C\xE2\x78\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x70\xF7\xBC".
"\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x68\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA".
"\x8C\xE2\x60\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x58\xF7\xBC\xE5\x00".
"\xC6\x8F\xE2\x08\xCA\x8C\xE2\x50\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2".
"\x48\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x40\xF7\xBC\xE5\x00\xC6\x8F".
"\xE2\x08\xCA\x8C\xE2\x38\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x30\xF7".
"\xBC\xE5\x00\xC6\x8F\xE2\x08\xCA\x8C\xE2\x28\xF7\xBC\xE5\x00\xC6\x8F\xE2\x08".
"\xCA\x8C\xE2\x20\xF7\xBC\xE5\x24\xC0\x9F\xE5\x00\xB0\xA0\xE3\x04\x10\x9D\xE4".
"\x0D\x20\xA0\xE1\x04\x20\x2D\xE5\x04\x00\x2D\xE5\x10\x00\x9F\xE5\x10\x30\x9F".
"\xE5\x04\xC0\x2D\xE5\xD4\xFF\xFF\xEB\xC4\xFF\xFF\xEB\xF0\x89\x00\x00\x44\x86".
"\x00\x00\xF4\x89\x00\x00\x00\x44\x2D\xE9\x1C\xA0\x9F\xE5\x1C\x00\x9F\xE5\x0A".
"\xA0\x8F\xE0\x00\x30\x9A\xE7\x00\x00\x53\xE3\x01\x00\x00\x0A\x00\x44\xBD\xE8".
"\xBE\xFF\xFF\xEA\x00\x84\xBD\xE8\x88\x86\x00\x00\x4C\x00\x00\x00\x40\x30\x9F".
"\xE5\x04\xE0\x2D\xE5\x00\x30\xD3\xE5\x00\x00\x53\xE3\x04\xF0\x9D\x14\x01\x00".
"\x00\xEA\x00\x20\x81\xE5\x33\xFF\x2F\xE1\x24\x10\x9F\xE5\x00\x30\x91\xE5\x04".
"\x20\x83\xE2\x00\x30\x93\xE5\x00\x00\x53\xE3\xF7\xFF\xFF\x1A\x08\x30\x9F\xE5".
"\x01\x20\xA0\xE3\x00\x20\xC3\xE5\x04\xF0\x9D\xE4\x84\x0C\x01\x00\x7C\x0C\x01".
"\x00\x04\xE0\x2D\xE5\x04\xF0\x9D\xE4\x20\x00\x9F\xE5\x04\xE0\x2D\xE5\x00\x30".
"\x90\xE5\x18\x20\x9F\xE5\x00\x00\x53\xE3\x04\xF0\x9D\x04\x00\x00\x52\xE3\x04".
"\xF0\x9D\x04\x32\xFF\x2F\xE1\x04\xF0\x9D\xE4\x54\x0B\x01\x00\x00\x00\x00\x00".
"\x04\xE0\x2D\xE5\x04\xF0\x9D\xE4\xF0\x4F\x2D\xE9\x00\x40\xA0\xE1\x48\xD0\x4D".
"\xE2\x01\x0B\xA0\xE3\x04\x10\x8D\xE5\xAC\xFF\xFF\xEB\x00\x70\xA0\xE1\x01\x0B".
"\xA0\xE3\xA9\xFF\xFF\xEB\x00\xB0\xA0\xE1\x01\x0C\xA0\xE3\xA6\xFF\xFF\xEB\x00".
"\xA0\xA0\xE1\x01\x0C\xA0\xE3\xA3\xFF\xFF\xEB\x00\x00\x5B\xE3\x00\x00\x57\x13".
"\x00\x00\x8D\xE5\xC4\x00\x00\x0A\x00\x00\x50\xE3\x00\x00\x5A\x13\x00\x30\xA0".
"\x13\x01\x30\xA0\x03\xBF\x00\x00\x0A\x02\x00\x54\xE3\xBD\x00\x00\x1A\x01\x20".
"\xA0\xE3\x00\x30\xCB\xE5\x08\x20\x8D\xE5\x03\x90\xA0\xE1\x04\x30\x9D\xE5\xE8".
"\x12\x9F\xE5\x04\x00\x93\xE5\x87\xFF\xFF\xEB\x00\x00\x50\xE3\x10\x00\x8D\xE5".
"\x00\x20\xA0\x13\x0C\x20\x8D\x15\xA5\x00\x00\x1A\x04\x30\x9D\xE5\xC8\x02\x9F".
"\xE5\x06\x00\x93\xE8\x84\xFF\xFF\xEB\xAB\x00\x00\xEA\x07\x00\xA0\xE1\x01\x1B".
"\xA0\xE3\x10\x20\x9D\xE5\x6D\xFF\xFF\xEB\x00\x30\xDB\xE5\x00\x00\x53\xE3\x0B".
"\x00\xA0\x01\x07\x10\xA0\x01\x01\x2B\xA0\x03\x70\xFF\xFF\x0B\x04\x80\xA0\xE1".
"\x02\x00\x00\xEA\x01\x80\x88\xE2\x01\x0B\x58\xE3\x2A\x00\x00\x0A\x08\x40\x87".
"\xE0\x7C\x12\x9F\xE5\x03\x20\xA0\xE3\x04\x00\xA0\xE1\x7B\xFF\xFF\xEB\x00\x00".
"\x50\xE3\x6C\x12\x9F\xE5\x03\x20\xA0\xE3\x04\x00\xA0\xE1\x20\x00\x00\x0A\x75".
"\xFF\xFF\xEB\x00\x00\x50\xE3\x58\x12\x9F\xE5\x03\x20\xA0\xE3\x04\x00\xA0\xE1".
"\x1A\x00\x00\x0A\x6F\xFF\xFF\xEB\x00\x00\x50\xE3\x44\x12\x9F\xE5\x03\x20\xA0".
"\xE3\x04\x00\xA0\xE1\x14\x00\x00\x0A\x69\xFF\xFF\xEB\x00\x00\x50\xE3\x30\x12".
"\x9F\xE5\x03\x20\xA0\xE3\x04\x00\xA0\xE1\x0E\x00\x00\x0A\x63\xFF\xFF\xEB\x00".
"\x00\x50\xE3\x1C\x12\x9F\xE5\x03\x20\xA0\xE3\x04\x00\xA0\xE1\x08\x00\x00\x0A".
"\x5D\xFF\xFF\xEB\x00\x00\x50\xE3\x08\x12\x9F\xE5\x03\x20\xA0\xE3\x04\x00\xA0".
"\xE1\x02\x00\x00\x0A\x57\xFF\xFF\xEB\x00\x00\x50\xE3\xD1\xFF\xFF\x1A\x08\x40".
"\x87\xE0\x19\x00\x84\xE2\xE8\x11\x9F\xE5\x14\x20\xA0\xE3\x50\xFF\xFF\xEB\x00".
"\x00\x50\xE3\x5A\x00\x00\x1A\x14\x50\x8D\xE2\x04\x00\xA0\xE1\xD0\x11\x9F\xE5".
"\x05\x20\xA0\xE1\x28\xFF\xFF\xEB\x01\x1C\xA0\xE3\xC4\x21\x9F\xE5\x05\x30\xA0".
"\xE1\x0A\x00\xA0\xE1\x47\xFF\xFF\xEB\x0A\x00\xA0\xE1\xB4\x11\x9F\xE5\x44\x20".
"\x8D\xE2\x3D\xFF\xFF\xEB\x44\x60\x9D\xE5\x09\x00\x56\xE1\x00\x40\xA0\x23\x01".
"\x40\xA0\x33\x00\x00\x59\xE3\x09\x00\x56\x11\x02\x00\x00\x2A\x0C\x20\x9D\xE5".
"\x00\x00\x52\xE3\x42\x00\x00\x0A\x00\x00\x54\xE3\x49\x00\x00\x1A\x09\x00\x56".
"\xE1\x40\x00\x00\x0A\x05\x30\xA0\xE1\x01\x1C\xA0\xE3\x31\x50\x88\xE2\x68\x21".
"\x9F\xE5\x0A\x00\xA0\xE1\x2F\xFF\xFF\xEB\x05\x00\x87\xE0\x54\x11\x9F\xE5\x40".
"\x20\x8D\xE2\x25\xFF\xFF\xEB\x04\x80\xA0\xE1\x24\x00\x00\xEA\x30\x00\x53\xE3".
"\x01\x50\x85\xE2\x0C\x00\x00\x1A\x00\x30\x9D\xE5\x08\x00\x83\xE0\x01\x30\xD4".
"\xE5\x78\x00\x53\xE3\x2C\x11\x9F\xE5\x06\x00\x00\x1A\x40\x30\x9D\xE5\x01\x30".
"\x43\xE2\x40\x30\x8D\xE5\x02\x20\xD4\xE5\x03\x30\xD4\xE5\x03\x80\x88\xE2\xEF".
"\xFE\xFF\xEB\x01\x40\x84\xE2\x01\x0B\x55\xE3\x02\x00\x00\xAA\x00\x30\xD4\xE5".
"\x00\x00\x53\xE3\xE9\xFF\xFF\x1A\x40\x30\x9D\xE5\x00\x00\x53\xE3\x0B\x00\x00".
"\x0A\x07\x00\xA0\xE1\x01\x1B\xA0\xE3\x10\x20\x9D\xE5\xEB\xFE\xFF\xEB\x00\x40".
"\x50\xE2\x00\x50\xA0\x13\x04\x00\x00\x1A\x07\x00\xA0\xE1\x0B\x10\xA0\xE1\x01".
"\x2B\xA0\xE3\xED\xFE\xFF\xEB\x04\x50\xA0\xE1\x40\x30\x9D\xE5\x00\x00\x53\xE3".
"\x05\x40\x87\xC0\xE7\xFF\xFF\xCA\x08\x20\x9D\xE5\x00\x00\x52\xE3\x08\x00\x00".
"\x1A\x9C\x00\x9F\xE5\x0A\x10\xA0\xE1\x00\x20\x9D\xE5\xEA\xFE\xFF\xEB\x01\x30".
"\xA0\xE3\x0C\x30\x8D\xE5\x03\x00\x00\xEA\x09\x60\xA0\xE1\x01\x00\x00\xEA\x01".
"\x20\xA0\xE3\x0C\x20\x8D\xE5\x06\x90\xA0\xE1\x10\x00\x9D\xE5\xDD\xFE\xFF\xEB".
"\x00\x40\x50\xE2\x5A\xFF\xFF\x0A\x10\x00\x9D\xE5\xD0\xFE\xFF\xEB\x01\x00\xA0".
"\xE3\xE0\xFE\xFF\xEB\x00\x30\xA0\xE3\x08\x30\x8D\xE5\x45\xFF\xFF\xEA\x00\x00".
"\xE0\xE3\x48\xD0\x8D\xE2\xF0\x8F\xBD\xE8\xA0\x8A\x00\x00\xA4\x8A\x00\x00\xC8".
"\x8A\x00\x00\xCC\x8A\x00\x00\xD0\x8A\x00\x00\xD4\x8A\x00\x00\xD8\x8A\x00\x00".
"\xDC\x8A\x00\x00\xE0\x8A\x00\x00\xE4\x8A\x00\x00\xFC\x8A\x00\x00\x14\x8B\x00".
"\x00\x18\x8B\x00\x00\x1C\x8B\x00\x00\x30\x8B\x00\x00\x38\x8B\x00\x00\x1E\xFF".
"\x2F\xE1\xF0\x47\x2D\xE9\x54\xA0\x9F\xE5\x00\x90\xA0\xE1\x02\x70\xA0\xE1\x0A".
"\xA0\x8F\xE0\x01\x80\xA0\xE1\x94\xFE\xFF\xEB\x40\x20\x9F\xE5\x40\x00\x9F\xE5".
"\x00\x50\xA0\xE3\x02\x40\x8A\xE0\x00\x30\x62\xE0\x43\x61\xA0\xE1\x01\x00\x00".
"\xEA\x0F\xE0\xA0\xE1\x04\xF0\x14\xE5\x06\x00\x55\xE1\x09\x00\xA0\xE1\x08\x10".
"\xA0\xE1\x07\x20\xA0\xE1\x01\x50\x85\xE2\x04\x40\x84\xE2\xF6\xFF\xFF\x1A\xF0".
"\x87\xBD\xE8\x14\x82\x00\x00\x24\xFF\xFF\xFF\x24\xFF\xFF\xFF\x10\x40\x2D\xE9".
"\x18\x40\x9F\xE5\x00\x00\x00\xEA\x33\xFF\x2F\xE1\x00\x30\x94\xE5\x04\x40\x44".
"\xE2\x01\x00\x73\xE3\xFA\xFF\xFF\x1A\x10\x80\xBD\xE8\x44\x0B\x01\x00\x04\xE0".
"\x2D\xE5\x04\xF0\x9D\xE4\x04\xE0\x2D\xE5\xC6\xFE\xFF\xEB\x04\xF0\x9D\xE4\x01".
"\x00\x02\x00\x72\x00\x00\x00\x25\x73\x3A\x20\x43\x6F\x75\x6C\x64\x20\x6E\x6F".
"\x74\x20\x6F\x70\x65\x6E\x20\x69\x6E\x70\x75\x74\x20\x66\x69\x6C\x65\x20\x25".
"\x73\x2E\x0A\x00\x00\x4D\x6F\x6E\x00\x54\x75\x65\x00\x57\x65\x64\x00\x54\x68".
"\x75\x00\x46\x72\x69\x00\x53\x61\x74\x00\x53\x75\x6E\x00\x50\x43\x4D\x3A\x20".
"\x49\x4E\x46\x4F\x3A\x50\x4D\x41\x58\x2D\x3E\x50\x43\x4D\x3A\x00\x00\x00\x00".
"\x25\x61\x20\x25\x62\x20\x25\x64\x20\x25\x48\x3A\x25\x4D\x3A\x25\x53\x20\x25".
"\x59\x00\x00\x00\x00\x25\x73\x00\x00\x25\x64\x00\x00\x25\x59\x2D\x25\x6D\x2D".
"\x25\x64\x20\x25\x48\x3A\x25\x4D\x3A\x25\x53\x20\x3A\x00\x20\x25\x63\x25\x63".
"\x00\x00\x00\x25\x73\x25\x73\x0A\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF".
"\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00".
"\x00\x10\x00\x00\x00\x0C\x00\x00\x00\x64\x84\x00\x00\x0D\x00\x00\x00\x90\x8A".
"\x00\x00\x04\x00\x00\x00\x28\x81\x00\x00\x05\x00\x00\x00\xDC\x82\x00\x00\x06".
"\x00\x00\x00\xBC\x81\x00\x00\x0A\x00\x00\x00\xAA\x00\x00\x00\x0B\x00\x00\x00".
"\x10\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x20\x0C\x01".
"\x00\x02\x00\x00\x00\x80\x00\x00\x00\x14\x00\x00\x00\x11\x00\x00\x00\x17\x00".
"\x00\x00\xE4\x83\x00\x00\x11\x00\x00\x00\xDC\x83\x00\x00\x12\x00\x00\x00\x08".
"\x00\x00\x00\x13\x00\x00\x00\x08\x00\x00\x00\xFE\xFF\xFF\x6F\xAC\x83\x00\x00".
"\xFF\xFF\xFF\x6F\x01\x00\x00\x00\xF0\xFF\xFF\x6F\x86\x83\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x58\x0B\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84\x00".
"\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84".
"\x00\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78\x84\x00\x00\x78".
"\x84\x00\x00\x78\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x50\x0B\x01\x00\x00\x00\x00\x00\x00\x47\x43\x43\x3A\x20\x28".
"\x47\x4E\x55\x29\x20\x34\x2E\x31\x2E\x32\x00\x00\x47\x43\x43\x3A\x20\x28\x47".
"\x4E\x55\x29\x20\x34\x2E\x31\x2E\x32\x00\x00\x47\x43\x43\x3A\x20\x28\x47\x4E".
"\x55\x29\x20\x34\x2E\x31\x2E\x32\x00\x00\x47\x43\x43\x3A\x20\x28\x47\x4E\x55".
"\x29\x20\x34\x2E\x31\x2E\x32\x00\x00\x47\x43\x43\x3A\x20\x28\x47\x4E\x55\x29".
"\x20\x34\x2E\x31\x2E\x32\x00\x00\x47\x43\x43\x3A\x20\x28\x47\x4E\x55\x29\x20".
"\x34\x2E\x31\x2E\x32\x00\x00\x47\x43\x43\x3A\x20\x28\x47\x4E\x55\x29\x20\x34".
"\x2E\x31\x2E\x32\x00\x41\x0F\x00\x00\x00\x61\x65\x61\x62\x69\x00\x01\x05\x00".
"\x00\x00\x00\x2E\x73\x68\x73\x74\x72\x74\x61\x62\x00\x2E\x69\x6E\x74\x65\x72".
"\x70\x00\x2E\x6E\x6F\x74\x65\x2E\x41\x42\x49\x2D\x74\x61\x67\x00\x2E\x68\x61".
"\x73\x68\x00\x2E\x64\x79\x6E\x73\x79\x6D\x00\x2E\x64\x79\x6E\x73\x74\x72\x00".
"\x2E\x67\x6E\x75\x2E\x76\x65\x72\x73\x69\x6F\x6E\x00\x2E\x67\x6E\x75\x2E\x76".
"\x65\x72\x73\x69\x6F\x6E\x5F\x72\x00\x2E\x72\x65\x6C\x2E\x64\x79\x6E\x00\x2E".
"\x72\x65\x6C\x2E\x70\x6C\x74\x00\x2E\x69\x6E\x69\x74\x00\x2E\x74\x65\x78\x74".
"\x00\x2E\x66\x69\x6E\x69\x00\x2E\x72\x6F\x64\x61\x74\x61\x00\x2E\x65\x68\x5F".
"\x66\x72\x61\x6D\x65\x00\x2E\x63\x74\x6F\x72\x73\x00\x2E\x64\x74\x6F\x72\x73".
"\x00\x2E\x6A\x63\x72\x00\x2E\x64\x79\x6E\x61\x6D\x69\x63\x00\x2E\x67\x6F\x74".
"\x00\x2E\x64\x61\x74\x61\x00\x2E\x62\x73\x73\x00\x2E\x63\x6F\x6D\x6D\x65\x6E".
"\x74\x00\x2E\x41\x52\x4D\x2E\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x0B\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xF4\x80\x00\x00\xF4\x00".
"\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00".
"\x00\x00\x00\x13\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x08\x81\x00\x00".
"\x08\x01\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00".
"\x00\x00\x00\x00\x00\x21\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\x28\x81".
"\x00\x00\x28\x01\x00\x00\x94\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04".
"\x00\x00\x00\x04\x00\x00\x00\x27\x00\x00\x00\x0B\x00\x00\x00\x02\x00\x00\x00".
"\xBC\x81\x00\x00\xBC\x01\x00\x00\x20\x01\x00\x00\x05\x00\x00\x00\x01\x00\x00".
"\x00\x04\x00\x00\x00\x10\x00\x00\x00\x2F\x00\x00\x00\x03\x00\x00\x00\x02\x00".
"\x00\x00\xDC\x82\x00\x00\xDC\x02\x00\x00\xAA\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\xFF\xFF\xFF\x6F".
"\x02\x00\x00\x00\x86\x83\x00\x00\x86\x03\x00\x00\x24\x00\x00\x00\x04\x00\x00".
"\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x44\x00\x00\x00\xFE\xFF".
"\xFF\x6F\x02\x00\x00\x00\xAC\x83\x00\x00\xAC\x03\x00\x00\x30\x00\x00\x00\x05".
"\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00".
"\x09\x00\x00\x00\x02\x00\x00\x00\xDC\x83\x00\x00\xDC\x03\x00\x00\x08\x00\x00".
"\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x08\x00\x00\x00\x5C\x00".
"\x00\x00\x09\x00\x00\x00\x02\x00\x00\x00\xE4\x83\x00\x00\xE4\x03\x00\x00\x80".
"\x00\x00\x00\x04\x00\x00\x00\x0B\x00\x00\x00\x04\x00\x00\x00\x08\x00\x00\x00".
"\x65\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x64\x84\x00\x00\x64\x04\x00".
"\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00".
"\x00\x00\x60\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x78\x84\x00\x00\x78".
"\x04\x00\x00\xD4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00".
"\x04\x00\x00\x00\x6B\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x4C\x85\x00".
"\x00\x4C\x05\x00\x00\x44\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00".
"\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00\x90".
"\x8A\x00\x00\x90\x0A\x00\x00\x0C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x04\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00".
"\x00\x9C\x8A\x00\x00\x9C\x0A\x00\x00\xA4\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x7F\x00\x00\x00\x01\x00\x00\x00\x02".
"\x00\x00\x00\x40\x8B\x00\x00\x40\x0B\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x01\x00\x00".
"\x00\x03\x00\x00\x00\x44\x0B\x01\x00\x44\x0B\x00\x00\x08\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x01".
"\x00\x00\x00\x03\x00\x00\x00\x4C\x0B\x01\x00\x4C\x0B\x00\x00\x08\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00".
"\x00\x01\x00\x00\x00\x03\x00\x00\x00\x54\x0B\x01\x00\x54\x0B\x00\x00\x04\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x9C".
"\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x58\x0B\x01\x00\x58\x0B\x00\x00".
"\xC8\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x08\x00\x00".
"\x00\xA5\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x20\x0C\x01\x00\x20\x0C".
"\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x04".
"\x00\x00\x00\xAA\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x70\x0C\x01\x00".
"\x70\x0C\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00".
"\x00\x00\x00\x00\x00\xB0\x00\x00\x00\x08\x00\x00\x00\x03\x00\x00\x00\x84\x0C".
"\x01\x00\x84\x0C\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01".
"\x00\x00\x00\x00\x00\x00\x00\xB5\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x84\x0C\x00\x00\x7E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x01\x00\x00\x00\x00\x00\x00\x00\xBE\x00\x00\x00\x03\x00\x00\x70\x00\x00".
"\x00\x00\x00\x00\x00\x00\x02\x0D\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00\x12\x0D\x00\x00\xCE\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00";
# end binary data. size = 4592 bytes

my @Zones;

my @Zone_Name_en = 
    (
     "Attic",           #  0
     "Back door",       #  1
     "Basement",        #  2
     "Bathroom",        #  3
     "Bedroom",         #  4
     "Child room",      #  5
     "Closet",          #  6
     "Den",             #  7
     "Dining room",     #  8
     "Downstairs",      #  9
     "Emergency",       # 10
     "Fire",            # 11
     "Front door",      # 12
     "Garage",          # 13
     "Garage door",     # 14
     "Guest room",      # 15
     "Hall",            # 16
     "Kitchen",         # 17
     "Laundry room",    # 18
     "Living room",     # 19
     "Master bathroom", # 20
     "Master bedroom",  # 21
     "Office",          # 22
     "Upstairs",        # 23
     "Utility room",    # 24
     "Yard",            # 25
     "Custom1",         # 26
     "Custom2",         # 27
     "Custom3",         # 28
     "Custom4",         # 29
     "Custom5"          # 30
    );

my @Zone_Name_no = 
    (
     "Loft",        #  0
     "Bakdør",      #  1
     "Kjeller",     #  2
     "Toalett",     #  3
     "Soverom 2",   #  4
     "Barnerom",    #  5
     "Bod",         #  6
     "Arbeidsrom",  #  7
     "Spisestue",   #  8
     "1. etasje",   #  9
     "Nødalarm",    # 10
     "Brann",       # 11
     "Inngangsdør", # 12
     "Garasje",     # 13
     "Garasjedør",  # 14
     "Gjesterom",   # 15
     "Gang",        # 16
     "Kjøkken",     # 17
     "Vaskerom",    # 18
     "Stue",        # 19
     "Bad",         # 20
     "Soverom 1",   # 21
     "Kontor",      # 22
     "2. etasje",   # 23
     "Teknisk rom", # 24
     "Hage",        # 25
     "Valgfri 1",   # 26
     "Valgfri 2",   # 27
     "Valgfri 3",   # 28
     "Valgfri 4",   # 29
     "Valgfri 5"    # 30
    );


my $lastzones = -1;

my $tmp = File::Temp->new(DIR => "/tmp");
print $tmp $powerlink_bin;
$tmp->flush;

my $ftp = Net::FTP->new("$powerlink", Debug => 0)
or die "Cannot connect to $powerlink: $@";

$ftp->login("$username", "$password")
or die "Cannot login ", $ftp->message;

$ftp->binary;

$ftp->put("$tmp", "tmp/powermax_log")
or die "put failed ", $ftp->message;

$ftp->quit;

my $exp = Expect->spawn("/usr/bin/telnet", ("-l", "$username", "$powerlink", "$port"))
or die "Cannot spawn telnet: $!\n";

$exp->log_file(undef);
$exp->log_stdout(0);
$exp->expect(3, ["Unable to connect", sub { die "Unable to connect.\n"; }]);

$exp->expect(3, "Password:"); $exp->send("$password\n");

my $zone_tries;
for ($zone_tries = 0; $zone_tries < 5; $zone_tries++) {
    $exp->expect(10, 'root@webcomm:/#'); $exp->send("if \[ -p /tmp/cli_in \] && \[ -p /tmp/cli_out \]; then echo 3 2 2 qq > /tmp/cli_in; cat /tmp/cli_out; fi\n");
    $exp->expect(3, "; fi");
    $exp->log_file(\&parse_zones);
}

$exp->expect(10, 'root@webcomm:/#'); $exp->send("chmod 755 tmp/powermax_log\n");
$exp->expect(3, 'root@webcomm:/#'); $exp->send("tmp/powermax_log tmp/log/wc_log\n");
$exp->log_file(\&parse_powermax);

while (!$exp->expect(60, 'root@webcomm:/#', 'Connection closed')) {
    $exp->send("\n");
}

$exp->send("exit\n");
$exp->soft_close();

sub parse_zones {

    while ($_[0] =~ m/name#([0-9]+)=17-([0-9]+)/g) {
	$zone_tries = 99;
        $Zones[$1] = lc(($language ? @Zone_Name_no : @Zone_Name_en)[$2]);
    }
}

sub parse_powermax {

    my $line = $_[0];
    chop $line;
    chop $line;
    $line =~ s/(\d\d\d\d-\d\d-\d\d) (\d\d:\d\d:\d\d) : /$1_$2_:_/;
    $line =~ s/ //g;
    $line =~ s/_/ /g;
    my $code = length($line) >= 22 ? substr($line, 22) : "";
    if ($line =~ /^\d\d\d\d-\d\d-\d\d/ &&
	$code !~ "0dab03001e0034343230000043250a") {

	my @date = gmtime();
	open(OUT, ">>$logfile");

	if (substr($code, 0, 11) =~ "0da50004002" || substr($code, 0, 11) =~ "0da50004042") {
	    my $zone = hex(substr($code, 12, 2));
	    print OUT sprintf("[%04d-%02d-%02d %02d:%02d:%02d] $line", $date[5]+1900, $date[4]+1, $date[3], @date[2,1,0]);
	    if ($language) {
		print OUT sprintf(" (bevegelse i sone %d - %s)\n", $zone, $Zones[$zone]);
	    } else {
		print OUT sprintf(" (movement in zone %d - %s)\n", $zone, $Zones[$zone]);
	    }
	} else {
	    if (substr($code, 0, 8) =~ "0da50002") {
		my $zones = hex(substr($code, 8, 2)) |
		    (hex(substr($code, 10, 2)) << 8) |
		    (hex(substr($code, 12, 2)) << 16) |
		    (hex(substr($code, 14, 2)) << 24);
		if ($zones != $lastzones) {
		    print OUT sprintf("[%04d-%02d-%02d %02d:%02d:%02d] $line", $date[5]+1900, $date[4]+1, $date[3], @date[2,1,0]);
		    $lastzones = $zones;
		    if ($zones == 0) {
			if ($language) {
			    print OUT sprintf(" (ingen åpne soner)\n");
			} else {
			    print OUT sprintf(" (no open zones)\n");
			}
		    } else {
			if ($language) {
			    print OUT sprintf(" (%s:", $zones & ($zones - 1) ? "åpne soner" : "åpen sone");
			} else {
			    print OUT sprintf(" (open %s:", $zones & ($zones - 1) ? "zones" : "zone");
			}
			my $i;
			for ($i = 1; $i < 31 && $zones != 0; $i++) {
			    if ($zones & 1) {
				print OUT sprintf(" %d - %s", $i, $Zones[$i]);
				if ($zones > 1) {
				    print OUT sprintf(",");
				}
			    }
			    $zones >>= 1;
			}
			print OUT sprintf(")\n");
		    }
		} else {
		    $lastzones = $zones;
		}
	    }
	}
	close(OUT);
    }
}
