Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]

Begonnen von schwatter, 25 Dezember 2017, 23:37:43

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Ich habe das Script erweitert. Connect kannst du jetzt einen port mitgeben. In deinem Fall musst du 1 mitgeben als zweiten Parameter. Aurabox und Timebox brauchen keinen zweiten Parameter und verwenden den Port 4. Die sendRaw Funktion konvertiert jetzt 01/02/03 richtig, falls es notwendig ist.

schwatter

Wenn ich das so ändere

$port = 1 if (!defined($port));


Schaut der Output so aus:

root@raspberrypi:/opt/fhem/divoom# perl tbetest.pl
Prototype mismatch: sub main::connectDivoom ($;$) vs ($) at tbetest.pl line 87.
Create RFCOMM client (11:75:68:C9:7D:36)...

done

Send raw command: 010d004500010001000000000000540002
No answer from device!
No answer from device!
No answer from device!
No answer from device!
Failed!
done

root@raspberrypi:/opt/fhem/divoom#


Was nicht funktioniert. Oder verstehe ich dich falsch.

schwatter

Ok, es funktioniert, aber erst nachdem ich die "sub sendRaw($$;$)" gegen die Alte getauscht habe.
Und damit Perl nicht meckert, das

sub connectDivoom($;$);

in das ändern.

sub connectDivoom($);

Jetzt muss ich noch verstehen, warum das mit der jetzigen "sub sendRaw($$;$)" nicht klappt.

Funktionfähiges Script /TimeboxEvo
#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes;
use Net::Bluetooth;
use IO::Select;
use Imager;

sub listDevices();
sub connectDivoom($);
sub disconnectDivoom();
sub sendRaw($$;$);
sub sendPlain($$;$);
sub convertRawToPlain($);
sub convertImageTB($;$);
sub convertImageAB($;$);

my $socket;
my $TIMEBOX;

sub listDevices()
{
  print "Search for devices...\n\n"; 

  my $device_ref = get_remote_devices();
 
  foreach my $addr (keys %$device_ref)
  {
    print "Address: $addr Name: $device_ref->{$addr}\n";
  }

  print "done\n\n";
}

# aurabox, timebox = port 4
# timebox evo = port 1
sub connectDivoom($)
{
  my $device = shift;
  my $port = shift;
  my $ret;
  my $success = 1;

  print "Create RFCOMM client ($device)...\n";

  $port = 1 if (!defined($port));
 
  $socket = Net::Bluetooth->newsocket("RFCOMM");
  return $success unless(defined($socket));
 
  if (0 != $socket->connect($device, $port))
  {
    $socket->close();
    return $success;
  }

  $TIMEBOX = $socket->perlfh();
 
  # timebox evo do not send anything on connect
  if (4 == $port)
  {
    sysread($TIMEBOX, $ret, 256);
    if (defined($ret))
    {
      $ret =~ s/[^[:print:]]//g;
      print "Device answer: $ret";

      if ('HELLO' eq $ret)
      {
        $success = 1;
      }
      else
      {
        close($TIMEBOX);
        $socket->close();
      }
    }
  }
  else
  {
    $success = 1;
  }
 
  print "\ndone\n\n";

  return $success;
}

sub disconnectDivoom()
{
  close($TIMEBOX);
  $socket->close();
}

sub sendRaw($$;$)
{
  my $data = shift;
  my $timeout = shift;
  my $response = shift;
  my $ret;
  my $retry = 0;
  my $select = IO::Select->new($TIMEBOX);
 
  print "Send raw command: $data\n";

  $response = 1 if (!defined($response));

  $data =~ s/((?:[0-9a-fA-F]{2})+)/pack('H*', $1)/ge;
 
  do
  {
    syswrite($TIMEBOX, $data);

    if ($select->can_read(0.1))
    {
      sysread($TIMEBOX, $ret, 256);
      if (defined($ret))
      {
        $ret = unpack('(H2)*', $ret);
        $ret =~ s/[^[:print:]]+//g;
        print "Device answer: $ret\n";
      }
    }
    else
    {
      print "No answer from device!\n";
    }

    $retry++;
  } while (($response) && ($retry <= 3) && (!defined($ret) || '01' ne $ret));

  if ($retry > 3)
  {
    print "Failed!\n";
  }
  else
  {
    Time::HiRes::sleep($timeout);
  }

  print "done\n\n";
}

sub sendPlain($$;$)
{
  my $data = shift;
  my $timeout = shift;
  my $response = shift;
  my $crc = 0;
  my $ret;
  my $retry = 0;

  print "Send plain command: $data\n";

  # add length (length of data + length of checksum)
  $_ = (length($data) + 4) / 2;
  $data = sprintf("%02x", ($_ & 0xFF)).sprintf("%02x", (($_ >> 8) & 0xFF)).$data;

  # calculate crc
  while ($data =~ /(..)/g)
  {
    $crc += hex($1);
  }

  # add crc
  $data .= sprintf("%02x", ($crc & 0xFF)).sprintf("%02x", (($crc >> 8) & 0xFF)); 

  # escape data
  $data =~ s/(01|02|03)(?{ if (0 == ($-[0] & 1)) {'030'.(3+$1)} else {$1} })/$^R/g;

  # add prefix and postfix
  $data = '01'.$data.'02';

  print "Generated raw command: $data\n";

  sendRaw($data, $timeout, $response);
}

sub convertRawToPlain($)
{
  my $data = shift;

  print $data."\n";

  # remove prefix and postfix
  $data = substr($data, 2, -2);

  # unescape data
  $data =~ s/(03(04|05|06))(?{ if (0 == ($-[0] & 1)) {'0'.($2-3)} else {$1} })/$^R/g;
 
  #remove length
  $data = substr($data, 4);

  # remove checksum
  $data = substr($data, 0, -4);

  print $data."\n";

  return $data;
}

sub convertImageTB($;$)
{
  my $file = shift;
  my $size = shift;
  my @imgData = (0);
  my $image = Imager->new;
 
  $size = 11 if (!defined($size));
  $image->read(file=>$file) or die "Can't read image ".$file." (".$image->errstr.")\n";
 
  if ('paletted' eq $image->type)
  {
    print "Image: ".$image->getheight()."x".$image->getwidth()." (maxcolors: ".$image->maxcolors.", usedcolors: ".$image->getcolorcount().")\n";
  }
  else
  {
    print "Image: ".$image->getheight()."x".$image->getwidth()." (maxcolors: no palette found, usedcolors: ".$image->getcolorcount().")\n";
  }

  if (defined($image))
  {
    my ($r, $g, $b, $a);
    my $flicflac = 0;   
    my $imageResized = $image->scaleX(pixels=>$size)->scaleY(pixels=>$size);

    for (my $y = 0; $y < $size; $y++)
    {
      for (my $x = 0; $x < $size; $x++)
      {
        ($r, $g, $b, $a) = $imageResized->getpixel(x=>$x, y=>$y)->rgba();
       
        if (0 == $flicflac)
        {
          if ($a > 32)
          {
            $imgData[-1] = (($r & 0xF0) >> 4) + ($g & 0xF0);
            push(@imgData, (($b & 0xF0) >> 4));
          }
          else
          {
            $imgData[-1] = 0;
            push(@imgData, 0);
          }

          $flicflac = 1;
        }
        else
        {
          if ($a > 32)
          {
            $imgData[-1] += ($r & 0xF0);
            push(@imgData, (($g & 0xF0) >> 4) + ($b & 0xF0));
          }
          else
          {
            $imgData[-1] += 0;
            push(@imgData, 0);
          }
          push(@imgData, 0);

          $flicflac = 0;
        }
      }
    }
  }
  else
  {
    print "Error: Loading image failed!\n";
  }

  $_ = '';
  foreach my $byte (@imgData)
  {
    $_ .= sprintf("%02x", ($byte & 0xFF));
  }

  return $_;
}

sub convertImageAB($;$)
{
  my $file = shift;
  my $size = shift;
  my @imgData = ();
  my $image = Imager->new;
  my @color = (0, 1, 2, 11, 4, 5, 2, 5, 8, 1, 2, 3, 4, 13, 6, 7);

  $size = 10;# if (!defined($size));
  $image->read(file=>$file) or die "Can't read image ".$file." (".$image->errstr.")\n";

  if ('paletted' eq $image->type)
  {
    print "Image: ".$image->getheight()."x".$image->getwidth()." (maxcolors: ".$image->maxcolors.", usedcolors: ".$image->getcolorcount().")\n";
  }
  else
  {
    print "Image: ".$image->getheight()."x".$image->getwidth()." (maxcolors: no palette found, usedcolors: ".$image->getcolorcount().")\n";
  }

  if (defined($image))
  {
    my $flicflac = 0;
    #my $imageResized = $image->scaleX(pixels=>$size)->scaleY(pixels=>$size);

    for (my $y = 0; $y < $size; $y++)
    {
      for (my $x = 0; $x < $size; $x++)
      {
        my $index = $image->findcolor(color=>$image->getpixel(x=>$x, y=>$y));
        print "Warning: palette index (".$index.") outside of allowed range at x=".$x." y=".$y."\n" if ($index > 15);
        $index = $index % 16;
               
        if (0 == $flicflac)
        {
          push(@imgData, $color[$index]);

          $flicflac = 1;
        }
        else
        {
          $imgData[-1] += ($color[$index] << 4);

          $flicflac = 0;
        }
      }
    }
  }
  else
  {
    print "Error: Loading image failed!\n";
  }

  $_ = '';
  foreach my $byte (@imgData)
  {
    $_ .= sprintf("%02x", ($byte & 0xFF));
  }

  return $_;
}
if (connectDivoom('11:75:68:C9:7D:36'))
{
  sendRaw('01050045030b580002', 3);
  sendRaw('010d00450001000100000000ff05580102' , 3);
  sendRaw('010d004500010101000000ffffff520302', 3);
  sendRaw('010d0045000100010000000d00ff600102', 3);
  disconnectDivoom();
}

mumpitzstuff

Das mit dem Parameter habe ich tatsächlich vergessen. Das mit dem Raw Kommando verstehe ich allerdings nicht. Bei der Aurabox/Timebox mussten 01/02/03 Werte escaped werden. Aus 01 enstand somit z.B. 0304. Wenn das nicht mehr so ist, dann ist das Protokoll grundlegend anders. Und ich hatte mich schon die ganze Zeit gewundert, weshalb du munter 01 in deinen Daten senden kannst... Kannst du bitte mal versuchen das Plain Kommando zu verwenden? Insbesondere mit einem Beispiel wo eine 01 in der Mitte zu finden ist:

sendPlain('450001000100000000ff05' , 3);

Mich würde interessieren ob das funktioniert.

Falls nicht, dann muss ich einen Schalter einbauen und die verschiedenen Protokolle behandeln.


schwatter

Die Box ändert nicht das Setting und das kommt dabei raus:

if (connectDivoom('11:75:68:C9:7D:36'))
{
  sendPlain('450001000100000000ff05' , 3);
  disconnectDivoom();
}


root@raspberrypi:/opt/fhem/divoom# perl tbetest1.pl
Create RFCOMM client (11:75:68:C9:7D:36)...

done

Send plain command: 450001000100000000ff05
Generated raw command: 010d004500030400030400000000ff0558030402
Send raw command: 010d004500030400030400000000ff0558030402
No answer from device!
No answer from device!
No answer from device!
No answer from device!
Failed!
done

root@raspberrypi:/opt/fhem/divoom#


Versuch mit 2 x Plain endet so:

if (connectDivoom('11:75:68:C9:7D:36'))
{
  sendPlain('450001000100000000ff05' , 3);
  sendPlain('4500010001000000ff0000' , 3);
  disconnectDivoom();
}


root@raspberrypi:/opt/fhem/divoom# perl tbetest1.pl
Create RFCOMM client (11:75:68:C9:7D:36)...

done

Send plain command: 450001000100000000ff05
Generated raw command: 010d004500030400030400000000ff0558030402
Send raw command: 010d004500030400030400000000ff0558030402
No answer from device!
No answer from device!
No answer from device!
No answer from device!
Failed!
done

Send plain command: 4500010001000000ff0000
Generated raw command: 010d0045000304000304000000ff000053030402
Send raw command: 010d0045000304000304000000ff000053030402
No answer from device!
No answer from device!
Use of uninitialized value $ret in substitution (s///) at tbetest1.pl line 129.
Use of uninitialized value $ret in concatenation (.) or string at tbetest1.pl line 130.
Device answer:

mumpitzstuff

Okay danke. Das ist völlig anders als bei den alten Boxen. Ich werde dann einen globalen Schalter  einbauen und zwischen beiden Modi umschalten...

mumpitzstuff

Ich kriege hier noch die Krise. Kann das sein, das die mir ungefragt eine neue Firmware auf das Gerät geladen haben? Irgendwie gehen bei mir sehr viele Kommandos nicht mehr.

schwatter

Gut möglich....so passiert bei meiner Evo. Divoomapp
hat eigenständig geupdatet. Kommt das HELLO noch?

schwatter

Ich habe eine Email an Divoom geschrieben, bezüglich Smarthome und mir eine offene Api gewünscht  :P
was natürlich zwecks Business zurückgewiesen wurde.
Daraufhin habe ich nochmal betont, das ein Client für Basisfunktionen in Linux/Windows eine Bereicherung wäre.
Immerhin wurde das nicht komplett ignoriert.

Hello Schwatter, 
If you like ,pixoo can be a good choice.  Because our major business is smart phones' speaker, and pixel display is a bonus we come up with. 
May be one day we are in the major success, i think my company might agree to do as your requiring. 
Thank you for sharing us your great idea. We will working hard. 
 
 
Best, 
Susan


Oft sind es ja nur leere Worte. Mal sehen...

mumpitzstuff

Das pixoo Ding sieht ja irgendwie schon bescheiden aus...

Habe jetzt mal github angepasst. Das Escape/Unescape Zeugs müsstest du jetzt mit einem Schalter ausschalten können (oben in der library). Dann sollten auch die Plain Kommandos wieder gehen.

schwatter

Funktioniert  :)

Nachdem ich escape und port geändert habe, konnte ich mit setPicture ein Bild setzten. Ich denke es kommt aus dem Speicher der Box selber???
Da ich sonst nichts finde, was der linken oberen Hälfte von Putin entspricht. Erinnere mich daran, das ich die Galerie der App durchgeklickt hatte.

Jedenfalls tolle Arbeit  :D

root@raspberrypi:/opt/fhem/divoom2# perl setPicture.pl
Image: 11x11 (maxcolors: no palette found, usedcolors: 2)
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...

done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
No answer from device!
Device answer: 01
done

Send plain command: 44000A0A0400000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff00000000000000f0ffffffffffffffffffff000000000000ff0f0000f0ff000000ff0f0000000000f0ff000000ff0f0000f0ff000000000000ffffffffffffffffffff0f00000000000000ffffffffffffff0f0000000000000000f0ff00f0ff00f0ff0000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01bd0044000A0A0400000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff00000000000000f0ffffffffffffffffffff000000000000ff0f0000f0ff000000ff0f0000000000f0ff000000ff0f0000f0ff000000000000ffffffffffffffffffff0f00000000000000ffffffffffffff0f0000000000000000f0ff00f0ff00f0ff0000000000000000000000000000000000000000000000000000000000000000000000000000b93302
Send raw command: 01bd0044000A0A0400000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff00000000000000f0ffffffffffffffffffff000000000000ff0f0000f0ff000000ff0f0000000000f0ff000000ff0f0000f0ff000000000000ffffffffffffffffffff0f00000000000000ffffffffffffff0f0000000000000000f0ff00f0ff00f0ff0000000000000000000000000000000000000000000000000000000000000000000000000000b93302
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom2#


edit:

Das Picture is ganz sicher aus dem Speicher gewesen, es gibt ja keine sub für convertPicture. Hab schon einiges deiner Reference, die du bei der Timebox
erarbeitet hast, wahllos durchgeschaut. Vieles funktioniert, manches nicht. Die Boxen sind sich aber immer noch sehr ähnlich, gut so.

Ein paar Beispiele:
- Plain funktioniert, bin mir aber gerade nicht ganz sicher ob es noch angepasst werden muss.
- Lautsärke setzen funktioniert
- Brightness funktioniert
- Notification's sind immer noch auf 5000 bis 50FF
- ....teste noch weiter

mumpitzstuff

setPicture lädt das Bild skull.png aus dem Timebox Verzeichnis.

Wenn Kommandos nicht mehr funktionieren, dann liegt das daran, das diese erweitert wurden. Wenn du die Aktionen protokollierst, dann kann man die sicher relativ einfach unterscheiden, da du ja das Kommandobyte bereits kennst z.B. 45 für Switch Screen. Im Log kannst du dann identifizieren was die Unterschiede alt zu neu sind.

Wenn du immer eine Aktion aufzeichnest pro Logfile, dann schau ich mir das gern an und versuche das neue Format rauszufinden. Aber nicht x Aktionen in ein Logfile packen, das findet man sonst nie.

schwatter

Habe viele aber noch nicht alle Beispiele getestet. Siehe dazu Notiz immer rechts.

Divoom Timebox/Aurabox command reference <- Infos rechts beziehen sich auf TimeboxEvo
Switch Screen: 45 <- ist generell anders. Siehe dazu meine Rawcodebeispiele
  -> Clock: 00 <-keine Funktion
    -> Format 12/24h (optional): 00 - 01 
    -> Color as rgb (optional): 000000 - FFFFFF 

  -> Temperature: 01 <-keine Funktion
    -> Format Celsius/Fahrenheit (optional): 00 - 01 
    -> Color as rgb (optional): 000000 - FFFFFF 

  -> Switchoff Screen: 02 <-keine Funktion

  -> Animation (hardcoded): 03 <-keine Funktion
    -> Type: 00 - 06 

  -> Equalizer: 04 <-keine Funktion 
    -> Type: 00 - 06 
      -> Type 0 lines as rgb (optional): 000000 - FFFFFF 
      -> Type 0 spikes as rgb (optional): 000000 - FFFFFF 

  -> Image/Animation (preloaded within the app): 05 <-keine Funktion

  -> Stopwatch: 06 <-keine Funktion
    -> Control Halt/Reset (optional): 00 (Halt), 02 (Reset) 

  -> Scoreboard: 07 <-keine Funktion <-keine Funktion
    -> Control lower (optional): 0000 - 00FF 
    -> Control upper (optional): 0000 - 00FF 
    (needs further investigation because higher values than 255 are not possible at the moment) 

Set Brightness: 32 or 74  <-funktioniert, aber nur 7400 setzt Display auf off, 3200 direkt minium brightness.
  -> Level (0 = off, 01 - FF = brightness level): 00 - FF 

Set Time: 18 <-funktioniert
  -> Year (XX = year % 100, YY = year / 100): XXYY 
  -> Month: XX 
  -> Day: XX 
  -> Hours: XX 
  -> Minutes: XX 
  -> Seconds: XX 
 
Set Volume: 08 <- funktioniert
  -> Level: 01 - 64 
 
Get Volume: 09 <- keine Funktion
  -> Level 
 
Set FM Radio (untested!): 05 <- Radio ist nicht vorhanden
  -> State (on = 01, off = 00): 00 - 01 
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY 

Get FM Radio Frequency: 60 <- Radio ist nicht vorhanden
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY 

Set FM Radio Frequency: 61 <- Radio ist nicht vorhanden
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY 

Set Mute: 0A <- ungetestet
  -> State (on = 00, off = 01): 00 - 01 

Get Mute: 0B <- ungetestet
  -> State (on = 00, off = 01) 

Set Image: 44000A0A04 <- noch kein PicConverter
  -> Data (Timebox): RGB (R = 4bit, G = 4bit, B = 4bit) => RGBRGB 2 pixels encoded into 2 bytes of data 
  -> Data (Aurabox): Color Index (4bit per pixel) => 2 pixels encoded into 1 byte of data 

Set Animation: 49000A0A04 <- noch kein PicConverter
  -> Frame Number: 00 - FF 
  -> Time Delay: 00 - FF 
  -> Data (Timebox): RGB (R = 4bit, G = 4bit, B = 4bit) => RGBRGB 2 pixels encoded into 2 bytes of data 
  -> Data (Aurabox): Color Index (4bit per pixel) => 2 pixels encoded into 1 byte of data 

Set Wakeup Call: 43 <- ungetestet
  -> Number: 00 - 02 
  -> State (on = 01, off = 00): 00 - 01 
  -> Hour: XX 
  -> Minute: XX 
  -> Day (bitcoded in the following order (highest bit always 0): Sat, Fri, Thu, Wed, Tue, Mon, Sun): XX 
  -> Scene: XX 
  -> Unknown: 010000 
  -> Volume Level: 01 - 64 

Set Notification: 50 <- funktioniert
  -> Type: 00 - FF 

Set Calendar or Appointment Planer: 54  <- ungetestet
  -> needs further investigation 

Screen Off: 41XX or 62XX <- 4100 schaltet Box aus. 62XX ohne Funktion

Show/Set Stopwatch/Scoreboard: 71 <- funktioniert
  -> Type (00 = Stopwatch, 01 = Scoreboard): 00 - 01 
  -> strange behaviour (needs further investigation) 

Set Game: A0  <- funktioniert. 5 Spiele, Controllbits noch suchen.
  -> State (on = 01, off = 00): 00 - 01 
  -> Type: XX 
  -> Control??? 

Set Talking Faces: A1 <- Mikrosymbol erscheint, wahrscheinlich Sprachnachricht
  -> State (on = 01, off = 00): 00 - 01 
  -> Type (optional): XX 

Set Calendar: 54 <- noch nicht nachvollziehbar
  -> Index: 00 - FF 
  -> State (on = 01, off = 00): 00 - 01 
  -> Month: XX 
  -> Day: XX 
  -> Hour: XX 
  -> Minute: XX 
  -> Unknown: 01 
  -> Titel (max 15 Chars (unicode UTF-16BE), XX = high byte, YY = low byte): XXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYYXXYY0000 
 
Set Calendar Picture: 55 <- noch nicht nachvollziehbar
  -> Index: 00 - FF 
  -> State (on = 01, off = 00): 00 - 01 
  -> Static data: 000A 
  -> Data (Timebox): RGB (R = 4bit, G = 4bit, B = 4bit) => RGBRGB 2 pixels encoded into 2 bytes of data 
  -> Data (Aurabox): Color Index (4bit per pixel) => 2 pixels encoded into 1 byte of data 

Clear Calendar: 54 <- ungetestet
  -> Index: 00 - FF 
  -> Unknown: 0002010C00000000000000000000000000000000000000000000000000000000000000000000 
 
Get Calendar: 53 <- noch nicht nachvollziehbar

Set Weather: 5F  <- funktioniert
  -> Temperature: 00 - FF  <- funktioniert
  -> Animation (00, >=13 = special demo mode?): 00 - FF  <- noch nicht nachvollziehbar


Hier nochmal meine Rawcodebeispiele für 45

DigitalUhrRot 010d004500010001000000ff0000530102
DigitalUhrGrün 010d00450001000100000000ff05580102
DigitalUhrBlau 010d0045000100010000000d00ff600102
DigitalUhrGelb 010d004500010001000000fff300460202
DigitalUhrOrange 010d004500010001000000f5a623120202
DigitalUhrHellblau 010d00450001000100000000e4ff370202
DigitalUhrRosa 010d004500010001000000ff00e5380202
DigitalUhrWeiß 010d004500010001000000ffffff510302
Rainbowclock 010d004500010101000000ffffff520302
Uhr 3 010d004500010201000000ffffff530302
Uhr 4 010d004500010301000000ffffff540302
Uhr 5 010d004500010401000000ffffff550302
Uhr 6 010d004500010501000000ffffff560302
StaticColorRosa 010d004501f800b8610001000000650202
StaticColorBlau 010d0045013773f5610001000000540202
StaticColorSoOrange 010d004501f67148610001000000640202
StaticColorSoGelb 010d004501d3f923610001000000a40202
StaticColorSoGrün 010d0045014ef9606100010000005c0202
StaticColorSoBlau 010d0045012f9ad16100010000004f0202
Animation1 01040045024b0002
Animation2 0105004503004d0002
Animation3 0105004503024f0002
Animation4 010500450303500002
Animation5 010500450304510002
Animation6 010500450307540002
Animation7 010500450308550002
Animation8 010500450309560002
Animation9 01050045030a570002
Animation10 01050045030b580002
Animation11 01050045030c590002
Animation12 01050045030d5a0002
Animation13 01050045030e5b0002
Animation14 01050045030f5c0002
Equalizer1 010d0045040b0000000000000000610002
Equalizer2 010d004504000000000000000000560002
Equalizer3 010d004504010000000000000000570002
Equalizer4 010d004504020000000000000000580002
Equalizer5 010d004504030000000000000000590002
Equalizer6 010d0045040400000000000000005a0002
Equalizer7 010d0045040500000000000000005b0002
Equalizer8 010d0045040600000000000000005c0002
Equalizer9 010d0045040700000000000000005d0002
Equalizer10 010d0045040800000000000000005e0002
Equalizer11 010d0045040900000000000000005f0002
Equalizer12 010d0045040a0000000000000000600002



Was mir gerade auffällt, wenn ich in der App auf Channel gehe. Dann ganz rechts erscheint "Benutzerdefinierte Pixelgröße",
wahrscheinlich schlecht auf Deutsch übersetzt... :) jedenfalls sieht das nach einem Slotsystem aus, welches 12 in die
Box vorladen kann. Damit könnte ich wenn es stimmt einen Runningtext ausgeben ohne Converter. Oder
auch ein Pic/Animation laden.

mumpitzstuff

Was genau meinst du damit das kein Picture Converter da ist? Ich hätte vermutet, das der bereits vorhandene TB Converter funktioniert, wenn du als Parameter 16 anstatt 11 übergibst und das Bild auch 16x16 Pixel enthält.

schwatter

Ok teste ich nochmal. Den Parameter hatte ich schonmal auf 16 geändert, ohne Glück. Daher war ich davon ausgegangen,
dies wäre unverändert.