Thread Kontinuierlich Net-Stream anzeigen
(29 answers)
Opened by kami at 2011-11-09 13:05
Mich lässt so was nicht in ruhe.
also hier mal ein Decoder. Ich habe auch mal den Rest der "M:" Zeile entpackt. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 #!/usr/bin/perl use strict; use warnings; use utf8; use IO::Socket; use MIME::Base64; use Data::Dumper; $Data::Dumper::Useqq=1; my $buffer=''; { local $/=undef; $buffer=<DATA>; } my %data; my %deviceconf; for my $v (split(/[\x0D\x0A]+/,$buffer)) { if($v=~/^M:[^,]+,[^,]+,(.+)/g) { my $str=decode_base64($1); $data{meta}{'?1'}=substr_hex(\$str,1); $data{meta}{'?2'}=substr_hex(\$str,1); $data{meta}{RoomCount}=substr_ord(\$str,1); for(1..$data{meta}{RoomCount}) { my ($roomid,$name,$rfaddr)=unpack('H2 C/a H6',$str); substr($str,0,5+length($name),''); utf8::upgrade($name); $data{rooms}{$roomid}{RoomName}=$name; $data{rooms}{$roomid}{RFAddress}=$rfaddr; } my $devcount=substr_ord(\$str,1); $data{meta}{DevCount}=$devcount; $data{meta}{'?3'}=substr_ord(\$str,1); # ergänzt: for(1..$devcount) { my ($rfaddr,$id,$name,$x4)=unpack('H6 a10 C/a H4',$str); substr($str,0,16+length($name),''); utf8::upgrade($name); $data{Devices}{$id}={ name => $name, RFAddress => $rfaddr, '?1' => $x4, }; } } if($v=~/^L:(.+)/g) { my %hilf; my $str=decode_base64($1); for(1..$data{meta}{DevCount}) { my $length=substr_ord(\$str,1); next if($length<6); my ($rfaddr,$x1,$data1,$data2)=unpack('H6 H2 B8 B8',substr($str,0,6,'')); $deviceconf{$rfaddr}={ Data1 => $data1, Data2 => $data2, '?1' => $x1, }; if($length == 11) { my ($x2,$temp,$date,$time)=unpack('C C B16 C',substr($str,0,5,'')); $deviceconf{$rfaddr}{'?2'}=$x2; $deviceconf{$rfaddr}{Temperatur}=$temp; $deviceconf{$rfaddr}{DateUntil}=$date; $deviceconf{$rfaddr}{TimeUntil}=$time; } my $sub=ord(pack('B2',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,\%data); #if ($deviceconf{'005bfb'}{Mode} eq 'auto' && $deviceconf{'004bb8'}{Mode} eq 'auto' ) #{ print "0\n"; } #else #{ print "1\n"; } ######################################################################## 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(@_)); } __DATA__ H:IEQ0111347,00b5b6,0102,00000000,3ed09189,01,32 M:00,01,VgICAQpXb2huemltbWVyAQhjAgZLw7xjaGUAjwIFAQEIY0lFUTAxOTI4MDcKV29obnppbW1lcgEEAFv7SUVRMDE1Njg3NwtXb2huZmVuc3RlcgEFAEu4SUVRMDE0NTQ4OQxFQ08tU2NoYWx0ZXIAAQCPAklFUTAxOTU0NzUGS8O8Y2hlAgQAX9ZJRVEwMTU3Nzc2DUZlbnN0ZXJrw7xjaGUCAQ== C:00b5b6,7QC1tgACAf9JRVEwMTExMzQ3AQsABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsABEAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAGh0A6Ly9zcGFycGFrZXQtaGVpenVuZy5ld2UuZGU6ODAvY3ViZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENFVAAACgADEA4AAENFU1QAAwAAIBwAAA== C:005fd6,EQBf1gQAEw9JRVEwMTU3Nzc2 C:008f02,0gCPAgECFP9JRVEwMTk1NDc1Lh49CQcYA3AM/wA8dVycPNVc9j0gPSA9IEUgRSBFIEUgRSBFIDx1XJw8zFztPSA9ID0gRSBFIEUgRSBFIEUgPSA9ID0gPSA9ID0gPSBFIEUgRSBFIEUgRSA9ID0gPSA9ID0gPSA9IEUgRSBFIEUgRSBFID0gPSA9ID0gPSA9ID0gRSBFIEUgRSBFIEUgPSA9ID0gPSA9ID0gPSBFIEUgRSBFIEUgRSA9ID0gPSA9ID0gPSA9IEUgRSBFIEUgRSBFIA== C:004bb8,EQBLuAUAEg9JRVEwMTQ1NDg5 C:005bfb,EQBb+wQAEw9JRVEwMTU2ODc3 C:010863,0gEIYwEBFP9JRVEwMTkyODA3Lh49CQcYA3AM/wA8dVycPNVc9j0gPSA9IEUgRSBFIEUgRSBFIDxyXQg9ID0gPSA9ID0gRSBFIEUgRSBFIEUgPNhdCD0gPSA9ID0gPSBFIEUgRSBFIEUgRSA82F0IPSA9ID0gPSA9IEUgRSBFIEUgRSBFIDzYXQg9ID0gPSA9ID0gRSBFIEUgRSBFIEUgPNhdCD0gPSA9ID0gPSBFIEUgRSBFIEUgRSA82F0IPSA9ID0gPSA9IEUgRSBFIEUgRSBFIA== L:BgBf1gASEAsAjwIAEhkJHgCtAAYAS7gAEhAGAFv7ABIQCwEIYwASGRoeALAA Die "C:" Elemente sollten sich auch entpacken lassen. Habe ich aber jetzt keine Lust zu und ohne weitere Informationen könnte es langwierig werden. Ich sehe das die Elemente nach dem "," Base64 kodiert sind, aber genaues könnte ich jetzt nicht sagen. |