#!/usr/bin/perl -w use strict; use warnings; use utf8; use IO::Socket; use MIME::Base64; use Data::Dumper; $Data::Dumper::Useqq=1; my $host = "192.168.1.36"; # Your Cube-IP or hostame Here! my $port = "80"; my $devices = "5"; my $handle = IO::Socket::INET->new( Proto => "tcp", PeerAddr => $host, PeerPort => $port ) // die("ERROR open Socket $host:$port ($!)\n"); $handle->blocking(0); binmode($handle); while(1) { my $finished = 0; my $time=time(); my $buffer=''; while(time() < $time+20 && $finished==0) { my $line=''; $handle->read($line,4096); $finished=1 if(index($buffer,'L:')!=-1); $buffer.=$line if(length($line)); } if(!$finished) { print "No Connection\n"; next; } my %data; my %deviceconf; for my $v (split(/[\x0D\x0A]+/,$buffer)) { if($v=~/^L:(.+)/g) { my %hilf; my $str=decode_base64($1); for(1..$devices) { my $length=substr_ord(\$str,1); next if($length<6); my ($rfaddr,$x1,$data1,$data2)=unpack('H6 H2 B8 B8',substr($str,0,6,'')); if($rfaddr eq '005fd6') { $rfaddr = 'KuecheFe' } elsif($rfaddr eq '008f02') { $rfaddr = 'KuecheTh' } elsif($rfaddr eq '010863') { $rfaddr = 'WohnTh' } elsif($rfaddr eq '004bb8') { $rfaddr = 'WohnFe' } elsif($rfaddr eq '005bfb') { $rfaddr = 'Eco' } else {$rfaddr = $rfaddr} $deviceconf{$rfaddr}={ LowBat => substr($data2,0,1,'') }; if($length == 11) { my ($x2,$temp,$date,$time)=unpack('C C B16 C',substr($str,0,5,'')); $deviceconf{$rfaddr}{Temperatur}=$temp/2; } my $sub=substr($data2,6,2); if($sub == 0) { $deviceconf{$rfaddr}{Mode} = 'auto' } elsif($sub == 1) { $deviceconf{$rfaddr}{Mode} = 'manu' } elsif($sub == 2) { $deviceconf{$rfaddr}{Mode} = 'vacation' } elsif($sub == 3) { $deviceconf{$rfaddr}{Mode} = 'boost' } } } } print Dumper(\%deviceconf); sleep(1); $handle->send("l:"); } $handle->close(); sub substr_del { return substr( ${$_[0]}, 0, $_[1], '') } sub substr_ord { return unpack('C*', substr_del(@_) ); } sub substr_hex { return unpack('H*', substr_del(@_)); } sub substr_hex_fix { my $str=shift; my $length=shift; return unpack("H".($length*2), substr_del($str,$length)); } sub substr_bin { return unpack('B8', substr_del(@_)); }