FHEM Forum

FHEM => Sonstiges => Thema gestartet von: schwatter am 25 Dezember 2017, 23:37:43

Titel: Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 Dezember 2017, 23:37:43
Hallo zusammen,

da die LaMetric total überteuert ist, hier eine Alternative (wenn auch vielleicht nicht vollwertig).

Bis jetzt unterstützt das Perlscript von mumpitzstuff folgende Pixeldevices von Divoom.


Funktionen sind im Github nachzulesen.

https://github.com/mumpitzstuff/fhem-Divoom


Infos

Hier weitere Projekte zu Divoomdevices.

https://github.com/derHeinz/divoom-adapter

https://github.com/ScR4tCh/timebox

https://github.com/MarcG046/timebox

https://github.com/djgreg13/timeboxmini

https://github.com/DavidVentura/divoom

https://github.com/johsam/timebox-evo-rest  <-- mit Tornado Wepinterface. Bei Problemen mit Python Socket besser PyBluez nutzen.

https://bitbucket.org/pjhardy/homeassistant-timebox/src/master/

Onlinemessagegenerator von bigboss97

http://users.tpg.com.au/folksfun/timebox/


Rawcodebeispiele

Aurabox
DisplayOff 0104003200360002
DarkLight 010400323f750002
BrightLight 01040032d208030402
Time 0104004500490002
Temp 0104004503044a0002
OnlyColor 0104004503054b0002
Equalizer 0104004503064c0002
Pixelanimation 01040045044d0002
WalkingTriangle 01040045054e0002
SpinningTriangle 01040045064f0002
Countdown 0104004507500002
Blackscreen 0104004508510002

Timebox-Evo
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

# set different settings: clock/weatherani./temp/calendar
sendRaw('010d00450001000100000000ff05580102', 1); #     only clock green
sendRaw('010d004500010001000000ff0000530102', 1); #     only clock red
sendRaw('010d004500010001010000000000550002', 1); #switching clock/weatherani.
sendRaw('010d004500010001000100000000550002', 1); #switching clock/temp
sendRaw('010d004500010001000001000000550002', 1); #switching clock/calendar
sendRaw('010d004500010001010001000000560002', 1); #switching clock/weatherani./calendar
sendRaw('010d004500010001010100000000560002', 1); #switching clock/weatherani./temp
sendRaw('010d004500010001010101000000570002', 1); #switching clock/weatherani./temp/calendar
sendRaw('010d004500010001000101000000560002', 1); #switching clock/temp/calendar
sendRaw('010d004500010001000000000000540002', 1); #     only clock without change color


Firmware

Für Aurabox, Timebox, TimeboxEvo und TimeboxMini.

Laut Infos, geht der Updater der neueren Firmware bei der Timebox nicht. Zum Updaten
soll das Burntool der älteren Firmware genommen werden.

https://www.dropbox.com/sh/gg02tdkzg9bgl85/AADVdinsjiNkvCNgpPfzxQpNa?dl=0

Update: Meine TimeboxEvo hat sich nach starten der Divoomapp sofort ein Update gezogen.
Die Dateien befanden sich auf dem Handy unter /sdcard/Divoom/update. Ich habe sie mal
mit hochgeladen. Benötigt werden sie vielleicht mal, wenn nix anderes mehr funktioniert um
die Box zu retten :)


!!!  Achtung, nach dem Update ändert sich wahrscheinlich die MAC  !!!


Testscripte (aktualisiert am 19.09.19)
https://github.com/mumpitzstuff/fhem-Divoom

Auf Basis von mumpitzstuff seinem Perlcode, meine Scriptsammlungen.

Für die Aurabox 10x10Pixel
https://www.dropbox.com/s/rshl4cc69sbbghu/d10x10.rar?dl=0

Für TimeboxEvo/Pixoo 16x16Pixel
https://www.dropbox.com/s/zh7ybjlr2difvqi/d16x16.rar?dl=0

Die Ordner nach/opt/fhem kopieren. Außerdem muss die MAC in jedem Script angepasst werden.

Was realisiere ich im Moment damit?

- Midnight, Box schaltet Display auf Dark.
- Kaffee fertig mit Sprachausgabe und Customanimation.
- Waschmaschine fertig mit Sprachausgabe und Customanimation.
- Trockner fertig mit Sprachausgabe und Customanimation.
- Temperatur schwelle meines Holzkessels mit Sprachausgabe und Animation für aufsteigende/absteigende Temp.
- MPD startet, Box schaltet von Uhr auf Equalizer. MPD stoppt, Box schaltet zurück auf Uhr.
- Allgemein Internetradio und Sprachausgabe


Scripte per SSH remote oder aus Fhem heraus ausführen

Um Scripte remote oder aus Fhem auszuführen, muss das Arbeitsverzeichnis (Pfad) angegeben werden.


Beispiel:

Script auf dem gleichen Server im Terminal starten.
#!/usr/bin/perl
require "./divoom.pl";

# load picture
my $pic = convertImageTBEVO('timebox/tb_evo.png', 16);

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  # set clock
  sendPlain('4500', 5);
  # set picture
  sendPlain('44000A0A04AA2D00000000'.$pic, 10, 0);
  disconnectDivoom();
}

Script auf einem Remoteserver per SSH oder aus Fhem heraus starten.
#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";

# load picture
my $pic = convertImageTBEVO('/opt/fhem/divoom/timebox/tb_evo.png', 16);

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  # set clock
  sendPlain('4500', 5);
  # set picture
  sendPlain('44000A0A04AA2D00000000'.$pic, 10, 0);
  disconnectDivoom();
}


Fhemsetup (hier meine Aurabox)

AuraBox als Dummy
defmod AuraBox dummy
attr AuraBox devStateIcon ExampleAni:refresh Equalizer:rc_VOLUP Time:clock DisplayBright:FS20.on DisplayDark:FS20.off DisplayOff:light_light Countdown:time_timer Temp:temp_temperature
attr AuraBox icon taster_ch6_3
attr AuraBox room 02.Küche
attr AuraBox setList state:ExampleAni,Time,Temp,Equalizer,DisplayBright,DisplayDark,DisplayOff,Countdown,SpinningTriangle,WalkingTriangle,Pixelanimation,OnlyColor,Fire,Firework,Kaffee,Washer,Trockner,Radio,Test,ColorBlack,TempUp,TempDown,Connect,Disconnect
attr AuraBox stateFormat Status:state / signalstaerke
attr AuraBox subType MPD
attr AuraBox userReadings signalstaerke {qx(sudo hcitool rssi 11:75:58:45:59:81 | awk '{print $4}' &)}
attr AuraBox webCmd state

setstate AuraBox Status:TempUp / RSSI return value: -13\

setstate AuraBox 2019-09-19 19:23:28 signalstaerke RSSI return value: -13\

setstate AuraBox 2019-09-19 19:23:28 state TempUp

Jedes Script als Notify. Hier nur ein Beispiel

defmod AuraBox_Ani01 notify AuraBox:ExampleAni {system("sudo perl /opt/fhem/divoom/ExampleAni.pl &")}


Setup für Raspi4, Raspi3 + RaspiZeroW

Mein Setup läuft auf den 3 Raspis unter folgender Konfiguration.

Abhängigkeiten
sudo apt install libnet-bluetooth-perl
apt-get install libimager-perl
sudo apt-get install libgd-graph-perl oder sudo apt-get install llibgd-perl

Ich nutze Bluealsa. Damit funktioniert RFCOMM sowie auch Audio.
sudo apt-get install bluealsa

Pairing der Box per bluetoothctl. Hier ist ein super Tutorial.
https://www.sigmdel.ca/michel/ha/rpi/bluetooth_n_buster_01_en.html

Damit auch Audio funktioniert, asound.conf hinzufügen/bearbeiten im Verzeichnis /etc
pcm.!default {
        type plug
        slave.pcm {
                type bluealsa
                device "XX:XX:XX:XX:XX:XX"   #<- hier passende Mac des Speakers eintragen
                profile "a2dp"
delay 10000
        }
}

Die divoom.pl muss noch angepasst werden.

- Aurabox,Timebox und TimeboxMini
my $escaped = 1;$port = 4 if (!defined($port));

- TimeboxEvo/ Pixoo
my $escaped = 0;$port = 1 if (!defined($port));

Jetzt nur noch.
shutdown -r now
Getestet mit RaspbianBuster. Mehr sollte nicht notwendig sein.
Falls es Probleme gibt, siehe "RFCOMM + Bluetooth Autostart einrichten unter Stretch".


Wichtig. In der Vergangenheit war es so, das erst nach einem Neustart alles richtig funktionierte!!!

Hinweis
Der Pixoo connected nicht dauerhaft. Dies funktioniert nur bei
Bluetoothlautsprechern wie Aurabox,Timebox,TimeboxEvo,...


RFCOMM + Bluetooth Autostart einrichten unter Stretch

https://www.sigmdel.ca/michel/ha/rpi/bluetooth_01_en.html

Zu Zeiten von RaspianStretch klappte die automatische Verbindung zur Bluetoothbox meist nicht,
auch wenn sie gepairt war. Die Schritte weiter oben sind Standard. Folgende Ergänzungen waren Pflicht.

/etc/rc.local
echo -e "connect XX:XX:XX:XX:XX:XX" | bluetoothctl
rfcomm bind 0 XX:XX:XX:XX:XX:XX 1
Die "XX:XX:XX:XX:XX:XX" durch eure MAC der Divoom ersetzen.


RFCOMM als Service (outdatet) Ich lasse es stehen, falls ich doch Unrecht habe.

sudo nano /etc/systemd/system/dbus-org.bluez.service
Dort das eintragen.
ExecStart=/usr/lib/bluetooth/bluetoothd -C --noplugin=sap
ExecStartPost=/usr/bin/sdptool add SP

Für RFCOMM einen Service erstellen.
sudo nano /etc/systemd/system/rfcomm.service
Dort das eintragen.
[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service

[Service]
ExecStart=/usr/bin/rfcomm watch remote_device_MAC 1
Restart=on-failure
RestartSec=5s
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Jetzt starten mit.
sudo systemctl enable rfcomm



Funktionsüberprüfung


SDPTOOL

Gibt darüber Auskunft, ob wirklich eine RFCOMM-Verbindung möglich ist.

root@raspberrypi:/opt/fhem/divoom# sdptool browse 11:75:68:C9:7D:36
Browsing 11:75:68:C9:7D:36 ...
Service Name: Serial Port 1
Service RecHandle: 0x10004
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1

Channel = RFCOMM-Port
Channel ist wichtig für das Script. Aurabox,Timebox und TimeboxMini nutzen Channel 4,
TimeboxEvo/Pixoo und neuere 16x16 Pixelboxen nutzen Channel 1.
Außerdem muss die richtige Escapesequence gesetzt werden. Siehe dazu oben:

"Die divoom.pl muss noch angepasst werden."

Rfcomm

Funktioniert z.B. nur, wenn es in der rc.local gesetzt ist. Sehe ich jetzt aber als optional und unwichtig.

root@raspberrypi:/opt/fhem/divoom# rfcomm
rfcomm0: 11:75:68:C9:7D:36 channel 1 clean

Bluetooth.Service

Den Bluetooth.Service kontrollieren mit.

sudo systemctl status blue*
Ist alles ok, sieht die Ausgabe Fehlerfrei aus.

root@raspi4fhem:~# sudo systemctl status blue*
● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-01 22:38:43 CEST; 17min ago
     Docs: man:bluetoothd(8)
 Main PID: 426 (bluetoothd)
   Status: "Running"
    Tasks: 1 (limit: 4915)
   Memory: 3.6M
   CGroup: /system.slice/bluetooth.service
           └─426 /usr/lib/bluetooth/bluetoothd --noplugin=sap

Oct 01 22:38:43 raspi4fhem systemd[1]: Starting Bluetooth service...
Oct 01 22:38:43 raspi4fhem bluetoothd[426]: Bluetooth daemon 5.50
Oct 01 22:38:43 raspi4fhem systemd[1]: Started Bluetooth service.
Oct 01 22:38:43 raspi4fhem bluetoothd[426]: Starting SDP server
Oct 01 22:38:43 raspi4fhem bluetoothd[426]: Excluding (cli) sap
Oct 01 22:38:43 raspi4fhem bluetoothd[426]: Bluetooth management interface 1.14 initialized
Oct 01 22:38:43 raspi4fhem bluetoothd[426]: Endpoint registered: sender=:1.6 path=/org/bluez/hci0/A2DP/SBC/Source/1

● bluetooth.target - Bluetooth
   Loaded: loaded (/lib/systemd/system/bluetooth.target; static; vendor preset: enabled)
   Active: active since Tue 2019-10-01 22:38:43 CEST; 17min ago
     Docs: man:systemd.special(7)

Oct 01 22:38:43 raspi4fhem systemd[1]: Reached target Bluetooth.

● bluealsa.service - BluezALSA proxy
   Loaded: loaded (/lib/systemd/system/bluealsa.service; static; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-01 22:38:43 CEST; 17min ago

Erscheinen folgende oder ähnliche Fehler,

Failed to set mode: Rejected (0x0b)
Failed to set privacy: Rejected (0x0b)

empfiehlt es sich in /lib/systemd/system/bthelper@.service eine Verzögerung von 2 Sek. einzufügen.

[Service]
Type=simple
ExecStartPre=/bin/sleep 2
ExecStart=/usr/bin/bthelper %I


Quelle:
https://github.com/RPi-Distro/pi-bluetooth/issues/8


Rawcodesniffing

Um Rawcodes der Divoomboxen zu sniffen, habe ich folgendes Setup verwendet.

Android 8.1

1. Bluetooth ein
2. Einstellungen-->System-->Entwickleroptionen-->Bluetooth HCI-Snoop-Protokoll aktivieren
3. Bluetooth aus
4. Bluetooth ein
5. Einstellungen-->System-->Entwickleroptionen-->Android-Debugging an
6. Einstellungen-->System-->Entwickleroptionen-->Debugging-Benachrichtigung an
7. Einstellungen-->System-->Entwickleroptionen-->ADB über Netzwerk an
8. Irgendwas kurzes in der Divoomapp zur Timebox senden oder ändern des Setups.

In Windows

1. adb devices
2. adb connect ipDesHandys
3. adb shell
4. su
5. chmod 777 /data/misc/bluetooth/logs/btsnoop_hci.log
6. exit
7. adb pull /data/misc/bluetooth/logs/btsnoop_hci.log
8. btsnoop_hci.log befindet sich im ADB-Verzeichnis auf Windows
9. Log in Wireshark öffnen und nach Protocol sortieren.

Tip:
Durch aus- und wieder anschalten von Bluetooth wird der Log im Handy genullt.
Sehr hilfreich, um schnell die gewünschten Rawmessages zu bekommen.

Wenn nichts funktioniert, dann diese Option.

- Auf Android unter Entwickleroptionen "Bluetooth HCI-Snoop-Protokoll aktivieren" anschalten.
- Außerdem "Android-Debugging" und "ADB über Netzwerk" aktivieren.
- Neustart des Handys und per Bluetooth mit der Divoombox verbinden.
- Dann gezielt Funktionen durchschalten.
- Jetzt per ADB einen Bugreport erstellen.
adb devices
adb connect "Ip des Handys"
adb bugreport anewbugreportfolder
- Nun wurde eine Zipdatei erstellt mit dem Namen anewbugreportfolder.zip.
- Das Zip öffnen und entpacken.
- In dem Ordner ADB\anewbugreportfolder\FS\data\misc\bluetooth\logs befindet sich der Log btsnoop_hci.log.
- Diesen mit dem Programm Wireshark öffnen.
- Dort oben in der Bar auf "Protocol" klicken und dann ganz runterscrollen.
- Jetzt sollte direkt "SPP" kommen.
- Wichtig ist als "Source" euer Handy.
- Anklicken und nun nur noch "Bluetooth SPP Packet" ausklappen. Dort findet ihr dann einen Hexstream wie diesen
Data:010d004500010001000000f5a623120202

Gif handling

Gif's aus der DivoomApp zu Einzelbildern konvertieren


- Damit die Animation lokal gespeichert werden kann, muss ein Account angelegt werden. Sowie eingeloggt sein.
- In der App die gewünschte Animation durch langes drücken "In Gallery des Systems speichern".
- Danach ist das Gif auf dem Handy/Tablet unter /sdcard/DCIM/Divoom/*.gif zu finden.
- Jetzt das Gif auf dem PC kopieren und mit IrfanView öffnen.
- Dort Optionen -->Extrahiere alle Bilder...  - Format: BMP - Windows Bitmap.
- Jetzt Datei --> Batch(Stapel)-Konvertierung/Umbenennung...
- Zielformat: PNG.
- Haken bei Spezial-Optionen aktiv.
- Auf "Setzen" klicken.
- Größe ändern auf 16 x 16 Pixel.
- Haken bei Farbtiefe inaktiv und auf Ok drücken.
- Oben rechts den Ordner wählen und alle BMP's markieren und auf "Hinzufügen" drücken.
- Zielverzeichnis wählen und auf "Starten drücken".


Im Terminal superfast.

-  sudo apt-get install imagemagick
- in das Gif-Verzeichnis wechseln
- convert file.gif -resize x16 file.png


Gif direkt per Script senden


Das Format welches von der App an die Box gesendet wird, ist anders als das der älteren Boxen. Bis jetzt ist es noch nicht integriert.
Folgende Alternativen stehen zur Verfügung.

- Rawcodesniffing
  Damit funktioniert die Animation zu 100%

- Einen Loop bauen
  Ist in meinem Script setGif.pl enthalten

#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";

my $i;
my @png = readAnimatedGif('/opt/fhem/divoom2/dSizes/Test.gif');


# load picture
for ($i = 0; $i < scalar(@png); $i++)
{
  $png[$i] = convertImageTBEVO($png[$i], 16);
}

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  # set clock
  #sendPlain('4500', 5);
  for (my $n = 0; $n < 3; $n++)  # Hier die Wiederholungen einstellen, jetzt sind es 3
  {
    for ($i = 0; $i < scalar(@png); $i++)
    {
      # set picture
      sendPlain('44000A0A04AA2D00000000'.$png[$i], 0.1, 0);
    }
  }
  disconnectDivoom();
}



#!/usr/bin/perl
require "./divoom.pl";

my $i;
my @png = readAnimatedGif('helloween.gif');

# load picture
for ($i = 0; $i < scalar(@png); $i++)
{
  $png[$i] = convertImageTBEVO($png[$i], 16);
}

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  # set clock
  sendPlain('4500', 5);
  for ($i = 0; $i < scalar(@png); $i++)
  {
    # set picture
    sendPlain('44000A0A04AA2D00000000'.$png[$i], 2, 0);
  }
  disconnectDivoom();
}


Scripte


#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $fyear = 1900 + $year;

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  sendPlain('18'.sprintf("%02X%02X%02X%02X%02X%02X%02X", ($year % 100),($fyear / 100),($mon + 1),$mday,$hour,$min,$sec), 1);
  disconnectDivoom();
}


11x11 Devices

#!/usr/bin/perl
require "/opt/fhem/divoom/divoom.pl";
$temp =  qx(/opt/fhem/fhem.pl 7072 <meinPasswort> "{sprintf('%.0f',ReadingsVal('MeinWetter','temperature',''))}");

if (connectDivoom('11:75:58:45:59:81'))
{
  sendPlain('450100', 5);
  sendPlain('5F'.sprintf("%02X", $temp).'00', 2, 0);
  disconnectDivoom();
}

16x16 Devices

#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";
$temp =  qx(/opt/fhem/fhem.pl 7072 <meinPasswort> "{sprintf('%.0f',ReadingsVal('MeinWetter','temperature',''))}");

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  sendPlain('4500010000000100000000550002', 1);
  sendPlain('5F'.sprintf("%02X", $temp).'00', 2, 0);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox
Beitrag von: jonah am 08 Januar 2018, 12:38:12
Hej. Ich habe auch eine TimeBox und fände eine Möglichkeit, sie in fhem einzubinden, mega gut.

Gesendet von meinem ONEPLUS A3003 mit Tapatalk

Titel: Antw:Divoom Aurabox + Timebox
Beitrag von: achtball am 14 Januar 2018, 21:39:04
Evtl. ist dies hier interessant:
AuraBox:
https://github.com/derHeinz/divoom-adapter
TimeBox:
https://github.com/ScR4tCh/timebox

Mein heutiger Versuch mit meiner AuraBox zu "sprechen" hat jedoch nicht auf Anhieb geklappt.

Evtl. schafft es jemand ein Fhem-Modul daraus zu stricken.

Die Einsatzmöglichkeiten der Boxen als Statusdisplay oder zur Notifkation sind sehr vielversprechend, wie ich finde.

Viele Grüße,

achtball
Titel: Antw:Divoom Aurabox + Timebox
Beitrag von: schwatter am 17 Januar 2018, 22:15:39
Für 36€ bei Amazon gebraucht mit sehr gut geschossen.
Ich probier mich auch mal   :D
Titel: Antw:Divoom Aurabox + Timebox
Beitrag von: schwatter am 20 Januar 2018, 11:37:03
Meine Aurabox ist da. Jetzt hab ich den letzten Abend damit verbracht, die Box als Bluetoothlautsprecher an meinen Raspi
zu betreiben. Koppeln klappt wunderbar, nur die Einrichtung mit Pulseaudio klappt nicht. Das Problem ist wohl, das Pulseaudio
nicht mit einem Headless-Raspberry zurechtkommt. Also ein generelles Problem.
Ich habe schon alles an Anleitungen durchsucht....komme aber nicht weiter. Vielleicht hat wer einen Tip oder weiß von
einer Pulseaudioalternative.
Titel: Antw:Divoom Aurabox + Timebox
Beitrag von: Hembo am 01 März 2018, 20:53:09
Ich bin nun auch im Club und fände die Timebox klasse ... Hat schon jemand Fortschritte gemacht ?
Titel: Antw:Divoom Aurabox + Timebox
Beitrag von: schwatter am 15 September 2018, 22:17:48
Habe mal wieder Lust gehabt am Install zu basteln. Endlich mal Erfolg.
Setup ist ein Raspi3 mit aktuellem Stretch Headless.

Als erstes die Zip vom Heinz

https://github.com/derHeinz/divoom-adapter/archive/master.zip
Diese habe ich nach /home/pi/divoom entpackt. Im Anschluss war es etwas tricky alle Pakete
zu finden. Hier ist hoffentlich meine komplette Liste.

sudo apt-get update
sudo apt-get install python-pip
pip install pybluez
sudo apt-get install libboost-python-dev libboost-thread-dev libbluetooth-dev libglib2.0-dev
sudo apt-get install python-dev python-setuptools
sudo apt-get install libjpeg62
sudo apt-get install libjpeg62-dev
sudo apt-get install zlib1g-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install liblcms1-dev
pip install pillow
pip install image

Danach gab es noch Probleme mit Rfcomm.
Folgendes musste ich anpassen.

sudo nano /etc/systemd/system/dbus-org.bluez.service

Dort das eintragen.

ExecStart=/usr/lib/bluetooth/bluetoothd -C --noplugin=sap
ExecStartPost=/usr/bin/sdptool add SP

Dann den Service erstellen.

sudo nano /etc/systemd/system/rfcomm.service
mit folgenden Inhalt.

[Unit]
Description=RFCOMM service
After=bluetooth.service
Requires=bluetooth.service

[Service]
ExecStart=/usr/bin/rfcomm watch remote_device_MAC 1
Restart=on-failure
RestartSec=5s
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Danach ein,

sudo systemctl enable rfcomm
Und in die  /etc/rc.local

rfcomm bind 0 XX:XX:XX:XX:XX:XX 1
Die "XX:XX:XX:XX:XX:XX" durch eure MAC der Divoom ersetzen.

Jetzt "shutdown -r now"




Die letzte Hürde war, die MAC direkt in die example.py (als Beispiel) einzutragen. Dort nach

DIVOMM_ADR = sys.argv[1]
und durch

DIVOMM_ADR = "XX:XX:XX:XX:XX:XX"  # sys.argv[1]
ersetzen.

Endlich funktioniert die Ausgabe über Terminal, wenn folgendes eingegeben wird.

root@raspiFhem:/home/pi/divoom# python example.py
firework
showing files
blinking
show time
show temperature
write hello world
scrolling
program firework
Titel: Antw:Divoom Aurabox + Timebox
Beitrag von: schwatter am 16 September 2018, 11:40:15
So, auch Divoom_Timebox_CLI funktioniert. Bei mir natürlich nur eingeschrenkt, da ich die Aurabox habe.

Folgendes musste ich zusätzlich installieren.

python -m pip install appdirs
python -m pip install click
python -m pip install click_spinner
python -m pip install python-dateutil
python -m pip install colour


Danach habe ich noch die MAC in der timebox.py unter "KNOWN_DEVICES = []" eingetragen.

KNOWN_DEVICES = ["XX:XX:XX:XX:XX:XX"]

root@raspiFhem:/home/pi/divoom1/timebox# python timebox.py
Usage: timebox.py [OPTIONS] COMMAND [ARGS]...

Options:
  --address TEXT
  --debug
  --disconnect
  --keepconnected
  --help           Show this message and exit.

Commands:
  animation  display_animation
  clock      display time
  fmradio    control fmradio
  image      display_image
  raw        raw message
  settime    set time
  temp       display temperature, set color
  view       change view
  volume     set volume
root@raspiFhem:/home/pi/divoom1/timebox# python timebox.py clock
-checking device XX:XX:XX:XX:XX:XX                                             root@raspiFhem:/home/pi/divoom1/timebox# python timebox.py -- debug clock
Usage: timebox.py [OPTIONS] COMMAND [ARGS]...

Error: No such command "debug".
root@raspiFhem:/home/pi/divoom1/timebox# python timebox.py --debug clock
using knwon devices to find timebox
-checking device XX:XX:XX:XX:XX:XX                                             connecting to XX:XX:XX:XX:XX:XX
-> ['01', '04', '00', '45', '00', '49', '00', '02']
<- ['01', '06', '00', '04', '45', '55', '00', 'a4', '00', '02']
root@raspiFhem:/home/pi/divoom1/timebox#


Toll ist, das Timebox CLI Rawdata senden ermöglicht. Mal sehen wie es funktioniert, ich hatte Rawdata von der Debugausgabe
kopiert und versucht zu senden, klappte leider nicht. Ich denke, es liegt an der Formatierung. Vielleicht wer einen Tip?

edit

Zwischen Celsius und Fahrenheit switchen


Celsius
python timebox.py --address XX:XX:XX:XX:XX:XXtemp --color "#ff0000"
Fahrenheit
python timebox.py --address XX:XX:XX:XX:XX:XX temp --color "#ff0000" --f



Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 16 September 2018, 12:42:45
Damit hatte ich auch rumgespielt, allerdings kann man kaum was machen. Simple Timer setzen oder sowas funktioniert leider nicht. Und Bilder hat mir das Ding auch nur immer 1-2s lang angezeigt und hat dann wieder auf die Uhrzeit umgeschaltet. Insgesamt war die Steuerung der Timebox damit kaum möglich. Wie ist dein Eindruck?
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 16 September 2018, 13:53:35
Mh, ich weiß noch nicht, was ich davon halten soll. Finde aber, Potenzial ist da.
Das Video macht Lust auf mehr.

https://www.youtube.com/watch?v=AxLrxUsjFd8&index=4&list=PLq47UUwc4xVlnbMmUfIOsWvHgIruN_hCf&t=0s

Auch gerade, weil LaMetric so teuer ist. Basteln ist immer möglich, aber Out-Of-The-Box und günstig fehlt einfach.

edit:
Hier gibts etwas mehr Doku.

https://github.com/MarcG046/timebox/tree/master/doc

edit2:

etwas weiter mit RAW. Einfach alle Zahlen zusammenfügen und senden.

Schaltet auf Uhr

python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 0104004500490002


Schaltet auf Temp

python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 0104004503044a0002



Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 16 September 2018, 15:23:42
Habe noch ein bisschen experimentiert. Hier z.B ein paar Rawcommands für meine Aurabox.

DisplayOff     python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 0104003200360002
DarkLight     python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 010400323f750002
BrightLight python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 01040032d208030402
ShowEqualizer python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 010500450306004d0002
ShowTemp python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 0104004503044a0002
ShowTime python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 0104004500490002
TriangleAni python timebox.py --debug --address XX:XX:XX:XX:XX:XX raw 01050045030900500002

Und hier eine fertige Waschmaschinen.py von mir. Gehört ins das gleiche Verzeichnis des Aura_CLI's von derHeinz.
Damit läuft ein Runningtext mit "Waschmaschine ist fertig" in rot.

import sys
import time
import divoom_protocol
import divoom_device
import divoom_image


DIVOMM_ADR = "XX:XX:XX:XX:XX:XX" # sys.argv[1]
thing = divoom_protocol.DivoomAuraBoxProtocol()
dev = divoom_device.DivoomDevice(DIVOMM_ADR)

def washer_finished():
img = divoom_image.draw_text_to_image(text="WASHER", color=divoom_image.BMP_RED, size=(70, 10))
sliced_images = divoom_image.horizontal_slices(img)
# create divoom packages
raw_data_packages = []
for img in sliced_images:
raw_data_packages.append(divoom_image.to_divoom_data(img))
# create BT divoom packages
pkgs = thing.create_animation_packages(raw_data_packages, 1)
for i in range(0, len(pkgs)):
dev.send(pkgs[i])

dev.connect()
print("write washer finished")
washer_finished()
time.sleep(30)
dev.disconnect()


edit:

Habe mal den ganzen Ordner nach /opt/fhem verschoben.
Aufrufen aus Fhem klappt auch.

{system("sudo python /opt/fhem/divoom/waschmaschine.py")}


edit2:

Ok, stelle gerade fest, das der Text nicht komplett durchläuft. Abgehackt und fängt von vorne an.


Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 16 September 2018, 20:10:47
Hier eine blink.py, diese habe ich aus der example.py erstellt. Damit wird ein Symbol blinkend signalisiert. Im Anschluss wird wieder zur Uhr
geschaltet.

import divoom_protocol
import divoom_device
import divoom_image

from PIL import Image
import time
import sys
import os
import bluetooth

# create time
hour12 = time.strftime('%I')
minute = time.strftime('%M')
second = time.strftime('%S')


DIVOMM_ADR = "11:75:58:6D:02:93" # sys.argv[1]
thing = divoom_protocol.DivoomAuraBoxProtocol()
dev = divoom_device.DivoomDevice(DIVOMM_ADR)

def imagename(name):
return os.path.join(os.path.dirname(__file__), "images", name)

def show_files(filelist, delay=1):
for f in filelist:
bytes = divoom_image.image_to_divoom(f)
pkg = thing.create_image_package(bytes)
dev.send(pkg)
time.sleep(delay)

def blink(filename):
for c in range(1, 20):
f = ""
if (c % 2 == 0):
f = filename
else:
f = imagename("black.bmp")
bytes = divoom_image.image_to_divoom(f)
pkg = thing.create_image_package(bytes)
dev.send(pkg)
time.sleep(0.5)

def old_to_new(old_img, new_img, way=1):

sliced_images = divoom_image.scroll_between(old_img, new_img, way)
pkgs = []
# prepare the data before sending it
for img in sliced_images:
img_raw_bytes = divoom_image.to_divoom_data(img)
img_bytes = thing.create_image_package(img_raw_bytes)
pkgs.append(img_bytes)
# send single images to divoom
for pkg in pkgs :
dev.send(pkg )
time.sleep(0.1)


dev.connect()
files = [imagename("example7.bmp")]
print("showing files")
show_files(files)

print("blinking")
blink(imagename("example7.bmp"))
time.sleep(3)

print("setting time to "  + hour12 + ":" + minute + ":" + second)
dev.send(thing.create_set_time_package(hour12, minute, second))
print("showing time")
dev.send(thing.create_time_package())
time.sleep(5)

dev.disconnect()

root@raspiFhem:/opt/fhem/divoom# python blink.py
showing files
blinking
setting time to 08:04:50
showing time
root@raspiFhem:/opt/fhem/divoom#
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 17 September 2018, 00:55:14
Ich habe leider die Timebox und keine Aurabox. Die Bibliothek dafür ist sehr viel eingeschränkter wie mir scheint. Schrift kann ich dort gar nicht einstellen und auch keine Zeit setzen. Wie das Protokoll funktioniert, ist mir soweit auch klar und einfache Dinge sollten leicht umsetzbar sein. Ich hatte bisher keine Zeit gefunden, aber ich wollte immer mal versuchen Perl anstatt Python zu verwenden, um dann im ersten Schritt RAW Kommandos absetzen zu können. Ich werde mal versuchen die Zeit dafür zu finden. Wenn man erst mal eine Basis hat, dann kann man die sicher leicht erweitern.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 17 September 2018, 13:36:51
Für alle Interessierten,

habe in dem Youtubevideo von bigboss97 einen Link gesehen.
Dieser führt zu seinem Onlinemessagegenerator.

http://users.tpg.com.au/folksfun/timebox/

edit:

Der Gen. ist nicht schlecht. Um die Boxfunktionen durchzuschalten, benötigt man nur bei F1=0x45 und F2=0x00 (und dann fortlaufend).

AuraBox (Timebox hat bestimmt eine abweichende Reihenfolge)
DisplayOff 0104003200360002
DarkLight 010400323f750002
BrightLight 01040032d208030402
Time 0104004500490002
Temp 0104004503044a0002
OnlyColor 0104004503054b0002
Equalizer 0104004503064c0002
Pixelanimation 01040045044d0002
WalkingTriangle 01040045054e0002
SpinningTriangle 01040045064f0002
Countdown 0104004507500002
Blackscreen 0104004508510002



Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 18 September 2018, 10:39:14
Habs gestern mal probiert und wie zu erwarten kriege ich RFCOMM nicht zum laufen unter Linux. Pairen scheint irgendwie noch zu gehen, denn das Bluetooth Symbol verschwindet auf der Timebox, aber dann kann ich weder Daten senden noch empfangen. Der übliche Krampf mit Bluetooth unter Linux (Debian Stretch).
Auf meinem Android Handy  hingegen kann ich über die App pairen und dann über andere Tools manuell RAW Nachrichten erstellen und absenden. Das ist aber leider nichts, was sich irgendwie sinnvoll in FHEM nutzen lassen würde.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 18 September 2018, 11:57:55
Hast du zufällig ein externes Dongle zum testen?
Ansonsten hat das bei mir super geklappt unter Stretch.
Anleitung oben. Audio + RFCOMM funktioniert top.
Es darf nur nich zur gleichen Zeit gesendet werden,
sonst hängt sich Audio auf und verzerrt.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 18 September 2018, 15:32:50
Ich habe einen externen Dongle dran hängen, der auch schon mit einem Lautsprecher gekoppelt ist. Deine Dinge habe ich eigentlich alle übernommen, bei mir führt es aber leider nicht zum Erfolg. Ich muss mal gucken ob ich irgendwo temporär noch einen anderen Raspberry aufsetze, damit ich mir nichts auf meinem Produktivsystem platt mache...
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 18 September 2018, 15:38:05
Ok. Was mir noch einfällt. Ich nutze bluez-alsa.
Das funktioniert sehr gut. Hatte mit Pulseaudio
+ Bluetooth nur Probleme.

edit:

apt-get install bluealsa
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 18 September 2018, 18:43:57
Ich benutze Pulseaudio und habe damit eigentlich keine Probleme.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 18 September 2018, 22:03:03
Mit einem neu aufgesetzten Pi gehts mit deiner Anleitung. Die Installation von pybluez sollte aber erst vor pillow erfolgen, sonst fehlen Header, die durch die anderen Dinge erst noch installiert werden müssen.

Danke schon mal an dieser Stelle. Werde jetzt die nächsten Tage versuchen den Code nach Perl zu transferieren und ein raw send zu implementieren.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 20 September 2018, 22:21:07
Sry hat leider länger gedauert als geplant, da ich einige Zeit gebraucht habe die Instabilitäten zu beseitigen. Irgendwie musste ich am Ende ein flush() auf das Filehandle ausführen, um die daten an die Timebox zu schicken. Alle anderen Versuche waren irgendwie instabil. Was mir auch noch nicht gelungen ist, ist das zurück lesen der Antwort. Daran muss ich noch arbeiten, im Moment gehts aber noch ohne.

Damit es funktioniert, muss folgendes vorab installiert werden:

sudo apt install libnet-bluetooth-perl
#!/usr/bin/perl
use strict;
use warnings;
use Net::Bluetooth;

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 "\ndone\n";
}

sub connectTB($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
  #$TIMEBOX->autoflush(1);

  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();
    }
  }
 
  print "\ndone\n";

  return $success;
}

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

sub sendRawTB($$)
{
  my $data = shift;
  my $timeout = shift;
  my $ret;
  my $retry = 0;
 
  print "Send raw command: $data\n";

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

    sysread($TIMEBOX, $ret, 256);
    if (defined ($ret))
    {
      $ret = unpack('(H2)*', $ret);
      $ret =~ s/[^[:print:]]+//g;
      print "Device answer: $ret";
    }

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

  sleep($timeout);

  print "\ndone\n";
}

if (connectTB('11:75:58:7A:60:3B'))
{
  sendRawTB('0104004507500002', 5);
  sendRawTB('0104004503044a0002', 5);
  sendRawTB('0104004500490002', 5);
  disconnectTB();
}

Was auch immer blöd ist, ist die Tatsache, das nach dem disconnect immer das Bluetooth Zeichen rumblinkt. Das könnte man nur verhindern, wenn man innerhalb eines Moduls eine dauerhafte Verbindung aufbaut. Aber alles zu seiner Zeit...

TODO:
- Antworten der Timebox zurücklesen und eventuell Senden wiederholen
- Protokoll implementieren, so das beliebige Daten Escaped werden und die Nachricht korrekt mit Header, Länge und Checksumme zusammen gesetzt wird.
- verschiedene Kommandos der App sniffen und mit dem Script nachvollziehen zu können (setzen von Bilder, Timern, Einstellungen usw.)
- Unterschiede zwischen verschiedenen Divoom Produkten ermitteln und wenn möglich Nachrichten entsprechend anpassen oder Liste der möglichen Kommandos Gerätespezifisch ablegen
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 20 September 2018, 22:43:34
Super! Heute leider keine Zeit mehr zum testen. Morgen komme ich aber dazu.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 21 September 2018, 18:59:05
Ok, habe meine MAC eingetragen und bekomme

Create RFCOMM client (XX:XX:XX:XX:XX:XX)...
connect error: Host is down

Mal schauen woran es liegen könnte. Habe danach direkt den PythonCli von derHeinz gestartet.
Lief normal durch.

edit:

Ok, mein Fehler, es funktioniert. Falsche MAC von wem auch immer, deine war es nicht.

root@raspiFhem:/opt/fhem/divoom# perl divoom.pl
Create RFCOMM client (XX:XX:XX:XX:XX:XX)...
done
Send raw command: 0104004507500002
done
Send raw command: 0104004503044a0002
done
Send raw command: 0104004500490002
done
Send raw command: 0104004503064c0002
done
root@raspiFhem:/opt/fhem/divoom#

edit2:

Bei mir ist alles ok, habe kein disconnect der Box (blinkendes Bluetoothzeichen).
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 22 September 2018, 00:56:23
Habe den Code oben noch etwas robuster gestaltet. Rückgaben werden jetzt ausgewertet und die Nachricht gegebenenfalls wiederholt. Der nächste Schritt wird sein, eine Nachricht zusammen zu setzen und beispielsweise ein Bild zu schicken. Muss aber gucken wann ich die Zeit dazu finde...
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 September 2018, 10:28:34
Wäre es viel Aufwand für dich, die Basics als Modul zu bauen? So das ich folgendes aus Fhem setzen könnte.

set Aurabox Blackscreen
set Aurabox Equalizer
set Aurabox .............

Damit wären schon diverse Scenen möglich.


edit:

Habe gerade das Script nochmal während der Audioausgabe getestet.  Funktioniert auch! :) Bedeutet, folgendes wäre machbar,

Box steht auf Uhr, ich schalte auf MPD (Audio spielt) und die Anzeige wechselt per DOIF z.B auf Equalizer.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 September 2018, 13:39:55
Hab vorerst ein paar Scripte erstellt und eingebunden. Tolle Sache  :)

Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 22 September 2018, 15:32:24
Da soll es ja hingehen. Ich bastel aber erst noch ein wenig low Level rum, das macht es einfacher die Basics zu testen. Das Modul kommt dann noch...
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 24 September 2018, 21:22:54
Hab wieder ein paar Minuten gefunden und folgendes hinzugefügt:

- wenn keine Antwort kommt (falsches Kommando), dann bleibt das Script nicht mehr stehen
- convertRawToPlain() entfernt von einer Raw Nachricht Prefix, Postfix und Checksumme und Unescaped die Daten (das Ergebnis kann für die folgende Funktion verwendet werden)
- sendPlainTB(): Damit kann man nur Daten übergeben und die Funktion fügt, Prefix, Postfix, Checksumme und eventuell notwendige Escape Sequenzen dazu.

Damit kann man jetzt auch mal in einer Schleife verschiedene Dinge durchprobieren lassen und sieht dann, ob das Gerät diese annimmt oder ablehnt.

#!/usr/bin/perl
use strict;
use warnings;
use Net::Bluetooth;
use IO::Select;

sub listDevices();
sub connectTB($);
sub disconnectTB();
sub sendRawTB($$);
sub sendPlainTB($$);
sub convertRawToPlain($);

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";
}

sub connectTB($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
 
  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();
    }
  }
 
  print "\ndone\n\n";

  return $success;
}

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

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

  $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";
      }
    }

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

  if ($retry > 3)
  {
    print "Failed!";
  }
  else
  {
    sleep($timeout);
  }

  print "\ndone\n\n";
}

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

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

  # 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";

  sendRawTB($data, $timeout);
}

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 checksum
  $data = substr($data, 0, -4);

  print $data."\n";

  return $data;
}

if (connectTB('11:75:58:7A:60:3B'))
{
  sendPlainTB('04004509', 5);
  sendPlainTB('04004508', 5);
  sendPlainTB('04004507', 5);
  sendPlainTB('04004506', 5);
  sendPlainTB('04004505', 5);
  sendPlainTB('04004504', 5);
  sendPlainTB('04004503', 5);
  sendPlainTB('04004502', 5);
  sendPlainTB('04004501', 5);
  sendPlainTB('04004500', 5);
  disconnectTB();
}

Falls du die von dir erstellten Sequenzen schon mal nutzen willst, kannst du folgendes machen:

Du erstellst dir mit dem Code von mir eine Datei lib.pl und entfernst unten die letzten Zeilen mit dem connect usw. so das nur noch die subs drin bleiben. Dann erstellst du dir Dateien 1.pl und 2.pl und bindest die lib oben ein:

require "lib.pl"
Danach schreibst du dir deine Sequenzen zusammen.

In Fhem kannst du dann diese Scripte non blocking so aufrufen:

{fhem("perl /opt/fhem/divoom/1.pl")}
Denk aber an die Zugriffsrechte, die müssen richtig gesetzt sein.

PS: Ich habs nicht selbst probiert, müsste aber in der Theorie funktionieren.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 24 September 2018, 21:35:10
Super, update  :) Schaue ich mir an. Ich hab es so ähnlich laufen, nur ohne verlinken.
Einfach pro Kommando ein Script. Läuft ja auf das selbe hinaus erstmal?

Der Hauptdummy (AuraBox),greift auf diverse Dummys zu, von denen jeder ein Script startet.

AuraBox:ExampleAni {system("sudo perl /opt/fhem/divoom/divoomExampleAni.pl")}
edit:

Die Ausgabe in der Konsole gefällt mir, das wird :)

Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 24 September 2018, 22:00:06
Das Einbinden hat den Vorteil, das du nur 1 File updaten musst.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 24 September 2018, 22:14:27
Ah ok, dann setz ich das um.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 24 September 2018, 22:45:59
Ok habs. Erst das in die Sequenzfiles,

require "/opt/fhem/divoom/lib.pl";
Und am Ende der lip.pl noch das,

1;
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 September 2018, 19:36:17
Da meine Aurabox nur ein Setup für 12Std hatte, habe ich die Tage den Support angeschrieben.
Heute habe ich den Updater erhalten, Update dazu im ersten Post.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 25 September 2018, 22:54:04
Woher hast du das Timebox Update? Auch von dort? Ich habe nur eine Timebox Mini. Funktioniert das Update da auch?

Leider kann man glaub nirgends die Firmware Version sehen, um zu prüfen, ob sich ein Update lohnt.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 September 2018, 23:13:59
Habe mich auf der Suche durch Youtube und Facebook gewühlt. Update, hab TimeboxMini auch gefunden.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 September 2018, 18:09:54
Update im ersten Post. Scriptsammlung auf Basis von mumpitzstuff Code.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 September 2018, 22:12:01
Bild Download habe ich angefangen, ist aber schon etwas komplizierter. Außerdem ist das Verfahren zwischen Timebox und Aurabox verschieden.

Danach werde ich mich mal ran setzen und sowas wie eine Befehlssammlung zusammen stellen auf Basis der Plain Kommandos. Bei denen kann man auch noch die ersten Zeichen entfernen, das ist nur die Länge der Nutzdaten, die man sich generieren kann. Ist mir leider erst gestern aufgefallen. Muss gucken wann ich wieder etwas Zeit finde weiter zu machen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 30 September 2018, 11:22:31
Bild Download funktioniert für die Timebox, aber für die Aurabox komme ich nicht weiter. Die Perl Funktion wirft mir 3 8bit Werte aus und mir ist schleierhaft, wie ich das auf 4bit (16 Farben) runter rechnen soll. An der Stelle verstehe ich den Python Code auch nicht so richtig, da ich mit Python bisher wenig gemacht habe.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 01 Oktober 2018, 00:09:24
- einige Funktionen wurden umbenannt
- plain nimmt jetzt nur noch Kommandos ohne Länge am Anfang an (die ersten 4 Zeichen)
- convertImageAB() (diese Funktion ist für die Aurabox), convertImageTB() konvertieren ein Bild in des Divoom Format. Ganz unten sieht man ein Beispiel. Kannst du mal bitte gucken, ob bei dir das Example Bild geladen wird (die Farbwerte stimmen wahrscheinlich noch nicht)? Das Example Bild findest du unter Images hier:

https://github.com/derHeinz/divoom-adapter (https://github.com/derHeinz/divoom-adapter)

- resize funktioniert bei der Aurabox bisher leider nicht, da mir die verwendete Bibliothek ansonsten die Palette zerstört.

#!/usr/bin/perl
use strict;
use warnings;
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";
}

sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
 
  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();
    }
  }
 
  print "\ndone\n\n";

  return $success;
}

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

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

  $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";
      }
    }

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

  if ($retry > 3)
  {
    print "Failed!";
  }
  else
  {
    sleep($timeout);
  }

  print "\ndone\n\n";
}

sub sendPlain($$)
{
  my $data = shift;
  my $timeout = 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);
}

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);
 
  if (!$@)
  {
    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;
        }
      }
    }
  }

  $_ = '';
  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 => 0, 1 => 1, 2 => 2, 3 => 11, 5 => 5, 6 => 2, 7 => 5, 9 => 1, 10 => 2, 11 => 3, 12 => 4, 14 => 6, 15 => 7};

  $size = 10;# if (!defined($size));
  $image->read(file=>$file);

  if (!$@)
  {
    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++)
      {
        if (0 == $flicflac)
        {
          push(@imgData, $image->findcolor(color=>$image->getpixel(x=>$x, y=>$y)));

          $flicflac = 1;
        }
        else
        {
          $imgData[-1] += ($image->findcolor(color=>$image->getpixel(x=>$x, y=>$y)) << 4);

          $flicflac = 0;
        }
      }
    }
  }

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

  return $_;
}


my $example = convertImageAB('example.bmp', 10);
my $skull = convertImageTB('skull.png', 11);

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  #sendPlain('4509', 5);
  #sendPlain('4508', 5);
  #sendPlain('4507', 5);
  #sendPlain('4506', 5);
  #sendPlain('4505', 5);
  #sendPlain('4504', 5);
  #sendPlain('4503', 5);
  #sendPlain('4502', 5);
  #sendPlain('4501', 5);
  sendPlain('4500', 5);
  sendPlain('44000A0A04'.$skull, 5);
  sendPlain('44000A0A04'.$example, 5);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2018, 16:29:06
Suche den install für Imager. Läuft das über Cpan?

edit:

Ok, Imager hab ich.

sudo cpan install Imager

edit2:

Nachdem ich alle Funktionen zur Timebox auskommentiert habe, funktioniert es. Das Example wird geladen. Zur Farbe, könnte passen. Ich teste weiter.

edit3:

Versuche ich das Example durch ein anderes zu ersetzen bekomme ich.

root@raspiFhem:/opt/fhem/divoom# perl divoom.pl
Modification of non-creatable array value attempted, subscript -1 at divoom.pl line 274.

edit4:
Das die Farbwerte nicht stimmen kommt hin. Ich habe jetzt dieses Bild einfach mal Probiert.

https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRESCVw2mTJM-WFx-9YBdk9Qy7gHIDfE7nnXL7fhhJzS8ihvVtQ5Q

Einfach ein rename von .png auf bmp. Das wird sauber angezeigt. Allerdings nicht in blau. Farbe ist dann rot.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2018, 21:41:40
Ich habe mal ein Example.bmp erstellt. Ganz aussagekräftig ist das aber auch nicht, da die Farben nicht 1zu1 anders sind.

Das Bild hat von oben nach unten die Farben:
schwarz,blau,rot,gelb,grün,rot,gelb,blau,gelb,schwarz

als Ausgabe auf der Box kam die Reihenfolge:

schwarz,grün,gelb,blau,rot,gelb,blau,grün,blau,schwarz
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2018, 22:17:23
Nachdem ich jetzt das Feuerwerk von 4bit auf 8bit erhöht habe, läuft das auch durch.

my $firework1 = convertImageAB('firework1.bmp', 10);
my $firework2 = convertImageAB('firework2.bmp', 10);
my $firework3 = convertImageAB('firework3.bmp', 10);
my $firework4 = convertImageAB('firework4.bmp', 10);
my $firework5 = convertImageAB('firework5.bmp', 10);
my $firework6 = convertImageAB('firework6.bmp', 10);
my $firework7 = convertImageAB('firework7.bmp', 10);
my $firework8 = convertImageAB('firework8.bmp', 10);

if (connectDivoom('XX:XX:XX:XX:XX:XX'))
{
  sendPlain('44000A0A04'.$firework1, 1);
  sendPlain('44000A0A04'.$firework2, 1);
  sendPlain('44000A0A04'.$firework3, 1);
  sendPlain('44000A0A04'.$firework4, 1);
  sendPlain('44000A0A04'.$firework5, 1);
  sendPlain('44000A0A04'.$firework6, 1);
  sendPlain('44000A0A04'.$firework7, 1);
  sendPlain('44000A0A04'.$firework8, 1);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 01 Oktober 2018, 22:33:01
Ja. Habe ja gesagt, das die Farbwerte noch nicht passen werden. Wollte nur schon mal wissen, ob grundsätzlich was zu sehen ist. Ich schau mir das dahingehend noch mal an. Die Python Lib auf Github scheint übrigens nur mit einer ganz bestimmten Palette zu funktionieren, da einfach ein festes Mapping der Farbwerte implementiert ist. Ich mach mal das Mapping rein und dann schauen wir weiter.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2018, 22:52:48
Hab ich auch so aufgenommen. Hab einfach wild getestet
und das ganze hier niedergeschrieben. Vielleicht bleibt was
hängen, was doch mal hilft. Bist auf dem richtigen Weg  :)
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 01 Oktober 2018, 22:53:11
Die Routine für die Aurabox braucht immer eine Farbpalette mit exakt 16 Farben. Wahrscheinlich kam der Fehler daher. Bisher wird nichts groß abgefangen, deshalb kann das Script dann auch abstürzen. Funktion schlägt erst einmal Robustheit...

Habe noch mal nachgesehen. Die Palette selbst kann tatsächlich größer sein. In dem Example z.B. scheinen aber nur 10 Farben verwendet zu werden.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 02 Oktober 2018, 00:03:31
#!/usr/bin/perl
use strict;
use warnings;
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";
}

sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
 
  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();
    }
  }
 
  print "\ndone\n\n";

  return $success;
}

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

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

  $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";
      }
    }

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

  if ($retry > 3)
  {
    print "Failed!";
  }
  else
  {
    sleep($timeout);
  }

  print "\ndone\n\n";
}

sub sendPlain($$)
{
  my $data = shift;
  my $timeout = 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);
}

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);
 
  if (!$@)
  {
    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;
        }
      }
    }
  }

  $_ = '';
  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);

  #print $image->maxcolors."\n";
  #print $image->getcolorcount()."\n";

  if (!$@ && ($image->getcolorcount() <= 16))
  {
    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));
        $index = 15 if ($index > 15);
               
        if (0 == $flicflac)
        {
          push(@imgData, $color[$index]);

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

          $flicflac = 0;
        }
      }
    }
  }

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

  return $_;
}

Hier habe ich das Mapping der Farbwerte übernommen, das man auch in dem Python Modul findet. Ich hoffe ich habe keinen Schreibfehler drin. Kannst du das mal bitte ausprobieren. Wenn was nicht geht, dann bäuchte ich das Bild + die Koordinaten x und y, an denen was nicht stimmt (Farbe die angezeigt wird und Farbe die du erwarten würdest).
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 02 Oktober 2018, 07:11:06
Die Farbwerte sind meiner Meinung nach gleich falsch. Ok, heut Abend hab ich Zeit und setz mich an die Koordinaten.

edit:

Wenn ich mal nicht zurück auf Uhr,Temp oder Co. schalte, bleibt das letzte Bild im Buffer :) Wunderbar um ein Infografik
zu halten.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 02 Oktober 2018, 09:38:26
Als Vergleich müsstest du aber ein originales Bild von hier nehmen: https://github.com/derHeinz/divoom-adapter (https://github.com/derHeinz/divoom-adapter). Wenn du ein eigenes Bild verwendest, dann stimmt da die Palette nicht.

Du müsstest also mit dem Python Script z.B. das example.bmp laden und dir die Farben ansehen, Dann über das Perl Script das selbe Bild laden und die Farben vergleichen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 02 Oktober 2018, 18:03:52
Jetzt nochmal mit dem example.bmp getestet. Deine Farben passen besser als die von derHeinz. Bei ihm wird das
Grau zum Lila. Bei dir das Grau zu einer Art von Grau. Der Rest ist soweit ok.

edit:

Das klingt komisch, wie ich das geschrieben habe. Also nochmal.

Dein Automapping funktioniert besser als das manuelle Mapping.

edit2:

Nachdem ich die richtigen Farbwerte genommen habe, passt auch die Ausgabe.

Rot = [Rot:255,Grün:0,Blau:0]
Grün = [Rot:0,Grün:255,Blau:0]
Blau = [Rot:0,Grün:0,Blau:255]
Gelb = [Rot:255,Grün:255,Blau:0]
Schwarz = [Rot:0,Grün:0,Blau:0]
Weiß = [Rot:255,Grün:255,Blau:255]
Pink = [Rot:255,Grün:0,Blau:255]
Türkis = [Rot:0,Grün:255,Blau:255]
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 00:31:42
derHeinz verwendet das bmp black.bmp als Basis bzw die Palette von diesem Bild. Ich habe sie mir nicht genau angesehen, aber man sollte die ersten 16 Farben nutzen können, da ein Pixel bei der Aurabox durch 4bit repräsentiert wird, also 16 Werte annehmen kann.

Ich fange jetzt erst mal damit an den Traffic der App zu sniffen und verschiedene Befehle zusammen zu stellen. Danach wollte ich noch Bilder bzw. Text scrollen lassen können. Die Kommandos könntest du vielleicht mit Dingen ergänzen, die nur auf der Aurabox funktionieren.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 09:43:25
Hört sich gut an.
Ich versuche gerade das Script mit Bildsupport aus Fhem zu starten.
Klappt irgendwie nicht, läuft in der Konsole aber sauber durch.

#!/usr/bin/perl
use strict;
use warnings;
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";
}

sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
 
  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();
    }
  }
 
  print "\ndone\n\n";

  return $success;
}

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

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

  $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";
      }
    }

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

  if ($retry > 3)
  {
    print "Failed!";
  }
  else
  {
    sleep($timeout);
  }

  print "\ndone\n\n";
}

sub sendPlain($$)
{
  my $data = shift;
  my $timeout = 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);
}

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);
 
  # if (!$@)
  # {
    # 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;
        # }
      # }
    # }
  # }

  # $_ = '';
  # 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 => 0, 1 => 1, 2 => 2, 3 => 11, 5 => 5, 6 => 2, 7 => 5, 9 => 1, 10 => 2, 11 => 3, 12 => 4, 14 => 6, 15 => 7};

  $size = 10;# if (!defined($size));
  $image->read(file=>$file);

  if (!$@)
  {
    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++)
      {
        if (0 == $flicflac)
        {
          push(@imgData, $image->findcolor(color=>$image->getpixel(x=>$x, y=>$y)));

          $flicflac = 1;
        }
        else
        {
          $imgData[-1] += ($image->findcolor(color=>$image->getpixel(x=>$x, y=>$y)) << 4);

          $flicflac = 0;
        }
      }
    }
  }

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

  return $_;
}

my $feuer = convertImageAB('feuer.bmp', 10);
my $black = convertImageAB('black.bmp', 10);

if (connectDivoom('11:75:58:45:59:81'))
{
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('44000A0A04'.$feuer, 1);
  sendPlain('44000A0A04'.$black, 1);
  sendPlain('4500', 1);
  disconnectDivoom();
}


Aufruf in Fhem, welcher nicht klappt.

{system("sudo perl /opt/fhem/divoom/Feuer.pl")}
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 11:50:48
Gehört das verwendete Bild der richtigen Gruppe an? Stichwort chown. Der Pfad muss ebenfalls diese Rechte besitzen. Ansonsten gib dem Bild mal die Rechte 777 und Probier mal ob es damit geht. Wenn was auf der Console geht und in Fhem nicht, dann ist es meist ein Rechteproblem.
Wenn du das von der Fhem Kommandozeile aus startest, dann müsstest du auch die Ausgaben sehen. Vielleicht steht da ja irgendwas.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 12:28:28
Ordner, sowie Bild und Script sind alle in der Gruppe Root sowie Eigentümer Fhem. Rechte alle auf 777. Keine Ahnung warum es
nicht funktioniert.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 14:19:31
setz mal alles auf fhem:dialup mit:

sudo chown fhem: .*
Was passiert denn wenn du das Script in der Fhem Console ausführst? Kommt da keine Ausgabe/Fehler oder irgendwas?
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 19:43:26
Die 3 Files, auf die es ankommt haben fhem:dialout

root@raspiFhem:/opt/fhem/divoom# groups feuer.pl
groups: „feuer.pl“: Einen solchen Benutzer gibt es nicht
root@raspiFhem:/opt/fhem/divoom# ls -l /opt/fhem/divoom
insgesamt 128
-rwxrwxrwx 1 fhem dialout  198 Okt  2 23:01 black.bmp
-rw-r--r-- 1 root root     114 Sep 27 23:38 Countdown.pl
-rw-r--r-- 1 root root     116 Sep 27 23:39 DisplayBright.pl
-rw-r--r-- 1 root root     114 Sep 27 23:39 DisplayDark.pl
-rw-r--r-- 1 root root     115 Okt  2 22:54 DisplayOff.pl
-rw-r--r-- 1 root root    5488 Okt  2 23:28 divoom.pl
drwxr-xr-x 5 root root    4096 Okt  1 16:14 divoomtest
-rwxr-xr-x 1 root root     117 Okt  2 23:42 Equalizer.pl
-rw-r--r-- 1 root root     266 Mär 17  2018 example7.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 example8.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 example9.bmp
-rwxr-xr-x 1 root root     378 Sep 27 23:41 ExampleAni.pl
-rw-r--r-- 1 root root     198 Okt  2 22:11 example.bmp
-rwxrwxrwx 1 fhem dialout  198 Okt  2 22:56 feuer.bmp
-rwxrwxrwx 1 fhem dialout 6172 Okt  2 23:38 Feuer.pl
-rw-r--r-- 1 root root     266 Mär 17  2018 firework1.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework2.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework3.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework4.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework5.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework6.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework7.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework8.bmp
-rw-r--r-- 1 root root    2793 Sep 27 23:37 lib.pl
-rw-r--r-- 1 root root     116 Sep 27 23:40 OnlyColor.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 Pixelanimation.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 SpinningTriangle.pl
-rw-r--r-- 1 root root     108 Sep 28 00:12 Temp.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 Time.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 WalkingTriangle.pl
root@raspiFhem:/opt/fhem/divoom#

Führe ich das Script in der Fhemconsole aus, kommt "-1". Aber das kommt auch bei den anderen Scripts, die funktionieren.

edit:

Ich habe jetzt mal systematisch im Script gelöscht.

1. Alles was TB betrifft. Aber das ist ja klar.
2. sendPlain('44000A0A04'.$example, 5);
3. my $example = convertImageAB('example.bmp', 10);

Nach Nummer 3 lief das Script in Fhem durch. Hängt also mit dem Pictureconverter zusammen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 20:49:58
example.bmp hat die Rechte root:root und nicht fhem:dialout.

Nimm mal feuer.bmp, das hätte die richtigen Rechte gesetzt.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 20:52:54
Stimmt! Habe es jetzt geändert, aber...keine Besserung.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 20:54:03
Auch auf 777 gesetzt?
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 20:56:41
Habe ich, hier nochmal die Übersicht

root@raspiFhem:/opt/fhem/divoom# ls -l /opt/fhem/divoom
insgesamt 128
-rw-r--r-- 1 root root     198 Okt  2 23:01 black.bmp
-rw-r--r-- 1 root root     114 Sep 27 23:38 Countdown.pl
-rw-r--r-- 1 root root     116 Sep 27 23:39 DisplayBright.pl
-rw-r--r-- 1 root root     114 Sep 27 23:39 DisplayDark.pl
-rw-r--r-- 1 root root     115 Okt  2 22:54 DisplayOff.pl
-rw-r--r-- 1 root root    5397 Okt  3 20:26 divoom.pl
drwxr-xr-x 5 root root    4096 Okt  1 16:14 divoomtest
-rwxr-xr-x 1 root root     117 Okt  2 23:42 Equalizer.pl
-rw-r--r-- 1 root root     266 Mär 17  2018 example7.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 example8.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 example9.bmp
-rwxr-xr-x 1 root root     378 Sep 27 23:41 ExampleAni.pl
-rwxrwxrwx 1 fhem dialout  198 Okt  2 22:11 example.bmp
-rw-r--r-- 1 root root     198 Okt  2 22:56 feuer.bmp
-rwxrwxrwx 1 fhem dialout 4386 Okt  3 20:51 feuer.pl
-rw-r--r-- 1 root root     266 Mär 17  2018 firework1.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework2.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework3.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework4.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework5.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework6.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework7.bmp
-rw-r--r-- 1 root root     266 Mär 17  2018 firework8.bmp
-rw-r--r-- 1 root root    2793 Sep 27 23:37 lib.pl
-rw-r--r-- 1 root root     116 Sep 27 23:40 OnlyColor.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 Pixelanimation.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 SpinningTriangle.pl
-rw-r--r-- 1 root root     108 Sep 28 00:12 Temp.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 Time.pl
-rw-r--r-- 1 root root     114 Sep 27 23:40 WalkingTriangle.pl
root@raspiFhem:/opt/fhem/divoom#

example.bmp und feuer.pl, gleiche Gruppe, alle auf 777 und Besitzer Fhem
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 21:06:56
Wie sind die Rechte vom divoom Verzeichnis selbst?

Verwende mal qx(command 2>&1), dann sollte auch der Output zurück gegeben werden.

{qx("perl /opt/fhem/divoom/Feuer.pl 2>&1")}
Ach und sudo mal weg lassen bitte.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 21:20:41
Folder hatte vorher 755, jetzt 777 ohne Änderung.

root@raspiFhem:/opt/fhem/divoom# ls -ld /opt/fhem/divoom
drwxrwxrwx 3 fhem dialout 4096 Okt  3 19:49 /opt/fhem/divoom



Wenn ich das absetze, kommt keine Ausgabe. Also nix, nichtmal -1. Nicht wundern, hatte "Feuer" zu "feuer" umbenannt.

{qx("perl /opt/fhem/divoom/feuer.pl 2>&1")}
Die anderen Scripte, die noch auf lip.pl rennen habe ich auch nochmal ohne sudo probiert.
Funktioniert auch.

edit:

{qx("perl /pfad/zum/script.pl 2>&1")} gibt auch bei funktionierenden Scripten keinen Output.

edit2:

Habe auch mal bei allen funktionierenden Scripten den sudo-Aufruf gelöscht. Ist ja obsolete.


Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 21:53:33
Schau mal ins fhem Logfile, ob die Print Ausgaben dort landen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 22:03:55
Da hab ich was,

Zitat
Modification of non-creatable array value attempted, subscript -1 at /opt/fhem/divoom/feuer.pl line 207.

Line 207 wäre diese bei mir

$imgData[-1] += ($image->findcolor(color=>$image->getpixel(x=>$x, y=>$y)) << 4);
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 22:49:03
Das ist ein Bug. Weiter oben wo die Variable initialisiert wird muss eine 0 rein. Das sieht dann so aus:

my @imgData = (0);
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 23:08:36
Ok, jetzt läuft es durch, aber in Fhem zerhaut es das Bild. Nur 2 kleine Pixel oben links leuchten.
In der ssh-Konsole läuft es wie immer normal durch.

edit:

Hier der fhem.log

Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Use of uninitialized value in left bitshift (<<) at /opt/fhem/divoom/feuer.pl line 207.
Create RFCOMM client (11:75:58:45:59:81)...
Device answer: HELLO
done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done

Send plain command: 44000A0A0400
Generated raw command: 01080044000A0A0400640002
Send raw command: 01080044000A0A0400640002
Device answer: 01
done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 03 Oktober 2018, 23:41:26
Ich habe mir noch mal den von dir geposteten Code angesehen. Dort fehlen ein paar Sicherheitsabfragen in der Funktion. Außerdem scheint der Palettenindex in deinem Bild Werte größer als 16 anzunehmen. Dadurch greift die Funktion auf einen nicht existierenden Index zu.

Nimm bitte noch mal exakt den Code aus meinem letzten Beitrag und das Original Bild example.bmp von derHeinz. Die Modifikation von vorhin bitte weg lassen, das hatte doch seine Richtigkeit.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Oktober 2018, 23:51:14
Ok, Code aus dem letzten Beitrag. AuraBox bleibt schwarz bei dem example.bmp von derHeinz.

Fhem.log

Use of uninitialized value in numeric le (<=) at /opt/fhem/divoom/feuer.pl line 260.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 274.
Use of uninitialized value $index in numeric gt (>) at /opt/fhem/divoom/feuer.pl line 270.
Use of uninitialized value $index in array element at /opt/fhem/divoom/feuer.pl line 280.
Create RFCOMM client (11:75:58:45:59:81)...
Device answer: HELLO
done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done

Send plain command: 44000A0A040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01390044000A0A040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950002
Send raw command: 01390044000A0A040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000950002
Device answer: 01
done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done


edit:

Hier nochmal der verwendetet Code. Nicht das es zu Missverständnissen kommt.

#!/usr/bin/perl
use strict;
use warnings;
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";
}

sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
 
  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();
    }
  }
 
  print "\ndone\n\n";

  return $success;
}

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

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

  $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";
      }
    }

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

  if ($retry > 3)
  {
    print "Failed!";
  }
  else
  {
    sleep($timeout);
  }

  print "\ndone\n\n";
}

sub sendPlain($$)
{
  my $data = shift;
  my $timeout = 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);
}

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);
 
  if (!$@)
  {
    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;
        }
      }
    }
  }

  $_ = '';
  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);

  #print $image->maxcolors."\n";
  #print $image->getcolorcount()."\n";

  if (!$@ && ($image->getcolorcount() <= 16))
  {
    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));
        $index = 15 if ($index > 15);
               
        if (0 == $flicflac)
        {
          push(@imgData, $color[$index]);

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

          $flicflac = 0;
        }
      }
    }
  }

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

  return $_;
}

my $example = convertImageAB('example.bmp', 10);

if (connectDivoom('11:75:58:45:59:81'))
{
  #sendPlain('4509', 5);
  #sendPlain('4508', 5);
  #sendPlain('4507', 5);
  #sendPlain('4506', 5);
  #sendPlain('4505', 5);
  #sendPlain('4504', 5);
  #sendPlain('4503', 5);
  #sendPlain('4502', 5);
  #sendPlain('4501', 5);
  sendPlain('4500', 5);
  sendPlain('44000A0A04'.$example, 5);
  sendPlain('4500', 5);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 04 Oktober 2018, 00:09:23
Das Bild wird nicht geladen und dann geht alles danach schief.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 04 Oktober 2018, 22:54:11
So habe jetzt noch mal genau nachgesehen und das Script jetzt mit ein paar mehr Sicherheitsabfragen versehen und auch ein paar Angaben werden ausgegeben, wieviel Farben das Bild enthält usw. Mir ist dabei aufgefallen, das ich nur das Bild example.bmp aus den Beispielen von derHeinz laden konnte. Die anderen bmp Dateien konnte das Imager Modul gar nicht richtig laden. Ich habe deshalb alle Bilder mit Paint geöffnet und dann als 16 Farben bmp wieder gespeichert. Die Größe der Bilder hat sich dadurch von 266 auf 198 Byte reduziert. Diese dateien kann Imager jetzt einwandfrei laden.

Alle Bilder und das Testscript habe ich hier im zip angehängt.

Ich hoffe damit kommen wir des Rätsels Lösung etwas näher...

Weiterhin habe ich noch gefunden, dass du pip für die Installation vom Imager verwendet hast. Ich habe Imager so installiert (vielleicht ist das eine andere Version?):

sudo apt install libimager-perl
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 04 Oktober 2018, 23:15:43
In der Konsole läuft alles sauber durch. Fhem meldet im Log,

Can't read image example.bmp (Could not open example.bmp: No such file or directory)
Habe alles 1zu1 auf den Pi kopiert.


edit:

Mit dem Install von libimager-perl warte ich noch.


edit2:

Alle Files incl. Script habe ich Rechte 777, Gruppe dialout und Besitzer fhem verpasst. Ohne Besserung.


edit3:

Habe my@color getweaked.
Vorher:
my @color = (0, 1, 2, 11, 4, 5, 2, 5, 8, 1, 2, 3, 4, 13, 6, 7);

Nachher:
my @color = (0, 1, 2, 11, 4, 5, 2, 15, 8, 1, 2, 3, 4, 13, 6, 7);

Ist das für dich nachvollziehbar?


edit4:

ändere ich das

my $file = shift;

in das

my $file = '/opt/fhem/divoom/example.bmp';

läuft es in Fhem. Aber wie angegeben nur die example.bmp.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 05 Oktober 2018, 00:14:08
Sprechen wir von einem einzigen Raspberry wenn du von Konsole bzw. von Fhem redest?

Wenn unter Fhem eine Datei nicht gefunden wird, dann wird das Script an dieser Stelle abgebrochen. Wenn du exakt auf die selben Dateien von der Konsole aus bzw. von Fhem aus zugreifst (ohne vorher irgendwas irgendwohin zu kopieren), dann kann es nur an den Rechten der Datei example.bmp liegen oder aber das im Skript der Pfad fehlt.
Ersetz doch mal example.bmp durch /opt/fhem/divoom/example.bmp. Ergänz den Pfad auch mal bei den anderen Dateien.

@color kann bzw. darf sich nicht ändern. Ich greife lediglich lesend auf das Array zu. Aus meiner Sicht ist es deshalb nicht nachvollziehbar.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 05 Oktober 2018, 00:15:36
Okay dann ist des Rätsels Lösung im Skript die kompletten Pfade anzugeben! Nur nicht unten in der Funktion sondern beim Übergabeparameter der Funktion convertImageAB('/opt/fhem/divoom/example.bmp', 10).
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 05 Oktober 2018, 00:24:58
Da haben wir es  :) explizite Pfadangabe funktioniert!
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 05 Oktober 2018, 00:35:59
Puhhh das war zu einfach um gleich darauf zu kommen...  ;)
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 06 Oktober 2018, 00:42:35
Kleine Scriptsammlung auf mumpitzstuff letzten Stand

- Funktionen in einzelne Scripte ausgelagert.
- MAC muss nur einmal in lib2 eingetragen werden.
- 2 neue Animationen erstellt (Fire/Washer).
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 06 Oktober 2018, 09:56:25
Switch Screen: 45
  -> Clock: 00
    -> Format 12/24h (optional): 00 - 01
    -> Color as rgb (optional): 000000 - FFFFFF
   
  -> Temperature: 01
    -> Format Celsius/Fahrenheit (optional): 00 - 01
    -> Color as rgb (optinal): 000000 - FFFFFF
 
  -> Switchoff Screen: 02
 
  -> Animation (hardcoded): 03
    -> Type: 00 - 06
   
  -> Equalizer: 04
    -> 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
 
  -> Stopwatch: 06
    -> Control Halt/Reset (optional): 00 (Halt), 02 (Reset)
   
  -> Scoreboard: 07
    -> 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
  -> Level (0 = off, 01 - FF = brightness level): 00 - FF
 
Set Time: 18
  -> Year (XX = year % 100, YY = year / 100): XXYY
  -> Month: XX
  -> Day: XX
  -> Hours: XX
  -> Minutes: XX
  -> Seconds: XX
 
Set Volume: 08
  -> Level: 01 - 64
 
Get Volume: 09
  -> Level
 
Set FM Radio (untested!): 05
  -> State (on = 01, off = 00): 00 - 01
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY
 
Get FM Radio Frequency: 60
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY
 
Set FM Radio Frequency: 61
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY
 
Set Mute: 0A
  -> State (on = 00, off = 01): 00 - 01
 
Get Mute: 0B
  -> State (on = 00, off = 01)
 
Set Image: 44000A0A04
  -> 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
  -> 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
  -> 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

Das habe ich bisher zusammen getragen bzw. herausgefunden...
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 06 Oktober 2018, 15:46:18
Interessanter Artikel

https://divoominternational.myshopify.com/products/divoom-pixoo-smart-bluetooth-lamp-with-16-16-app-programmed-led-4-pcs-can-be-synic-with-1-mobile
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 06 Oktober 2018, 19:10:48
Der Rand ist leider viel zu dick, ansonsten wäre der sync schon ein schönes Feature.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 06 Oktober 2018, 22:40:53
Hier ist mal eine Liste meines Scans nach potentiellen Services, die mir aktuell noch nicht bekannt sind. Es scheinen auch ein paar low hanging fruits dabei zu sein, denn die Anzeige der Timebox hat sich beim Scanvorgang mehrfach geändert. Ich versuche dann mal durch probieren rauszukriegen, was dahinter steht. Falls du Lust hast, kannst du dich gern ebenfalls daran versuchen... :)

Send plain command: 06
Generated raw command: 0103060006090002
Send raw command: 0103060006090002
Device answer: 01
done

Send plain command: 0601
Generated raw command: 0104000603040b0002
Send raw command: 0104000603040b0002
Failed!
done

Send plain command: 0c
Generated raw command: 010306000c0f0002
Send raw command: 010306000c0f0002
Device answer: 01
done

Send plain command: 0c01
Generated raw command: 0104000c0304110002
Send raw command: 0104000c0304110002
Device answer: 01
done

Send plain command: 0d
Generated raw command: 010306000d100002
Send raw command: 010306000d100002
Device answer: 01
done

Send plain command: 0d01
Generated raw command: 0104000d0304120002
Send raw command: 0104000d0304120002
Device answer: 01
done

Send plain command: 10
Generated raw command: 0103060010130002
Send raw command: 0103060010130002
Device answer: 01
done

Send plain command: 1001
Generated raw command: 010400100304150002
Send raw command: 010400100304150002
Device answer: 01
done

Send plain command: 11
Generated raw command: 0103060011140002
Send raw command: 0103060011140002
Device answer: 01
done

Send plain command: 1101
Generated raw command: 010400110304160002
Send raw command: 010400110304160002
Device answer: 01
done

Send plain command: 12
Generated raw command: 0103060012150002
Send raw command: 0103060012150002
Device answer: 01
done

Send plain command: 1201
Generated raw command: 010400120304170002
Send raw command: 010400120304170002
Failed!
done

Send plain command: 13
Generated raw command: 0103060013160002
Send raw command: 0103060013160002
Device answer: 01
done

Send plain command: 1301
Generated raw command: 010400130304180002
Send raw command: 010400130304180002
Device answer: 01
done

Send plain command: 16
Generated raw command: 0103060016190002
Send raw command: 0103060016190002
Device answer: 01
done

Send plain command: 1601
Generated raw command: 0104001603041b0002
Send raw command: 0104001603041b0002
Device answer: 01
done

Send plain command: 17
Generated raw command: 01030600171a0002
Send raw command: 01030600171a0002
Device answer: 01
done

Send plain command: 1701
Generated raw command: 0104001703041c0002
Send raw command: 0104001703041c0002
Device answer: 01
done

Send plain command: 1b
Generated raw command: 010306001b1e0002
Send raw command: 010306001b1e0002
Device answer: 01
done

Send plain command: 1b01
Generated raw command: 0104001b0304200002
Send raw command: 0104001b0304200002
Device answer: 01
done

Send plain command: 1c
Generated raw command: 010306001c1f0002
Send raw command: 010306001c1f0002
Device answer: 01
done

Send plain command: 1c01
Generated raw command: 0104001c0304210002
Send raw command: 0104001c0304210002
Device answer: 01
done

Send plain command: 27
Generated raw command: 01030600272a0002
Send raw command: 01030600272a0002
Device answer: 01
done

Send plain command: 2701
Generated raw command: 0104002703042c0002
Send raw command: 0104002703042c0002
Device answer: 01
done

Send plain command: 29
Generated raw command: 01030600292c0002
Send raw command: 01030600292c0002
Device answer: 01
done

Send plain command: 2901
Generated raw command: 0104002903042e0002
Send raw command: 0104002903042e0002
Device answer: 01
done

Send plain command: 30
Generated raw command: 0103060030330002
Send raw command: 0103060030330002
Device answer: 01
done

Send plain command: 3001
Generated raw command: 010400300304350002
Send raw command: 010400300304350002
Device answer: 01
done

Send plain command: 31
Generated raw command: 0103060031340002
Send raw command: 0103060031340002
Device answer: 01
done

Send plain command: 3101
Generated raw command: 010400310304360002
Send raw command: 010400310304360002
Device answer: 01
done

Send plain command: 32
Generated raw command: 0103060032350002
Send raw command: 0103060032350002
Device answer: 01
done

Send plain command: 3201
Generated raw command: 010400320304370002
Send raw command: 010400320304370002
Device answer: 01
done

Send plain command: 35
Generated raw command: 0103060035380002
Send raw command: 0103060035380002
Device answer: 01
done

Send plain command: 3501
Generated raw command: 0104003503043a0002
Send raw command: 0104003503043a0002
Device answer: 01
done

Send plain command: 37
Generated raw command: 01030600373a0002
Send raw command: 01030600373a0002
Device answer: 01
done

Send plain command: 3701
Generated raw command: 0104003703043c0002
Send raw command: 0104003703043c0002
Device answer: 01
done

Send plain command: 38
Generated raw command: 01030600383b0002
Send raw command: 01030600383b0002
Device answer: 01
done

Send plain command: 3801
Generated raw command: 0104003803043d0002
Send raw command: 0104003803043d0002
Device answer: 01
done

Send plain command: 40
Generated raw command: 0103060040430002
Send raw command: 0103060040430002
Device answer: 01
done

Send plain command: 4001
Generated raw command: 010400400304450002
Send raw command: 010400400304450002
Device answer: 01
done

Send plain command: 41
Generated raw command: 0103060041440002
Send raw command: 0103060041440002
Device answer: 01
done

Send plain command: 4101
Generated raw command: 010400410304460002
Send raw command: 010400410304460002
Device answer: 01
done

Send plain command: 42
Generated raw command: 0103060042450002
Send raw command: 0103060042450002
Device answer: 01
done

Send plain command: 4201
Generated raw command: 010400420304470002
Send raw command: 010400420304470002
Device answer: 01
done

Send plain command: 46
Generated raw command: 0103060046490002
Send raw command: 0103060046490002
Device answer: 01
done

Send plain command: 4601
Generated raw command: 0104004603044b0002
Send raw command: 0104004603044b0002
Device answer: 01
done

Send plain command: 4a
Generated raw command: 010306004a4d0002
Send raw command: 010306004a4d0002
Device answer: 01
done

Send plain command: 4a01
Generated raw command: 0104004a03044f0002
Send raw command: 0104004a03044f0002
Device answer: 01
done

Send plain command: 4b
Generated raw command: 010306004b4e0002
Send raw command: 010306004b4e0002
Device answer: 01
done

Send plain command: 4b01
Generated raw command: 0104004b0304500002
Send raw command: 0104004b0304500002
Device answer: 01
done

Send plain command: 4c
Generated raw command: 010306004c4f0002
Send raw command: 010306004c4f0002
Device answer: 01
done

Send plain command: 4c01
Generated raw command: 0104004c0304510002
Send raw command: 0104004c0304510002
Device answer: 01
done

Send plain command: 4d
Generated raw command: 010306004d500002
Send raw command: 010306004d500002
Device answer: 01
done

Send plain command: 4d01
Generated raw command: 0104004d0304520002
Send raw command: 0104004d0304520002
Device answer: 01
done

Send plain command: 4f
Generated raw command: 010306004f520002
Send raw command: 010306004f520002
Device answer: 01
done

Send plain command: 4f01
Generated raw command: 0104004f0304540002
Send raw command: 0104004f0304540002
Device answer: 01
done

Send plain command: 50
Generated raw command: 0103060050530002
Send raw command: 0103060050530002
Device answer: 01
done

Send plain command: 5001
Generated raw command: 010400500304550002
Send raw command: 010400500304550002
Device answer: 01
done

Send plain command: 53
Generated raw command: 0103060053560002
Send raw command: 0103060053560002
Device answer: 01
done

Send plain command: 5301
Generated raw command: 010400530304580002
Send raw command: 010400530304580002
Device answer: 01
done

Send plain command: 54
Generated raw command: 0103060054570002
Send raw command: 0103060054570002
Device answer: 01
done

Send plain command: 5401
Generated raw command: 010400540304590002
Send raw command: 010400540304590002
Device answer: 00Device answer: 00Device answer: 01Failed!
done

Send plain command: 55
Generated raw command: 0103060055580002
Send raw command: 0103060055580002
Device answer: 01
done

Send plain command: 5501
Generated raw command: 0104005503045a0002
Send raw command: 0104005503045a0002
Device answer: 01
done

Send plain command: 57
Generated raw command: 01030600575a0002
Send raw command: 01030600575a0002
Device answer: 01
done

Send plain command: 5701
Generated raw command: 0104005703045c0002
Send raw command: 0104005703045c0002
Device answer: 01
done

Send plain command: 58
Generated raw command: 01030600585b0002
Send raw command: 01030600585b0002
Device answer: 01
done

Send plain command: 5801
Generated raw command: 0104005803045d0002
Send raw command: 0104005803045d0002
Device answer: 01
done

Send plain command: 59
Generated raw command: 01030600595c0002
Send raw command: 01030600595c0002
Device answer: 01
done

Send plain command: 5901
Generated raw command: 0104005903045e0002
Send raw command: 0104005903045e0002
Device answer: 01
done

Send plain command: 5a
Generated raw command: 010306005a5d0002
Send raw command: 010306005a5d0002
Device answer: 01
done

Send plain command: 5a01
Generated raw command: 0104005a03045f0002
Send raw command: 0104005a03045f0002
Failed!
done

Send plain command: 62
Generated raw command: 0103060062650002
Send raw command: 0103060062650002
Device answer: 01
done

Send plain command: 6201
Generated raw command: 010400620304670002
Send raw command: 010400620304670002
Device answer: 01
done

Send plain command: 63
Generated raw command: 0103060063660002
Send raw command: 0103060063660002
Device answer: 01
done

Send plain command: 6301
Generated raw command: 010400630304680002
Send raw command: 010400630304680002
Failed!
done

Send plain command: 66
Generated raw command: 0103060066690002
Send raw command: 0103060066690002
Device answer: 01
done

Send plain command: 6601
Generated raw command: 0104006603046b0002
Send raw command: 0104006603046b0002
Device answer: 01
done

Send plain command: 67
Generated raw command: 01030600676a0002
Send raw command: 01030600676a0002
Device answer: 01
done

Send plain command: 6701
Generated raw command: 0104006703046c0002
Send raw command: 0104006703046c0002
Device answer: 01
done

Send plain command: 68
Generated raw command: 01030600686b0002
Send raw command: 01030600686b0002
Device answer: 01
done

Send plain command: 6801
Generated raw command: 0104006803046d0002
Send raw command: 0104006803046d0002
Device answer: 01
done

Send plain command: 70
Generated raw command: 0103060070730002
Send raw command: 0103060070730002
Device answer: 01
done

Send plain command: 7001
Generated raw command: 010400700304750002
Send raw command: 010400700304750002
Device answer: 01
done

Send plain command: 71
Generated raw command: 0103060071740002
Send raw command: 0103060071740002
Failed!
done

Send plain command: 7101
Generated raw command: 010400710304760002
Send raw command: 010400710304760002
Device answer: 01
done

Send plain command: 72
Generated raw command: 0103060072750002
Send raw command: 0103060072750002
Failed!
done

Send plain command: 7201
Generated raw command: 010400720304770002
Send raw command: 010400720304770002
Device answer: 01
done

Send plain command: 73
Generated raw command: 0103060073760002
Send raw command: 0103060073760002
Device answer: 01
done

Send plain command: 7301
Generated raw command: 010400730304780002
Send raw command: 010400730304780002
Device answer: 01
done

Send plain command: 74
Generated raw command: 0103060074770002
Send raw command: 0103060074770002
Device answer: 01
done

Send plain command: 7401
Generated raw command: 010400740304790002
Send raw command: 010400740304790002
Device answer: 01
done

Send plain command: 80
Generated raw command: 0103060080830002
Send raw command: 0103060080830002
Device answer: 01
done

Send plain command: 8001
Generated raw command: 010400800304850002
Send raw command: 010400800304850002
Device answer: 01
done

Send plain command: 81
Generated raw command: 0103060081840002
Send raw command: 0103060081840002
Device answer: 01
done

Send plain command: 8101
Generated raw command: 010400810304860002
Send raw command: 010400810304860002
Device answer: 01
done

Send plain command: 82
Generated raw command: 0103060082850002
Send raw command: 0103060082850002
Device answer: 01
done

Send plain command: 8201
Generated raw command: 010400820304870002
Send raw command: 010400820304870002
Failed!
done

Send plain command: 90
Generated raw command: 0103060090930002
Send raw command: 0103060090930002
Device answer: 01
done

Send plain command: 9001
Generated raw command: 010400900304950002
Send raw command: 010400900304950002
Device answer: 01
done

Send plain command: 92
Generated raw command: 0103060092950002
Send raw command: 0103060092950002
Device answer: 01
done

Send plain command: 9201
Generated raw command: 010400920304970002
Send raw command: 010400920304970002
Device answer: 01
done

Send plain command: 93
Generated raw command: 0103060093960002
Send raw command: 0103060093960002
Device answer: 01
done

Send plain command: 9301
Generated raw command: 010400930304980002
Send raw command: 010400930304980002
Device answer: 01
done

Send plain command: 96
Generated raw command: 0103060096990002
Send raw command: 0103060096990002
Device answer: 01
done

Send plain command: 9601
Generated raw command: 0104009603049b0002
Send raw command: 0104009603049b0002
Device answer: 01
done

Send plain command: a0
Generated raw command: 01030600a0a30002
Send raw command: 01030600a0a30002
Device answer: 01
done

Send plain command: a001
Generated raw command: 010400a00304a50002
Send raw command: 010400a00304a50002
Device answer: 01
done

Send plain command: a1
Generated raw command: 01030600a1a40002
Send raw command: 01030600a1a40002
Device answer: 01
done

Send plain command: a101
Generated raw command: 010400a10304a60002
Send raw command: 010400a10304a60002
Device answer: 01
done

Send plain command: a2
Generated raw command: 01030600a2a50002
Send raw command: 01030600a2a50002
Device answer: 01
done

Send plain command: a201
Generated raw command: 010400a20304a70002
Send raw command: 010400a20304a70002
Device answer: 01
done

Send plain command: a7
Generated raw command: 01030600a7aa0002
Send raw command: 01030600a7aa0002
Device answer: 01
done

Send plain command: a701
Generated raw command: 010400a70304ac0002
Send raw command: 010400a70304ac0002
Device answer: 01
done

Send plain command: a8
Generated raw command: 01030600a8ab0002
Send raw command: 01030600a8ab0002
Device answer: 01
done

Send plain command: a801
Generated raw command: 010400a80304ad0002
Send raw command: 010400a80304ad0002
Device answer: 01
done

Send plain command: aa
Generated raw command: 01030600aaad0002
Send raw command: 01030600aaad0002
Device answer: 01
done

Send plain command: aa01
Generated raw command: 010400aa0304af0002
Send raw command: 010400aa0304af0002
Device answer: 01
done

Send plain command: ac
Generated raw command: 01030600acaf0002
Send raw command: 01030600acaf0002
Device answer: 01
done

Send plain command: ac01
Generated raw command: 010400ac0304b10002
Send raw command: 010400ac0304b10002
Device answer: 01
done

Send plain command: b0
Generated raw command: 01030600b0b30002
Send raw command: 01030600b0b30002
Device answer: 01
done

Send plain command: b001
Generated raw command: 010400b00304b50002
Send raw command: 010400b00304b50002
Device answer: 01
done

Send plain command: b2
Generated raw command: 01030600b2b50002
Send raw command: 01030600b2b50002
Device answer: 01
done

Send plain command: b201
Generated raw command: 010400b20304b70002
Send raw command: 010400b20304b70002
Device answer: 01
done

Send plain command: b3
Generated raw command: 01030600b3b60002
Send raw command: 01030600b3b60002
Device answer: 01
done

Send plain command: b301
Generated raw command: 010400b30304b80002
Send raw command: 010400b30304b80002
Device answer: 01
done

Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 07 Oktober 2018, 00:48:04
So, alles durchgetestet. Viel hab ich nicht. Ich denke, da die AuraBox älter ist, haben die auf die App als
Source gebaut. Die neueren Boxen haben bestimmt mehr Pics im Speicher. Mal abgesehen von dem
anderen Funktionsumfang.

Bereich 50

5001 = blinkendes Herz
5002 = calling Speaker
5003 = rotes Telefon
5004 = grünes ?
5005 = blau/weißes ?
5006 = skype ?
5007 = Line
5008 = WeChat
5009 = Pinguin
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 07 Oktober 2018, 01:44:13
50 sind die Benachrichtigungen wie es scheint.

Leider habe ich auch nicht sehr viel mehr gefunden, habe aber in der App mal den Sleep Timer, Kalender, Terminplaner, Spectrum Light und Wetter mitgeschnitten und hoffe für diese 5 Funktionen noch irgendwas raus zu bekommen (für eine Analyse ist es heute schon zu spät, das muss noch ein wenig warten).

Hier ist mein aktueller Stand der Dinge:

Switch Screen: 45
  -> Clock: 00
    -> Format 12/24h (optional): 00 - 01
    -> Color as rgb (optional): 000000 - FFFFFF
   
  -> Temperature: 01
    -> Format Celsius/Fahrenheit (optional): 00 - 01
    -> Color as rgb (optional): 000000 - FFFFFF
 
  -> Switchoff Screen: 02
 
  -> Animation (hardcoded): 03
    -> Type: 00 - 06
   
  -> Equalizer: 04
    -> 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
 
  -> Stopwatch: 06
    -> Control Halt/Reset (optional): 00 (Halt), 02 (Reset)
   
  -> Scoreboard: 07
    -> 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
  -> Level (0 = off, 01 - FF = brightness level): 00 - FF
 
Set Time: 18
  -> Year (XX = year % 100, YY = year / 100): XXYY
  -> Month: XX
  -> Day: XX
  -> Hours: XX
  -> Minutes: XX
  -> Seconds: XX
 
Set Volume: 08
  -> Level: 01 - 64
 
Get Volume: 09
  -> Level
 
Set FM Radio (untested!): 05
  -> State (on = 01, off = 00): 00 - 01
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY
 
Get FM Radio Frequency: 60
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY
 
Set FM Radio Frequency: 61
  -> Frequency (100.3 Mhz = YYX.X = 030A): XXYY
 
Set Mute: 0A
  -> State (on = 00, off = 01): 00 - 01
 
Get Mute: 0B
  -> State (on = 00, off = 01)
 
Set Image: 44000A0A04
  -> 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
  -> 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
  -> 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
  -> Type: 00 - FF
 
Set Calendar or Appointment Planer: 54
  -> needs further investigation
 
Screen Off: 41XX or 62XX
 
Show/Set Stopwatch/Scoreboard: 71
  -> Type (00 = Stopwatch, 01 = Scoreboard): 00 - 01
  -> strange behaviour (needs further investigation)
 
Set Game: A0
  -> State (on = 01, off = 00): 00 - 01
  -> Type: XX
  -> Control???
 
Set Talking Faces: A1
  -> State (on = 01, off = 00): 00 - 01
  -> Type (optional): XX
 
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 08 Oktober 2018, 01:41:49
Ich habe jetzt geändert das man das Timeout im sendPlain oder sendRaw auch als 0.1 angeben kann. Bisher war 1 Sekunde das untere Limit. Außerdem habe ich mal eine Animation erstellt (siehe unten im Code). Dadurch kann man diese Animation auf das Gerät laden und sie wird dann endlos ohne weiteres zutun abgespielt. Hierbei ist zu beachten, das man unbedingt den neuen optionalen dritten Parameter immer auf 0 setzen muss. Das scheint nur hier notwendig zu sein, bei allen anderen Kommandos kann man den dritten Parameter, wie bisher, weg lassen. Die 0 bewirkt, das nicht auf eine Antwort gewartet wird. Die Timebox sendet hier anscheinend keine Antwort oder diese kann nicht mit sysread eingelesen werden. Ich muss da noch mal gucken woran es liegt.

Für die Aurabox muss man natürlich die convertImageAB() Funktion und als Size 10 verwenden.

#!/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";
}

sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
 
  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();
    }
  }
 
  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 $_;
}

my $pic1 = convertImageTB('1.png', 11);
my $pic2 = convertImageTB('2.png', 11);
my $pic3 = convertImageTB('3.png', 11);
my $pic4 = convertImageTB('4.png', 11);
my $pic5 = convertImageTB('5.png', 11);
my $pic6 = convertImageTB('6.png', 11);
my $pic7 = convertImageTB('7.png', 11);
my $pic8 = convertImageTB('8.png', 11);

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  sendPlain('4500', 5);
  sendPlain('49000A0A040000'.$pic1, 0, 0);
  sendPlain('49000A0A040100'.$pic2, 0, 0);
  sendPlain('49000A0A040200'.$pic3, 0, 0);
  sendPlain('49000A0A040300'.$pic4, 0, 0);
  sendPlain('49000A0A040400'.$pic5, 0, 0);
  sendPlain('49000A0A040500'.$pic6, 0, 0);
  sendPlain('49000A0A040600'.$pic7, 0, 0);
  sendPlain('49000A0A040700'.$pic8, 20, 0);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 08 Oktober 2018, 18:05:46
So Feierabend und gerade getestet. Das Feuerwerk knallt hier munter vor sich hin. Infinityloop im Speicher  :)

edit:

Hier nochmal meine Aussage von Seite 5. Ist bei dem Explizitpfaddisaster untergegangen.

-----------------------------------------------------------------------------------------------------

Habe my@color getweaked.

Vorher:
my @color = (0, 1, 2, 11, 4, 5, 2, 5, 8, 1, 2, 3, 4, 13, 6, 7);

Nachher:
my @color = (0, 1, 2, 11, 4, 5, 2, 15, 8, 1, 2, 3, 4, 13, 6, 7);

Ist das für dich nachvollziehbar?
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 08 Oktober 2018, 18:48:56
An der Stelle kann ich nichts nachvollziehen, da mir die Aurabox fehlt. Ich bin deshalb auf deinen Input angewiesen und übernehme die Änderung gern.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 08 Oktober 2018, 19:28:18
Ok, dann bitte übernehmen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 09 Oktober 2018, 08:31:56
Kannst du bei dir mal bitte folgendes prüfen? Unter Tools kann man Kalendereinträge erstellen. Wenn man da drauf klickt, kann man rechts oben mit dem Notizblock Icon einen neuen Eintrag erstellen. Versuch mal bitte 2 Einträge mit unterschiedlichen Stunden zu erstellen, also z.b. 8 und 10 Uhr. Bei mir kann ich das zwar setzen, aber die Stunde steht jedes Mal wieder auf 7, wenn die die Einträge erneut öffne. Die Minuten und das Datum kann ich hingegen problemlos ändern.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 09 Oktober 2018, 11:23:43
Und noch eine Frage. Hast du es geschafft 2 Geräte mit der Aurabox zu pairen, so das du mit der App und gleichzeitig mit FHEM auf die Aurabox zugreifen kannst? Ich muss aktuell immer das Pairing auf meinem Telefon aufheben, bevor FHEM wieder darauf zugreifen kann. Besser wäre es, wenn man einfach beide gepaired lassen könnte...
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 Oktober 2018, 12:30:21
Zum Pairing, leider nein. Bis jetzt auch nur 1 Device. Kalendereintrag probiere ich heute Abend.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 Oktober 2018, 21:37:43
So, zu den Kalendereinträgen. Die App für die AuraBox ist eine extra App. Kalendereinträge sind damit nicht möglich. Gibt nur ein
Schlaftimer und Wecktimer. Sehr beschnitten, liegt wohl an der Box selber.

Was ich noch festgestellt habe. Bei mir sind 3 Settings der Helligkeit möglich. Hell, Dunkel, Schwarz(Aus). Soll das Display aus sein,
ist es besser, der Box ein black.bmp zu schicken. Grund, wurde das Schwarzsetting gewählt und es wird umgeschaltet, egal ob Bild,
Animation oder z.B Uhr, bleibt das Display schwarz. Erst umschalten auf Dunkel oder Hell bringt ein Bild zurück. Das switchen klappt
aber, obwohl nichts zu sehen ist. Vom black.bmp zu irgendwas klappt sofort.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 09 Oktober 2018, 23:16:43
Hmm komisch. Bei mir ist das in der Mitte Links unter Tools. Da wo auch die Stopuhr, Anzeigetafel usw. zu finden sind.

Den Wecktimer habe ich ja schon entschlüsselt. Den Kalender vermutlich auch. Ich dachte erst die Box hat ein Bug, es scheint aber nur die Android App zu sein. Mit iOS gehts, nur kann ich damit leider nicht die Nachrichten sniffen. Den Sleeptimer habe ich nach hinten gestellt, da ich dafür keine Notwendigkeit sehe den über Fhem zu steuern.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 10 Oktober 2018, 00:31:21
Set Calendar: 54
  -> Index: 00 - FF
  -> State (on = 01, off = 00): 00 - 01
  -> Month: XX
  -> Day: XX
  -> Hour: XX
  -> Minute: XX
  -> Unknown: 01
  -> Titel (XX = max 15 Chars or 00): 00XX00XX00XX00XX00XX00XX00XX00XX00XX00XX00XX00XX00XX00XX00XX
  -> Unknown: 0000
 
Set Calendar Picture: 55
  -> Index: 00 - FF
  -> Unknown: 01000A
  -> 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
  -> Index: 00 - FF
  -> Unknown: 0002010C00000000000000000000000000000000000000000000000000000000000000000000
 
Get Calendar: 53

Beispiel um den ersten Eintrag zu setzen:
my $pic1 = convertImageTB('1.png', 11);

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  sendPlain('4500', 5);
  # 0A0A = 10.10, 0805 = 08:05 Uhr
  sendPlain('5400010A0A080501006100620063006400650066006700680069006a006b006c006d006e006f0000', 0);
  sendPlain('550001000A'.$pic1, 0, 0);
  disconnectDivoom();
}

Kannst du aber leider nicht benutzen wie es scheint, zur Dokumentation habe ich es hier aber mal abgelegt. Ich schreibe dafür noch eine Funktion, die das Handling einfacher macht.

Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 10 Oktober 2018, 08:21:39
Da bin ich doch froh, das du für debugging die neuere Box
mit mehr Funktionen hast  ;D Wenn der Preis passt, werde
ich mir wahrscheinlich noch die normale Timebox zulegen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 10 Oktober 2018, 16:05:13
Es gibt ne Timebox Evo mit 16x16 Matrix und Bluetooth 5.0. Ich würde eher diese holen...
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 12 Oktober 2018, 19:37:05
Wenn der Support gegeben ist, würde ich mir die Evo holen  :D

Konntest du bei der App schon die Picdatabase sniffen? Zumindest wird bei allen Nachfolgern der AuraBox
mit Onlinegallery geworben. Wäre ja toll, da Zugriff zu haben.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 12 Oktober 2018, 23:20:43
Das wird nicht funktionieren. Dazu müsste ich mich irgendwie einloggen können und dann die Datenbank abfragen. Ich denke das ist zu aufwendig. Einfacher wäre es das über die App zu machen, das irgendwie zu exportieren und dann das Bild/Animation einfach zu laden.
Ich habe es nicht wirklich getestet, aber wenn man die Gallerie öffnet und sich dann ein Bild/Animation auswählt, dann gibts da ein Disketten Symbol. Wenn man das anklickt kann man das Bild speichern und dann sollte es doch eigentlich auf dem Handy irgendwie als Datei abgelegt werden, so dass man es von dort wieder übertragen kann.
Wenn ich es hinbekomme die Binärdaten eines Bildes vernünftig zurück zu lsen, dann könnte man das Bild auch in die Timebox laden und dann per Script auslesen und speichern lassen. Da muss ich aber erst mal gucken, bisher klappt das mit dem zurücklesen noch nicht so wirklich.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 13 Oktober 2018, 14:13:51
Mh ok. Habe mal mit Fiddler den Traffic mitgeschnitten. Hier liegen viele Bilder oder Animationen.

http://f.divoom-gz.com/group1/M00/02/3C/L1ghblsMAymENouAAAAAAOu-oVE4546727
http://f.divoom-gz.com/group1/M00/02/3E/L1ghblsMtxKEJBanAAAAAGbycQA7274313
http://f.divoom-gz.com/group1/M00/02/86/eEwpPVsMDWaEXtyyAAAAAKkAT-I3375990
http://f.divoom-gz.com/group1/M00/02/38/L1ghblsJuAuEU6N4AAAAACirP7s1541396
http://f.divoom-gz.com/group1/M00/02/86/eEwpPVsL_dqEZxObAAAAAEhrmRc2886966
http://f.divoom-gz.com/group1/M00/02/83/eEwpPVsKpK2EYHn1AAAAACh62oU6034852
http://f.divoom-gz.com/group1/M00/02/81/eEwpPVsJZvaEaSxqAAAAAPaQF5c9621416
http://f.divoom-gz.com/group1/M00/02/3A/L1ghblsKq9qEEpUXAAAAAFRWCGU2461399
http://f.divoom-gz.com/group1/M00/02/3C/L1ghblsL-nOEJWgQAAAAABdofhs2965067
http://f.divoom-gz.com/group1/M00/02/83/eEwpPVsKegqEP154AAAAAE9XkTw4770324
http://f.divoom-gz.com/group1/M00/02/3A/L1ghblsKunuEVvuMAAAAAHgveho6632786
http://f.divoom-gz.com/group1/M00/02/39/L1ghblsKWTCER93WAAAAABVs_7s2388037
http://f.divoom-gz.com/group1/M00/02/33/L1ghblsGspSEHz8aAAAAAEaiArM7323415
http://f.divoom-gz.com/group1/M00/02/80/eEwpPVsI6B-EdjJ8AAAAAAGpESA5715846
http://f.divoom-gz.com/group1/M00/02/83/eEwpPVsKsbmEFvQaAAAAAGCjDgY4751043
http://f.divoom-gz.com/group1/M00/02/38/L1ghblsJZUuESskdAAAAAIZbIHo4530707
http://f.divoom-gz.com/group1/M00/02/35/L1ghblsIRSOEYY0EAAAAACgGahE6981906
http://f.divoom-gz.com/group1/M00/02/82/eEwpPVsKVfOEDA2JAAAAAFRebK49797861
http://f.divoom-gz.com/group1/M00/02/3C/L1ghblsL95iEd6F_AAAAAOlmbwA2064454
http://f.divoom-gz.com/group1/M00/02/3A/L1ghblsKvDuEGouLAAAAACGs1hU5603000
http://f.divoom-gz.com/group1/M00/02/7C/eEwpPVsGqHyEKRUOAAAAABwaMV03778417
http://f.divoom-gz.com/group1/M00/02/3B/L1ghblsLppqECAVPAAAAANkacHc3875366
http://f.divoom-gz.com/group1/M00/02/37/L1ghblsI-LOEB64lAAAAAG6ieIo1201088
http://f.divoom-gz.com/group1/M00/02/3A/L1ghblsKqoKEAMpTAAAAAFj20tY2669746
http://f.divoom-gz.com/group1/M00/02/83/eEwpPVsKfVOETvolAAAAAIB3vO88599620
http://f.divoom-gz.com/group1/M00/02/39/L1ghblsKXYyER3-NAAAAAOxQ-Mw5320497
http://f.divoom-gz.com/group1/M00/02/3A/L1ghblsKpxCECwC9AAAAAPFPA3M2854335
http://f.divoom-gz.com/group1/M00/02/82/eEwpPVsKU1mEX_nyAAAAAFTdReg4954998
http://f.divoom-gz.com/group1/M00/02/82/eEwpPVsKV5SELONMAAAAAF92HjE7407330
http://f.divoom-gz.com/group1/M00/02/7D/eEwpPVsG_UiEUFt0AAAAAATBXEI5839088

Die Filelist wird immer unter diesem Link ausgegeben.

http://app.divoom-gz.com/GetCategoryFileListV2

Mal sehen wie der Request erfolgen muss. Sonst bekommt man als Antwort nur,

{"ReturnCode":13,"ReturnMessage":"Request data illegal json"}

Erfolgt die Anfrage über die App, schaut der Webview z.B. so aus.
{"ReturnCode":0,"ReturnMessage":"","PacketFlag":"","_StartTime":1539433373,"FileListNum":35902,"CurListNum":30,"FileList":
[{"GalleryId":69308,"UserId":400098098,"FileId":"group1/M00/03/9A/eEwpPVudNHSEWmcvAAAAAP2Ux6I2641932","FileName":"抽象画","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":69306,"UserId":400098098,"FileId":"group1/M00/03/51/L1ghbludM9WEPOvjAAAAAC4sDsg4489929","FileName":"花","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":69256,"UserId":400220774,"FileId":"group1/M00/03/50/L1ghbluc_XeELy-wAAAAACup2gI8181367","FileName":"love","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":68707,"UserId":400216809,"FileId":"group1/M00/03/4B/L1ghbluZLtmEYnLSAAAAAKur8iM5159103","FileName":"Rainbows","FileType":1,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":68579,"UserId":400220549,"FileId":"group1/M00/03/49/L1ghbluYWFCEQ7NYAAAAAGmzGBk5970331","FileName":"Rainbow","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":68397,"UserId":400220609,"FileId":"group1/M00/03/91/eEwpPVuXcKWEFeKNAAAAABuG1n81656936","FileName":"スライム変幻","FileType":1,"LikeCnt":3,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67660,"UserId":400219352,"FileId":"group1/M00/03/42/L1ghbluT5-2EGvYlAAAAALDi3Y41598768","FileName":"爱心","FileType":8,"LikeCnt":3,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67587,"UserId":400219275,"FileId":"group1/M00/03/41/L1ghbluTvW2EYSafAAAAAHqkBu8.623430","FileName":"color noise","FileType":6,"LikeCnt":4,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67518,"UserId":400003250,"FileId":"group1/M00/03/41/L1ghbluTZ4GETvqMAAAAADkgi6g.773189","FileName":"1","FileType":1,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67184,"UserId":400098098,"FileId":"group1/M00/03/87/eEwpPVuRZGqERcyDAAAAAE9Udxw2246065","FileName":"格格","FileType":0,"LikeCnt":2,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67182,"UserId":400098098,"FileId":"group1/M00/03/3E/L1ghbluRYw-ERajqAAAAAKy2J5s1870003","FileName":"呵呵","FileType":0,"LikeCnt":2,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67180,"UserId":400098098,"FileId":"group1/M00/03/87/eEwpPVuRYPeEKqVxAAAAACHsAzQ9145772","FileName":"几何","FileType":0,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67178,"UserId":400098098,"FileId":"group1/M00/03/3E/L1ghbluRXxyEMW6gAAAAAHvfpI48790917","FileName":"house","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":67012,"UserId":400098098,"FileId":"group1/M00/03/86/eEwpPVuQFHeERVuSAAAAABxxcig0265922","FileName":"屋檐","FileType":0,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66998,"UserId":400098098,"FileId":"group1/M00/03/3C/L1ghbluQB9KEQv23AAAAAKhM_3I1233744","FileName":"几何","FileType":0,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66992,"UserId":400098098,"FileId":"group1/M00/03/3C/L1ghbluQALOECqFMAAAAAEZKkck6146651","FileName":"construction","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66990,"UserId":400098098,"FileId":"group1/M00/03/85/eEwpPVuP_zeEfPiHAAAAADfk7I44014931","FileName":"construction","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66834,"UserId":400098098,"FileId":"group1/M00/03/84/eEwpPVuOpViEZdTNAAAAAAXhONg1419104","FileName":"patten","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66832,"UserId":400098098,"FileId":"group1/M00/03/3A/L1ghbluOpF2EPTuRAAAAAGWju2o7398607","FileName":"patten5","FileType":0,"LikeCnt":2,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66830,"UserId":400098098,"FileId":"group1/M00/03/84/eEwpPVuOoreEeKYiAAAAAJouzKk6606587","FileName":"patten3","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66826,"UserId":400098098,"FileId":"group1/M00/03/84/eEwpPVuOoZeEW2-fAAAAANfeLGU6508796","FileName":"patten3","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66235,"UserId":400214491,"FileId":"group1/M00/03/7E/eEwpPVuLieKEQN1nAAAAAMB0Y5Q.789328","FileName":"マリオ\n","FileType":1,"LikeCnt":16,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66231,"UserId":400214491,"FileId":"group1/M00/03/7E/eEwpPVuLgZuEGwb4AAAAAOH66Bw.601333","FileName":"ロックマン","FileType":1,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":66035,"UserId":400215095,"FileId":"group1/M00/03/33/L1ghbluKbh6EN4TuAAAAAD5dUaY9694504","FileName":"France","FileType":1,"LikeCnt":2,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":65825,"UserId":400214847,"FileId":"group1/M00/03/7A/eEwpPVuJMbGEcmoTAAAAAPmtgdU4330391","FileName":"WHiteHeart","FileType":1,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":65651,"UserId":400214881,"FileId":"group1/M00/03/2F/L1ghbluH0sKEWOBcAAAAAFR5NEg.443963","FileName":"Love","FileType":1,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":65455,"UserId":400214457,"FileId":"group1/M00/03/2D/L1ghbluGk4SEaiV6AAAAAO3gVEo.215061","FileName":"bad apple PV","FileType":1,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":65244,"UserId":400131400,"FileId":"group1/M00/03/74/eEwpPVuFNW-Eb_m7AAAAAH3_9eY.642237","FileName":"彩色方块","FileType":6,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":64971,"UserId":400213471,"FileId":"group1/M00/03/72/eEwpPVuDxgiEMhNsAAAAAAHllXs.548533","FileName":"Scheletro","FileType":0,"LikeCnt":0,"IsLike":0,"CommentCnt":0,"IsNewComment":0},
{"GalleryId":64735,"UserId":400212673,"FileId":"group1/M00/03/6F/eEwpPVuCFXqEHhDzAAAAACqg5aY.335153","FileName":"睿","FileType":1,"LikeCnt":1,"IsLike":0,"CommentCnt":0,"IsNewComment":0}],"_EndTime":1539433373,"_ProTime":0}


Angemeldet oder registriert habe ich mich nirgends. Als App habe ich "Divoom Smart" verwendet. Nicht die TimeboxApp.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 13 Oktober 2018, 23:04:47
Must mal mitschneiden was passiert wenn du die App neu startest (vorher aus dem RAM werfen) und dann beim Screen zum einloggen auf überspringen gehst. Vermutlich holt sich die App dann eine default session.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 14 Oktober 2018, 09:39:37
Ok, ich hab die App komplett zurück gesetzt. Cache und alles Gespeicherte geleert.

1.
http://android.bugly.qq.com/rqd/async?aid=dfb91817-9167-4e5a-918a-659c3f38fe06
Raw-Request

POST http://android.bugly.qq.com/rqd/async?aid=dfb91817-9167-4e5a-918a-659c3f38fe06 HTTP/1.1
wup_version: 3.0
raKey: LHQgHVnTPYEQPsnSuPdhGCzl1b8zFD69GY4OoxN9tB%2B3rixl9jgXp%2Bw4kcmDkExn2APUYXPn5b7O%0AubPdc1HpPztB76EbFshSnlg6uPI6jJKpS%2BkWVXyAo2qhiQOa27eYF1Em2GAxSIIbJ4fr1gtnitTa%0Al%2BBCQ6uZKgS6XK8F9Yk%3D%0A
strategylastUpdateTime: 0
appVer: 2.45
bundleId: com.divoom.Divoom
sdkVer: 2.6.6
prodId: 0523442e6b
cmd: 840
platformId: 1
A37: WIFI
A38: WIFI
Content-Type: application/x-www-form-urlencoded
User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; SM-G901F Build/OPM6.171019.030.H1)
Host: android.bugly.qq.com
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 942

Raw-Response

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 14 Oct 2018 07:22:49 GMT
Content-Length: 330
Connection: keep-alive
Bugly-Version: bugly/1.0
status: 0
nstat: 0

2.
http://nav.cn.ronghub.com/navipush.json
Raw-Request

POST http://nav.cn.ronghub.com/navipush.json HTTP/1.1
appId: 6tnym1brn6ze7
Content-Type: application/x-www-form-urlencoded
User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; SM-G901F Build/OPM6.171019.030.H1)
Host: nav.cn.ronghub.com
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 31

deviceId=1RBurHh8Ro6w1NxCAnobeA

Raw-Response

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 14 Oct 2018 07:22:52 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 43
Connection: keep-alive
p: 23
Vary: Accept-Encoding

{"code":200,"server":"120.92.122.155:8609"}

3.

https://stats.cn.ronghub.com/active.json
Raw-Request

POST https://stats.cn.ronghub.com/active.json HTTP/1.1
Connection: close
Content-Type: application/x-www-form-urlencoded
User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; SM-G901F Build/OPM6.171019.030.H1)
Host: stats.cn.ronghub.com
Accept-Encoding: gzip
Content-Length: 561

deviceId=1RBurHh8Ro6w1NxCAnobeA&appKey=6tnym1brn6ze7&timestamp=1539501767&deviceInfo=%7B%22device%22%3A%22SM-G901F%22%2C%22osName%22%3A%22Android%22%2C%22osVersion%22%3A%228.1.0%22%2C%22carrier%22%3A%22o2+-+de%22%2C%22resolution%22%3A%221080x1920%22%2C%22density%22%3A%22XXHDPI%22%2C%22locale%22%3A%22de_DE%22%2C%22appVersion%22%3A%222.45%22%2C%22channel%22%3A%22com.android.vending%22%2C%22bundleId%22%3A%22com.divoom.Divoom%22%2C%22sdkVersion%22%3A%222.8.32%22%2C%22network%22%3A%22WIFI%22%2C%22timeZone%22%3A%22MEZ%22%2C%22imei%22%3A%22d820420f7551b5bb%22%7D

Raw-Response

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 14 Oct 2018 07:22:52 GMT
Content-Type: application/json
Content-Length: 12
Connection: close
Vary: Accept-Encoding

{"code":200}

4. Noch ein Tunnel zu Weibo

http://api.weibo.com:443
Raw-Request

CONNECT api.weibo.com:443 HTTP/1.1
Host: api.weibo.com:443
Connection: Keep-Alive
User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; SM-G901F Build/OPM6.171019.030.H1)

A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

Version: 3.3 (TLS/1.2)
Random: 8A 98 11 57 47 0D E6 D3 E8 A3 C3 16 5E 47 A2 AB F7 DE 72 F4 35 A9 EE 39 DA E4 87 A3 D9 B4 DF C9
"Time": 16.04.2016 03:42:34
SessionID: empty
Extensions:
renegotiation_info 00
server_name api.weibo.com
extended_master_secret empty
SessionTicket empty
signature_algs sha256_ecdsa, sha256_rsa, sha384_ecdsa, sha384_rsa, sha512_ecdsa, sha512_rsa, sha1_rsa
status_request OCSP - Implicit Responder
ALPN http/1.1
ec_point_formats uncompressed [0x0]
elliptic_curves unknown [0x1D), secp256r1 [0x17], secp384r1 [0x18]
Ciphers:
[CCA9] TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
[C02B] TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
[C02C] TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
[CCA8] TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
[C02F] TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
[C030] TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
[C009] TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
[C00A] TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
[C013] TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
[C014] TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
[009C] TLS_RSA_WITH_AES_128_GCM_SHA256
[009D] TLS_RSA_WITH_AES_256_GCM_SHA384
[002F] TLS_RSA_AES_128_SHA
[0035] TLS_RSA_AES_256_SHA

Compression:
[00] NO_COMPRESSION

Raw-response

HTTP/1.1 200 Connection Established
FiddlerGateway: Direct
StartTime: 09:22:39.367
Connection: close

Encrypted HTTPS traffic flows through this CONNECT tunnel. HTTPS Decryption is enabled in Fiddler, so decrypted sessions running in this tunnel will be shown in the Web Sessions list.

Secure Protocol: Tls12
Cipher: Aes256 256bits
Hash Algorithm: Sha384 ?bits
Key Exchange: RsaKeyX 2048bits

== Server Certificate ==========
[Subject]
  CN=sina.com, OU="Sina.com Technology(China)Co.,ltd", O="Sina.com Technology(China)Co.,ltd", L=Beijing, C=CN

[Issuer]
  CN=GeoTrust RSA CA 2018, OU=www.digicert.com, O=DigiCert Inc, C=US

[Serial Number]
  0D796070CC6B6B449268FB547AA70B0A

[Not Before]
  22.01.2018 01:00:00

[Not After]
  25.11.2019 13:00:00

[Thumbprint]
  75CFB0A0FD9700C8093C43BE4837074B17849386

[SubjectAltNames]
sina.com, www.sina.com, *.cj.sina.cn, *.blog.sina.com.cn, *.news.sina.com.cn, club.starvip.weibo.com, weibo.com, *.ucenter.fans.sports.sina.com.cn, *.finance.sina.com.cn, *.mix.sina.com.cn, *.uve.weibo.com, *.51xiancheng.com, *.sinaedge.com, img.dmp.sina.com.cn, *.ftx.sports.sina.com.cn, test.nbacoach.sports.sina.com.cn, *.mail.sina.com.cn, *.sjs.sinajs.cn, *.camera.weibo.com, *.house.sina.com.cn, *.music.sina.com.cn, *.info.sports.sina.com.cn, forum.sj.sports.sina.com.cn, *.mlszp.sports.sina.com.cn, *.biz.weibo.com, t.cn, *.nba.sports.sina.com.cn, *.t.sinajs.cn, *.video.sina.com.cn, *.golf.sports.sina.com.cn, *.sina.com, i.sso.sina.com.cn, *.storage.weibo.com, i.odds.sports.sina.com.cn, *.tech.sina.com.cn, admin.euro2012.sports.sina.com.cn, *.adbox.sina.com.cn, *.fashion.sina.com.cn, sina.cn, *.api.sina.cn, *.impress.sinaimg.cn, *.ivideo.sina.com.cn, *.sinajs.cn, p.you.video.sina.com.cn, s.img.mix.sina.com.cn, *.wax.weibo.com, i.guess.sports.sina.com.cn, *.match.sports.sina.com.cn, all.vic.sina.com.cn, admin.nikechbl2008.sports.sina.com.cn, int.dpool.sina.com.cn, match.lottery.sina.com.cn, *.login.fans.sports.sina.com.cn, *.mix.sports.sina.com.cn, *.sina.net, *.mix.sina.cn, *.cba.sports.sina.com.cn, sina.com.cn, *.ufc.sports.sina.com.cn, gameapi.g.sina.com.cn, *.passport.weibo.cn, sina.net, *.ent.sina.com.cn, *.sinaimg.cn, *.pay.sina.com.cn, v.feed.mix.sina.com.cn, *.astro.sina.com.cn, *.data.sports.sina.com.cn, top.book.sina.com.cn, *.auto.sina.com.cn, *.sports.sina.com.cn, *.weibo.cn, *.sina.cn, vip.stock.finance.sina.com.cn, *.passport.weibo.com, sinaimg.cn, *.us.sinaimg.cn, *.star.weibo.com, *.dmp.sina.cn, *.ggt.sina.com.cn, *.weibo.com, *.api.weibo.com, *.grid.sinaedge.com, open.weather.sina.com.cn, *.sc.weibo.com, top.edu.sina.com.cn, adm.leju.sina.com.cn, *.tv.weibo.cn, *.yoyo.weibo.cn, *.utils.sports.sina.com.cn, *.saga.sports.sina.com.cn, *.im.weibo.cn, *.api.sports.sina.com.cn, *.chengdu.weibo.cn, admin.forum.sports.sina.com.cn, *.sina.com.cn, *.fans.sports.sina.com.cn, cre.dp.sina.cn, *.bigdata.weibo.com, weibo.cn


5. Die erste URL von Divoom

http://app.divoom-gz.com/GetExpertListV2
Raw-Request

POST http://app.divoom-gz.com/GetExpertListV2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 72
User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; SM-G901F Build/OPM6.171019.030.H1)
Host: app.divoom-gz.com
Connection: Keep-Alive
Accept-Encoding: gzip

{"EndNum":10,"FileType":5,"StartNum":1,"Token":0,"UserId":0,"Version":3}

Raw-Response

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 14 Oct 2018 07:23:01 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 6916
Connection: keep-alive

{"ReturnCode":0,"ReturnMessage":"","ExpertListNum":100,"CurListNum":10,"ExpertList":[{"UserId":300000001,"HeadId":"group1/M00/02/E3/L1ghblthUV2EAk5oAAAAAIt7X8k.594439","NickName":"Dida","Score":26327,"FansCnt":244,"IsFollow":0,"FileList":[{"GalleryId":72234,"UserId":300000001,"FileId":"group1/M00/03/71/L1ghbluu1oWEUpg0AAAAAF8sFvU.638562","FileName":"ghost","FileType":1,"LikeCnt":6,"CommentCnt":0,"IsLike":0},{"GalleryId":72230,"UserId":300000001,"FileId":"group1/M00/03/71/L1ghbluu1biEHgUGAAAAAOkNdOM.268346","FileName":"ghost","FileType":1,"LikeCnt":7,"CommentCnt":0,"IsLike":0},{"GalleryId":72228,"UserId":300000001,"FileId":"group1/M00/03/BB/eEwpPVuu1SCEIUxaAAAAAJ1-o3s.930106","FileName":"ghost","FileType":1,"LikeCnt":4,"CommentCnt":0,"IsLike":0}]},{"UserId":400140960,"HeadId":"group1/M00/03/38/eEwpPVtn-iyEfszpAAAAAOjsU7M7349938","NickName":"666","Score":23190,"FansCnt":391,"IsFollow":0,"FileList":[{"GalleryId":64432,"UserId":400140960,"FileId":"group1/M00/03/23/L1ghbluAYsGEMHPuAAAAAJ46tOk4653543","FileName":"忍者神丢!","FileType":1,"LikeCnt":6,"CommentCnt":0,"IsLike":0},{"GalleryId":63592,"UserId":400140960,"FileId":"group1/M00/03/1B/L1ghblt8BBCEVKHaAAAAAE6bQ6M7769818","FileName":"wow8.0伊利丹","FileType":2,"LikeCnt":13,"CommentCnt":2,"IsLike":0},{"GalleryId":62916,"UserId":400140960,"FileId":"group1/M00/03/5D/eEwpPVt4YGqEeR4qAAAAAIIJnao1080147","FileName":"魔兽世界wow8.0 萨尔","FileType":2,"LikeCnt":14,"CommentCnt":4,"IsLike":0}]},{"UserId":400184745,"HeadId":"group1/M00/03/24/L1ghbluA7uOEf-egAAAAAK2IEeM6855751","NickName":"korekau130","Score":11800,"FansCnt":87,"IsFollow":0,"FileList":[{"GalleryId":72645,"UserId":400184745,"FileId":"group1/M00/03/BE/eEwpPVuw0a2EUsFhAAAAACdneS82736729","FileName":"SwitchMan","FileType":1,"LikeCnt":43,"CommentCnt":6,"IsLike":0},{"GalleryId":71467,"UserId":400184745,"FileId":"group1/M00/03/6C/L1ghblurWq6EG6XQAAAAAKvnLZA8050183","FileName":"Skeleton","FileType":1,"LikeCnt":28,"CommentCnt":7,"IsLike":0},{"GalleryId":71073,"UserId":400184745,"FileId":"group1/M00/03/69/L1ghbluo7o-EdpS-AAAAADfhU3A6366304","FileName":"Ghost","FileType":1,"LikeCnt":29,"CommentCnt":9,"IsLike":0}]},{"UserId":400196371,"HeadId":"group1/M00/03/BE/eEwpPVuwwfiEbVKVAAAAAE8ddjs8976462","NickName":"HungryBearCRAZY","Score":11106,"FansCnt":20,"IsFollow":0,"FileList":[{"GalleryId":75181,"UserId":400196371,"FileId":"group1/M00/03/D9/eEwpPVvCE4eEb2wXAAAAAOlSDxI7563719","FileName":"Sunset ","FileType":1,"LikeCnt":1,"CommentCnt":0,"IsLike":0},{"GalleryId":75169,"UserId":400196371,"FileId":"group1/M00/03/90/L1ghblvCDpeERBawAAAAAIU7HUo0702811","FileName":"AR - 364B ","FileType":8,"LikeCnt":1,"CommentCnt":1,"IsLike":0},{"GalleryId":75131,"UserId":400196371,"FileId":"group1/M00/03/D8/eEwpPVvB_JGEPDZ8AAAAALvRm0Q4406849","FileName":"Epic fail 1","FileType":1,"LikeCnt":2,"CommentCnt":0,"IsLike":0}]},{"UserId":400140952,"HeadId":"group1/M00/02/31/L1ghblsFUsKEYLOxAAAAAFLxXak8140568","NickName":"777","Score":10240,"FansCnt":144,"IsFollow":0,"FileList":[{"GalleryId":64376,"UserId":400140952,"FileId":"group1/M00/03/6B/eEwpPVuAH-aEVbbEAAAAAE0HfYo1352054","FileName":"飞机大炮","FileType":8,"LikeCnt":8,"CommentCnt":0,"IsLike":0},{"GalleryId":64318,"UserId":400140952,"FileId":"group1/M00/03/6B/eEwpPVt_2eSEPvswAAAAANsMDcg2948862","FileName":"吸","FileType":2,"LikeCnt":6,"CommentCnt":0,"IsLike":0},{"GalleryId":64316,"UserId":400140952,"FileId":"group1/M00/03/21/L1ghblt_2bOEYxlCAAAAAPz-LoI2630178","FileName":"抽","FileType":8,"LikeCnt":11,"CommentCnt":0,"IsLike":0}]},{"UserId":400098098,"HeadId":"group1/M00/03/74/eEwpPVuE8EyEURmiAAAAAJaDa0M2860286","NickName":"july","Score":7428,"FansCnt":73,"IsFollow":0,"FileList":[{"GalleryId":73720,"UserId":400098098,"FileId":"group1/M00/03/81/L1ghblu46ESEU1EBAAAAADSMOEk2897185","FileName":"fall","FileType":0,"LikeCnt":6,"CommentCnt":0,"IsLike":0},{"GalleryId":73714,"UserId":400098098,"FileId":"group1/M00/03/81/L1ghblu45iKEaWCEAAAAANiFseE5253143","FileName":"hearttree","FileType":0,"LikeCnt":1,"CommentCnt":0,"IsLike":0},{"GalleryId":73584,"UserId":400098098,"FileId":"group1/M00/03/7F/L1ghblu3jqyEEFBwAAAAAJiOkj81090011","FileName":"日落","FileType":0,"LikeCnt":4,"CommentCnt":0,"IsLike":0}]},{"UserId":400210295,"HeadId":"group1/M00/03/87/L1ghblu84jqEYzMVAAAAAMV7N54.823607","NickName":"HudHud","Score":6692,"FansCnt":22,"IsFollow":0,"FileList":[{"GalleryId":75117,"UserId":400210295,"FileId":"group1/M00/03/D8/eEwpPVvB-m6ENW1NAAAAAKYOcmU.862966","FileName":"Love\n","FileType":1,"LikeCnt":1,"CommentCnt":0,"IsLike":0},{"GalleryId":75115,"UserId":400210295,"FileId":"group1/M00/03/8F/L1ghblvB-kiEcs2xAAAAAILiZc0.494275","FileName":"Crystal Balls","FileType":1,"LikeCnt":5,"CommentCnt":2,"IsLike":0},{"GalleryId":74701,"UserId":400210295,"FileId":"group1/M00/03/8B/L1ghblvAAWeELrBhAAAAAFl4E1A.014742","FileName":"Flower","FileType":1,"LikeCnt":4,"CommentCnt":4,"IsLike":0}]},{"UserId":400132592,"HeadId":"group1/M00/02/01/eEwpPVrJzniEUaKdAAAAAFP2CDY8658861","NickName":"국왕","Score":5935,"FansCnt":71,"IsFollow":0,"FileList":[{"GalleryId":45632,"UserId":400132592,"FileId":"group1/M00/02/9D/eEwpPVsZBhSEdM_UAAAAAFFbgpo.156794","FileName":"百度","FileType":1,"LikeCnt":8,"CommentCnt":0,"IsLike":0},{"GalleryId":45394,"UserId":400132592,"FileId":"group1/M00/02/9A/eEwpPVsXjJKEP1OYAAAAAE_5FA8.822669","FileName":"月饼","FileType":0,"LikeCnt":9,"CommentCnt":0,"IsLike":0},{"GalleryId":45378,"UserId":400132592,"FileId":"group1/M00/02/9A/eEwpPVsXh7qEUl3HAAAAABBgWgY.537509","FileName":"百度男","FileType":0,"LikeCnt":7,"CommentCnt":0,"IsLike":0}]},{"UserId":400000026,"HeadId":"group1/M00/02/D9/L1ghbltb_4iEX5ZsAAAAAMFYswQ0975476","NickName":"Tenseaonefish","Score":4554,"FansCnt":102,"IsFollow":0,"FileList":[{"GalleryId":74742,"UserId":400000026,"FileId":"group1/M00/03/D5/eEwpPVvAOo2EJAvxAAAAAMQfFTA2079348","FileName":"","FileType":1,"LikeCnt":0,"CommentCnt":0,"IsLike":0},{"GalleryId":68534,"UserId":400000026,"FileId":"group1/M00/03/49/L1ghbluX-fmEcH4nAAAAAPQZIo03532333","FileName":"胖虎","FileType":0,"LikeCnt":2,"CommentCnt":0,"IsLike":0},{"GalleryId":68532,"UserId":400000026,"FileId":"group1/M00/03/92/eEwpPVuX-K6EN5pXAAAAAAbHzD40643576","FileName":"静香","FileType":0,"LikeCnt":3,"CommentCnt":0,"IsLike":0}]},{"UserId":400118166,"HeadId":"group1/M00/03/74/L1ghbluwIhGEbXoTAAAAAPki6Vo4669941","NickName":"jwh5","Score":4379,"FansCnt":8,"IsFollow":0,"FileList":[{"GalleryId":75272,"UserId":400118166,"FileId":"group1/M00/03/DA/eEwpPVvCoamET1pcAAAAADFAPsc2434122","FileName":"大家","FileType":8,"LikeCnt":1,"CommentCnt":0,"IsLike":0},{"GalleryId":75270,"UserId":400118166,"FileId":"group1/M00/03/91/L1ghblvCoTGEFm24AAAAAKBVj7I7730820","FileName":"我家的猫咪","FileType":8,"LikeCnt":1,"CommentCnt":0,"IsLike":0},{"GalleryId":75266,"UserId":400118166,"FileId":"group1/M00/03/DA/eEwpPVvCn8aEPd3ZAAAAAC2cWYY1119307","FileName":"hb","FileType":1,"LikeCnt":1,"CommentCnt":0,"IsLike":0}]}]}

6. Noch eine, taucht sofort mit auf

http://app.divoom-gz.com/GetAnnouncement
Raw-Request

POST http://app.divoom-gz.com/GetAnnouncement HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 36
User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; SM-G901F Build/OPM6.171019.030.H1)
Host: app.divoom-gz.com
Connection: Keep-Alive
Accept-Encoding: gzip

{"LastIndex":0,"Token":0,"UserId":0}

Raw-Response

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 14 Oct 2018 07:23:01 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 54
Connection: keep-alive

{"ReturnCode":1,"ReturnMessage":"No new announcement"}

7. So wie auch diese.

http://app.divoom-gz.com/GetCategoryFileListV2
Raw-Request

POST http://app.divoom-gz.com/GetCategoryFileListV2 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 85
User-Agent: Dalvik/2.1.0 (Linux; U; Android 8.1.0; SM-G901F Build/OPM6.171019.030.H1)
Host: app.divoom-gz.com
Connection: Keep-Alive
Accept-Encoding: gzip

{"Classify":0,"EndNum":30,"FileType":5,"StartNum":1,"Token":0,"UserId":0,"Version":3}

Raw-Response

HTTP/1.1 200 OK
Server: nginx
Date: Sun, 14 Oct 2018 07:23:02 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 5999
Connection: keep-alive

{"ReturnCode":0,"ReturnMessage":"","PacketFlag":"","_StartTime":1539501781,"FileListNum":36025,"CurListNum":30,"FileList":[{"GalleryId":72645,"UserId":400184745,"FileId":"group1/M00/03/BE/eEwpPVuw0a2EUsFhAAAAACdneS82736729","FileName":"SwitchMan","FileType":1,"LikeCnt":43,"IsLike":0,"CommentCnt":6,"IsNewComment":1},{"GalleryId":69131,"UserId":400210295,"FileId":"group1/M00/03/4F/L1ghbluchXmEMM-uAAAAAEp9nyQ.945796","FileName":"Japanese girl's","FileType":8,"LikeCnt":24,"IsLike":0,"CommentCnt":4,"IsNewComment":0},{"GalleryId":50007,"UserId":400181053,"FileId":"group1/M00/02/91/L1ghbls2g_yEdM7TAAAAAEuUmQY4107289","FileName":"Mwah!","FileType":1,"LikeCnt":36,"IsLike":0,"CommentCnt":0,"IsNewComment":0},{"GalleryId":61695,"UserId":400154539,"FileId":"group1/M00/03/53/eEwpPVt04feEMVy8AAAAANnandg6982374","FileName":"Honguimorgana","FileType":1,"LikeCnt":31,"IsLike":0,"CommentCnt":1,"IsNewComment":1},{"GalleryId":72195,"UserId":400226235,"FileId":"group1/M00/03/71/L1ghbluuoOGEDr_mAAAAAMg5SOA2992572","FileName":"Runner","FileType":1,"LikeCnt":29,"IsLike":0,"CommentCnt":2,"IsNewComment":0},{"GalleryId":73425,"UserId":400210295,"FileId":"group1/M00/03/7D/L1ghblu2l0-EBntqAAAAAEadETs.305102","FileName":"Heart. Broken.1","FileType":1,"LikeCnt":16,"IsLike":0,"CommentCnt":2,"IsNewComment":0},{"GalleryId":71505,"UserId":400210295,"FileId":"group1/M00/03/B6/eEwpPVurpoaEUNy0AAAAAGef0k0.036305","FileName":"Kitty Lander","FileType":1,"LikeCnt":19,"IsLike":0,"CommentCnt":3,"IsNewComment":0},{"GalleryId":71845,"UserId":400224331,"FileId":"group1/M00/03/6F/L1ghblutKsKEfISrAAAAAOXPv5c.480560","FileName":"Bird flight","FileType":1,"LikeCnt":46,"IsLike":0,"CommentCnt":7,"IsNewComment":0},{"GalleryId":69349,"UserId":400220655,"FileId":"group1/M00/03/51/L1ghbludScyEdpHcAAAAACFY_yM.627458","FileName":"小老頭 跳舞 01","FileType":1,"LikeCnt":20,"IsLike":0,"CommentCnt":5,"IsNewComment":1},{"GalleryId":74595,"UserId":400233103,"FileId":"group1/M00/03/8A/L1ghblu_TXCEYHCHAAAAAEK2GDg1626353","FileName":"Kirakira","FileType":1,"LikeCnt":9,"IsLike":0,"CommentCnt":0,"IsNewComment":0},{"GalleryId":73407,"UserId":400224331,"FileId":"group1/M00/03/7D/L1ghblu2cciEUScXAAAAAC7Oku0.832437","FileName":"Starfield","FileType":1,"LikeCnt":52,"IsLike":0,"CommentCnt":12,"IsNewComment":0},{"GalleryId":57217,"UserId":400184745,"FileId":"group1/M00/03/28/eEwpPVtfAXKEHwoNAAAAAJDVcAo5774666","FileName":"覇王翔吼拳","FileType":1,"LikeCnt":128,"IsLike":0,"CommentCnt":8,"IsNewComment":0},{"GalleryId":34594,"UserId":400132600,"FileId":"group1/M00/01/B8/L1ghblrJxr6EQla2AAAAAIegDLI4877762","FileName":"snow House 1","FileType":0,"LikeCnt":137,"IsLike":0,"CommentCnt":2,"IsNewComment":1},{"GalleryId":65353,"UserId":400184745,"FileId":"group1/M00/03/2C/L1ghbluF47CEVkahAAAAAE8ddjs6379164","FileName":"Hiya!","FileType":1,"LikeCnt":184,"IsLike":0,"CommentCnt":13,"IsNewComment":0},{"GalleryId":52499,"UserId":400150607,"FileId":"group1/M00/02/FC/eEwpPVtGr9qELdsPAAAAAGDhDwM9504146","FileName":"MRI animation","FileType":1,"LikeCnt":43,"IsLike":0,"CommentCnt":0,"IsNewComment":0},{"GalleryId":59245,"UserId":400184745,"FileId":"group1/M00/02/F4/L1ghbltquxqEO-3oAAAAAMK_uwg5057984","FileName":"りんぐ","FileType":1,"LikeCnt":36,"IsLike":0,"CommentCnt":0,"IsNewComment":0},{"GalleryId":71467,"UserId":400184745,"FileId":"group1/M00/03/6C/L1ghblurWq6EG6XQAAAAAKvnLZA8050183","FileName":"Skeleton","FileType":1,"LikeCnt":28,"IsLike":0,"CommentCnt":7,"IsNewComment":0},{"GalleryId":72065,"UserId":400226235,"FileId":"group1/M00/03/70/L1ghbluuHgGEaMJFAAAAABCRpOY3906140","FileName":"Dog","FileType":1,"LikeCnt":12,"IsLike":0,"CommentCnt":0,"IsNewComment":0},{"GalleryId":60171,"UserId":400184745,"FileId":"group1/M00/02/FC/L1ghbltu4lSEGFALAAAAAJaDa0M2812240","FileName":"なみのり","FileType":1,"LikeCnt":102,"IsLike":0,"CommentCnt":16,"IsNewComment":0},{"GalleryId":72177,"UserId":400226235,"FileId":"group1/M00/03/BA/eEwpPVuug3-EK6V-AAAAAGiV8Tk6690792","FileName":"SharkClear","FileType":1,"LikeCnt":24,"IsLike":0,"CommentCnt":2,"IsNewComment":0},{"GalleryId":59741,"UserId":400184745,"FileId":"group1/M00/02/F8/L1ghblttJ8WEFEt7AAAAAK3r5Tc6730353","FileName":"EV","FileType":1,"LikeCnt":37,"IsLike":0,"CommentCnt":2,"IsNewComment":1},{"GalleryId":59411,"UserId":400184745,"FileId":"group1/M00/03/3F/eEwpPVtrnSmETGIVAAAAAPIsOSY0547404","FileName":"ふりこ","FileType":1,"LikeCnt":42,"IsLike":0,"CommentCnt":2,"IsNewComment":0},{"GalleryId":71073,"UserId":400184745,"FileId":"group1/M00/03/69/L1ghbluo7o-EdpS-AAAAADfhU3A6366304","FileName":"Ghost","FileType":1,"LikeCnt":29,"IsLike":0,"CommentCnt":9,"IsNewComment":0},{"GalleryId":64297,"UserId":400211819,"FileId":"group1/M00/03/6A/eEwpPVt_tCeEHlvFAAAAANvy3fM6109656","FileName":"鞄  完成","FileType":1,"LikeCnt":10,"IsLike":0,"CommentCnt":0,"IsNewComment":0},{"GalleryId":20578,"UserId":400045829,"FileId":"group1/M00/02/59/LU9cx1pGAWGEMqhkAAAAABT0z9o6633374","FileName":"dance","FileType":1,"LikeCnt":128,"IsLike":0,"CommentCnt":2,"IsNewComment":1},{"GalleryId":38880,"UserId":400140960,"FileId":"group1/M00/02/08/L1ghblrxUNOET8L9AAAAAA-RDlM4176786","FileName":"丢丢&皮皮","FileType":1,"LikeCnt":64,"IsLike":0,"CommentCnt":3,"IsNewComment":0},{"GalleryId":69123,"UserId":400220655,"FileId":"group1/M00/03/98/eEwpPVuccBuEf3RsAAAAAEMIvCc.576186","FileName":"","FileType":1,"LikeCnt":21,"IsLike":0,"CommentCnt":0,"IsNewComment":0},{"GalleryId":58274,"UserId":400140960,"FileId":"group1/M00/02/EB/L1ghbltlpGqEIP4eAAAAAI8hgJo9170190","FileName":"七夕快乐","FileType":1,"LikeCnt":33,"IsLike":0,"CommentCnt":5,"IsNewComment":0},{"GalleryId":45130,"UserId":400140952,"FileId":"group1/M00/02/4E/L1ghblsV_2GEaEYzAAAAAJCz4hs3898129","FileName":"变色宝皮","FileType":1,"LikeCnt":132,"IsLike":0,"CommentCnt":5,"IsNewComment":0},{"GalleryId":66135,"UserId":400215935,"FileId":"group1/M00/03/7D/eEwpPVuK0LmEb7qaAAAAADaY9ds.471769","FileName":"rain","FileType":1,"LikeCnt":39,"IsLike":0,"CommentCnt":0,"IsNewComment":0}],"_EndTime":1539501782,"_ProTime":1}

8.
Dann rattert die Filelist dynamisch los. Bedeutet, je mehr scrollt desto mehr Links zu den Dateien erscheinen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 14 Oktober 2018, 09:49:36
Ah sehe gerade. Das Raw war immer der Request. Response würde ich gegebenfalls wenn erwünscht hinzufügen.

edit:

Response hinzugefügt.

edit2:

Meiner Meinung nach, sind die beiden Url's zuständig.

http://nav.cn.ronghub.com/navipush.json
https://stats.cn.ronghub.com/active.json

Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 14 Oktober 2018, 23:33:31
Das Teil verschickt sogar deine imei. Ich würde da keine Energie rein stecken. Rauszufinden wie das geht, dauert mit Sicherheit zu lang und lohnt den Aufwand nicht.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 15 Oktober 2018, 18:57:12
Ne, meine IMEI ist nicht dabei. Haken wir es als Info ab.

edit:
Also IMEI steht da, unter deviceID=, kommt aber nicht annähernd an meine ran.

imei%22%3A%22d820420f7551b5bb%22%7D

imei":"d820420f7551b5bb"}
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 17 Oktober 2018, 01:11:43
Habe noch was schönes gefunden:

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

sendPlain('5F1704', 10, 0);
Die Timebox sollte vorher so eingestellt sein, dass sie die Temperatur anzeigt, sonst sieht man nichts. Zur Not also sowas vorher schicken:

sendPlain('450100', 5);
oder manuell umschalten.

Die Demo Modes 00 und 13 oder höher sind auch ganz lustig, habe aber noch nicht raus gefunden ob man damit noch irgendwas anderes machen kann.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 24 Oktober 2018, 19:36:42
So, lange gestöbert und nun zugeschlagen. Bei Gearbest gibt es Rabatt bei der EvoBox. Der Code ist

GB-CNDBEVO
So musste ich anstatt 61,24€ nur 52,50€ bezahlen per Paypal.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 24 Oktober 2018, 20:43:51
Meine Frau bringt mich um, wenn ich schon wieder so was anschleppe. Die Klamotten die sie kauft, sind natürlich was ganz “anderes“.  :-X
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 24 Oktober 2018, 21:38:28
Kenn ich  ;D
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 November 2018, 17:18:01
Meine Timebox ist heute angekommen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 09 November 2018, 17:24:54
Bin gespannt ob da dann wieder alles anders ist oder du die selben Skripte verwenden kannst.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 November 2018, 17:37:07
Versuche gerade eine Plainmessage zu senden.

Das sende ich.

require "/opt/fhem/divoom/lib2.pl";

if (connectDivoom("11:75:68:C9:7D:36"))
{
  sendPlain('4503', 1);
  disconnectDivoom();
}

Das kommt dabei raus.

root@raspiFhem:/opt/fhem/divoom# perl Equalizer.pl
Image: 10x10 (maxcolors: 256, usedcolors: 1)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 10)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 5)
Image: 10x10 (maxcolors: 256, usedcolors: 6)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 4)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 1)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 1)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 2)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Image: 10x10 (maxcolors: 256, usedcolors: 3)
Create RFCOMM client (11:75:68:C9:7D:36)...
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 November 2018, 17:48:09
Ich hab die Box mit der Androidapp verbunden. Sofort wurde ein Softwareupdate angeschoben. Not bad.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 November 2018, 18:15:39
Bei bluetoothctl sehr mittteilungsbedürftig. Kenn ich garnicht von meiner Aurabox.

root@raspiFhem:/opt/fhem/divoom# bluetoothctl
[NEW] Controller B8:27:EB:CA:88:44 raspiFhem [default]
[NEW] Device 11:75:68:C9:7D:36 TimeBox-Evo-light
[NEW] Primary Service
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017
        49535343-fe7d-4ae5-8fa9-9fafd205e455
        Vendor specific
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017/char0020
        49535343-8841-43f4-a8d4-ecbe34729bb3
        Vendor specific
[NEW] Descriptor
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017/char0020/desc0022
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017/char001d
        49535343-1e4d-4bd9-ba61-23c647249616
        Vendor specific
[NEW] Descriptor
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017/char001d/desc001f
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017/char001a
        49535343-aca3-481c-91ec-d85e28a60318
        Vendor specific
[NEW] Descriptor
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017/char001a/desc001c
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0017/char0018
        49535343-6daa-4d02-abf6-19569aca69fe
        Vendor specific
[NEW] Primary Service
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006
        0000180a-0000-1000-8000-00805f9b34fb
        Device Information
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char0015
        00002a2a-0000-1000-8000-00805f9b34fb
        IEEE 11073-20601 Regulatory Cert. Data List
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char0013
        00002a23-0000-1000-8000-00805f9b34fb
        System ID
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char0011
        00002a28-0000-1000-8000-00805f9b34fb
        Software Revision String
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char000f
        00002a26-0000-1000-8000-00805f9b34fb
        Firmware Revision String
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char000d
        00002a27-0000-1000-8000-00805f9b34fb
        Hardware Revision String
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char000b
        00002a25-0000-1000-8000-00805f9b34fb
        Serial Number String
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char0009
        00002a24-0000-1000-8000-00805f9b34fb
        Model Number String
[NEW] Characteristic
        /org/bluez/hci0/dev_11_75_68_C9_7D_36/service0006/char0007
        00002a29-0000-1000-8000-00805f9b34fb
        Manufacturer Name String
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 November 2018, 19:16:50
So Audio läuft. Ich glaube ich habe noch Probleme mit rfcomm...Das muss ich erstmal sortieren.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 09 November 2018, 23:23:06
@mumpitzstuff

Ich hab mal einen Bugreport auf meinem Handy erstellt.
Die Dateien mit Wireshark öffnen. Vielleicht fällt dir was auf.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 09 November 2018, 23:50:33
Hmm das ist doch der selbe Raspi auf dem auch die Aurabox lief oder?
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 10 November 2018, 00:33:19
Ich sehe da hauptsächlich nur eine Audioverbindung?!? Versuch mal folgendes:

Aurabox anschalten und Timebox ausschalten. Dann eine Verbindung mit der App herstellen. App aus dem Speicher werfen und Bluetooth ausschalten. Bluetooth einschalten und logging aktivieren. App öffnen und Verbindung aufbauen. Dann sofort das logging wieder deaktivieren und sichern.

Jetzt das ganze umgedreht und man kann beides mal vergleichen. Es geht ja nur um den Aufbau der Verbindung.

Neu gepaired hast du die Timebox mit deinem Raspberry?

Wenn schon der Aufbau der rfcomm Verbindung nicht klappt, dann kann ich da aber nichts machen, darauf habe ich 0 Einfluss im Skript. Das ist ein Aufruf eine Bibliotheksfunktion.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 10 November 2018, 10:41:21
Bei rfcomm bin ich mir auch nicht ganz sicher, das es nicht geht. Die Aurabox klappt sofort. Allerdings hat die Timebox Evo  Bluetooth 5.0, was
ja Abwärtskompatibilität hat. Vielleicht funktioniert das nicht richtig mit Raspi.

Log erstellen auf meinem Androidhandy ist auch nicht ganz einfach. Ist ein Unofficialrom von ResurrectionRemix. Bis jetzt konnte ich den Log
nur erstellen, indem ich in "Entwickleroptionen--> Bluetooth HCI-Snoop-Protokoll aktivieren" aktiviert habe und dann weiter oben auf
"Fehlerbericht abrufen --> Vollständiger Bericht" gegangen bin mit anschließenden versenden per Email an mich.

Hast du eine Empfehlung um Bluetooth besser zu sniffen?
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 10 November 2018, 11:36:26
Ich würde sagen rfcomm ist ok? Die Ausgabe ist vom Raspi, verbunden mit der TimeboxEvo.

root@raspiFhem:~# sdptool browse 11:75:68:C9:7D:36
Browsing 11:75:68:C9:7D:36 ...
Service Name: Serial Port 1
Service RecHandle: 0x10004
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1

root@raspiFhem:~#

root@raspiFhem:~# rfcomm
rfcomm0: 11:75:68:C9:7D:36 channel 1 clean
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 10 November 2018, 11:57:01
Schau mal ins Skript rein. Ich glaube es wurde hier Port 4 verwendet. Schau mal ob du auch auf diesem Port eine Verbindung bekommst. Ansonsten probier doch mal Doe Ports 0-9 durch.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 10 November 2018, 12:25:14
Klappt  :) auf Port 3

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: AT+BRSF=63
done

Infos laut Internet
<< AT+BRSF=63
The headunit sends its supported features.

und Port 7

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: # Fya5f fL
done
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 10 November 2018, 20:50:18
So, ich hab noch einen Pi-Zero-W. Den hab ich jetzt erstmal aufgesetzt und teste damit.
Dann ist es einfacher die Boxen zu vergleichen. So wie es aussieht, muss ich bei der
Evo auf Channel 1. Die Aurabox gibt folgendes aus.

root@raspiFhem:/opt/fhem/divoom# sdptool browse 11:75:58:45:59:81
Browsing 11:75:58:45:59:81 ...
Service Name: Serial Port 1
Service RecHandle: 0x10004
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 4

root@raspiFhem:/opt/fhem/divoom#
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 11 November 2018, 00:30:01
Das mit den AT Kommandos ist der Port für die Audioschnittstelle. Die kannst du ignorieren. Es muss daneben noch einen anderen Port geben, auf dem die alten Boxen HELLO gemeldet haben. Da bei der Aurabox unten bei Channel 4 und bei der TimeboxEvo 1 steht, könntest du mit der 1 als Port richtig liegen.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 November 2018, 11:24:04
Komme im Moment nicht weiter. Auf dem ZeroW ist eigentlich alles richtig eingerichtet. Es kommt aber nichts als Antwort zurück.
Nicht mal z.B. AT+BRSF=63 auf Kanal3.

Bin jetzt wieder auf dem Raspi3 und teste. Was beide aber Gemeinsam haben, sende ich auf Kanal 1 bleibe ich in einer Schleife hängen.

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

Kannst du mehr Debugging einbauen?
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 November 2018, 11:49:20
Whoop, ich habe mal gewartet. Jetzt kam doch was....

Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: Up
done
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 November 2018, 13:07:38
So, jetzt konnte ich nachstellen, wann ich das "Up" bekomme.

Und zwar hänge ich die ganze Zeit in der Schleife. Sobald Fhem
per TTS eine Audioausgabe sendet (Ich denke mal generell irgendwas per Audio),
endet die Schleife und es kommt die Ausgabe mit "UP".

Danach klappt das aber nicht mehr. Erst ein Restart hilft. Wahrscheinlich schießt das
RFCOMM ab.

edit:
Ja, nun kann ich es bestätigen. Audio kommt, Schleife endet und "Up" wird ausgegeben.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 11 November 2018, 13:54:38
Dann hängst du auf dem Port für die Audioausgabe. Das ist falsch. Für die Datenverbindung wird ein anderer Port benötigt. Bei deiner Aurabox kriegst du auch mit Port 1 oder 3 dieses AT irgendwas als Antwort. Für die Datenverbindung muss man aber Port 4 verwenden.
Ein Debugging kann ich nicht einbauen. An der Stelle rufe ich eine Bibliotheksfunktion auf und das wars. Ich habe keinerlei Einflussmöglichkeiten auf den Aufbau der Verbindung. Zur Not Versuchs doch mal mit dem Python Timebox Modul, vielleicht spuckt das mehr aus.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 November 2018, 14:53:23
Mit Python komme ich auch nicht weiter. Dann muss ich wohl nochmal versuchen,
die App zu sniffen in Android.

edit:

Gerade gesehen. Vielleicht für dich noch interessant.

https://github.com/jbfuzier/timeboxmini
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 November 2018, 19:53:49
Ich habe mit Catlog einen Log erstellt. Dieser zeigt, das RFCOMM auf Channel 6 ist. mh......

edit:

Channel 6 hatte ich natürlich getestet. Vielleicht fällt dir noch was im Log auf. Bei
der Divoomapp hatte ich Daten und Cache gelöscht. Dann aufgerufen, kurz ein bisschen
hin und her gespielt und beendet.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 November 2018, 22:43:24
Ey, ein Hinweis hier hin wäre nett gewesen  :)

https://github.com/mumpitzstuff/fhem-Divoom
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 12 November 2018, 01:19:16
Channel 6 finde ich auch 2-3 mal. Daneben taucht aber ziemlich viel Audio Zeugs im Logfile auf. Ich bin ehrlich gesagt etwas ratlos und es beschleicht mich die Vermutung, das die Kommunikation mit der neuen Timebox völlig anders aufgebaut ist. So ein Scheiss...

Ich würde es noch mal mit dem bluetooth log versuchen, so wie ich es gesagt habe, damit man aurabox und timebox evo nebeneinander legen kann.

PS: das github gehupe kennst du bereits. Habe nur das Zeug auf den Server geschoben, was ich hier im Forum schon gepostet hatte.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 12 November 2018, 19:09:28
Soo,

nochmal Gedanken dazu und ich hab was gefunden  :) Und zwar nimm dir nochmal das File aus Beitrag 111.
Öffnen mit Wireshark, dann Filter auf SPP. Dann siehst du den Traffic vom handy zur Box und umgedreht.
Eine Zeile anklicken, dann "Bluetooth SPP Packet" ausklappen. Zack Rawmessages  ;D

Jetzt geh ich das mal durch, ob was funktioniert.
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 12 November 2018, 20:41:19
Endlich, ich habe was umschalten können. Und zwar habe ich es geschafft, auf den manuellen Counter zu switchen.
Verwendet habe ich die timebox.py. Diese musste ich anpassen.

#!/usr/bin/env python

import os
import bluetooth
import math
from PIL import Image
from binascii import unhexlify
from itertools import product
from math import modf
from os import listdir
from os.path import isfile, join

import appdirs
import click
import click_spinner
import datetime
import dateutil.parser
from colour import Color

APPNAME = 'timebox'
VENDOR = 'scratch'

# configuration directory set using "appdirs"
CONFDIR = appdirs.user_data_dir('timebox', 'scr4tch')

# configuration file
CONFFILE = os.path.join(CONFDIR, 'known_devices')

# list of known devices (found by discovery, saved by user)
KNOWN_DEVICES = ["11:75:68:C9:7D:36"]

# initial connection reply
TIMEBOX_HELLO = [0, 5, 72, 69, 76, 76, 79, 0]
FILTERS = {
            'bicubic': Image.BICUBIC,
            'cubic': Image.CUBIC,
            'linear': Image.LINEAR,
            'bilinear': Image.BILINEAR,
            'normal': Image.NORMAL,
            'box': Image.BOX,
            'nearest': Image.NEAREST,
            'none': Image.NONE,
            'hamming': Image.HAMMING,
            'lanczos': Image.LANCZOS,
            'antialias': Image.ANTIALIAS
}


class Timebox:
    debug = False

    def __init__(self, target, debug=False):
        self.debug = debug

        if(isinstance(target, bluetooth.BluetoothSocket)):
            self.sock = target
            self.addr, _ = self.sock.getpeername()
        else:
            self.sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
            self.addr = target
            self.sock.connect((self.addr, 1))

    def connect(self):
        if(not self.sock):
            self.sock.connect((self.addr, 1))
            ret = self.sock.recv(256)
            if(self.debug):
                click.echo("-> %s" % [ord(c) for c in self.sock.recv(256)])

    def disconnect(self):
        self.sock.close()

    def send(self, package, recv=True):
        if (self.debug):
            click.echo("-> %s" % [hex(b)[2:].zfill(2) for b in package])
        self.sock.send(str(bytearray(package)))

        if(recv):
            ret = [ord(c) for c in self.sock.recv(256)]

            if(self.debug):
                click.echo("<- %s" % [hex(h)[2:].zfill(2) for h in ret])

    def send_raw(self, bts):
        self.sock.send(bts)


VIEWTYPES = {
    "clock": 0x00,
    "temp": 0x01,
    "off": 0x02,
    "anim": 0x03,
    "graph": 0x04,
    "image": 0x05,
    "stopwatch": 0x06,
    "scoreboard": 0x07
}


def discover(ctx, lookup_known=True, spinner=click_spinner.Spinner()):
    if (lookup_known and len(KNOWN_DEVICES)):
        if (ctx.obj['debug']):
            click.echo('using knwon devices to find timebox')
        spinner.start()
        discovered = [(a, 'timebox') for a in KNOWN_DEVICES]
    else:
        if (ctx.obj['debug']):
            click.echo('scanning for timebox')
        spinner.start()
        discovered = bluetooth.discover_devices(duration=5, lookup_names=True)

    if (not len(discovered)):
        spinner.stop()
        click.echo("no devices discovered")
        ctx.abort()
    else:
        for a, n in discovered:
            if (n and 'timebox' in n.lower()):
                click.echo('checking device %s' % a)

                try:
                    sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
                    sock.connect((a, 6))
                    hello = [ord(c) for c in sock.recv(256)]

                    if(hello == TIMEBOX_HELLO):
                        ctx.obj['address'] = a
                        ctx.obj['sock'] = sock
                        break
                    else:
                        click.echo('invalid hello received')

                    sock.close()
                except bluetooth.BluetoothError as be:
                    pass
        spinner.stop()
        if (not 'address' in ctx.obj):
            if(len(KNOWN_DEVICES) and lookup_known):
                discover(ctx, False)
            else:
                click.echo('could not find a timebox ...')
                ctx.abort()
        else:
            if (ctx.obj['address'].upper() not in KNOWN_DEVICES and
                    click.confirm('would you like to add %s to known devices [y/n]?')):
                with open(CONFFILE, 'a') as f:
                    f.write(ctx.obj['address'].upper() + "\n")


@click.group()
@click.option('--address')
@click.option('--debug', is_flag=True)
@click.option('--disconnect', 'disconnect', flag_value=True, default=True)
@click.option('--keepconnected', 'disconnect', flag_value=False, default=True)
@click.pass_context
def cli(ctx, address, debug, disconnect):
    ctx.obj['debug']=debug

    if (not address):
        if(not os.path.exists(CONFDIR)):
            os.makedirs(CONFDIR)

        if(os.path.exists(CONFFILE)):
            with open(CONFFILE, 'r') as f:
                for l in f.readlines():
                    KNOWN_DEVICES.append(l.strip().upper())

        discover(ctx)
    else:
        ctx.obj['address'] = address

    if(debug):
        click.echo('connecting to %s' % ctx.obj['address'])

    try:
        if('sock' in ctx.obj):
            dev = connect(ctx.obj['sock'], debug)
        else:
            dev = connect(ctx.obj['address'], debug)
        ctx.obj['dev'] = dev

        return dev, disconnect
    except bluetooth.BluetoothError as be:
        click.echo('error connecting to %s\n%s' % (ctx.obj['address'], be))

    ctx.abort()


@cli.command(short_help='change view')
@click.argument('type', nargs=1) #, help="["+",".join(VIEWTYPES)+"]")
@click.pass_context
def view(ctx, type):
    if (type in VIEWTYPES):
        ctx.obj['dev'].send(switch_view(type))


@cli.command(short_help='display time')
@click.option('--color', nargs=1)
@click.option('--ampm', is_flag=True, help="12h format am/pm")
@click.pass_context
def clock(ctx, color, ampm):
    if (color):
        c = color_convert(Color(color).get_rgb())
        ctx.obj['dev'].send(set_time_color(c[0], c[1], c[2], 0xff, not ampm))
    else:
        ctx.obj['dev'].send(switch_view("clock"))


@cli.command(short_help='display temperature, set color')
@click.option('--color', nargs=1)
@click.option('--f', is_flag=True, help="fahrenheit")
@click.pass_context
def temp(ctx, color, f):
    if (color):
        c = color_convert(Color(color).get_rgb())
        ctx.obj['dev'].send(set_temp_color(c[0], c[1], c[2], 0xff, f))
    else:
        ctx.obj['dev'].send(switch_view("temp"))


def switch_view(type):
    h = [0x04, 0x00, 0x45, VIEWTYPES[type]]
    ck1, ck2 = checksum(sum(h))
    return [0x01] + mask(h) + mask([ck1, ck2]) + [0x02]


# 0x01 Start of message
# 0x02 End of Message
# 0x03 Mask following byte

def color_comp_conv(cc):
    cc = max(0.0, min(1.0, cc))
    return int(math.floor(255 if cc == 1.0 else  cc * 256.0))


def color_convert(rgb):
    return [color_comp_conv(c) for c in rgb]


def unmask(bytes, index=0):
    try:
        index = bytes.index(0x03, index)
    except ValueError:
        return bytes

    _bytes = bytes[:]
    _bytes[index + 1] = _bytes[index + 1] - 0x03
    _bytes.pop(index)
    return unmask(_bytes, index + 1)


def mask(bytes):
    _bytes = []
    for b in bytes:
        if (b == 0x01):
            _bytes = _bytes + [0x03, 0x04]
        elif (b == 0x02):
            _bytes = _bytes + [0x03, 0x05]
        elif (b == 0x03):
            _bytes = _bytes + [0x03, 0x06]
        else:
            _bytes += [b]

    return _bytes


def checksum(s):
    ck1 = s & 0x00ff
    ck2 = s >> 8

    return ck1, ck2


def set_time_color(r, g, b, x=0x00, h24=True):
    head = [0x09, 0x00, 0x45, 0x00, 0x01 if h24 else 0x00]
    s = sum(head) + sum([r, g, b, x])
    ck1, ck2 = checksum(s)

    # create message mask 0x01,0x02,0x03
    msg = [0x01] + mask(head) + mask([r, g, b, x]) + mask([ck1, ck2]) + [0x02]

    return msg


def set_temp_color(r, g, b, x, f=False):
    head = [0x09, 0x00, 0x45, 0x01, 0x01 if f else 0x00]
    s = sum(head) + sum([r, g, b, x])
    ck1, ck2 = checksum(s)

    # create message mask 0x01,0x02,0x03
    msg = [0x01] + mask(head) + mask([r, g, b, x]) + mask([ck1, ck2]) + [0x02]

    return msg

def set_temp_unit(f=False):
    head = [0x09, 0x00, 0x45, 0x01, 0x01 if f else 0x00]
    ck1, ck2 = checksum(sum(head))

    # create message mask 0x01,0x02,0x03
    msg = [0x01] + mask(head) + mask([ck1, ck2]) + [0x02]

    return msg


def analyseImage(im):
    '''
    Pre-process pass over the image to determine the mode (full or additive).
    Necessary as assessing single frames isn't reliable. Need to know the mode
    before processing all frames.
    '''
    results = {
        'size': im.size,
        'mode': 'full',
    }
    try:
        while True:
            if im.tile:
                tile = im.tile[0]
                update_region = tile[1]
                update_region_dimensions = update_region[2:]
                if update_region_dimensions != im.size:
                    results['mode'] = 'partial'
                    break
            im.seek(im.tell() + 1)
    except EOFError:
        pass
    im.seek(0)
    return results


def getFrames(im):
    '''
    Iterate the GIF, extracting each frame.
    '''
    mode = analyseImage(im)['mode']

    p = im.getpalette()
    last_frame = im.convert('RGBA')

    try:
        while True:
            '''
            If the GIF uses local colour tables, each frame will have its own palette.
            If not, we need to apply the global palette to the new frame.
            '''
            if not im.getpalette():
                im.putpalette(p)

            new_frame = Image.new('RGBA', im.size)

            '''
            Is this file a "partial"-mode GIF where frames update a region of a different size to the entire image?
            If so, we need to construct the new frame by pasting it on top of the preceding frames.
            '''
            if mode == 'partial':
                new_frame.paste(last_frame)

            new_frame.paste(im, (0, 0), im.convert('RGBA'))
            yield new_frame

            last_frame = new_frame
            im.seek(im.tell() + 1)
    except EOFError:
        pass


def process_image(imagedata, sz=11, scale=None):
    img = [0]
    bc = 0
    first = True

    if (scale):
        src = imagedata.resize((sz, sz), scale)
    else:
        src = imagedata.resize((sz, sz))

    for c in product(range(sz), range(sz)):
        y, x = c
        r, g, b, a = src.getpixel((x, y))

        if (first):
            img[-1] = ((r & 0xf0) >> 4) + (g & 0xf0) if a > 32 else 0
            img.append((b & 0xf0) >> 4) if a > 32 else img.append(0)
            first = False
        else:
            img[-1] += (r & 0xf0) if a > 32 else 0
            img.append(((g & 0xf0) >> 4) + (b & 0xf0)) if a > 32 else img.append(0)
            img.append(0)
            first = True
        bc += 1
    return img


def load_image(file, sz=11, scale=None):
    with Image.open(file).convert("RGBA") as imagedata:
        return process_image(imagedata, sz)


def load_gif_frames(file, sz=11, scale=None):
    with Image.open(file) as imagedata:
        for f in getFrames(imagedata):
            yield process_image(f, sz, scale)


def conv_image(data):
    # should be 11x11 px =>
    head = [0xbd, 0x00, 0x44, 0x00, 0x0a, 0x0a, 0x04]
    data = data
    ck1, ck2 = checksum(sum(head) + sum(data))

    msg = [0x01] + head + mask(data) + mask([ck1, ck2]) + [0x02]
    return msg


def prepare_animation(frames, delay=0):
    head = [0xbf, 0x00, 0x49, 0x00, 0x0a, 0x0a, 0x04]

    ret = []

    fi = 0
    for f in frames:
        _head = head + [fi, delay]
        ck1, ck2 = checksum(sum(_head) + sum(f))
        msg = [0x01] + mask(_head) + mask(f) + mask([ck1, ck2]) + [0x02]
        fi += 1
        ret.append(msg)

    return ret


@cli.command(short_help='display_image')
@click.argument('file', nargs=1)
@click.option('--scaling', type=click.Choice(FILTERS.keys()), default='bicubic')
@click.pass_context
def image(ctx, file, scaling):
    ctx.obj['dev'].send(conv_image(load_image(file, scale=FILTERS[scaling])))


@cli.command(short_help='display_animation')
@click.option('--gif', 'source', flag_value='gif')
@click.option('--folder', 'source', flag_value='folder', default=True)
@click.option('--delay', nargs=1)
@click.argument('path', nargs=1)
@click.option('--scaling', type=click.Choice(FILTERS.keys()), default='bicubic')
@click.pass_context
def animation(ctx, source, path, delay, scaling):
    frames = []

    if (source == "folder"):
        for f in listdir(path):
            f = join(path, f)
            if isfile(f):
                frames.append(load_image(f))
    elif (source == "gif"):
        for f in load_gif_frames(path, 11, scale=FILTERS[scaling]):
            frames.append(f)

    i = 0
    for f in prepare_animation(frames, delay=int(delay) if delay else 0):
        i = i + 1
        if(i==len(frames)):
            ctx.obj['dev'].send(f)
        else:
            ctx.obj['dev'].send(f, False)


# TODO: a bit weird, if the animation has "less frames than usual", it might be "glued" to the previous ;)
@cli.command(short_help='control fmradio')
@click.option('--on', 'state', flag_value=True, default=True)
@click.option('--off', 'state', flag_value=False)
@click.option('--frequency', nargs=1)
@click.pass_context
def fmradio(ctx, state, frequency):
    if (state):
        ctx.obj['dev'].send([0x01] + mask([0x04, 0x00, 0x05, 0x01, 0x0a, 0x00]) + [0x02])
        if (frequency):
            # TODO: WIP! setting frequency does not yet work as expected
            frequency = float(frequency)
            head = [0x05, 0x00]
            frac, whole = modf(frequency)
            frac = int(round(frac, 1) * 10)
            whole = (int(whole))
            f = [whole, frac]

            ff = (frac & 0xF0) + (whole << 8)
            print(ff)

            #print f
            #print mask(f)
            ck1, ck2 = checksum(sum(head) + sum(f))
            #print [ck1, ck2]
            #print mask([ck1, ck2])
            ctx.obj['dev'].send([0x01] + head + mask(f) + mask([ck1, ck2]) + [0x02])
    else:
        ctx.obj['dev'].send([0x01] + mask([0x04, 0x00, 0x05, 0x00, 0x09, 0x00]) + [0x02])


@cli.command(short_help='set volume')
@click.argument('level', nargs=1, type=click.IntRange(0, 16))
@click.pass_context
def volume(ctx, level):
    head = [0x04, 0x00, 0x08]
    ck1, ck2 = checksum(sum(head) + level)
    ctx.obj['dev'].send([0x01] + head + mask([level]) + mask([ck1, ck2]) + [0x02])


@cli.command(short_help='set time')
@click.argument('date', nargs=1)
@click.pass_context
def settime(ctx, date):
    if(date == "now"):
        dt = datetime.datetime.now()
    else:
        try:
            dt = dateutil.parser.parse(date)
        except:
            click.echo("could not parse date \"%s\"" % date)
            return

    head = [0x0A, 0x00, 0x18, dt.year%100, int(dt.year/100), dt.month, dt.day, dt.hour, dt.minute, dt.second ]
    s = sum(head)
    ck1, ck2 = checksum(s)
    ctx.obj['dev'].send([0x01]+mask(head)+mask([ck1,ck2])+[0x02])


@cli.command(short_help='raw message')
@click.option('--mask', '_mask', is_flag=True)
@click.argument('hexbytes', nargs=1)
@click.pass_context
def raw(ctx, hexbytes, _mask):
    if (_mask):
        ctx.obj['dev'].send(bytearray(mask(unhexlify(hexbytes))))
    else:
        ctx.obj['dev'].send(bytearray(unhexlify(hexbytes)))


def connect(target, debug):
    dev = Timebox(target, debug)
    dev.connect()

    return dev


if __name__ == '__main__':
    import sys
    dev, disconnect = cli(sys.argv[1:], obj={})
    if (disconnect):
        dev.disconnect()


Wichtig war hier, Port auf 1. Das 2mal.

self.sock.connect((self.addr, 1))
Und der nächste Port auf 6

sock.connect((a, 6))
In und Output

root@raspiFhem:/opt/fhem/divoom1/timebox# python timebox.py --debug --address 11:75:68:C9:7D:36 raw 010900720101010001007f0002
connecting to 11:75:68:C9:7D:36
-> ['01', '09', '00', '72', '01', '01', '01', '00', '01', '00', '7f', '00', '02']
<- ['01', '06', '00', '04', '72', '55', '01', 'd2', '00', '02']
root@raspiFhem:/opt/fhem/divoom1/timebox#
Titel: Antw:Divoom Aurabox + Timebox [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 12 November 2018, 20:54:21
Und noch was gefunden. Wenn ich mit dem jetzigen Setup die Rawmessages durchgehe, bleibt das Script des
öfteren hängen. Schalte ich aber manuell an der Box die Funktionen durch, und komme zufällig auf die Funktion,
die zu der Rawmessage passt(nehme ich an), bekomme ich auch noch ein response und das Script läuft doch noch durch  ;D
Meißt passiert aber nichts an der Box. Wahrscheinlich muss dazu auf eine Funktion/Unterfunktion erst umgeschaltet werden.

Schaltet auf Stopuhr
root@raspiFhem:/opt/fhem/divoom1/timebox# python timebox.py --debug --address 11:75:68:C9:7D:36 raw 0104007100750002
connecting to 11:75:68:C9:7D:36
-> ['01', '04', '00', '71', '00', '75', '00', '02']
<- ['01', '07', '00', '04', '71', '55', '00', '00', 'd1', '00', '02']
root@raspiFhem:/opt/fhem/divoom1/timebox#

Farbe der Uhr geändert. So Weiß.
root@raspiFhem:/opt/fhem/divoom1/timebox# python timebox.py --debug --address 11:75:68:C9:7D:36 raw 010d004500010001000000ffffff510302
connecting to 11:75:68:C9:7D:36
-> ['01', '0d', '00', '45', '00', '01', '00', '01', '00', '00', '00', 'ff', 'ff', 'ff', '51', '03', '02']
<- ['01', '06', '00', '04', '45', '55', '00', 'a4', '00', '02']
root@raspiFhem:/opt/fhem/divoom1/timebox#

Farbe der Uhr geändert. So Blau.
root@raspiFhem:/opt/fhem/divoom1/timebox# python timebox.py --debug --address 11:75:68:C9:7D:36 raw 010d00450001000100000000e4ff370202
connecting to 11:75:68:C9:7D:36
-> ['01', '0d', '00', '45', '00', '01', '00', '01', '00', '00', '00', '00', 'e4', 'ff', '37', '02', '02']
<- ['01', '06', '00', '04', '45', '55', '00', 'a4', '00', '02']
root@raspiFhem:/opt/fhem/divoom1/timebox#

Farbe der Uhr geändert. So Grün.
root@raspiFhem:/opt/fhem/divoom1/timebox# python timebox.py --debug --address 11:75:68:C9:7D:36 raw 010d00450001000100000000ff05580102
connecting to 11:75:68:C9:7D:36
-> ['01', '0d', '00', '45', '00', '01', '00', '01', '00', '00', '00', '00', 'ff', '05', '58', '01', '02']
<- ['01', '06', '00', '04', '45', '55', '00', 'a4', '00', '02']
root@raspiFhem:/opt/fhem/divoom1/timebox#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 12 November 2018, 23:25:56
Also ich würde behaupten, das die Zeile mit dem Port 6 bei dir gar nicht ausgeführt wird. Wenn du debug angeschaltet hast, dann müsstest du die Ausgabe „Scanning for Timebox“ sehen. Bei deinen geposteten Aufrufen wirkt sich diese Änderung meiner Meinung nach nicht aus. Du solltest durch die Verwendung von Port 1 in meinem Script die selben Dinge schalten können wie bei der Aurabox.

$socket->connect($device, 4)
ändern in

$socket->connect($device, 1)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 12 November 2018, 23:38:32
Das ändern der Farbe der Uhr sieht anders aus als bei Aurabox/Timebox. In der Mitte sind 5 Byte mehr zu sehen.

Früher hat das so ausgesehen:

450001FFFFFF
jetzt sieht das anscheinend so aus:

4500010001000000FFFFFF
Ist bei dir mehr als nur Stunden und Minuten zu sehen? Was passiert wenn du das verwendest:

4500010000000000FFFFFF
oder

4500010001FFFFFFFFFFFF
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 13 November 2018, 00:28:48
Sobald ich die beiden Rawmessages per pyScript verschicke, bleibt es hängen.

010d004500010000000000FFFFFF
010d004500010001FFFFFFFFFFFF

Mehr als Std. und Minuten ist bei mir nicht zu sehen.


Mit Port 1 hatte ich schon getestet. Sowie aufsteigend bis 30.
Es bleibt bei Port 1 immer hängen. Schau dir den Code nochmal an,...bei dem ganzen hin und her
kann sich auch ein Bock eingeschlichen haben.

#!/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";
}

sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

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

  $TIMEBOX = $socket->perlfh();
 
  sysread($TIMEBOX, $ret, 256);
  if (defined($ret))
  {
    $ret =~ s/[^[:print:]]//g;
    print "Device answer: $ret";

    #if ('HELLO' eq $ret)
    if ('Up' eq $ret)
    {
      $success = 1;
    }
    else
    {
      close($TIMEBOX);
      $socket->close();
    }
  }
 
  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('0104007100750002', 5);
  sendRaw('010d004500010001000000ffffff510302', 5);
  sendRaw('010d00450001000100000000e4ff370202', 5);
  sendRaw('010d00450001000100000000ff05580102', 5);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 13 November 2018, 01:35:34
if (connectDivoom('11:75:68:C9:7D:36'))
{
  sendPlain('7100', 5);
  sendPlain('4500010001000000ffffff', 5);
  sendPlain('450001000100000000e4ff', 5);
  sendPlain('450001000100000000ff05', 5);
  disconnectDivoom();
}

Probier es mal damit. Bei den RAW Nachrichten gibt es einen Unterschied. Ich erwarte hier bereits das 01-03 escaped sind. Bei dem Python Script wird der Datenstrom intern escaped. In meine Funktion kannst du genau das was du in deinen Bluetooth Logs siehst eingeben und musst das nicht erst unescapen. Ich kann aber auch escape oder nicht escape automatisch in der Funktion machen wenn erforderlich. Hatte dafür bisher keine Notwendigkeit gesehen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 13 November 2018, 17:14:20
Mh ne, klappt so nicht. Habe auch Port von 1-6 durchgetestet.

if (0 != $socket->connect($device, 1))

Port 1 führt weiterhin zu Schleife/Stillstand.

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 13 November 2018, 19:10:13
Eine Schleife ist in deinem Code gar nicht drin. Erscheint gar nichts auf dem Bildschirm oder kommt vom connect noch eine Antwort zurück? Was passiert wenn du nur connect/disconnect machst, ohne weitere Nachrichten?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 13 November 2018, 20:21:27
Auch mit connect/disconnect, ohne was zu senden, bleibe ich in der Schleife.
Hilft nur STRG+C.

if (connectDivoom('11:75:68:C9:7D:36'))
{
  #sendRaw('0104007100750002', 5);
  #sendRaw('010d004500010001000000ffffff510302', 5);
  #sendRaw('010d00450001000100000000e4ff370202', 5);
  #sendRaw('010d00450001000100000000ff05580102', 5);
  disconnectDivoom();
}


So, sniffen geht vorran.

TimeBoxEvo
################
DigitalUhrRot 010d004500010001000000000000540002
DigitalUhrGrün 010d00450001000100000000ff05580102
DigitalUhrBlau 010d0045000100010000000d00ff600102
DigitalUhrGelb 010d004500010001000000fff300460202
DigitalUhrHellblau 010d00450001000100000000e4ff370202
DigitalUhrRosa 010d004500010001000000ff00e5380202
DigitalUhrWeiß 010d004500010001000000ffffff510302
Rainbowclock 010d004500010101000000ffffff520302
Just Color 010d004501f800b8610001000000650202
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
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 13 November 2018, 20:40:53
Mit anderen Worten du bekommst keine verwertbaren Ausgaben. Verstehe ich nicht, kann aber auch nichts machen. Wenn die Bibliotheksfunktion einfach hängen bleibt, habe ich darauf keinen Einfluss.

Die Kommandos scheinen sie ja beibehalten zu haben und lediglich den Featureumfang erweitert.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 13 November 2018, 22:33:47
Wenn ich das einbaue

if($socket->listen(2) != 0) {
die "listen error: $!\n";
  }

Komm das

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
listen error: File descriptor in bad state
root@raspiFhem:/opt/fhem/divoom#


sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

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

  $socket = Net::Bluetooth->newsocket("RFCOMM");
  return $success unless(defined($socket));
 
  if($socket->listen(2) != 0) {
die "listen error: $!\n";
  }

  if (0 != $socket->connect($device, 1))
  {
    $socket->close();
    return $success;
  }

  $TIMEBOX = $socket->perlfh();
 
  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();
    }
  }
 
  print "\ndone\n\n";

  return $success;
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 14 November 2018, 00:50:52
Das ist klar. Erst nach einem connect kann man sich das filehandle holen. Vorher funktioniert das nicht.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 14 November 2018, 19:33:44
Ja ok, so deute ich das auch. Ein Beweiß, das keine Verbindung zustande kommt.
Jetzt habe ich mich an den Beispielen von hier bedient.

https://metacpan.org/source/ADDUTKO/Net-Bluetooth-0.41/samples

Wenn ich den Code so ändere,

#!/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($$;$);

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";
}

sub connectDivoom($)
{
  my $device = shift;
  my $ret;
  my $success = 0;

  print "Create RFCOMM client ($device)...\n";
 
  $socket = Net::Bluetooth->newsocket("RFCOMM");
  die "Socket could not be created!" unless(defined($socket));
  print "after socket\n";
 
  if($socket ->bind(1) != 0) {
          die "bind error: $!\n";
  }

  if($socket->listen(2) != 0) {
die "listen error: $!\n";
  }

  if (0 != $socket->connect($device,1))
  {
    $socket->close();
    return $success;
  }

  $TIMEBOX = $socket->perlfh();
  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();   
    }
  }
 
  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);
        print "Device answer: $ret\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";
}

if (connectDivoom('11:75:68:C9:7D:36'))
{
  sendRaw('010d0045000100010000000d00ff600102', 5);
  sendRaw('010d004500010101000000ffffff520302', 5);
  sendRaw('010d004501f800b8610001000000650202', 5);
  sendRaw('010d004501f67148610001000000640202', 5);
  disconnectDivoom();
}

Bekomme ich folgende Ausgabe,

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
after socket
bind error: Address already in use
root@raspiFhem:/opt/fhem/divoom#

Welches dann dahin deutet,

https://hea-www.harvard.edu/~fine/Tech/addrinuse.html


edit:

Oder habe ich Client und Server vermischt?

edit2:

Ok, ja. Das ist Serverseitig nicht Clientseitig...

if($socket ->bind(1) != 0) {
          die "bind error: $!\n";
  }

edit3:

Könnte es vielleicht an dem Sed-Kommando liegen?
Führe ich das Script aus, hängt es ja. Drück ich an der Box auf weiter,
so das die nächste Funktion geschaltet wird, kommt eine Antwort. Die
sehen dann zum Beispiel so aus,

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa(
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa*
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa+
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa"
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa&
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa(
done

root@raspiFhem:/opt/fhem/divoom# root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa*
done

root@raspiFhem:/opt/fhem/divoom# perl tbetest.pl
-bash: root@raspiFhem:/opt/fhem/divoom#: Datei oder Verzeichnis nicht gefunden
Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: FUaa+
done

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 14 November 2018, 21:13:25
Client Server hast du verwechselt. Ich glaube auch das bringt nichts mehr. Man müsste vermutlich eine Verbindung auf andere Art und Weise aufbauen. Die Bibliothek ist schon sehr alt und wird nicht mehr gepflegt. Vermutlich ist da ein Bug drin. Ich muss mal gucken ob ich da was hin bekomme. Kann aber dauern, ich bin momentan nicht sonderlich motiviert da viel Energie rein zu stecken, da ich das auch gar nicht testen könnte. Dafür bräuchte ich selbst so eine Box.
Die Befehle müsste man auch komplett neu sniffen, die scheinen alle erweitert worden zu sein.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 14 November 2018, 22:17:31
Ja...die Bibliothek ist wirklich alt  :(

Und noch ein anderer Versuch etwas aus der Box zu quetschen. Beim connect per gatttool
bekam ich doch promt eine Antwort.

root@raspberrypi:/opt/fhem/divoom1# sudo gatttool -b 11:75:68:C9:7D:36 -I
[11:75:68:C9:7D:36][LE]> connect
Attempting to connect to 11:75:68:C9:7D:36
Connection successful
Notification handle = 0x001e value: 01 06 00 04 36 55 00 95 00 02 00 00 00 00 00 00 00 00 00 00
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 14 November 2018, 23:02:30
Und, ein kleiner Erfolg.

Wenn ich Equal zu Equal setze hängt er. Switche ich durch an der Box zu einer passenden Funktion,
fängt das Perlscript an zu arbeiten.

$TIMEBOX = $socket->perlfh();
  sysread($TIMEBOX, $ret, 256);
  if (defined($ret))
  {
    $ret =~ s/[^[:print:]]//g;
    print "Device answer: $ret";

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

  return $success;
}

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

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

Send raw command: 010d0045000100010000000d00ff600102
Device answer: 01
done

Send raw command: 010d004500010101000000ffffff520302
Device answer: 01
done

Send raw command: 010d004501f800b8610001000000650202
Device answer: 01
done

Send raw command: 010d004501f67148610001000000640202
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 14 November 2018, 23:59:29
So kastriert kann ich es genauso anstoßen, einmal Button der Box drücken und es läuft.

$TIMEBOX = $socket->perlfh();
  sysread($TIMEBOX, $ret, 256);
  $ret =~ s/[^[:print:]]//g;
  print "Device answer: $ret";

grrrrrrr
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 15 November 2018, 02:11:26
Ich glaube ich habs jetzt. Das ganze Geheimnis scheint zu sein, das die Box kein HELLO mehr schickt. Erst wenn du einen Button drückst sendet die Box was und du kommst über das sysread drüber. Ansonsten bleibt das Ding darin hängen weil einfach keine Zeichen kommen. Ich bau dir was zusammen, das wäre einfach zu beheben.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 15 November 2018, 17:53:36
So, zu sysread() belesen.

Erstmal Quick and Dirty,

sysread($TIMEBOX, $ret, 0);
  if (defined($ret))
  {
    $ret =~ s/[^[:print:]]//g;
    print "Device answer: $ret";

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

  return $success;
}


Script läuft nu.

Create RFCOMM client (11:75:68:C9:7D:36)...
Device answer: Send raw command: 010d0045000100010000000d00ff600102
No answer from device!
Device answer: 01
done

Send raw command: 010d004500010101000000ffffff520302
Device answer: 01
done

Send raw command: 010d004501f800b8610001000000650202
Device answer: 01
done

Send raw command: 010d004501f67148610001000000640202
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 15 November 2018, 21:14:42
Ja. Ich baue es ein, nur etwas eleganter. Ich checke es dann auf github ein.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 16 November 2018, 21:37:56
Ok super.

So, ersten Thread mal etwas angepasst und mehr Infos hinzugefügt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 17 November 2018, 22:16:03
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 18 November 2018, 10:35:03
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 18 November 2018, 14:52:24
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();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 18 November 2018, 23:11:34
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.

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 18 November 2018, 23:33:30
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:
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 19 November 2018, 00:57:04
Okay danke. Das ist völlig anders als bei den alten Boxen. Ich werde dann einen globalen Schalter  einbauen und zwischen beiden Modi umschalten...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 22 November 2018, 01:08:33
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 November 2018, 08:50:28
Gut möglich....so passiert bei meiner Evo. Divoomapp
hat eigenständig geupdatet. Kommt das HELLO noch?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 November 2018, 11:38:41
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...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 24 November 2018, 23:33:19
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 00:39:14
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
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 25 November 2018, 02:16:38
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 10:47:21
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 25 November 2018, 11:22:52
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 11:42:02
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.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 11:54:17
Funktioniert bei mir nicht.

Habe in der "sub convertImageTB($;$)" die Größe  auf " $size = 16 if (!defined($size));" geändert.

setPicture.pl angepasst.

#!/usr/bin/perl
require "./divoom.pl";

# load picture
my $pic = convertImageTB('timebox/skull16.png', 16);

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set clock
  #sendPlain('4500', 5);
  # set picture
  sendPlain('44000A0A04'.$pic, 10, 0);
  disconnectDivoom();
}

Und, das skull.png von 11 auf 16 Pixel erweitert.

Konsolenoutput

root@raspberrypi:/opt/fhem/divoom2# perl setPicture.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...
root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 12:41:34
Slot laden funktioniert. Ich musste mich nun auch mal bei Divoom registrieren. Ersten Slot bestückt,
dann upload auf die Box. Aufruf klappt mit

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set Slot
  sendRaw('01090045050000000000530002', 5);
  disconnectDivoom();
}

Es gibt maximal 12 Slots. Jetzt muss ich schauen, ob alle einzeln aufrufbar sind oder ob sie nur nacheinander durchlaufen.

edit:

Die Animationen laufen nacheinander stumpf durch. Einzeln aufrufbar scheint nicht gegeben zu sein.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 14:06:39
Senden von Bildern, welche ich vorher in der App ausgewählt und dann gesnifft habe, funktioniert per Raw auch.

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set RawPictureTest
  sendRaw('017d0044000a0a04aa760000000005000000ffffff0000fefefe00fd040400002000240900040000000800006c1b000800806ddb000001300000060400360c18360000b66ddb360000b66ddb364000b661c3360000b001c0060000806ddb180600416c1b491220490240480600490040c2440008000000000000000000003d1a02', 5);
  sendRaw('017d0044000a0a04aa760000000005ffffff000000fefe000000fe01ff0100802449000000124992120040244992a40088a4489222058824455224059192244a922891244552242991a44892222991344992342991242589242991a490642429889490642205882491a42405402491a4a400001291a412000080906400000a2602', 5);
  sendRaw('015a0044000a0a04aa530000000004ffffff000000fefe00fe00000054150040a96a0190aaaa06a4aaaa1ae4aeee1af9bfff6be9affe6aa9abba6aa99aa66aa9baae6aa9baae6aa4aaaa1aa455951a9056a5064059a905005455001f2702', 5);
  sendRaw('01340044000a0a04aa2d0000000002fab07bff0000366c7ffe3e7c1c38081000000e700e700e700e700000000080014002800100000e0b02', 5);
  sendRaw('015a0044000a0a04aa530000000004fefe00fe00fe000000ffffff0040150000545a0500a5aa1640a9aa1a40aaaa1a50aaaa1a90fabe1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1650aaaa1650a96a1550a95a151e2302', 5);
  sendRaw('01ac0044000a0a04aaa5000000000afefe00fea80000e0ffff01d800fff2fe01690157ff60fd00000afd9200fd0000000000000000101120222200330310112022220033031011202222003303101120222200330310112022220033030000000000000000000000000000000040506070078890094050607007889009405060700788900940506070078890094050607007889009405060700788900940506070078890090000000000000000bc2702', 5);
  sendRaw('01340044000a0a04aa2d00000000020000fecf00fffe7efe7efe7efe7efe7efe7efe7e0000fe7efe7efe7efe7efe7efe7efe7efe7e791a02', 5);
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff00800080000000000000000038000000000000000000000000000000000000009e0502', 5);
  disconnectDivoom();
}

root@raspberrypi:/opt/fhem/divoom2# perl setTest.pl
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...

done

Send raw command: 017d0044000a0a04aa760000000005000000ffffff0000fefefe00fd040400002000240900040000000800006c1b000800806ddb000001300000060400360c18360000b66ddb360000b66ddb364000b661c3360000b001c0060000806ddb180600416c1b491220490240480600490040c2440008000000000000000000003d1a02
No answer from device!
Device answer: 01
done

Send raw command: 017d0044000a0a04aa760000000005ffffff000000fefe000000fe01ff0100802449000000124992120040244992a40088a4489222058824455224059192244a922891244552242991a44892222991344992342991242589242991a490642429889490642205882491a42405402491a4a400001291a412000080906400000a2602
Device answer: 01
done

Send raw command: 015a0044000a0a04aa530000000004ffffff000000fefe00fe00000054150040a96a0190aaaa06a4aaaa1ae4aeee1af9bfff6be9affe6aa9abba6aa99aa66aa9baae6aa9baae6aa4aaaa1aa455951a9056a5064059a905005455001f2702
Device answer: 01
done

Send raw command: 01340044000a0a04aa2d0000000002fab07bff0000366c7ffe3e7c1c38081000000e700e700e700e700000000080014002800100000e0b02
Device answer: 01
done

Send raw command: 015a0044000a0a04aa530000000004fefe00fe00fe000000ffffff0040150000545a0500a5aa1640a9aa1a40aaaa1a50aaaa1a90fabe1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1650aaaa1650a96a1550a95a151e2302
Device answer: 01
done

Send raw command: 01ac0044000a0a04aaa5000000000afefe00fea80000e0ffff01d800fff2fe01690157ff60fd00000afd9200fd0000000000000000101120222200330310112022220033031011202222003303101120222200330310112022220033030000000000000000000000000000000040506070078890094050607007889009405060700788900940506070078890094050607007889009405060700788900940506070078890090000000000000000bc2702
Device answer: 01
done

Send raw command: 01340044000a0a04aa2d00000000020000fecf00fffe7efe7efe7efe7efe7efe7efe7e0000fe7efe7efe7efe7efe7efe7efe7efe7e791a02
Device answer: 01
done

Send raw command: 01340044000a0a04aa2d0000000002000000ffffff00800080000000000000000038000000000000000000000000000000000000009e0502
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 25 November 2018, 17:46:05
Da ist aber schon der Verbindungsaufbau gescheitert. Bis zum senden des Bildes ist das Script gar nicht gekommen.

Funktioniert bei mir nicht.

Habe in der "sub convertImageTB($;$)" die Größe  auf " $size = 16 if (!defined($size));" geändert.

setPicture.pl angepasst.

#!/usr/bin/perl
require "./divoom.pl";

# load picture
my $pic = convertImageTB('timebox/skull16.png', 16);

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set clock
  #sendPlain('4500', 5);
  # set picture
  sendPlain('44000A0A04'.$pic, 10, 0);
  disconnectDivoom();
}

Und, das skull.png von 11 auf 16 Pixel erweitert.

Konsolenoutput

root@raspberrypi:/opt/fhem/divoom2# perl setPicture.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...
root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 25 November 2018, 17:53:06
Sieht für mich so aus, als ob da noch ein zusätzliches aa hinten dran klebt und noch mal eine Art Länge des Bildes. Ich vergleiche das mal mit einer raw Nachricht der Timebox Mini, dann kann ich vielleicht mehr sagen.

Senden von Bildern, welche ich vorher in der App ausgewählt und dann gesnifft habe, funktioniert per Raw auch.

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set RawPictureTest
  sendRaw('017d0044000a0a04aa760000000005000000ffffff0000fefefe00fd040400002000240900040000000800006c1b000800806ddb000001300000060400360c18360000b66ddb360000b66ddb364000b661c3360000b001c0060000806ddb180600416c1b491220490240480600490040c2440008000000000000000000003d1a02', 5);
  sendRaw('017d0044000a0a04aa760000000005ffffff000000fefe000000fe01ff0100802449000000124992120040244992a40088a4489222058824455224059192244a922891244552242991a44892222991344992342991242589242991a490642429889490642205882491a42405402491a4a400001291a412000080906400000a2602', 5);
  sendRaw('015a0044000a0a04aa530000000004ffffff000000fefe00fe00000054150040a96a0190aaaa06a4aaaa1ae4aeee1af9bfff6be9affe6aa9abba6aa99aa66aa9baae6aa9baae6aa4aaaa1aa455951a9056a5064059a905005455001f2702', 5);
  sendRaw('01340044000a0a04aa2d0000000002fab07bff0000366c7ffe3e7c1c38081000000e700e700e700e700000000080014002800100000e0b02', 5);
  sendRaw('015a0044000a0a04aa530000000004fefe00fe00fe000000ffffff0040150000545a0500a5aa1640a9aa1a40aaaa1a50aaaa1a90fabe1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1650aaaa1650a96a1550a95a151e2302', 5);
  sendRaw('01ac0044000a0a04aaa5000000000afefe00fea80000e0ffff01d800fff2fe01690157ff60fd00000afd9200fd0000000000000000101120222200330310112022220033031011202222003303101120222200330310112022220033030000000000000000000000000000000040506070078890094050607007889009405060700788900940506070078890094050607007889009405060700788900940506070078890090000000000000000bc2702', 5);
  sendRaw('01340044000a0a04aa2d00000000020000fecf00fffe7efe7efe7efe7efe7efe7efe7e0000fe7efe7efe7efe7efe7efe7efe7efe7e791a02', 5);
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff00800080000000000000000038000000000000000000000000000000000000009e0502', 5);
  disconnectDivoom();
}

root@raspberrypi:/opt/fhem/divoom2# perl setTest.pl
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...

done

Send raw command: 017d0044000a0a04aa760000000005000000ffffff0000fefefe00fd040400002000240900040000000800006c1b000800806ddb000001300000060400360c18360000b66ddb360000b66ddb364000b661c3360000b001c0060000806ddb180600416c1b491220490240480600490040c2440008000000000000000000003d1a02
No answer from device!
Device answer: 01
done

Send raw command: 017d0044000a0a04aa760000000005ffffff000000fefe000000fe01ff0100802449000000124992120040244992a40088a4489222058824455224059192244a922891244552242991a44892222991344992342991242589242991a490642429889490642205882491a42405402491a4a400001291a412000080906400000a2602
Device answer: 01
done

Send raw command: 015a0044000a0a04aa530000000004ffffff000000fefe00fe00000054150040a96a0190aaaa06a4aaaa1ae4aeee1af9bfff6be9affe6aa9abba6aa99aa66aa9baae6aa9baae6aa4aaaa1aa455951a9056a5064059a905005455001f2702
Device answer: 01
done

Send raw command: 01340044000a0a04aa2d0000000002fab07bff0000366c7ffe3e7c1c38081000000e700e700e700e700000000080014002800100000e0b02
Device answer: 01
done

Send raw command: 015a0044000a0a04aa530000000004fefe00fe00fe000000ffffff0040150000545a0500a5aa1640a9aa1a40aaaa1a50aaaa1a90fabe1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1a90aaaa1650aaaa1650a96a1550a95a151e2302
Device answer: 01
done

Send raw command: 01ac0044000a0a04aaa5000000000afefe00fea80000e0ffff01d800fff2fe01690157ff60fd00000afd9200fd0000000000000000101120222200330310112022220033031011202222003303101120222200330310112022220033030000000000000000000000000000000040506070078890094050607007889009405060700788900940506070078890094050607007889009405060700788900940506070078890090000000000000000bc2702
Device answer: 01
done

Send raw command: 01340044000a0a04aa2d00000000020000fecf00fffe7efe7efe7efe7efe7efe7efe7e0000fe7efe7efe7efe7efe7efe7efe7efe7e791a02
Device answer: 01
done

Send raw command: 01340044000a0a04aa2d0000000002000000ffffff00800080000000000000000038000000000000000000000000000000000000009e0502
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 18:20:11
Ja, du hast recht mit dem Verbindungsaufbau. War aber zu dem Zeitpunkt so.
Etwas seltsames. Nachdem ich ein Rawpic schicke und danach versuche Plain das Skull16.png zu senden läuft das Script durch,
setzt aber wieder das Rawpic, welches ich aber schon längst rausgeschmissen habe. Kann ich beliebig wiederholen mit anderen
Rawpic's

#!/usr/bin/perl
require "./divoom.pl";

# load picture
my $pic = convertImageTB('timebox/skull16.png', 16);

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set clock
  sendPlain('4500', 5);
  # set picture
  sendPlain('44000A0A04'.$pic, 10, 0);
  disconnectDivoom();
}


root@raspberrypi:/opt/fhem/divoom2# perl setPicture.pl
Image: 16x16 (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: 44000A0A0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff000000000000000000000000000000ffffffffffffffffffff0f00000000000000000000000000ff0f0000f0ff000000ff0f00000000000000000000000000ff0f0000f0ff000000ff0f00000000000000000000000000ffffffffffffffffffff0f0000000000000000000000000000f0ffffffffffffff00000000000000000000000000000000f0ff00f0ff00f0ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01880144000A0A0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff000000000000000000000000000000ffffffffffffffffffff0f00000000000000000000000000ff0f0000f0ff000000ff0f00000000000000000000000000ff0f0000f0ff000000ff0f00000000000000000000000000ffffffffffffffffffff0f0000000000000000000000000000f0ffffffffffffff00000000000000000000000000000000f0ff00f0ff00f0ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a43202
Send raw command: 01880144000A0A0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff000000000000000000000000000000ffffffffffffffffffff0f00000000000000000000000000ff0f0000f0ff000000ff0f00000000000000000000000000ff0f0000f0ff000000ff0f00000000000000000000000000ffffffffffffffffffff0f0000000000000000000000000000f0ffffffffffffff00000000000000000000000000000000f0ff00f0ff00f0ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a43202
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 18:36:42
Mit setAnimation sieht es so aus.

#!/usr/bin/perl
require "./divoom.pl";

# load animation pictures
my $pic1 = convertImageTB('timebox/1.png', 16);
my $pic2 = convertImageTB('timebox/2.png', 16);
my $pic3 = convertImageTB('timebox/3.png', 16);
my $pic4 = convertImageTB('timebox/4.png', 16);
my $pic5 = convertImageTB('timebox/5.png', 16);
my $pic6 = convertImageTB('timebox/6.png', 16);
my $pic7 = convertImageTB('timebox/7.png', 16);
my $pic8 = convertImageTB('timebox/8.png', 16);

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set clock
  sendPlain('4500', 5);
  # set animation
  sendPlain('49000A0A040000'.$pic1, 0, 0);
  sendPlain('49000A0A040100'.$pic2, 0, 0);
  sendPlain('49000A0A040200'.$pic3, 0, 0);
  sendPlain('49000A0A040300'.$pic4, 0, 0);
  sendPlain('49000A0A040400'.$pic5, 0, 0);
  sendPlain('49000A0A040500'.$pic6, 0, 0);
  sendPlain('49000A0A040600'.$pic7, 0, 0);
  sendPlain('49000A0A040700'.$pic8, 20, 0);
  disconnectDivoom();
}

root@raspberrypi:/opt/fhem/divoom2# perl setAnimation.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 3)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 1)
Image: 16x16 (maxcolors: no palette found, usedcolors: 1)
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
Device answer: 01
done

Send plain command: 49000A0A04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 018a0149000A0A04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea0202
Send raw command: 018a0149000A0A04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea0202
Device answer: 01
done

Send plain command: 49000A0A0401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000800000000000000000000000000000000000000000080000800000000000000000000000000000000000000000a000000a0000000000000000000000000000000000880000000000000000880000000000000000000000000000880000000000000000880000000000000000000000000000000000a000000a00000000000000000000000000000000000000000800008000000000000000000000000000000000000000000800008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 018a0149000A0A0401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000800000000000000000000000000000000000000000080000800000000000000000000000000000000000000000a000000a0000000000000000000000000000000000880000000000000000880000000000000000000000000000880000000000000000880000000000000000000000000000000000a000000a00000000000000000000000000000000000000000800008000000000000000000000000000000000000000000800008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810602
Send raw command: 018a0149000A0A0401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000800000000000000000000000000000000000000000080000800000000000000000000000000000000000000000a000000a0000000000000000000000000000000000880000000000000000880000000000000000000000000000880000000000000000880000000000000000000000000000000000a000000a00000000000000000000000000000000000000000800008000000000000000000000000000000000000000000800008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810602
No answer from device!
done

Send plain command: 49000A0A04020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f00000000000000000000000000000000000ff0000000000000000ff0000000000000000000000000000ff0000000000000000ff00000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000f000000000000000000f0000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000ff0000000000000000ff0000000000000000000000000000ff0000000000000000ff00000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 018a0149000A0A04020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f00000000000000000000000000000000000ff0000000000000000ff0000000000000000000000000000ff0000000000000000ff00000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000f000000000000000000f0000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000ff0000000000000000ff0000000000000000000000000000ff0000000000000000ff00000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e20c02
Send raw command: 018a0149000A0A04020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f00000000000000000000000000000000000ff0000000000000000ff0000000000000000000000000000ff0000000000000000ff00000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000f000000000000000000f0000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000ff0000000000000000ff0000000000000000000000000000ff0000000000000000ff00000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e20c02
No answer from device!
done

Send plain command: 49000A0A04030000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000f000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 018a0149000A0A04030000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000f000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000e50a02
Send raw command: 018a0149000A0A04030000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000f000000000000000000000000000000f0000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000000000000000000000000000000000e50a02
No answer from device!
done

Send plain command: 49000A0A04040000000000000000000000f0000f000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f000000000000000000000000f0000f000000000000000000000000
Generated raw command: 018a0149000A0A04040000000000000000000000f0000f000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f000000000000000000000000f0000f000000000000000000000000e40c02
Send raw command: 018a0149000A0A04040000000000000000000000f0000f000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000f0000f000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0000f000000000000000000000000000000f0000f000000f0000f000000000000000000000000000000f0000f000000000000000000000000f0000f000000000000000000000000e40c02
No answer from device!
done

Send plain command: 49000A0A0405000f000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000f00000
Generated raw command: 018a0149000A0A0405000f000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000f00000ef0202
Send raw command: 018a0149000A0A0405000f000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000f00000ef0202
No answer from device!
done

Send plain command: 49000A0A04060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 018a0149000A0A04060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f20002
Send raw command: 018a0149000A0A04060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f20002
No answer from device!
done

Send plain command: 49000A0A04070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 018a0149000A0A04070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f30002
Send raw command: 018a0149000A0A04070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f30002
No answer from device!
done

root@raspberrypi:/opt/fhem/divoom2#

Bilder habe ich auch alle auf 16x16 /32bit erweitert. Kein Erfolg.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 November 2018, 19:41:31
Slot laden funktioniert. Ich musste mich nun auch mal bei Divoom registrieren. Ersten Slot bestückt,
dann upload auf die Box. Aufruf klappt mit

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set Slot
  sendRaw('01090045050000000000530002', 5);
  disconnectDivoom();
}

Es gibt maximal 12 Slots. Jetzt muss ich schauen, ob alle einzeln aufrufbar sind oder ob sie nur nacheinander durchlaufen.

edit:

Die Animationen laufen nacheinander stumpf durch. Einzeln aufrufbar scheint nicht gegeben zu sein.

Ok, hier muss ich mich korrigieren. Ich hatte geschrieben

-> Image/Animation (preloaded within the app): 05 <-keine Funktion
Stimmt doch nicht. Nachdem ich den Slot mit der App befüllt habe, funktioniert das richtig.
Hatte es falsch zugeordnet.

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set animation (loaded by app)
  sendPlain('4505', 5);

}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 26 November 2018, 20:31:02
Kannst du das skull.png mit der App laden (unverändert) und die raw Nachricht mitschneiden. Ich bin grad etwas unsicher wie das Format aussehen muss. Oder du speicherst eins der Bilder von denen du die RAW Nachrichten bereits kennst und hängst es hier mal an.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 26 November 2018, 23:02:08
Ja, ich bin auch verunsichert. Hier Skull in 11x11 gesendet.

#!/usr/bin/perl
require "./divoom.pl";

# load picture
my $pic = convertImageTB('timebox/skull.png', 11);

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set clock
  sendPlain('4500', 5);
  # set picture
  sendPlain('44000A0A04'.$pic, 10, 0);
  disconnectDivoom();
}

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#

Die Bilder der Divoomapp werden in 2 Größen abgespeichert.
- /sdcard/Divoom/selfInfo = 144x144 Pixel /24Bit als JPG
- /sdcard/DCIM/Divoom = 240x240 Pixel /32Bit als PNG


An die echten 16x16 Pixelpics komme ich nicht. Die werden bestimmt on-the-fly konvertiert. Daher stelle ich dir die beiden Pics zur Verfügung + ein Bild, was ich mit Paint auf 16x16 verkleinert habe. Keines lässt sich erfolgreich senden, auch wenn es laut Scriptoutput so scheint.

Hier das Bild in Raw.

sendRaw('017d0044000a0a04aa760000000005000000ffffff0000fefefe00fd040400002000240900040000000800006c1b000800806ddb000001300000060400360c18360000b66ddb360000b66ddb364000b661c3360000b001c0060000806ddb180600416c1b491220490240480600490040c2440008000000000000000000003d1a02', 5);
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 26 November 2018, 23:26:43
Ok, ich konnte eine Veränderung hervorrufen. Ich habe anstatt

sendPlain('44000A0A04'.$pic, 10, 0);
es so geändert.

sendPlain('44000A0A04aa'.$pic, 10, 0);
Jetzt wurde endlich nicht das letzte Bild aus dem Speicher geladen, sondern Pixelsalat  :D
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 November 2018, 00:36:53
#!/usr/bin/perl
require "./divoom.pl";

# load picture
my $pic = convertImageTB('timebox/skull.png', 11);

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  # set clock
  sendPlain('4500', 5);
  # set picture
  #sendPlain('44000A0A04'.$pic, 10, 0);
  sendPlain('44000A0A04AA'.sprintf("%02x", (length($pic) / 2) + 2).$pic, 10, 0);
  disconnectDivoom();
}

Bevor wir noch andere Versuche starten, probier es mal damit...

Eventuell auch mal das Bild durch etwas mit 16x16 Pixeln ersetzen und bei convertImageTB die 16 als zweiten Parameter verwenden.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 November 2018, 16:28:03
Habe mir das gestern noch mal detaillierter angesehen. Die alte Timebox generiert aus einem Pixel 1,5 Byte.

1 Pixel = besteht aus 3 Werten R, G und B. Von jedem dieser Werte werden 4 Bit verwendet und ergeben insgesamt 12 Bit, also 1,5 Byte.

Bei der neuen Timebox hast du ja das Bild entsprechend gezeigt mit 16 x 16 Pixeln = 256 Pixeln.

sendRaw('017d0044000a0a04aa760000000005000000ffffff0000fefefe00fd040400002000240900040000000800006c1b000800806ddb000001300000060400360c18360000b66ddb360000b66ddb364000b661c3360000b001c0060000806ddb180600416c1b491220490240480600490040c2440008000000000000000000003d1a02', 5);
Die Bildinformationen sind hier aber nur 0x76 = 118 Byte lang. Mit anderen Worten, das Bild wird irgendwie komprimiert. Damit entspricht ein Byte der Raw Nachricht rund 2 Pixeln auf der neuen Timebox. Das Encoding ist somit komplett anders. Ich muss mal etwas drüber nachdenken, ob mir dazu noch etwas einfällt. Ansonsten kannst du mal versuchen als sendPlain mit folgendem zu spielen:

"44000a0a04aa" + (Länge der nachfolgenden Daten + 2) + Daten
Das sieht dann wie folgt aus:

44000a0a04aa0301
44000a0a04aa040102
44000a0a04aa05010203

Man müsste hier raus bekommen wie die einzelnen Pixel kodiert werden müssen...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 27 November 2018, 17:46:08
Habe die 3 getestet, außerdem auch noch etwas erweitert. Alle führten zu Pixelsalat.

44000a0a04aa0301
Wird zu Raw:
01c00044000a0a04aa030100000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff00000000000000f0ffffffffffffffffffff000000000000ff0f0000f0ff000000ff0f0000000000f0ff000000ff0f0000f0ff000000000000ffffffffffffffffffff0f00000000000000ffffffffffffff0f0000000000000000f0ff00f0ff00f0ff00000000000000000000000000000000000000000000000000000000000000000000000000006a3402

44000a0a04aa040102

Wird zu Raw:
01c10044000a0a04aa04010200000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff00000000000000f0ffffffffffffffffffff000000000000ff0f0000f0ff000000ff0f0000000000f0ff000000ff0f0000f0ff000000000000ffffffffffffffffffff0f00000000000000ffffffffffffff0f0000000000000000f0ff00f0ff00f0ff00000000000000000000000000000000000000000000000000000000000000000000000000006e3402


44000a0a04aa05010203

Wird zu Raw:
01c20044000a0a04aa0501020300000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff00000000000000f0ffffffffffffffffffff000000000000ff0f0000f0ff000000ff0f0000000000f0ff000000ff0f0000f0ff000000000000ffffffffffffffffffff0f00000000000000ffffffffffffff0f0000000000000000f0ff00f0ff00f0ff0000000000000000000000000000000000000000000000000000000000000000000000000000733402

Das funktioniert auch nicht.

sendPlain('44000A0A04AA'.sprintf("%02x", (length($pic) / 2) + 2).$pic, 10, 0);

Wird zu Raw:
01bf0044000a0a04aab800000000000000000000000000000000000000000000000000000000000000000000000000f0ffffffffffffff00000000000000f0ffffffffffffffffffff000000000000ff0f0000f0ff000000ff0f0000000000f0ff000000ff0f0000f0ff000000000000ffffffffffffffffffff0f00000000000000ffffffffffffff0f0000000000000000f0ff00f0ff00f0ff00000000000000000000000000000000000000000000000000000000000000000000000000001d3502
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 November 2018, 01:55:22
Deine ersten drei Versuche meinte ich ohne Bild hinten dran. Also wirklich nur genau das schicken was ich geschrieben habe. Du hast hinten noch das skull.png dran gehangen oder sowas.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 November 2018, 07:07:57
Ja, hatte den Smiley mit angehängt. Falsch interpretiert. Jetzt plain ohne Bild.

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

done

Send plain command: 44000a0a04aa0301
Generated raw command: 010a0044000a0a04aa0301140102
Send raw command: 010a0044000a0a04aa0301140102
Device answer: 01
done

Send plain command: 44000a0a04aa040102
Generated raw command: 010b0044000a0a04aa040102180102
Send raw command: 010b0044000a0a04aa040102180102
Device answer: 01
done

Send plain command: 44000a0a04aa05010203
Generated raw command: 010c0044000a0a04aa050102031d0102
Send raw command: 010c0044000a0a04aa050102031d0102
Device answer: 01
done


root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 November 2018, 16:12:57
Wir reden aneinander vorbei. :)

44000a0a04aa0301
Die 01 am Ende sind Daten, die sich in irgend einer Art und Weise auf der Timebox wiederfinden lassen müssten, in Form von eingefärbten Pixeln. Hier könnte man auch mal verschiedene andere Werte wie z.B. F0 oder 0F usw. probieren und dann dokumentieren was dann auf der Timebox zu sehen ist. Ich würde im Prinzip erwarten, das sich 1-2 Pixel links oben einfärben. Ausgehend von dem einen Beispiel von dir, müsste dir 05 z.B. 1 Pixel in Weiß anzeigen (Mutmaßung)?!?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 November 2018, 17:28:37
Jetzt weiß ich warum wir aneinander vorbeireden. Du erwartest das sich Pixel einfärben. Bei mir passiert aber leider nichts...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 November 2018, 17:45:41
Naja du sagtest was von bunt irgendwo weiter oben. Es scheint also nur eine Frage der Anzahl der Zeichen zu sein, da sich bei einem Bild, was du hinten dran packst (mehr Daten die gesendet werden), ja dann doch irgendwas auf der Timebox tut.

Was passiert z.B. wenn du 20 x die 05 schickst? Ist dann auch nichts zu sehen?

44000a0a04aa160505050505050505050505050505050505050505
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 November 2018, 17:53:55
Oder du nimmst mal ein funktionierendes Bild wie z.B. (aus einem Beitrag von dir entnommen):

01340044000a0a04aa2d0000000002000000ffffff00800080000000000000000038000000000000000000000000000000000000009e0502
wandelst das in Plain um:

44000a0a04aa2d0000000002000000ffffff0080008000000000000000003800000000000000000000000000000000000000
und verkürzt mal die Daten und die Länge entsprechend und guckst was passiert, wenn du das mit sendPlain raus schickst. (um 19 Byte gekürzt und Länge angepasst).

44000a0a04aa1A0000000002000000ffffff00800080000000000000000038
44000a0a04aa0F0000000002000000ffffff0080 (um 30 Byte gekürzt und Länge angepasst)

Ich würde erwarten, das dir nur noch Teile des Originalbildes angezeigt werden.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 November 2018, 18:06:19
Ja so schlau war ich auch schon. Je kürzer es wird, desto anders sind manchmal die Farben. Oder auch gleiche Farben,
aber an anderen Stellen als vorher  :-\

edit:

Das z.B erzeugt ein gleichmäßiges Blau auf allen Pixeln

44000a0a04aa7600000000010000
root@raspberrypi:/opt/fhem/divoom2# perl setPicture.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 11)
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: 44000a0a04aa7600000000010000
Generated raw command: 01100044000a0a04aa76000000000100008d0102
Send raw command: 01100044000a0a04aa76000000000100008d0102
Device answer: 01
done

Send raw command: 010d00450001000100000000ff05580102
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 November 2018, 18:39:33
Oh man was für eine kack Kodierung ist das denn. Ich verstehe schon die 0x76 als Längenangabe nicht. 0x76 - 2 = 0x74 = 116. Deine Timebox hat doch aber 256 Pixel. Ich hätte deshalb entweder 256 oder 128 oder irgendwas erwartet und nicht nur 116.  Aber sei es drum. Ist denn die 01 die Farbe? wenn du daraus 02, 03 usw. machst, wird dann der Bildschirm in einer anderen Farbe eingefärbt?

44000a0a04aa7600000000020000
44000a0a04aa7600000000030000
Wenn das so ist, dann ist das vielleicht der Index einer Palette.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 November 2018, 18:45:16
Das führt dazu, das einige Pixel fehlen die dann schwarz sind/oder nicht existent.

44000a0a04aa7600000000020000
Ab hier werden einige grüne Pixel hinzugefügt. Fühlt sich an wie ein Farbübergang?

44000a0a04aa7600000000030000
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 November 2018, 19:13:00
-2 färbt das ganze Display in Grün

sendPlain('44000a0a04aa76000000000100', 5);
So war es komplett in Blau

sendPlain('44000a0a04aa7600000000010000', 5);

Pink

sendPlain('44000a0a04aa760000000001', 5);

Weiß

  sendPlain('44000a0a04aa990000000001ffffff', 2);

Gelb
  sendPlain('44000a0a04aa990000000001fefe00', 2);
Noch was gerausgefunden. Die 76 oben in den Beispielen ist die Helligkeit des Display. 01 is fast nicht mehr sichtbar. Aufsteigend dann heller.

edit:
Ändere ich die 76 im Rawpic wird es nicht angezeigt...Funktioniert bei den expliziten Farben aber wunderbar...oh man.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 November 2018, 21:23:23
Ich hab die Dimensionen abgesteckt. Als Beispiel, ein weißer Pixel. Links Oben, Rechts Oben, Links Unten, Rechts Unten.

sendRaw('01340044000a0a04aa2d0000000002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff452402', 5); #weiß oben links
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff0080000000000000000000000000000000000000000000000000000000000000e60402', 5); #weiß oben rechts
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff0000000000000000000000000000000000000000000000000000000000000100670402', 5); #weiß unten links
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff0000000000000000000000000000000000000000000000000000000000000080e60402', 5); #weiß unten rechts
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 November 2018, 23:50:51
-2 färbt das ganze Display in Grün

sendPlain('44000a0a04aa76000000000100', 5);
So war es komplett in Blau

sendPlain('44000a0a04aa7600000000010000', 5);

Pink

sendPlain('44000a0a04aa760000000001', 5);

Weiß

  sendPlain('44000a0a04aa990000000001ffffff', 2);

Gelb
  sendPlain('44000a0a04aa990000000001fefe00', 2);
Noch was gerausgefunden. Die 76 oben in den Beispielen ist die Helligkeit des Display. 01 is fast nicht mehr sichtbar. Aufsteigend dann heller.

edit:
Ändere ich die 76 im Rawpic wird es nicht angezeigt...Funktioniert bei den expliziten Farben aber wunderbar...oh man.

Okay Helligkeit hast du rausbekommen. Hinter der 01 kommt dann 3 Byte Farbcode RGB. Wenn du ein Byte weg lässt, dann wird das durch FF ersetzt. Das erklärt die Farben.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 November 2018, 23:51:58
Ich hab die Dimensionen abgesteckt. Als Beispiel, ein weißer Pixel. Links Oben, Rechts Oben, Links Unten, Rechts Unten.

sendRaw('01340044000a0a04aa2d0000000002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff452402', 5); #weiß oben links
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff0080000000000000000000000000000000000000000000000000000000000000e60402', 5); #weiß oben rechts
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff0000000000000000000000000000000000000000000000000000000000000100670402', 5); #weiß unten links
  sendRaw('01340044000a0a04aa2d0000000002000000ffffff0000000000000000000000000000000000000000000000000000000000000080e60402', 5); #weiß unten rechts

Ist ja ziemlich crazy. Kann ich mir momentan keinen Reim drauf machen. 2d scheint die Länge der Daten zu sein und die 02 danach die Funktion. 01 färbt den Bildschirm und 02 ist das Bild. Danach kommen dann die Bilddaten.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 29 November 2018, 00:39:57
Das ist eine Art Lauflängencodierung (RLE). 2d ist die Länge der Daten. Dann kommt 4 Byte mit 0, von denen ich noch nicht weiß wozu die sind. Die 02 ist die Anzahl der Farben, in unserem Fall Schwarz und Weiß. Jetzt kommen die 2 Farben als Farbwerte FFFFFF für Weiß und 000000 für Schwarz. Bei allen folgenden Bytes muss man sich die Bits ansehen. 0 ist die erste Farbe, 1 die zweite Farbe. Da wir nur 2 Farben haben ist das hier sehr einfach, wird aber schwieriger mit mehr Farben. So ganz krieg ich das mit der Position der Pixel noch nicht hin, aber das ist definitiv der richtige Weg! Weiß oben links sieht deshalb so komisch aus, weil dort mit einem weißen Pixel begonnen wird und die Farbwerte in der Palette vertauscht sind. Bei den anderen 3 Varianten wird immer mit schwarz begonnen.

Eine Huffman Codierung kann es auch noch sein. Glaube ich aber fast nicht. Muss mich da noch mal rein denken.
Kannst du die folgenden Dinge probieren?

1) In der ersten Zeile abwechselnd Schwarz und Weiß bis zum Ende der Zeile. Alles andere Schwarz.
2) Einen schwarzen, einen roten und einen blauen Pixel oben links, der Rest schwarz.
3) einen schwarzen, zwei rote und drei blaue Pixel oben links, der Rest schwarz.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 November 2018, 07:15:26
Ok, erledigt.

  sendRaw('01340044000a0a04aa2d0000000002000000ffffffaaaa000000000000000000000000000000000000000000000000000000000000ba0502', 5); # schwarz/weiß abwechselnd/ erste Reihe
  sendRaw('01570044000a0a04aa500000000003000000fe00000000fe24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00302', 5); # 1xschwarz/1xrot/1xblau/Rest schwarz
  sendRaw('01570044000a0a04aa500000000003000000fe00000000fe94020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420402', 5); # 1xschwarz/2xrot/2xblau/Rest schwarz
  sendRaw('01570044000a0a04aa500000000003000000fe00000000fe940a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a0402', 5); # 1xschwarz/2xrot/3xblau/Rest schwarz

 

edit:

Hinzugefügt 1xschwarz, 2xrot, 3xblau, rest schwarz. Habs übersehen...brauch eine Brille ^^
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Dezember 2018, 22:15:49
Ich konnte das SPP-Sniffen beschleunigen und erleichtern.

Android 8.1

1. Bluetooth ein
2. Einstellungen-->System-->Entwickleroptionen-->Bluetooth HCI-Snoop-Protokoll aktivieren
3. Bluetooth aus
4. Bluetooth ein
5. Einstellungen-->System-->Entwickleroptionen-->Android-Debugging an
6. Einstellungen-->System-->Entwickleroptionen-->Debugging-Benachrichtigung an
7. Einstellungen-->System-->Entwickleroptionen-->ADB über Netzwerk an
8. Irgendwas kurzes in der Divoomapp zur Timebox senden oder ändern des Setups.

In Windows

1. adb devices
2. adb connect ipDesHandys
3. adb shell
4. su
5. chmod 777 /data/misc/bluetooth/logs/btsnoop_hci.log
6. exit
7. adb pull /data/misc/bluetooth/logs/btsnoop_hci.log
8. btsnoop_hci.log befindet sich im ADB-Verzeichnis auf Windows
9. Log in Wireshark öffnen und nach Protocol sortieren.

Tip:
Durch aus- und wieder anschalten von Bluetooth wird der Log im Handy genullt.
Sehr hilfreich, um schnell die gewünschten Rawmessages zu bekommen.

Hier verschiedene Clocksetups.

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set different settings: clock/weatherani./temp/calendar
  sendRaw('010d00450001000100000000ff05580102', 1); #     only clock green
  sendRaw('010d004500010001000000ff0000530102', 1); #     only clock red
  sendRaw('010d004500010001010000000000550002', 1); #switching clock/weatherani.
  sendRaw('010d004500010001000100000000550002', 1); #switching clock/temp
  sendRaw('010d004500010001000001000000550002', 1); #switching clock/calendar
  sendRaw('010d004500010001010001000000560002', 1); #switching clock/weatherani./calendar
  sendRaw('010d004500010001010100000000560002', 1); #switching clock/weatherani./temp
  sendRaw('010d004500010001010101000000570002', 1); #switching clock/weatherani./temp/calendar
  sendRaw('010d004500010001000101000000560002', 1); #switching clock/temp/calendar
  sendRaw('010d004500010001000000000000540002', 1); #     only clock without change color
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 04 Dezember 2018, 01:07:18
Ich habe auch ein wenig was bzw. ich konnte deine letzten 4 Beispiele von dir mittels Perl Code rekonstruieren.

  sendRaw('01340044000a0a04aa2d0000000002000000ffffffaaaa000000000000000000000000000000000000000000000000000000000000ba0502', 5); # schwarz/weiß abwechselnd/ erste Reihe
  sendRaw('01570044000a0a04aa500000000003000000fe00000000fe24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d00302', 5); # 1xschwarz/1xrot/1xblau/Rest schwarz
  sendRaw('01570044000a0a04aa500000000003000000fe00000000fe94020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000420402', 5); # 1xschwarz/2xrot/2xblau/Rest schwarz
  sendRaw('01570044000a0a04aa500000000003000000fe00000000fe940a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a0402', 5); # 1xschwarz/2xrot/3xblau/Rest schwarz

#!/usr/bin/perl
use strict;
use warnings;

#print unpack('H*', pack('b*', '1000000001010101'))."\n";
#print substr(unpack('b*', pack('C*', 2)), 0, 2)."\n";

my @img = ( 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
my $imgBin = '';
my $i;

foreach (@img)
{
  $imgBin .= substr(unpack('b*', pack('C*', $_)), 0, 1);
}

# 2 colors
print '02';
# color codes
print '000000ffffff';
print unpack('H*', pack('b*', $imgBin))."\n";

# original data
print "02000000ffffffaaaa000000000000000000000000000000000000000000000000000000000000\n\n";

@img = ( 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
$imgBin = '';

foreach (@img)
{
  $imgBin .= substr(unpack('b*', pack('C*', $_)), 0, 2);
}

# 3 colors
print '03';
# color codes
print '000000fe00000000fe';
print unpack('H*', pack('b*', $imgBin))."\n";

# original data
print "03000000fe00000000fe24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n";

@img = ( 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
$imgBin = '';

foreach (@img)
{
  $imgBin .= substr(unpack('b*', pack('C*', $_)), 0, 2);
}

# 3 colors
print '03';
# color codes
print '000000fe00000000fe';
print unpack('H*', pack('b*', $imgBin))."\n";

# original data
print "03000000fe00000000fe94020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n";

@img = ( 0, 1, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
$imgBin = '';

foreach (@img)
{
  $imgBin .= substr(unpack('b*', pack('C*', $_)), 0, 2);
}

# 3 colors
print '03';
# color codes
print '000000fe00000000fe';
print unpack('H*', pack('b*', $imgBin))."\n";

# original data
print "03000000fe00000000fe940a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n\n";

Jetzt muss ich mir aus dem Bild nur noch die Farbwerte und das Array raus lutschen, dann sollte der Bildkonverter fertig sein.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 05 Dezember 2018, 21:23:02
Schau dir das mal bitte an. Funktioniert das zufällig bei dir?

PS: Denk bitte dran den Port bei connect richtig zu setzen und das Escapen auszuschalten.

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 05 Dezember 2018, 21:49:36
Hey,

habe es getestet. Kommt noch Pixelsalat.

root@raspberrypi:/opt/fhem/divoom3# perl setPictureTbEvo.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 18)
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: 44000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF8000000000000000100000002030303000000000200000000000000000000020000000000000004050504000000000200000000000004050505050400000000000100000004000000000000040000010000000004050004000004000504000000000000050605060505060506050000000000000506060506060506060500000200000004060500040400050604000000000000000405000000000507000000000000000000040505050508090a0b010000000c000c0004050507090d0e0d0b00000c0d0f0d0c000000000a090d090a000000100d100000000000010a0b0a11020000000c00000000000000000000000000000000000000000000000000000000
Generated raw command: 01440144000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF8000000000000000100000002030303000000000200000000000000000000020000000000000004050504000000000200000000000004050505050400000000000100000004000000000000040000010000000004050004000004000504000000000000050605060505060506050000000000000506060506060506060500000200000004060500040400050604000000000000000405000000000507000000000000000000040505050508090a0b010000000c000c0004050507090d0e0d0b00000c0d0f0d0c000000000a090d090a000000100d100000000000010a0b0a11020000000c000000000000000000000000000000000000000000000000000000001D1F02
Send raw command: 01440144000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF8000000000000000100000002030303000000000200000000000000000000020000000000000004050504000000000200000000000004050505050400000000000100000004000000000000040000010000000004050004000004000504000000000000050605060505060506050000000000000506060506060506060500000200000004060500040400050604000000000000000405000000000507000000000000000000040505050508090a0b010000000c000c0004050507090d0e0d0b00000c0d0f0d0c000000000a090d090a000000100d100000000000010a0b0a11020000000c000000000000000000000000000000000000000000000000000000001D1F02
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom3#

edit:

Hier mal ein Bild

https://www.dropbox.com/home/Divoom/TestPicture?preview=IMG_20181205_215551.jpg
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 05 Dezember 2018, 23:06:44
Aber auch ein Erfolg, die angehängten Bilder funktionieren. Sind in rein rot.

#!/usr/bin/perl
require "./divoom.pl";

# load picture
my $pic = convertImageTBEVO('/opt/fhem/divoom3/tb_evo.png', 16);
my $pic1 = convertImageTBEVO('/opt/fhem/divoom3/1.png', 16);
my $pic2 = convertImageTBEVO('/opt/fhem/divoom3/2.png', 16);
my $pic3 = convertImageTBEVO('/opt/fhem/divoom3/3.png', 16);
my $pic4 = convertImageTBEVO('/opt/fhem/divoom3/4.png', 16);
my $pic5 = convertImageTBEVO('/opt/fhem/divoom3/5.png', 16);
my $pic6 = convertImageTBEVO('/opt/fhem/divoom3/6.png', 16);
my $pic7 = convertImageTBEVO('/opt/fhem/divoom3/7.png', 16);
my $pic8 = convertImageTBEVO('/opt/fhem/divoom3/8.png', 16);


if (connectDivoom('11:75:68:C9:7D:36'))
{
  #setClockGreen
  sendRaw('010d00450001000100000000ff05580102', 10);
  # set picture
  #sendPlain('44000A0A04AA2D00000000'.$pic, 1, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic1, 2, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic2, 2, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic3, 2, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic4, 2, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic5, 2, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic6, 2, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic7, 2, 0);
  sendPlain('44000A0A04AA2D00000000'.$pic8, 2, 0);
  disconnectDivoom();
}

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

done

Send raw command: 010d00450001000100000000ff05580102
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000002000000FF00000000000000000000000000000000800180010000000000000000000000000000
Generated raw command: 01340044000A0A04AA2D0000000002000000FF000000000000000000000000000000008001800100000000000000000000000000006A0302
Send raw command: 01340044000A0A04AA2D0000000002000000FF000000000000000000000000000000008001800100000000000000000000000000006A0302
Device answer: 01
done

Send plain command: 44000A0A04AA2D00000000030000008F0000AB000000000000000000000000000000000000004001000040010000200800000550000005500000200800004001000040010000000000000000000000000000000000
Generated raw command: 01570044000A0A04AA2D00000000030000008F0000AB000000000000000000000000000000000000004001000040010000200800000550000005500000200800004001000040010000000000000000000000000000000000C50402
Send raw command: 01570044000A0A04AA2D00000000030000008F0000AB000000000000000000000000000000000000004001000040010000200800000550000005500000200800004001000040010000000000000000000000000000000000C50402
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000002000000FF00000000000000008001300c300c0000081008100000300c300c8001000000000000
Generated raw command: 01340044000A0A04AA2D0000000002000000FF00000000000000008001300c300c0000081008100000300c300c80010000000000008A0402
Send raw command: 01340044000A0A04AA2D0000000002000000FF00000000000000008001300c300c0000081008100000300c300c80010000000000008A0402
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000002000000FF00000000800180010810000000000000066006600000000000000810800180010000
Generated raw command: 01340044000A0A04AA2D0000000002000000FF00000000800180010810000000000000066006600000000000000810800180010000680502
Send raw command: 01340044000A0A04AA2D0000000002000000FF00000000800180010810000000000000066006600000000000000810800180010000680502
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000002000000FF00008001066006600000000000000000018001800000000000000000066006608001
Generated raw command: 01340044000A0A04AA2D0000000002000000FF00008001066006600000000000000000018001800000000000000000066006608001040602
Send raw command: 01340044000A0A04AA2D0000000002000000FF00008001066006600000000000000000018001800000000000000000066006608001040602
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000002FF0000000000fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f
Generated raw command: 01340044000A0A04AA2D0000000002FF0000000000fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f462102
Send raw command: 01340044000A0A04AA2D0000000002FF0000000000fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f462102
Device answer: 01
done

Send plain command: 44000A0A04AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01310044000A0A04AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000650102
Send raw command: 01310044000A0A04AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000650102
Device answer: 01
done

Send plain command: 44000A0A04AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01310044000A0A04AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000650102
Send raw command: 01310044000A0A04AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000650102
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom3#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 05 Dezember 2018, 23:11:16
Erfolg, muss an deinem Bild liegen. Das Bild hier funktioniert  :)

root@raspberrypi:/opt/fhem/divoom3# perl setPictureTbEvo.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 177)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 3)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 2)
Image: 16x16 (maxcolors: no palette found, usedcolors: 1)
Image: 16x16 (maxcolors: no palette found, usedcolors: 1)
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...

done

Send raw command: 010d00450001000100000000ff05580102
Device answer: 01
done

Send plain command: 44000A0A04AA2D00000000B1939393AEAEAEABABABC2C4C4D9D9D8000000D9D9D9C3C4C3ACACACAFAFAFCECECFFCFCFBF4F73AE0E121E1DB35E1E11DDEDF34F6F72BCBCBCCCBCBCBFBFBFAF7F827E2E110C7C71DCACB07C9C61CCBCC05C8C71CCBCB08E1DF26F7FA16F8F8F8C7C7C7C3C4C5F7F928C9DA31C6C71DCAD92EC6C91BC6C530C8C81DC4C631CBDD17C5C434CBDD1BF4F43BE0E0DED8D9D7F4FF10BE003BDFFF06C0003CD6F00CC7C71CCACD05D4EF1CCB0033D5FF18CA002EE8FF1FF7F7F9FAFF35BF0040B8123AC7003CB7123AB80039C7DB2ED4DA1FAC003CCA0A39B6003DCB0A3BAE003FF9FF29DFE122D4F208BC0039E00038B90038CDF409C9C81BC9CD04D0F021CC0018CC083AC50032CAF41CDFE20D000001E0DC34CFEF2CB20033CBF030DDE21DC8C230C9C91BD8DE34D5F11DAC003ECDF31DC7C330DFDE24E2E21DCBCB06C8C91CCFE006DFE01FE0E21CDDE40DE0E50BCADC1ECACC05C9C91CE1E30BDEDF33C9C71EC6C433CBD92FD50037C6DC2FD1DB1DCB0042C8DF1AC7C530C8C331DCE022F6F72CCACA09C7C81BDEE00EE3F420DA003DDFF620EDF410D10044E1F70FCAC908C8C81BF4F817D8D9D9E2DE26DDDD36000008E0E023DEDB35F8F8F6C3C4C2F7F915C7C71FF9F814AF2C179D291BA22B19A32E20F4F626DFDFDFF4F33CE0DF1CF2F737F6F825DEDB36F4F725F8F9F9C8C8C8CACBCBF8F7F7F5F727F8FA15F7F62CF8FC13F7F916F9F9F8C7C8C8DFDFDEF8F8F9E0E0E000010203040505050505050607020802090a0b05050c0d0e0f101105050b121302140515161718191a1b1c1d1e051f20210522232425262728292a2b2c2d052e2f05303132333435363738393a3b053c053d3e3f404142434445464748494a05054b4c4d4e4f50515253545556575859055a515b5c5d5e5f6061626364656605056768696a6b056c6d056e6f707172050573747519767778797a7b7c197d7e05057f80818283848586878866898a8b058c058d8e0559050505058f05909105929305949596059798999a0515899b059c080b059d9e9f05050505a0a1a205a3a402a5a60505a7a8a9aa11ab0505acad200813a4aeaf05050505050592b020a420
Generated raw command: 01210344000A0A04AA2D00000000B1939393AEAEAEABABABC2C4C4D9D9D8000000D9D9D9C3C4C3ACACACAFAFAFCECECFFCFCFBF4F73AE0E121E1DB35E1E11DDEDF34F6F72BCBCBCCCBCBCBFBFBFAF7F827E2E110C7C71DCACB07C9C61CCBCC05C8C71CCBCB08E1DF26F7FA16F8F8F8C7C7C7C3C4C5F7F928C9DA31C6C71DCAD92EC6C91BC6C530C8C81DC4C631CBDD17C5C434CBDD1BF4F43BE0E0DED8D9D7F4FF10BE003BDFFF06C0003CD6F00CC7C71CCACD05D4EF1CCB0033D5FF18CA002EE8FF1FF7F7F9FAFF35BF0040B8123AC7003CB7123AB80039C7DB2ED4DA1FAC003CCA0A39B6003DCB0A3BAE003FF9FF29DFE122D4F208BC0039E00038B90038CDF409C9C81BC9CD04D0F021CC0018CC083AC50032CAF41CDFE20D000001E0DC34CFEF2CB20033CBF030DDE21DC8C230C9C91BD8DE34D5F11DAC003ECDF31DC7C330DFDE24E2E21DCBCB06C8C91CCFE006DFE01FE0E21CDDE40DE0E50BCADC1ECACC05C9C91CE1E30BDEDF33C9C71EC6C433CBD92FD50037C6DC2FD1DB1DCB0042C8DF1AC7C530C8C331DCE022F6F72CCACA09C7C81BDEE00EE3F420DA003DDFF620EDF410D10044E1F70FCAC908C8C81BF4F817D8D9D9E2DE26DDDD36000008E0E023DEDB35F8F8F6C3C4C2F7F915C7C71FF9F814AF2C179D291BA22B19A32E20F4F626DFDFDFF4F33CE0DF1CF2F737F6F825DEDB36F4F725F8F9F9C8C8C8CACBCBF8F7F7F5F727F8FA15F7F62CF8FC13F7F916F9F9F8C7C8C8DFDFDEF8F8F9E0E0E000010203040505050505050607020802090a0b05050c0d0e0f101105050b121302140515161718191a1b1c1d1e051f20210522232425262728292a2b2c2d052e2f05303132333435363738393a3b053c053d3e3f404142434445464748494a05054b4c4d4e4f50515253545556575859055a515b5c5d5e5f6061626364656605056768696a6b056c6d056e6f707172050573747519767778797a7b7c197d7e05057f80818283848586878866898a8b058c058d8e0559050505058f05909105929305949596059798999a0515899b059c080b059d9e9f05050505a0a1a205a3a402a5a60505a7a8a9aa11ab0505acad200813a4aeaf05050505050592b020a420C58102
Send raw command: 01210344000A0A04AA2D00000000B1939393AEAEAEABABABC2C4C4D9D9D8000000D9D9D9C3C4C3ACACACAFAFAFCECECFFCFCFBF4F73AE0E121E1DB35E1E11DDEDF34F6F72BCBCBCCCBCBCBFBFBFAF7F827E2E110C7C71DCACB07C9C61CCBCC05C8C71CCBCB08E1DF26F7FA16F8F8F8C7C7C7C3C4C5F7F928C9DA31C6C71DCAD92EC6C91BC6C530C8C81DC4C631CBDD17C5C434CBDD1BF4F43BE0E0DED8D9D7F4FF10BE003BDFFF06C0003CD6F00CC7C71CCACD05D4EF1CCB0033D5FF18CA002EE8FF1FF7F7F9FAFF35BF0040B8123AC7003CB7123AB80039C7DB2ED4DA1FAC003CCA0A39B6003DCB0A3BAE003FF9FF29DFE122D4F208BC0039E00038B90038CDF409C9C81BC9CD04D0F021CC0018CC083AC50032CAF41CDFE20D000001E0DC34CFEF2CB20033CBF030DDE21DC8C230C9C91BD8DE34D5F11DAC003ECDF31DC7C330DFDE24E2E21DCBCB06C8C91CCFE006DFE01FE0E21CDDE40DE0E50BCADC1ECACC05C9C91CE1E30BDEDF33C9C71EC6C433CBD92FD50037C6DC2FD1DB1DCB0042C8DF1AC7C530C8C331DCE022F6F72CCACA09C7C81BDEE00EE3F420DA003DDFF620EDF410D10044E1F70FCAC908C8C81BF4F817D8D9D9E2DE26DDDD36000008E0E023DEDB35F8F8F6C3C4C2F7F915C7C71FF9F814AF2C179D291BA22B19A32E20F4F626DFDFDFF4F33CE0DF1CF2F737F6F825DEDB36F4F725F8F9F9C8C8C8CACBCBF8F7F7F5F727F8FA15F7F62CF8FC13F7F916F9F9F8C7C8C8DFDFDEF8F8F9E0E0E000010203040505050505050607020802090a0b05050c0d0e0f101105050b121302140515161718191a1b1c1d1e051f20210522232425262728292a2b2c2d052e2f05303132333435363738393a3b053c053d3e3f404142434445464748494a05054b4c4d4e4f50515253545556575859055a515b5c5d5e5f6061626364656605056768696a6b056c6d056e6f707172050573747519767778797a7b7c197d7e05057f80818283848586878866898a8b058c058d8e0559050505058f05909105929305949596059798999a0515899b059c080b059d9e9f05050505a0a1a205a3a402a5a60505a7a8a9aa11ab0505acad200813a4aeaf05050505050592b020a420C58102
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom3#

edit:
Habe noch mehr Bilder erfolgreich getestet.
Das parsen und neubauen des Bildes dauert pro Bild ca. 10 Sekunden.

edit2:
Das Bild oben was nicht funktioniert hat, war wohl beim Upload von mir schon defekt...
Habe das von mir ein paar Antworten vorher nochmal getestet. Gleicher Effekt.
Das 240x240Pixel wird astrein gesendet, ist dann halt blurred.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 05 Dezember 2018, 23:38:20
Also deine Bilder haben alle funktioniert und nur das von mir nicht? Komisch. Aber zumindest grundsätzlich geht ja schon mal was.
10s ist natürlich ganz schön bescheiden, wobei mir das extrem lange erscheint. Ich muss mir mal ansehen, wo ich da noch was machen kann. Zur Not kann man aber die Plain Nachricht verwenden, anstatt das Bild zu laden.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 05 Dezember 2018, 23:46:33
Mit mehr oder weniger Bildern nacheinander senden getestet, der Break ist immer 10sec.

edit....

Ich habe ein Break im Kopf....meine Schuld....Habe Delay von 10 Sec. gesetzt. Morgen gehts weiter,
bin Müde ^^
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 06 Dezember 2018, 00:17:24
Ahh hehe. Dann bin ich ja beruhigt. Habe trotzdem grade noch etwas geschraubt. Wenn das Bild jetzt genauso groß ist wie es sein soll, dann wird kein resize mehr gemacht. Außerdem verwende ich Zahlen für den Hash anstatt einem String. Eventuell geht das ebenfalls schneller. Ich würde es dann so erst einmal einchecken.

PS: Deine Farbänderung für die Aurabox ist jetzt auch drin.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 07 Dezember 2018, 00:03:06
Sieht mit der Änderung Ok aus.
So, jetzt geht es weiter mit Animation in den Speicher laden. Werde mal testen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 07 Dezember 2018, 22:21:11
So,

ich habe Animation stumpf von der Aurabox/Timebox übernommen und erweitert. Leider, first shot, kein Ergebnis.

#!/usr/bin/perl
require "./divoom.pl";

# load animation pictures
my $pic1 = convertImageTBEVO('timeboxevo/1.png', 16);
my $pic2 = convertImageTBEVO('timeboxevo/2.png', 16);
my $pic3 = convertImageTBEVO('timeboxevo/3.png', 16);
my $pic4 = convertImageTBEVO('timeboxevo/4.png', 16);
my $pic5 = convertImageTBEVO('timeboxevo/5.png', 16);
my $pic6 = convertImageTBEVO('timeboxevo/6.png', 16);
my $pic7 = convertImageTBEVO('timeboxevo/7.png', 16);
my $pic8 = convertImageTBEVO('timeboxevo/8.png', 16);

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set clock
  sendRaw('010d00450001000100000000ff05580102', 2);
  # set animation
  sendPlain('49000A0A040000AA2D00000000'.$pic1, 1, 0);
  sendPlain('49000A0A040100AA2D00000000'.$pic2, 1, 0);
  sendPlain('49000A0A040200AA2D00000000'.$pic3, 1, 0);
  sendPlain('49000A0A040300AA2D00000000'.$pic4, 1, 0);
  sendPlain('49000A0A040400AA2D00000000'.$pic5, 1, 0);
  sendPlain('49000A0A040500AA2D00000000'.$pic6, 1, 0);
  sendPlain('49000A0A040600AA2D00000000'.$pic7, 1, 0);
  sendPlain('49000A0A040700AA2D00000000'.$pic8, 1, 0);
  disconnectDivoom();
}

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

done

Send raw command: 010d00450001000100000000ff05580102
Device answer: 01
done

Send plain command: 49000A0A040000AA2D0000000002000000FF00000000000000000000000000000000800180010000000000000000000000000000
Generated raw command: 01360049000A0A040000AA2D0000000002000000FF00000000000000000000000000000000800180010000000000000000000000000000710302
Send raw command: 01360049000A0A040000AA2D0000000002000000FF00000000000000000000000000000000800180010000000000000000000000000000710302
Device answer: 01
done

Send plain command: 49000A0A040100AA2D00000000030000008F0000AB000000000000000000000000000000000000004001000040010000200800000550000005500000200800004001000040010000000000000000000000000000000000
Generated raw command: 01590049000A0A040100AA2D00000000030000008F0000AB000000000000000000000000000000000000004001000040010000200800000550000005500000200800004001000040010000000000000000000000000000000000CD0402
Send raw command: 01590049000A0A040100AA2D00000000030000008F0000AB000000000000000000000000000000000000004001000040010000200800000550000005500000200800004001000040010000000000000000000000000000000000CD0402
No answer from device!
done

Send plain command: 49000A0A040200AA2D0000000002000000FF00000000000000008001300c300c0000081008100000300c300c8001000000000000
Generated raw command: 01360049000A0A040200AA2D0000000002000000FF00000000000000008001300c300c0000081008100000300c300c8001000000000000930402
Send raw command: 01360049000A0A040200AA2D0000000002000000FF00000000000000008001300c300c0000081008100000300c300c8001000000000000930402
No answer from device!
done

Send plain command: 49000A0A040300AA2D0000000002000000FF00000000800180010810000000000000066006600000000000000810800180010000
Generated raw command: 01360049000A0A040300AA2D0000000002000000FF00000000800180010810000000000000066006600000000000000810800180010000720502
Send raw command: 01360049000A0A040300AA2D0000000002000000FF00000000800180010810000000000000066006600000000000000810800180010000720502
No answer from device!
done

Send plain command: 49000A0A040400AA2D0000000002000000FF00008001066006600000000000000000018001800000000000000000066006608001
Generated raw command: 01360049000A0A040400AA2D0000000002000000FF000080010660066000000000000000000180018000000000000000000660066080010F0602
Send raw command: 01360049000A0A040400AA2D0000000002000000FF000080010660066000000000000000000180018000000000000000000660066080010F0602
No answer from device!
done

Send plain command: 49000A0A040500AA2D0000000002FF0000000000fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f
Generated raw command: 01360049000A0A040500AA2D0000000002FF0000000000fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f522102
Send raw command: 01360049000A0A040500AA2D0000000002FF0000000000fe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f522102
No answer from device!
done

Send plain command: 49000A0A040600AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01330049000A0A040600AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000720102
Send raw command: 01330049000A0A040600AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000720102
No answer from device!
done

Send plain command: 49000A0A040700AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01330049000A0A040700AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000730102
Send raw command: 01330049000A0A040700AA2D00000000010000000000000000000000000000000000000000000000000000000000000000000000730102
No answer from device!
done

root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 08 Dezember 2018, 02:04:48
Das war fast klar. Du must den Download einer Animation mit loggen, um das neue Format zu ermitteln. Da das Kommandobyte 49 bestimmt gleich ist, hast du das sicher schnell gefunden.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 08 Dezember 2018, 09:45:44
So, ich meine, ich habe eine komplette Animation zusammen.


  sendRaw('01ce0049450700aa79004d000006000000780303ff0000146464074624ffffff000000000000000000000000000000400000000000880200000000c00000000000c000000000001800000000802400000000902b01000000901b010000008ce400000000601b0000000000000000000000000000000000000000000000000000aa67004d000100000000000000000000000000000000000000000000400000000000c00000000000c000000000001800000000802400000000902b01000000901b010000008ce400000000601b0000271602', 1);
  sendRaw('01ce0049450701000000000000000000000000000000000000000000000000aa67004d000100000000000000000000000000000000000000000000400000000000880200000000c000000000001800000000802400000000902b01000000901b010000008ce400000000601b0000000000000000000000000000000000000000000000000000aa67004d000100000000000000000000000000000000000000000000000000000000400000000000c000000000001800000000802400000000902b01000000901b010000008ce400004f0e02 ', 1);
  sendRaw('01ce00494507020000601b0000000000000000000000000000000000000000000000000000aa67004d0001000000000000000000000000000000000000000000000000000000004000000000008802000000005800000000802400000000902b01000000901b010000008ce400000000601b0000000000000000000000000000000000000000000000000000aa67004d0001000000000000000000000000000000000000000000000000000000000000000000004000000000001800000000802400000000902b01000000901b01001b0c02', 1);
  sendRaw('01ce004945070300008ce400000000601b0000000000000000000000000000000000000000000000000000aa67004d0001000000000000000000000000000000000000000000000000000000000000000000000800000000005100000000802400000000902b01000000901b010000008ce400000000601b0000000000000000000000000000000000000000000000000000aa67004d0001000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000802400000000902b0100c70b02', 1);
  sendRaw('01ce00494507040000901b010000008ce400000000601b0000000000000000000000000000000000000000000000000000aa67004d0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000802400000000902b01000000901b010000008ce400000000601b0000000000000000000000000000000000000000000000000000aa6d004d000102eb8905ffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000320e02', 1);
  sendRaw('01ce004945070500000000000091ecbffd6d29000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa53004d000004000000d76c05ffd255ffffff0000000000000000000000000000000000000000000410000020080000c0030000c0030000200800000410000000000000000000000000000000000000000000aa6d004d000102780303af0e0724499224499224499224499224499224499224c93669499224d948524a92241b6d9b529224ab6ddb549224a36ddb149224a30f2502', 1);
  sendRaw('01ce00494507066ddb149224ab6ddb5492241b6d9b529224d948524a9224c936694992244992244992244992244992244992244992aa67004d0001000000000000000000a005000000daa2455b00409b0448d2024023258994024023a58d94020092a44d12006891b66d83166891b66d83160092a44d12004023a58d9402402325899402409b0448d20200daa2455b000000a0050000000000000000aa2d004d0000020000005555550000c003ec37ec37e007dc3bfe7ffe7ffe7ffe7fdc3be007ec37ec37c0030000aa27004d0001a84102', 1);
  sendRaw('01ce0049450707008001c4238241000000000000024007e007e002400000000000008241c4238001aa27004d0001000000000000000000000000000000000000000000000000000000000000000000aa4d004d00010214646407462400e02f0000800a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa6a004d000101ffffff00006ce3000000006ce3000000006ce2000000004cd200000000689b000000004012000000000000001d1802', 1);
  sendRaw('01ce004945070800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa67004d00010000006cdb000000006cdb000000006cd3000000006cd3000000006cd3000000006ce2000000006ce2000000006ce2000000006ce2000000006cd200000000689b0000000040120000000000000000000000000000000000000000000000000000aa67004d0001000000000000000000000000000000000000000000000000000000000000000000008000bf1202', 1);
  sendRaw('014300494507090000000000040000000000040000006cdb000000806da2060000006ddb0400000048920000000000000000000000000000000000000000000000000000eb0502', 1);


Und noch eine

01ce00499a0900aa53004b000004000000842404ff6400ffff00000000000000000004000010a400801ae402e006d00bf8014003700000c000000090010008000020e4c0c01890f3f30650feaf0540a95a010044040000000000aa6a004b000101440a0400000000000000000000000020000000001060020000921060140040140200a500884400003800c0080000004000000000003004000008000000000460046000841000234c83140200134952120200c824094900000082200000000000000000aa6a004b0001011f060100e22302
01ce00499a0901000000000000000000000028000000001428090000481628430000c302401302605200002a00800a0000002000000000009405000020000000001028034000021640192842c20240c92409c902005a92645b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a00400a0000002000000000009405000020000000001028032000021640198441c802405b9264db0200dab66d5b000080a2280000000000000000aa67721c02
01ce00499a0902004b000100000000000000000000000000280000000014680b0000da1668590040d90240c902285900004a00000b000000800000000000b405000020000000001028098000081640499004c902405b9264db0200dab66d5b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a00400a0000002000000000009405000020000000001028032000021640198441c802405b9264db0200dab66d5b000080a228000000009b1f02
01ce00499a090300000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200002a00800a0000002000000000009405000020000000001028034000021640192842c20240c92409c902005a92645b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a00400a0000002000000000009405000020000000001028032000021640198441c802405b9264db0200dab66d5b000080f61b02
01ce00499a0904a2280000000000000000aa67004b000100000000000000000000000000280000000014680b0000da1668590040d90240c902285900004a00000b000000800000000000b405000020000000001028098000081640499004c902405b9264db0200dab66d5b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a00400a0000002000000000009405000020000000001028032000021640198441c802405b9264db0200dab01e02
01ce00499a0905b66d5b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200002a00800a0000002000000000009405000020000000001028034000021640192842c20240c92409c902005a92645b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a00400a0000002000000000009405000020000000001028032000021640198441c802405b151a02
01ce00499a09069264db0200dab66d5b000080a2280000000000000000aa67004b000100000000000000000000000000280000000014680b0000da1668590040d90240c902285900004a00000b000000800000000000b405000020000000001028098000081640499004c902405b9264db0200dab66d5b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a00400a000000200000000000940500002000000000102803200002164019861e02
01ce00499a09078441c802405b9264db0200dab66d5b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200002a00800a0000002000000000009405000020000000001028034000021640192842c20240c92409c902005a92645b000080a2280000000000000000aa67004b00010000000000000000000000000020000000001060020000921060140040140200a500884400003800c0080000004000000000003004000008000000000460040c1d02
01ce00499a09086000841000234c83140200134952120200c824094900000082200000000000000000aa67004b00010000000000000000000000000008000000000488040000240588260080a600403601d01600003200c0020000006000000000002802000010000000000888066000060540346cc3a60040a26d9b9400001249521200008020080000000000000000aa67004b00010000000000000000000000000020000000001060020000921060140040140200a500884400003800c008000000400000000000280200000800aa1a02
01ce00499a09090000000460046000841000234c83140200134952120200c824094900000082200000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200002a00800a0000002000000000009405000020000000001028034000021640192842c20240c92409c902005a92645b000080a2280000000000000000aa67004b00010000000000000000000000000020000000001060020000921060140040140200a500884400003800c008000000400000000000d11902
01ce00499a090a2802000008000000000460046000841000234c83140200134952120200c824094900000082200000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200002a00800a0000002000000000009405000020000000001028034000021640192842c20240c92409c902005a92645b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a00400a000000bb1802
01ce00499a090b2000000000009405000020000000001028032000021640198441c802405b9264db0200dab66d5b000080a2280000000000000000aa67004b000100000000000000000000000000280000000014680b0000da1668590040d90240c902285900004a00000b000000800000000000b405000020000000001028098000081640499004c902405b9264db0200dab66d5b000080a2280000000000000000aa67004b00010000000000000000000000000028000000001428090000481628430000c302401302605200001a6b2002
014000499a090c00400a0000002000000000009405000020000000001028032000021640198441c802405b9264db0200dab66d5b000080a2280000000000000000c60a02

Und noch eine:

01ce0049d30400aa7f0063000008000000646464a5a5a5e7eaeb7d7d7dffffff5050504646460000000000000000000000000080480a000000106d53000000a26d9b020000a26d9b020000a26d9b020000026000020000026401020000d80e6b09000060eea3010000006f3300000060d99601000000b7350000000048020000000000000000aa900063000103878787d7d7d7d2cece000000000000000000000000000000000000108888010000000051558518000000005855559901000010555555990100008055555599010000e12d02
01ce0049d3040110500050990100001050081099010000800aaaaa99010000101a8a911900000000a8aa010000000000101118000000000081aa180000000000818a000000000000000000000000aa790063000006000000505050b9b9b9787878ffffff2d2d2d00000000000000000000000000804852000000309224170000429224a90000469224a90040478a24a90000068924a500000648a4a40000304991140000222d49020000366501000000904803000000226d00000000b001000000000000000000aa9600630001054b1a2602
01ce0049d304024b4ba5a5a57d7d7d737171c8c5c5000000000000000000000000000000000000007677060000000076444487060000604744444467000070444444446700007044444444670000704944444467000000994444746a000040444474660600009064466666000000904666060000000000466606000000006044660000000000006600000000000000000000000000aa530063000004000000696969afafafffffff000000000000000000a41a0000f96f0040febf0180ffbf0180ffbf0180febf0180febf01406f9ac63202
01ce0049d3040300405a15000056050000560500005501000054000000000000aa700063000103787676dcdcdc5f5f5f0000000000000000000000000000b625000000a06d9b000000b86ddb080000b46ddb040000b46ddb040000b46ddb040000b46ddb0400002c4bb20c000060dbb601000000db3600000000db3600000000db3600000000d8060000000000000000aa9300630001044b4b4bbebebea0a0a06e6e6e0000000000000000000000000000000000008788780000000070383383070000008733333379000000873333b52b02
01ce0049d30404339300000087333333930000008733333399000000873333339900000080877838a300000000777787a8000000007077770800000000707777080000000000777707000000000070770000000000000000000000aa5300630000040000005f5f5fafafafffffff000000000000000000a9010090ff1b00e4ff6f00e4ffbf00e4ffbf00e4ffaf00a4ff2b0050f9ff004095b50000509d0000501d0000406d000000140000000000aa960063000105b4b4b4919191aaaaaa1e1e1e4b4b4b00000000000000000000006f3502
01ce0049d30405000000000000004144140000000041333333050000103433333313000010343333334300001034333336430700104433336640000010443463084000000041443133040000001011113413000000000041314400000000003413010000000000403413000000000000400400000000000000000000aa7600630000050000005050508c8c8caaaaaaffffff0000000000000000000000000010490b0000003291640000403692a4000040369224030040369224070040360220020040b60023020040369204070000df1d02
01290049d30406b2650c0300000084e4000000802c09000000808c5c00000000605c0000000000000000b60602
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 08 Dezember 2018, 16:08:54
So, setAnimation in Raw klappt. Juhu  :)

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set clock
  sendRaw('010d00450001000100000000ff05580102', 2);
  # set animation
  sendRaw('01ce0049d20200aa53006200000400000003036e0404b40000ff000000000000000000a4060000f91b0040fe6f0040fe6f0040fe6f0040c0400040e04200803fbf0000792b0000f407000059190000f4070000a0020000000000aa470062000100000000000000000000a41a0000fd6b0000feaf0140ffaf0180ffaf01400cac01402ca40180f3af0140b7690000fe01000054060000f9060000b9000000000000aa470062000100000000000000000000a41a0000febf0140ffff0680ffff0690efff0680e8bf0680a0af0600fea9b93602', 0, 0);
  sendRaw('01ce0049d2020101406f5500809e010000f5020040af0000000a000000000000aa470062000100000000000000000000901a0000f9bf0140feff0680ffff0680ffff0680feff0600fabf06c0ff5b0180975500805d0100005d0100405e00000005000000000000aa470062000100000000000000000000a41a0000f96f0040febf0180ffbf0180ffbf0180febf0180febf01406f9a00405a15000056050000560500005501000054000000000000aa470062000100000000000000000000a4060000fe2f0040ff7f0080ffbf0080ff1a3502', 0, 0);
  sendRaw('01ce0049d20202bf0080ffbf0080ffbf0040a66600005515000054050000540500005405000050010000000000aa470062000100000000000000000000a9060040fe1b0090ff6f0090ffbf0090ffbf0090ffaf0090ffaf0080697e00005569000054250000542500005015000040050000000000aa470062000100000000000000000000a9010090ff1b00e4ff6f00e4ffbf00e4ffbf00e4ffaf00a4ff2b0050f9ff004095b50000509d0000501d0000406d000000140000000000aa470062000100000000000000000000a90600908b3402', 0, 0);
  sendRaw('01800049d20203ff2f00e4ff7f00e4ffbf00e4ffbe01a4ff8a00a4be820090da2f0040557e000090ad0000e0170000807e000000280000000000aa470062000100000000000000000000a9060040fa1f0090fe2f0090fe7f0090febf00900e4c0090064e0090feb300409a770000d02f000064050000e41b0000801b0000000000602602',  0, 0);
}

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

done

Send raw command: 010d00450001000100000000ff05580102
No answer from device!
Device answer: 01
done

Send raw command: 01ce0049d20200aa53006200000400000003036e0404b40000ff000000000000000000a4060000f91b0040fe6f0040fe6f0040fe6f0040c0400040e04200803fbf0000792b0000f407000059190000f4070000a0020000000000aa470062000100000000000000000000a41a0000fd6b0000feaf0140ffaf0180ffaf01400cac01402ca40180f3af0140b7690000fe01000054060000f9060000b9000000000000aa470062000100000000000000000000a41a0000febf0140ffff0680ffff0690efff0680e8bf0680a0af0600fea9b93602
Device answer: 01
done

Send raw command: 01ce0049d2020101406f5500809e010000f5020040af0000000a000000000000aa470062000100000000000000000000901a0000f9bf0140feff0680ffff0680ffff0680feff0600fabf06c0ff5b0180975500805d0100005d0100405e00000005000000000000aa470062000100000000000000000000a41a0000f96f0040febf0180ffbf0180ffbf0180febf0180febf01406f9a00405a15000056050000560500005501000054000000000000aa470062000100000000000000000000a4060000fe2f0040ff7f0080ffbf0080ff1a3502
No answer from device!
done

Send raw command: 01ce0049d20202bf0080ffbf0080ffbf0040a66600005515000054050000540500005405000050010000000000aa470062000100000000000000000000a9060040fe1b0090ff6f0090ffbf0090ffbf0090ffaf0090ffaf0080697e00005569000054250000542500005015000040050000000000aa470062000100000000000000000000a9010090ff1b00e4ff6f00e4ffbf00e4ffbf00e4ffaf00a4ff2b0050f9ff004095b50000509d0000501d0000406d000000140000000000aa470062000100000000000000000000a90600908b3402
No answer from device!
done

Send raw command: 01800049d20203ff2f00e4ff7f00e4ffbf00e4ffbe01a4ff8a00a4be820090da2f0040557e000090ad0000e0170000807e000000280000000000aa470062000100000000000000000000a9060040fa1f0090fe2f0090fe7f0090febf00900e4c0090064e0090feb300409a770000d02f000064050000e41b0000801b0000000000602602
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom2#


Das Gif im Anhang ist die Animation.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 08 Dezember 2018, 22:08:56
Das ist zu kompliziert als das man da was sehen könnte. Das beste wäre eine Animation in der ein einzelner weißer Pixel von links nach rechts wandert. Also Bild1 mit dem Pixel bei 0:0 und Bild2 dann mit dem Pixel bei 1:0 usw.

Dann kann man sich auf das wesentliche konzentrieren.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 08 Dezember 2018, 22:54:20
Ok, hier der Pixelrunner. Horizontal, von links oben nach rechts oben.

#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";

if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set animation
  sendRaw('01ce0049760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8ab02', 0, 0);
  sendRaw('01ce0049760201ffaa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4b4ab02', 0, 0);
  sendRaw('01ce0049760202010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ff7fd8aa02', 0, 0);
  sendRaw('01240049760203ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffca1e02',  0, 0); 
  disconnectDivoom();
}

root@raspberrypi:/opt/fhem/divoom2# perl setWhiteRunner.pl
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...

done

Send raw command: 01ce0049760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8ab02
No answer from device!
done

Send raw command: 01ce0049760201ffaa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4b4ab02
No answer from device!
done

Send raw command: 01ce0049760202010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ff7fd8aa02
No answer from device!
done

Send raw command: 01240049760203ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffca1e02
Device answer: 01
done

root@raspberrypi:/opt/fhem/divoom2#

16 weiße Pixel auf 4 Rawmessages aufgeteilt.

edit:

5 Bilder max. pro Rawmessage.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 09 Dezember 2018, 01:32:46
Wow. Das Format ist ja völlig anders.

49 - Kommandobyte für Animation
7602 - Gesamtlänge über alle 4 Nachrichten?
00 - FF - Index der Nachricht
AA - Startbyte für ein neues Frame
XXXX - Länge des folgenden Frames
?? - die Zahl verstehe ich nicht (hier F4), ist aber bei allen Frames gleich. Helligkeit vielleicht?
XX - Zeit des Frames
00 - 01 - 00 = erstes Frame, 01 = nachfolgendes Frame

Im ersten Frame kommt dann eine 02 für 2 Farben, dann die 2 Farbwerte und dann die rle codierten Pixel. In den folgenden Frames fehlt dieser Teil, startet ansonsten aber wieder ab dem AA.

Ich würde dir mal 2 Testsets die Tage zusammen stellen, die mich interessieren.

Testest 1: Hier würde ich diese 74 mal verändern wollen, um zu sehen was passiert.
Testest 2: Ich würde gern mal versuchen die Frames einzeln in den Nachrichten zu senden und nicht mehrere Frames pro Nachricht. Das würde es mir leichter machen.



Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 10 Dezember 2018, 23:38:07
Das sollte das Original sein als Plain:

sendPlain('49760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760201ffaa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4', 0, 0);
sendPlain('49760202010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ff7f', 0, 0);
sendPlain('49760203ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',  0, 0);

Das hier ist das erste Testset. Ich vermute das es dunkler ist:

sendPlain('49760200aa2d0040010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760201ffaa270040010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700400101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040', 0, 0);
sendPlain('49760202010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa270040010100ff7f', 0, 0);
sendPlain('49760203ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',  0, 0);

Hier vermute ich, das die Animation langsamer wird?!?

sendPlain('49760200aa2d00f4030002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760201ffaa2700f4030100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f40301007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4', 0, 0);
sendPlain('49760202030100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4030100ff7f', 0, 0);
sendPlain('49760203ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',  0, 0);

Jetzt eine Version in der ich versuche, die Nachrichten anders zu verteilen. Wenn ich Pech habe funktioniert das aber nicht, wegen der veränderten Gesamtlänge. Zur Not muss ich versuchen die zu berechnen, aber versuchs erst mal so:

sendPlain('49760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760201aa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760202aa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760203aa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760204aa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760205aa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760206aa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760207aa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760208aa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760209aa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('4976020Aaa2700f4010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('4976020Baa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('4976020Caa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('4976020Daa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('4976020Eaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('4976020Faa2700f4010100ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);

PS: Habe noch mal die Länge geprüft. Die müsste in dieser Version gleich sein, somit sollte das letzte Beispiel hoffentlich funktionieren.

Jetzt bin ich gespannt... :)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 Dezember 2018, 00:28:15
Zu Testset1.
Läuft minimal schneller. Ist nicht dunkler.

Zu Testset2.
Läuft etwas langsamer.

ZU Testset3.
Ja leider, funktioniert nicht.

edit:

Hier noch der Output zu 3.

root@raspberrypi:/opt/fhem/divoom2# perl setTestset3.pl
Create RFCOMM client (11:75:68:C9:7D:36 with port 1)...

done

Send plain command: 49760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 01330049760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9E2502
Send raw command: 01330049760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9E2502
No answer from device!
done

Send plain command: 49760201aa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760201aa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff942202
Send raw command: 012D0049760201aa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff942202
No answer from device!
done

Send plain command: 49760202aa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760202aa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff932202
Send raw command: 012D0049760202aa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff932202
No answer from device!
done

Send plain command: 49760203aa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760203aa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff902202
Send raw command: 012D0049760203aa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff902202
No answer from device!
done

Send plain command: 49760204aa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760204aa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff892202
Send raw command: 012D0049760204aa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff892202
No answer from device!
done

Send plain command: 49760205aa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760205aa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7A2202
Send raw command: 012D0049760205aa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7A2202
No answer from device!
done

Send plain command: 49760206aa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760206aa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5B2202
Send raw command: 012D0049760206aa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5B2202
No answer from device!
done

Send plain command: 49760207aa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760207aa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1C2202
Send raw command: 012D0049760207aa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1C2202
No answer from device!
done

Send plain command: 49760208aa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760208aa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9C2202
Send raw command: 012D0049760208aa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9C2202
No answer from device!
done

Send plain command: 49760209aa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D0049760209aa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9C2202
Send raw command: 012D0049760209aa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9C2202
No answer from device!
done

Send plain command: 4976020Aaa2700f4010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D004976020Aaa2700f4010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9B2202
Send raw command: 012D004976020Aaa2700f4010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9B2202
No answer from device!
done

Send plain command: 4976020Baa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D004976020Baa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff982202
Send raw command: 012D004976020Baa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff982202
No answer from device!
done

Send plain command: 4976020Caa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D004976020Caa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff912202
Send raw command: 012D004976020Caa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff912202
No answer from device!
done

Send plain command: 4976020Daa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D004976020Daa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff822202
Send raw command: 012D004976020Daa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff822202
No answer from device!
done

Send plain command: 4976020Eaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D004976020Eaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff632202
Send raw command: 012D004976020Eaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff632202
No answer from device!
done

Send plain command: 4976020Faa2700f4010100ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Generated raw command: 012D004976020Faa2700f4010100ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff242202
Send raw command: 012D004976020Faa2700f4010100ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff242202
No answer from device!
done

root@raspberrypi:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 11 Dezember 2018, 23:06:05
So habe ich es auch probiert. Gleiches Ergebnis:

sendPlain('49760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760201aa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760202aa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760203aa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760204aa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760205aa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760206aa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760207aa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760208aa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('49760209aa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('4976020aaa2700f4fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('4976020baa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('4976020caa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('4976020daa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('4976020eaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
  sendPlain('4976020faa2700f4010100ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',  0, 0);

Was ich vergessen habe zu erwähnen, Pixel 1 links oben in weiß wird gesetzt, als Einziger.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 12 Dezember 2018, 13:00:41
Was hast du da genau verändert?

Mit den Dingen könnte man leben, ist halt nur mehr Arbeit. Du müsstest allerdings noch rausfinden was die f4 da in den einzelnen Frames macht. Mich verwundert das es langsamer sein soll und ansonsten keine Auswirkungen zeigt.

sendPlain('49760200aa2d00f4010002ffffff000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 0, 0);
sendPlain('49760201ffaa2700f4010100dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f40101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4', 0, 0);
sendPlain('49760202010100fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100fff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaa2700f4010100ff7f', 0, 0);
sendPlain('49760203ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',  0, 0);

Im TestSet 1 hatte ich f4 durch 40 ersetzt. Kannst du mal versuchen rauszubekommen was dieses Byte bewirkt? Vielleicht mal auf 00 oder 01 setzen oder FF. Irgendwozu muss das ja sein. Falls du das machst, dann denk bitte dran, dass das in jedem Frame verändert werden muss! 14x in dem Beispiel, wenn ich mich nicht verzählt habe...

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 12 Dezember 2018, 17:48:20
Ich habe einfach das Original genommen, den Cut vor dem AA gesetzt und dann so wie du durchnummeriert. Dabei kam das heraus.
Und nochmal zum Verständnis, bei mir, sowie auch bei dir wird der erste Pixel links oben gesetzt. Das hätte ich genauer beschreiben sollen,
mein Fehler.

Dann teste ich jetzt die weiteren Vorschläge.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 12 Dezember 2018, 19:51:23
Außer Geschwindigkeitsänderung kann ich nichts feststellen.

00 schnell
FF langsam
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 12 Dezember 2018, 23:28:45
Hmm okay. Dann bildet die f401 wohl die Geschwindigkeit, also 01f4 = 500. Kannst du noch mal die beiden Stellen zu 0000 setzen? Dann sollte es super schnell sein. Danach kann ich mich an die Umsetzung machen, kann aber bis nach Weihnachten dauern. Vor Weihnachten ist terminlich immer die Hölle los.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 13 Dezember 2018, 00:21:28
So bin fertig.

Ein Pixelsprung dauert ca. 48sek.:
sendPlain('49760200aa2d0012c00002...
Schnellstes Tempo:
sendPlain('49760200aa2d0000010002...
Normales Tempo?:
sendPlain('49760200aa2d00f4010002...
Gefüllt, genau so schnell wie f401:
sendPlain('49760200aa2d0000000002...
Mal ein Danke! zwischendurch für deine Bemühungen  :)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 13 Dezember 2018, 09:43:11
Es sind 49,170 Sekunden oder auch 49170 ms. Ab einem gewissen Minimum wirds nicht schneller, weil dann der Treiber für die LED Ansteuerung nicht hinterher kommt. Ein weiteres Geheimnis gelüftet...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 15 Dezember 2018, 10:35:50
Habe jetzt unerwartet einen Pixoo hier. War ein Geschenk, wobei ich denke, meine Freundin hat sich selber beschenkt  :P

Jedenfalls bis auf dem Rahmen, ist die Größe natürlich super. Mittlerweile mögen wir 2 uns. Tests habe ich schon gemacht,
Plain und Raw funktioniert. Baugleich zur Evo, nur ohne Lautsprecher. Auf dem ersten Blick in der App nur bei den Spielen
beschnitten, da er weniger Tasten hat. Einmal On/Off und einmal eine Taste zum durchschalten der Funktionen sind vorhanden.

Ein kleines unschönes Problem hab ich im Moment bei der Bluetoothverbindung. Das Display ist dauerdisconnected,
erst beim senden per SPP connected es zur Übertragung und disconnected danach. Deshalb pop das Bluetoothsymbol
jedesmal auf beim senden.

Der Pixoo hat nur SPP als UUID, welches vielleicht ein Problem darstellt in Bezug auf eine dauerhafte Verbindung, da kein Audiokanal simultan zur
Verfügung steht.

root@raspberrypi:/opt/fhem/divoompixoo# bluetoothctl
[NEW] Controller B8:27:EB:63:2B:79 raspberrypi [default]
[NEW] Device 11:75:58:FD:4C:CC Pixoo
[NEW] Device 11:75:68:C9:7D:36 TimeBox-Evo-audio
[bluetooth]# info 11:75:58:FD:4C:CC
Device 11:75:58:FD:4C:CC
        Name: Pixoo
        Alias: Pixoo
        Class: 0x040804
        Paired: yes
        Trusted: yes
        Blocked: no
        Connected: no
        LegacyPairing: no
        UUID: Serial Port               (00001101-0000-1000-8000-00805f9b34fb)
[bluetooth]#

Normal trage ich 2 Befehle in die rc.local um vernünftig zu connecten.

echo -e "connect 11:75:58:FD:4C:CC" | bluetoothctl # Pixoo
#sleep 5
rfcomm bind 0 11:75:58:FD:4C:CC 1 # Pixoo

Nach vielen Tests. Trage ich nur das Connectcommand ein, ist der Rahmen connected. Rfcomm funktioniert aber nicht.
Trage ich das Connectcommand + Rfcommcommand ein, ist er nicht connected aber Rfcomm funktioniert.
Nur Rfcommcommand ist klar, funktioniert aber nicht dauerhaft connected.

In deinem Script habe ich mal

disconnectDivoom();
weggelassen. Half auch nicht. Code lief aber vernünftig durch, wenn auch mit disconnect.

Damit es funktioniert, müsste eine dauerhafte SPP/Rfcomm-Verbindung hergestellt werden.
Vielleicht liegt es auch am PiBluetooth...

edit:

root@raspberrypi:/opt/fhem/divoompixoo# rfcomm connect hci0 11:75:58:FD:4C:CC
Connected /dev/rfcomm0 to 11:75:58:FD:4C:CC on channel 1
Press CTRL-C for hangup

So hält Rfcomm anscheinend die Verbindung. Mal sehen, bin wohl auf dem richtigen Weg.

edit2:

Starte ich den Pi mit diesem Befehl in der rc.local

rfcomm connect hci0 11:75:58:FD:4C:CC
Habe ich eine bestehende Verbindung. Schaue ich mit sdptool, bekomme ich sofort Infos, ohne ein PopBluetoothsymbol im Display.

Rfcomm liefert dann

oot@raspberrypi:/opt/fhem/divoompixoo# rfcomm
rfcomm0: B8:27:EB:63:2B:79 -> 11:75:58:FD:4C:CC channel 1 connected [reuse-dlc release-on-hup tty-attached]
root@raspberrypi:/opt/fhem/divoompixoo#

Leidert klappt dann wieder kein senden mit deinem Script.

edit3:

Auch ein Versuch den Pixoo mit Infos der Timebox zu faken hat nix gebracht. Hatte dazu

/var/lib/bluetooth/MAC_PI/MAC_Pixoo/info
geändert. BlueZ hatte ich auch noch geupdatet auf 4.48. Außerdem hätte ich gernen noch 5.50 getestet.
Leider is meine Speicherkarte fast am Ende. Wird Zeit die 2GB im Zero zu kicken :-)

Jedenfalls, Hoffung habe ich keine mehr. Ist wohl einfach "Device" abhängig. Stört auch fast garnicht, aber
oft möchte man nur, das es funktioniert  ;D
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 Januar 2019, 15:44:11
@mumpitzstuff

Frohes Neues noch  ;D

@all

Die TimeboxEvo gibt es gerade in Spanien für ca. 40€

https://www.amazon.es/dp/B07HYN7YQ3
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 25 April 2019, 13:10:12
https://github.com/johsam/timebox-evo-rest (https://github.com/johsam/timebox-evo-rest)

Wenn du Lust hast, kannst ja hier mal rein sehen, wie dort die Bilder im Vergleich zu meinem Script encoded werden. Vielleicht klappt das ja dort besser und ich kann meine Routine fixen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 April 2019, 22:11:36
Ich habe mich daran probiert und bekomme 'Invalid syntax'. Hab dazu jetzt einen
Fehlerbericht bei johsam eröffnet. Alle Abhängigkeiten habe ich meiner Meinung
nach auch installiert.

edit:

ahhh vergiss es. Habe was falsch gemacht. habe python anstatt python3 geschrieben...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 26 April 2019, 18:10:08
So ein Stück weiter, das Webinterface läuft. Jetzt noch die Bluetoothconnection richten...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 26 April 2019, 20:36:02
interessant wäre wie die Nachricht bei einem Bild aussieht das mit meiner Funktion nicht funktioniert. kann man das nicht schon sehen, ohne das die Nachricht an das Gerät geschickt wird? Hast du vielleicht ein solches Bild zur Hand?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 26 April 2019, 21:57:01
So ein Bild kann ich raussuchen. Schaue nach.

So, es läuft. Habe die Bluetoothconnection von Python sockets auf PyBluez umgestellt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 26 April 2019, 22:55:47
So, Testpics. Und zwar hatte ich in der App einen Runningtext erstellt,
welchen ich auf meinem Handy als Gif gespeichert habe. Konvertiert wurden alle Bilder mit IrfanView.

Im Anhang sind ein paar (nicht alle) der nicht funktionierenden Pics, welche aber mit tb-evo-rest.py
korrekt dargestellt werden.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 26 April 2019, 23:12:37
Und noch ein gutes Beispiel für Pixelsalat von dir. Post #196. Auch das funktioniert mit tb-evo-rest.py
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 April 2019, 02:14:49
Naja ich müsste das jetzt erst mühsam zum laufen kriegen. Kannst du mir bitte ein nicht funktionierendes Bild raus suchen. Von dem die raw message mit meinem Script erstellen und dann mit dem python script?

    def send_raw(self, bts):
        # print('Send:', binascii.hexlify(bts))
        self.sock.send(bts)
        ret = self.sock.recv(256)
        logging.info('Received: 0x' + str(binascii.hexlify(ret), 'utf-8'))

Hier solltest du das print rein nehmen können und siehst wie bei mir die rohdaten. Ich würde gern erst mal die rohdaten nebeneinander legen, wahrscheinlich sieht man da gleich was.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 April 2019, 02:44:34
Ich glaube ich habe schon was gefunden:

#$bits = ($counter / 2) + ($counter % 2);
  $bits = int((log($counter) / log(2)) + 0.5);
  $bits = 1 if (0 == $bits);

Ersetz mal den Code in meinem Script. Vielleicht wars das dann schon.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 27 April 2019, 09:04:47
Morgen, musste gestern nochmal ein Reinstall machen, da ich Bluetoothprobleme hatte.
Dabei habe ich das "print" für Rawmessages übersehen...

hier die rawmessage von dem Bild aus Post #196

2019-04-27 08:00:03 I [histpixmap:86] Drawing mode ModeType.image
Send: b'01e40044000a0a04aa2d0000000012000000ffffff0000ff0000f8ffff00f8f800dddd00f8ff00ddff00db0000fafffff70000ff0505dc0303dc0000f70404ff0404fffff80000000008000031c60000000100000000008000000000002985000080000000004829a51000000001004000000000024000000052000180804200000080628a29c5145300000080624c31a6185300100000620a2004144300000000400a0000940300000000004829a5a0a456000030c00029e5a4e6da0280b5d7180000a8d4920200c00601000004b554140000060000000000000000000000000000000000503702'
2019-04-27 08:00:03 I [timebox:30] Received: 0x010600044455f5980102
2019-04-27 08:00:03 I [web:2242] 200 POST /evo/upload (192.168.178.34) 382.98ms

Das funktioniert leider nicht.

#$bits = ($counter / 2) + ($counter % 2);
  $bits = int((log($counter) / log(2)) + 0.5);
  $bits = 1 if (0 == $bits);
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 27 April 2019, 10:04:18
So, hier das Bild mit deinem Script.

root@pi-zero-w1:/opt/fhem/oldTest# perl setPictureTbEvo.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 18)
Create RFCOMM client (11:75:58:FD:4C:CC with port 1)...

done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000001000203303002000000000000200000054450000020000405555040000010004000040000100400504405004000050565665650500005066655666052000405640046504000000540000750000000040555598ba01000c0c5475d9de0bc0fdcd00009a9d0a00d0000000a1ab2100c00000000000000000000000000000
Generated raw command: 01C40044000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000001000203303002000000000000200000054450000020000405555040000010004000040000100400504405004000050565665650500005066655666052000405640046504000000540000750000000040555598ba01000c0c5475d9de0bc0fdcd00009a9d0a00d0000000a1ab2100c00000000000000000000000000000B43102
Send raw command: 01C40044000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000001000203303002000000000000200000054450000020000405555040000010004000040000100400504405004000050565665650500005066655666052000405640046504000000540000750000000040555598ba01000c0c5475d9de0bc0fdcd00009a9d0a00d0000000a1ab2100c00000000000000000000000000000B43102
Device answer: 01
done

root@pi-zero-w1:/opt/fhem/oldTest#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 April 2019, 13:56:33
Ist das schon mit der Änderung oder ohne?

Ich schaue mir das in jedem Fall genauer an, kann ja nichts großes sein.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 27 April 2019, 15:15:53
Ja genau, mit der Änderung.

Hier nochmal Orig und Änderung als Vergleich.

$bits = ($counter / 2) + ($counter % 2);
  #$bits = int((log($counter) / log(2)) + 0.5);
  #$bits = 1 if (0 == $bits);

root@pi-zero-w1:/opt/fhem/oldTest# root@pi-zero-w1:/opt/fhem/oldTest# perl setPictureTbEvo.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 18)
Create RFCOMM client (11:75:58:FD:4C:CC with port 1)...

done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF8000000000000000100000002030303000000000200000000000000000000020000000000000004050504000000000200000000000004050505050400000000000100000004000000000000040000010000000004050004000004000504000000000000050605060505060506050000000000000506060506060506060500000200000004060500040400050604000000000000000405000000000507000000000000000000040505050508090a0b010000000c000c0004050507090d0e0d0b00000c0d0f0d0c000000000a090d090a000000100d100000000000010a0b0a11020000000c00000000000000000000000000000000000000000000000000000000
Generated raw command: 01440144000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF8000000000000000100000002030303000000000200000000000000000000020000000000000004050504000000000200000000000004050505050400000000000100000004000000000000040000010000000004050004000004000504000000000000050605060505060506050000000000000506060506060506060500000200000004060500040400050604000000000000000405000000000507000000000000000000040505050508090a0b010000000c000c0004050507090d0e0d0b00000c0d0f0d0c000000000a090d090a000000100d100000000000010a0b0a11020000000c000000000000000000000000000000000000000000000000000000001D1F02
Send raw command: 01440144000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF8000000000000000100000002030303000000000200000000000000000000020000000000000004050504000000000200000000000004050505050400000000000100000004000000000000040000010000000004050004000004000504000000000000050605060505060506050000000000000506060506060506060500000200000004060500040400050604000000000000000405000000000507000000000000000000040505050508090a0b010000000c000c0004050507090d0e0d0b00000c0d0f0d0c000000000a090d090a000000100d100000000000010a0b0a11020000000c000000000000000000000000000000000000000000000000000000001D1F02
Device answer: 01
done

root@pi-zero-w1:/opt/fhem/oldTest#



#$bits = ($counter / 2) + ($counter % 2);
  $bits = int((log($counter) / log(2)) + 0.5);
  $bits = 1 if (0 == $bits);

root@pi-zero-w1:/opt/fhem/oldTest# perl setPictureTbEvo.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 18)
Create RFCOMM client (11:75:58:FD:4C:CC with port 1)...

done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000001000203303002000000000000200000054450000020000405555040000010004000040000100400504405004000050565665650500005066655666052000405640046504000000540000750000000040555598ba01000c0c5475d9de0bc0fdcd00009a9d0a00d0000000a1ab2100c00000000000000000000000000000
Generated raw command: 01C40044000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000001000203303002000000000000200000054450000020000405555040000010004000040000100400504405004000050565665650500005066655666052000405640046504000000540000750000000040555598ba01000c0c5475d9de0bc0fdcd00009a9d0a00d0000000a1ab2100c00000000000000000000000000000B43102
Send raw command: 01C40044000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000001000203303002000000000000200000054450000020000405555040000010004000040000100400504405004000050565665650500005066655666052000405640046504000000540000750000000040555598ba01000c0c5475d9de0bc0fdcd00009a9d0a00d0000000a1ab2100c00000000000000000000000000000B43102
Device answer: 01
done

root@pi-zero-w1:/opt/fhem/oldTest#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 April 2019, 21:47:06
Probier mal bitte das hier zu verwenden:


Diese Zeile ersetzen:
$bits = ($counter / 2) + ($counter % 2);
mit:
  $_ = log($counter) / log(2);
  $bits = ($_ == int($_)) ? $_ : int($_ + 1);
  $bits = 1 if (0 == $bits);
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 27 April 2019, 21:52:16
Super, das war es  :)

root@pi-zero-w1:/opt/fhem/oldTest# perl setPictureTbEvo.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 18)
Create RFCOMM client (11:75:58:FD:4C:CC with port 1)...

done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000000008000031c60000000100000000008000000000002985000080000000004829a51000000001004000000000024000000052000180804200000080628a29c5145300000080624c31a6185300100000620a2004144300000000400a0000940300000000004829a5a0a456000030c00029e5a4e6da0280b5d7180000a8d4920200c00601000004b554140000060000000000000000000000000000000000
Generated raw command: 01E40044000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000000008000031c60000000100000000008000000000002985000080000000004829a51000000001004000000000024000000052000180804200000080628a29c5145300000080624c31a6185300100000620a2004144300000000400a0000940300000000004829a5a0a456000030c00029e5a4e6da0280b5d7180000a8d4920200c00601000004b554140000060000000000000000000000000000000000503702
Send raw command: 01E40044000A0A04AA2D0000000012000000FFFFFF0000FF0000F8FFFF00F8F800DDDD00F8FF00DDFF00DB0000FAFFFFF70000FF0505DC0303DC0000F70404FF0404FFFFF80000000008000031c60000000100000000008000000000002985000080000000004829a51000000001004000000000024000000052000180804200000080628a29c5145300000080624c31a6185300100000620a2004144300000000400a0000940300000000004829a5a0a456000030c00029e5a4e6da0280b5d7180000a8d4920200c00601000004b554140000060000000000000000000000000000000000503702
Device answer: 01
done

root@pi-zero-w1:/opt/fhem/oldTest#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 27 April 2019, 21:55:47
Habe bei den anderen noch Pixelsalat. Melde mich nachher nochmal.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 April 2019, 21:59:37
Habs oben noch mal berichtigt. Jetzt sollte es 100% sein.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 27 April 2019, 23:56:05
edit:

Erstes Statement gelöscht.
Alles ok mit der letzten Änderung. Hatte was übersehen. Top :)

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 27 April 2019, 23:59:22
ah okay super!
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 April 2019, 00:00:05
Du warst schneller, habe eben nochmal mein Vorpost editiert :)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 April 2019, 01:24:42
So, ich habe diverse Gif's aus der DivoomApp probiert. Alle funktionieren jetzt nach dem Konvertieren korrekt.
Deshalb habe ich einen kleinen Guide im ersten Post ganz unten unter

Gif's aus der DivoomApp zu Einzelbildern konvertieren

hinzugefügt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 April 2019, 16:55:58
Im ersten Post Convert&Resize im Terminal hinzugefügt. Schneller gehts nimma  :D

@mumpitzstuff
Im Bezug auf ImageMagick, wie findest du die perlExtension?

https://metacpan.org/pod/release/JCRISTY/PerlMagick-5.55/Magick.pm
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 April 2019, 17:34:35
Wie meinst du das? Kann man mit Sicherheit verwenden wenn es funktioniert.

Möchtest du damit per Perl das Gif und png umwandeln?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 April 2019, 17:40:06
Als on-the-fly Konverter für dein script. Damit könnten wir dein Script dann mit Gif's füttern
anstatt einzelnen Bildern.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 April 2019, 18:04:51
Mit imager kann man anscheinend mit read_multi() alle Bilder eines GIFs einlesen und kann die dann in einer Schleife hochladen. Sieht im ersten Moment nicht so schwierig aus das zu integrieren.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 April 2019, 18:16:15
Klingt gut. Wenn mit imager auch ein Resize möglich ist, ansonsten werden die
Bilder blurred. Die Gifs von Divoom haben alle die Größe 384x384.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 April 2019, 18:38:10
Bei der tb evo Routine ist glaub ein resize drin. Kannst ja m aß l ein png in der Größe nehmen und gucken ob was brauchbares raus kommt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 April 2019, 19:16:42
Ja, das es resized hatte ich schon entdeckt. Leider blurred es.
Im Anhang das orig BMP extracted. Hier sehe ich gerade, das
hat 240x240 Pixel. Sieht so aus, als wenn die Gif's unterschiedliche
Größen haben. Oder sie wurden mit der Zeit geändert. Und einmal
das blurred Ergebnis abfotografiert. 
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 April 2019, 21:45:37
Sieht scheisse aus. Mich wundert jetzt nur, das imagemagick das resize so viel besser machen soll.

Wie auch immer, ich brauche halt irgendwas in Perl, mit dem ich ein resize machen kann und dann die Farbwerte aus dem Bild extrahieren kann. Ich würde jetzt ungern erst die Datei öffnen, dann resize machen, wieder speichern, wieder öffnen und dann in das timebox format konvertieren. Ich brauche halt was, wo ich das einmal laden kann, resize machen kann und dann direkt konvertieren kann.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 April 2019, 22:00:13
https://metacpan.org/release/GD (https://metacpan.org/release/GD)

Vielleicht geht damit was. Kannst du mir mal bitte ein großes PNG zur Verfügung stellen und dann auch die Datei nach dem Resize mit ImageMagick. Dann guck ich mir das mal im Vergleich zu GD an. Vielleicht liefert das ja ähnliche Resultate.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 April 2019, 17:27:13
So,

im Rar befinden sich folgende Dateien,

- original Gif.
- extrahierte PNG's mit Irvanview in Originalgröße 240x240.
- extrahierte und verkleinerte PNG's mit ImageMagick direkt aus der GIF.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 01 Mai 2019, 01:36:58
#!/usr/bin/perl

use GD;

sub resize {
    my ($inputfile, $width, $height, $outputfile) = @_;
    GD::Image->trueColor(1);
    my $gdo = GD::Image->new($inputfile);

    {
        my $k_h = $height / $gdo->height;
        my $k_w = $width / $gdo->width;
        my $k   = ($k_h < $k_w ? $k_h : $k_w);
        $height = int($gdo->height * $k);
        $width  = int($gdo->width * $k);
    }

    my $image = GD::Image->new($width, $height);
    $image->alphaBlending(0);
    $image->saveAlpha(1);
    $image->copyResampled($gdo, 0, 0, 0, 0, $width, $height, $gdo->width, $gdo->height);

    open my $FH, '>', $outputfile;
    binmode $FH;
    print {$FH} $image->png;
    close $FH;
}

resize('helloween.png', 16, 16, 'test.png');

Probier das mal bitte aus. Sieht für mich noch besser aus als mit ImageMagick.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Mai 2019, 16:10:19
Resize mit GD klappt wunderbar  :)

Cpan wollte nich, daher

sudo apt-get install libgd-graph-perl
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 01 Mai 2019, 16:57:02
Okay. Ich versuche mal das extrahieren der Pixel und das einlesen der GIFs auch noch hinzukriegen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 01 Mai 2019, 18:56:59
Resize mit GD klappt wunderbar  :)

Cpan wollte nich, daher

sudo apt-get install libgd-graph-perl

Ich hätte gedacht das "libgd-perl" das Richtige Paket ist. Aber wenn es auch so geht...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 02 Mai 2019, 23:29:26
Kannst du mal bitte prüfen, ob das Umwandeln eines Bildes für die TB Evo hiermit klappt?

Ich habe erst einmal nur die Evo Funktion angepasst.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 03 Mai 2019, 00:18:53
Tippitoppi. Habe 2 verschiedene Größen getestet. Werden ohne Probleme resized und gesendet.

root@pi-zero-w1:/opt/fhem/divoom2# perl setdSizes.pl
Image: 384x384
Image: 384x384
Image: 384x384
Image: 384x384
Image: 384x384
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Image: 240x240
Create RFCOMM client (11:75:58:FD:4C:CC with port 1)...

done

Send raw command: 010d004500010001000000ff0000530102
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a4120000229224150000a29224150000a2962415000022dbb615000012d9b61200009248521200009224491200009224491200
Generated raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a4120000229224150000a29224150000a2962415000022dbb615000012d9b61200009248521200009224491200009224491200531C02
Send raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a4120000229224150000a29224150000a2962415000022dbb615000012d9b61200009248521200009224491200009224491200531C02
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000007000000EAEAEAB4B4B4343840EA9C0054525200EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291ad12000022b26d15000022b26d15000022b26d15000022dbb615000012d9b61200009248521200009224491200009224491200
Generated raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840EA9C0054525200EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291ad12000022b26d15000022b26d15000022b26d15000022dbb615000012d9b61200009248521200009224491200009224491200931C02
Send raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840EA9C0054525200EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291ad12000022b26d15000022b26d15000022b26d15000022dbb615000012d9b61200009248521200009224491200009224491200931C02
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a412000022b22415000022b62d15000022b66c15000022dbb615000012d9b61200009248521200009224491200009224491200
Generated raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a412000022b22415000022b62d15000022b66c15000022dbb615000012d9b61200009248521200009224491200009224491200081C02
Send raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a412000022b22415000022b62d15000022b66c15000022dbb615000012d9b61200009248521200009224491200009224491200081C02
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a412000022922415000022922415000022b62515000022dbb615000012d9b61200009248521200009224491200009224491200
Generated raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a412000022922415000022922415000022b62515000022dbb615000012d9b61200009248521200009224491200009224491200741B02
Send raw command: 01830044000A0A04AA2D0000000007000000EAEAEAB4B4B4343840545252EA9C0000EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a412000022922415000022922415000022b62515000022dbb615000012d9b61200009248521200009224491200009224491200741B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D0000000006000000EAEAEAB4B4B434384054525200EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a4120000229224150000229224150000229224150000a2b66d15000012b5ad1200009248521200009224491200009224491200
Generated raw command: 01800044000A0A04AA2D0000000006000000EAEAEAB4B4B434384054525200EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a4120000229224150000229224150000229224150000a2b66d15000012b5ad1200009248521200009224491200009224491200AA1902
Send raw command: 01800044000A0A04AA2D0000000006000000EAEAEAB4B4B434384054525200EAEA000000000000000000000000009224491200002265011000009224011000009224491200009248521200001291a4120000229224150000229224150000229224150000a2b66d15000012b5ad1200009248521200009224491200009224491200AA1902
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0E02600E03570E024B07003800000006003007003412037213027D1A0697DEDEDEDD0000080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546499aa490441445545999949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444c6
Generated raw command: 01B50044000A0A04AA2D000000000D0E02600E03570E024B07003800000006003007003412037213027D1A0697DEDEDEDD0000080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546499aa490441445545999949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444c6F12F02
Send raw command: 01B50044000A0A04AA2D000000000D0E02600E03570E024B07003800000006003007003412037213027D1A0697DEDEDEDD0000080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546499aa490441445545999949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444c6F12F02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEC205050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443354888848444444444377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEC205050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443354888848444444444377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5C52B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEC205050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443354888848444444444377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5C52B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000F0A01450A023C0A003B0600300000000700340A00530E0260100269DEDEDEA809090A004E0A00460B0141080138000000002143445366464400214444544744440041443454888848004444345388994800a4a43453988948004444345398894800444434548899480441444353888848444444345377774744444434536666464644443453000040bb41443453111141cc444444532d22422244444453333343334444445355554545444444e5
Generated raw command: 01BB0044000A0A04AA2D000000000F0A01450A023C0A003B0600300000000700340A00530E0260100269DEDEDEA809090A004E0A00460B0141080138000000002143445366464400214444544744440041443454888848004444345388994800a4a43453988948004444345398894800444434548899480441444353888848444444345377774744444434536666464644443453000040bb41443453111141cc444444532d22422244444453333343334444445355554545444444e59A2D02
Send raw command: 01BB0044000A0A04AA2D000000000F0A01450A023C0A003B0600300000000700340A00530E0260100269DEDEDEA809090A004E0A00460B0141080138000000002143445366464400214444544744440041443454888848004444345388994800a4a43453988948004444345398894800444434548899480441444353888848444444345377774744444434536666464644443453000040bb41443453111141cc444444532d22422244444453333343334444445355554545444444e59A2D02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8D06060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443453888848444444445377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8D06060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443453888848444444445377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5A22B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8D06060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443453888848444444445377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5A22B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE5E04040B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE5E04040B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c55E2B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE5E04040B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c55E2B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0C00520D01490700390000000600300700340F026113046D15038DDEDEDE7805050A004E080138000000002132335466363306213333533733330631334353888838063333435488993806a3a3435498893806333343549889380633334354889938b331334454888838333333435477773733333343546666363633334354000030003133435411113100333333542222322233333354444434443333335455553535333333c5
Generated raw command: 01B50044000A0A04AA2D000000000D0C00520D01490700390000000600300700340F026113046D15038DDEDEDE7805050A004E080138000000002132335466363306213333533733330631334353888838063333435488993806a3a3435498893806333343549889380633334354889938b331334454888838333333435477773733333343546666363633334354000030003133435411113100333333542222322233333354444434443333335455553535333333c5692902
Send raw command: 01B50044000A0A04AA2D000000000D0C00520D01490700390000000600300700340F026113046D15038DDEDEDE7805050A004E080138000000002132335466363306213333533733330631334353888838063333435488993806a3a3435498893806333343549889380633334354889938b331334454888838333333435477773733333343546666363633334354000030003133435411113100333333542222322233333354444434443333335455553535333333c5692902
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8A05050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8A05050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c58C2B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8A05050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c58C2B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEA703030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480444443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEA703030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480444443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5A62B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEA703030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480444443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5A62B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000E0E015D0B00510C004909013F00000006003007003410026E14047C170494DEDEDECE06060A004E080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49474444546599aa49c444445565999949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444d6
Generated raw command: 01B80044000A0A04AA2D000000000E0E015D0B00510C004909013F00000006003007003410026E14047C170494DEDEDECE06060A004E080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49474444546599aa49c444445565999949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444d6653102
Send raw command: 01B80044000A0A04AA2D000000000E0E015D0B00510C004909013F00000006003007003410026E14047C170494DEDEDECE06060A004E080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49474444546599aa49c444445565999949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444d6653102
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEB708080B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899484443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEB708080B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899484443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5FF2B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEB708080B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899484443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5FF2B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000B0A00460A003B0600300000000700340A004E0C005E110369DEDEDE9B040408013800000000213233425535330521333343363333053133234377773705333323427788370593932342877837053333234287783705333323427788370331332242777737333333234266663633333323425555353633332342000030553133234211113100333333422222322233333342222232223333334244443434333333a4
Generated raw command: 01AF0044000A0A04AA2D000000000B0A00460A003B0600300000000700340A004E0C005E110369DEDEDE9B040408013800000000213233425535330521333343363333053133234377773705333323427788370593932342877837053333234287783705333323427788370331332242777737333333234266663633333323425555353633332342000030553133234211113100333333422222322233333342222232223333334244443434333333a4C92302
Send raw command: 01AF0044000A0A04AA2D000000000B0A00460A003B0600300000000700340A004E0C005E110369DEDEDE9B040408013800000000213233425535330521333343363333053133234377773705333323427788370593932342877837053333234287783705333323427788370331332242777737333333234266663633333323425555353633332342000030553133234211113100333333422222322233333342222232223333334244443434333333a4C92302
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8003030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894406444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8003030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894406444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c57A2B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8003030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894406444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c57A2B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D1101690E005B0C004A09004100000006003007003414037B1603891A069BDEDEDE630303080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546599aa440441445565994949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444c6
Generated raw command: 01B50044000A0A04AA2D000000000D1101690E005B0C004A09004100000006003007003414037B1603891A069BDEDEDE630303080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546599aa440441445565994949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444c67A2F02
Send raw command: 01B50044000A0A04AA2D000000000D1101690E005B0C004A09004100000006003007003414037B1603891A069BDEDEDE630303080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546599aa440441445565994949444444546588884844444454657777474744445465000040004144546511114111444444652222422244444465333343334444446566664646444444c67A2F02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8203030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398844406444434538849480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8203030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398844406444434538849480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5272B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8203030B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398844406444434538849480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5272B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEA806060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538894480443443353484848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEA806060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538894480443443353484848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5272B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEA806060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538894480443443353484848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5272B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDED20B0B0B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345394844806444434534899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDED20B0B0B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345394844806444434534899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5972B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDED20B0B0B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345394844806444434534899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5972B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEAE09090B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538499480443443353488848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEAE09090B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538499480443443353488848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5742B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEAE09090B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538499480443443353488848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5742B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE9306060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345394894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE9306060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345394894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5932B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE9306060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345394894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5932B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000B0A00460A003B0600300000000700340A004E0C005E12046CDEDEDE71040408013800000000213233425535330521333343363333053133234377773705333323427788370593932342877837053333234287783705333323427788370331332242777737333333234266663633333323425555353533332342000030053133234211113100333333422222321133333342222232223333334244443434333333a4
Generated raw command: 01AF0044000A0A04AA2D000000000B0A00460A003B0600300000000700340A004E0C005E12046CDEDEDE71040408013800000000213233425535330521333343363333053133234377773705333323427788370593932342877837053333234287783705333323427788370331332242777737333333234266663633333323425555353533332342000030053133234211113100333333422222321133333342222232223333334244443434333333a4422302
Send raw command: 01AF0044000A0A04AA2D000000000B0A00460A003B0600300000000700340A004E0C005E12046CDEDEDE71040408013800000000213233425535330521333343363333053133234377773705333323427788370593932342877837053333234287783705333323427788370331332242777737333333234266663633333323425555353533332342000030053133234211113100333333422222321133333342222232223333334244443434333333a4422302
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE4E02020B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE4E02020B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c54A2B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE4E02020B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c54A2B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000E1405701104630F03580D024B00000006003007003416067D1704921B06A2DEDEDE6C03030B0143080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546599aa4904414455659999494444445465888848444444546577774747444454650000400041445465111141114444446522224222444444653333433344444465cccc4c4c444444d6
Generated raw command: 01B80044000A0A04AA2D000000000E1405701104630F03580D024B00000006003007003416067D1704921B06A2DEDEDE6C03030B0143080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546599aa4904414455659999494444445465888848444444546577774747444454650000400041445465111141114444446522224222444444653333433344444465cccc4c4c444444d66E3102
Send raw command: 01B80044000A0A04AA2D000000000E1405701104630F03580D024B00000006003007003416067D1704921B06A2DEDEDE6C03030B0143080138000000002143446577474407214444644844440741445464999949074444546599aa4907b4b45465a99a490744445465a99a49074444546599aa4904414455659999494444445465888848444444546577774747444454650000400041445465111141114444446522224222444444653333433344444465cccc4c4c444444d66E3102
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8005050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8005050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5822B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE8005050B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5822B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE9706060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE9706060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c59B2B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDE9706060B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c59B2B02
Device answer: 01
done

Send plain command: 44000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEDD00000B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5
Generated raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEDD00000B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5D52B02
Send raw command: 01B50044000A0A04AA2D000000000D0A004E0A00460A003B0600300000000700340C005E12046C14057CDEDEDEDD00000B0141080138000000002143445366464406214444544744440641443454888848064444345388994806a4a43453988948064444345398894806444434538899480443443353888848444444345377774744444434536666464644443453000040004344345311114111444444532b22422244444453333343334444445355554545444444c5D52B02
Device answer: 01
done

root@pi-zero-w1:/opt/fhem/divoom2#
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 07 Mai 2019, 02:06:06
Bitte mal testen.

#!/usr/bin/perl
require "./divoom.pl";

my $i;
my @png = readAnimatedGif('helloween.gif');

# load picture
for ($i = 0; $i < scalar(@png); $i++)
{
  $png[$i] = convertImageTBEVO($png[$i], 16);
}

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  # set clock
  sendPlain('4500', 5);
  for ($i = 0; $i < scalar(@png); $i++)
  {
    # set picture
    sendPlain('44000A0A04AA2D00000000'.$png[$i], 2, 0);
  }
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 07 Mai 2019, 18:44:22
Mh, es meckert. So wie ich das sehe, liest du das Gif mit GD ein und pushed es nach Imager.
Da hapert irgendwas mit GD, sodass Imager den Dienst quittiert, weil das Gif noch raw ankommt?

root@pi-zero-w1:/opt/fhem/divoom2# perl setGif.pl
Can't read image /opt/fhem/divoom2/dSizes/Helloween.gif (format 'gif' not supported - formats bmp, ico, jpeg, png, pnm, raw, sgi, tga available for reading)
root@pi-zero-w1:/opt/fhem/divoom2#

edit:

Ne, du nutzt nur Imager.


edit2:

Sieht so aus, das man Imager Gif als Packet beibringen kann? Install läuft gerade per

cpan Imager::File::GIF
Mal sehen, was passiert.

edit3:
cpan is echt mist. Soll ich selber bauen. Aber, ich habs per apt-get gefunden und Imager nochmal installiert.
Siehe da, Gif senden läuft :)

apt-get install libimager-perl
edit4:
Habe die Anhängigkeiten im ersten Post geändert.

edit5:
Geschwindigkeitstweak auf 0.1 läuft auch schnell und ohne Probleme durch.

sendPlain('44000A0A04AA2D00000000'.$png[$i], 0.1, 0);

edit6:
Auch unterschiedlich große Gif's verwurstet das Script :)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 07 Mai 2019, 21:46:58
Ich schreib die Abhängigkeit mal oben mit ins Script rein, dann ist die Installation leichter. GD only zu verwenden ist daran gescheitert, das man damit zwar animated gifs erzeugen, aber keine einlesen kann. Habe ewig rum probiert, weil ich es nicht glauben konnte. Deshalb lese ich das jetzt mit Imager ein und wandle die Frames in png um und schiebe die als Variable der bereits existierenden Convert Routine zu.
Freut mich das es klappt.

Falls ich mal viel Zeit und Muße habe, kann ich ja auch noch mal die Animation angehen...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 07 Mai 2019, 22:01:39
Ah ok, alles klar danke.
Siehst du vielleicht eine Übergangsmöglichkeit, die extrahierten Pics aus dem Gif in einer Schleife auszuführen?
Vielleicht mit einem einfachen setzbaren doit('10times') or doit('360sec.') ?. Der Zero an dem der Pixoo hängt,
hat sonst nichts zu tun  ;D

edit1:
Den 'for loop' mehrmals setzten is eine Möglichkeit.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 07 Mai 2019, 23:15:09
Ja. Einfach um die for loop eine weitere drum legen.

#!/usr/bin/perl
require "./divoom.pl";

my $i;
my @png = readAnimatedGif('helloween.gif');

# load picture
for ($i = 0; $i < scalar(@png); $i++)
{
  $png[$i] = convertImageTBEVO($png[$i], 16);
}

if (connectDivoom('11:75:58:4F:A1:CB'))
{
  # set clock
  sendPlain('4500', 5);
  for (my $n = 0; $n < 10; $n++)
  {
    for ($i = 0; $i < scalar(@png); $i++)
    {
      # set picture
      sendPlain('44000A0A04AA2D00000000'.$png[$i], 2, 0);
    }
  }
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 07 Mai 2019, 23:44:46
Das mit dem Gif extrahieren is echt super. Runningtext erstellt. Da schruppen mal eben 167pics durch.
Erspart vieeeeel Arbeit. Ganz dickes DANKE  ;D

root@pi-zero-w1:/opt/fhem/divoom2# perl setGif.pl
Frame 0: 384x384
Frame 1: 384x384
Frame 2: 384x384
Frame 3: 384x384
Frame 4: 384x384
Frame 5: 384x384
Frame 6: 384x384
Frame 7: 384x384
Frame 8: 384x384
Frame 9: 384x384
Frame 10: 384x384
Frame 11: 384x384
Frame 12: 384x384
Frame 13: 384x384
Frame 14: 384x384
Frame 15: 384x384
Frame 16: 384x384
Frame 17: 384x384
Frame 18: 384x384
Frame 19: 384x384
Frame 20: 384x384
Frame 21: 384x384
Frame 22: 384x384
Frame 23: 384x384
Frame 24: 384x384
Frame 25: 384x384
Frame 26: 384x384
Frame 27: 384x384
Frame 28: 384x384
Frame 29: 384x384
Frame 30: 384x384
Frame 31: 384x384
Frame 32: 384x384
Frame 33: 384x384
Frame 34: 384x384
Frame 35: 384x384
Frame 36: 384x384
Frame 37: 384x384
Frame 38: 384x384
Frame 39: 384x384
Frame 40: 384x384
Frame 41: 384x384
Frame 42: 384x384
Frame 43: 384x384
Frame 44: 384x384
Frame 45: 384x384
Frame 46: 384x384
Frame 47: 384x384
Frame 48: 384x384
Frame 49: 384x384
Frame 50: 384x384
Frame 51: 384x384
Frame 52: 384x384
Frame 53: 384x384
Frame 54: 384x384
Frame 55: 384x384
Frame 56: 384x384
Frame 57: 384x384
Frame 58: 384x384
Frame 59: 384x384
Frame 60: 384x384
Frame 61: 384x384
Frame 62: 384x384
Frame 63: 384x384
Frame 64: 384x384
Frame 65: 384x384
Frame 66: 384x384
Frame 67: 384x384
Frame 68: 384x384
Frame 69: 384x384
Frame 70: 384x384
Frame 71: 384x384
Frame 72: 384x384
Frame 73: 384x384
Frame 74: 384x384
Frame 75: 384x384
Frame 76: 384x384
Frame 77: 384x384
Frame 78: 384x384
Frame 79: 384x384
Frame 80: 384x384
Frame 81: 384x384
Frame 82: 384x384
Frame 83: 384x384
Frame 84: 384x384
Frame 85: 384x384
Frame 86: 384x384
Frame 87: 384x384
Frame 88: 384x384
Frame 89: 384x384
Frame 90: 384x384
Frame 91: 384x384
Frame 92: 384x384
Frame 93: 384x384
Frame 94: 384x384
Frame 95: 384x384
Frame 96: 384x384
Frame 97: 384x384
Frame 98: 384x384
Frame 99: 384x384
Frame 100: 384x384
Frame 101: 384x384
Frame 102: 384x384
Frame 103: 384x384
Frame 104: 384x384
Frame 105: 384x384
Frame 106: 384x384
Frame 107: 384x384
Frame 108: 384x384
Frame 109: 384x384
Frame 110: 384x384
Frame 111: 384x384
Frame 112: 384x384
Frame 113: 384x384
Frame 114: 384x384
Frame 115: 384x384
Frame 116: 384x384
Frame 117: 384x384
Frame 118: 384x384
Frame 119: 384x384
Frame 120: 384x384
Frame 121: 384x384
Frame 122: 384x384
Frame 123: 384x384
Frame 124: 384x384
Frame 125: 384x384
Frame 126: 384x384
Frame 127: 384x384
Frame 128: 384x384
Frame 129: 384x384
Frame 130: 384x384
Frame 131: 384x384
Frame 132: 384x384
Frame 133: 384x384
Frame 134: 384x384
Frame 135: 384x384
Frame 136: 384x384
Frame 137: 384x384
Frame 138: 384x384
Frame 139: 384x384
Frame 140: 384x384
Frame 141: 384x384
Frame 142: 384x384
Frame 143: 384x384
Frame 144: 384x384
Frame 145: 384x384
Frame 146: 384x384
Frame 147: 384x384
Frame 148: 384x384
Frame 149: 384x384
Frame 150: 384x384
Frame 151: 384x384
Frame 152: 384x384
Frame 153: 384x384
Frame 154: 384x384
Frame 155: 384x384
Frame 156: 384x384
Frame 157: 384x384
Frame 158: 384x384
Frame 159: 384x384
Frame 160: 384x384
Frame 161: 384x384
Frame 162: 384x384
Frame 163: 384x384
Frame 164: 384x384
Frame 165: 384x384
Frame 166: 384x384
Frame 167: 384x384
Image: �PNG
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 19 Mai 2019, 14:09:21
Hallo Zusammen,
ich habe es auch Versucht mein Pixoo bei Fhem einzubinden. Jedoch scheitere ich momentan glaube ich an der Bluetooth verbindung.
Wenn ich die Befehle sende also zBsp. "perl ExampleAni.pl" erscheint bei meinem Pixoo nur das Bluetoothsymbol, aber sonnst passiert nix.
Wenn ich den Befehl  "systemctl status blue* " verwende, bekomme ich als  Error :
Failed to set privacy: Rejected(0x0b)
No cache for XX:XX:XX:XX:XX (die Mac des Pixoo)
GAP attribute not found
gap-profile profile accept failed fpr XX:XX:XX:XX:XX


Ich hoffe ihr könnt mir vielleicht weiter Helfen. (Ich benutze eine Pi mit Jessy und kann deshalb nicht Bluealsa installieren)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 19 Mai 2019, 14:48:09
Wenn am Pixoo das Bluetoothzeichen aufpop't, ist das ein gutes Zeichen.
Bei mir unter Stretch mit Bluealsa wird keine dauerhafte Kommunikation aufgebaut.
Das liegt wohl einfach daran, das Bluealsa keine dauerhafte Verbindung aufbauen
kann bei SPP-Only.
So connected das Script kurz und sendet die Daten.

Welche ExampleAni.pl benutzt du?
Außerdem musst du in der divoom.pl 2 Einstellungen anpassen.

# 0 = disable escape sequences (use it for devices like timebox evo)
# 1 = enable escape sequences (use it for devices like aurabox, timebox or timebox mini)
my $escaped = 0;

# the optional port parameter must be set to 1 for new devices like timebox evo
# default: port 4 for aurabox, timebox and timebox mini will be used
sub connectDivoom($;$)
{
  my $device = shift;
  my $port = shift;
  my $ret;
  my $success = 0;

  $port = 1 if (!defined($port));
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 19 Mai 2019, 17:17:28
Also ich benutze einmal nur deine Ordner., den den man von Dropbox runter läd. Und den von mumpitzstuff. Wenn ich deinen ausführe erhalte ich nur
ein bluetooth symbol und wenn ich den von mumpitzstuff ausführe Passier nichts.
Ja die Sachen habe ich im script von mumpitzstuff geändert.
Muss ich beide ordner ineinadner legen ? Oder Funktionieren die auch zusammen.
Komischer weiße erhalte ich auch nicht immer das bluetooth Symbol.
Zudem wenn ich den Befehl eingebe"sudo systemctl start blue* " erhalte ich nun nach einem reboot die Ausgabe. "Bluez-5.49.service inactiv und not-found".

Habe Zudem mal bluetoothctl wärend dem senden laufen lassen und das gibt immer aus. Device MAC Connected : yes und kurz drauf wieder no.
Die verbindun zwischen dem Pixoo und dem Pi wird anscheinend zu schnell getrennt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 19 Mai 2019, 20:59:16
Die Dropbox habe ich schon lange nicht mehr aktualisiert. Das ist noch für Aurabox/Timebox.
Probier mal den Anhang hier.

edit:
Das mit dem kurz connected und dann wieder no ist beim Pixoo normal. Dauerhaft connected sind nur
die Bluetoothlautsprecher.
Titel: Timebox: Wo finde ich meine Bilder/Animationen auf dem Smartphone?
Beitrag von: bigboss97 am 01 Juli 2019, 02:48:10
Wenn ich mit der Timebox app was kreiere, habe ich keine Ahrnung, wo/wie die Dateien gespeichert werden. Bis jetzt habe ich einen Umweg genommen. Ich lade das Bild/Animation hoch. Dann finde ich die Datei unter Timebox/upload.
Seit ich "Divoom Smart" app benutze, funktioniert mein Trick nicht mehr. Frage...
Wo/wie finde ich die Datei?

Danke
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Juli 2019, 07:09:37
Ich benutze die gif's. Diese kannst du speichern,
wenn du eine Animation lange andrückst und
dann "In Gallery des Systems speichern" wählst.
Das gif liegt dann unter sdcard/DCIM/Divoom.

edit:
Wenn du selbst eine Animation erstellst und auf speicher
drückst, findest du diese in der App unter "Ich" und da unter
"Design". Lange drücken und "In der Gallery des Systems
speichern" wählen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: bigboss97 am 01 Juli 2019, 07:35:50
Bei meinen lokalen Designs kann ich kein "Save" finden, siehe Screenshot.
Bei meinen Cloud Designs kann ich zwar abspeichern (siehe Screenshot), ich weiss aber nicht, wo die Datei hin. Die sdcard/DCIM/Divoom directory bleibt leer  :-(  Ich habe mit Bild und Animation ausprobiert.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Juli 2019, 17:53:37
Bestimmt hat der Appentwickler etwas vergessen. Musst du dich an Divoom
wenden. Bei mir schaut das mit der TimeboxEvo so aus.

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: bigboss97 am 02 Juli 2019, 01:57:39
In Design Mode kann ich zwar auf Local Gallery speichern. Es ist aber Divoom interne Gallery gemeint  :-(
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 28 Juli 2019, 13:50:26
Hallo

Hab seit kurzem auch ne TB mini hier zum rumspielen. Wollt erstmal danke sagen für die tolle Arbeit die ihr hier geleistet habt. Hab das ganze thread mal überflogen jedoch das meiste nicht verstanden :)
Haupsache funktioniert :)

Hab jedoch ein problem mit den scripts hier aus dem thread. Wenn ich das setGif.pl anstosse kommt auf der mini nur Pixelsalat an. Hab dann im setGif.pl auf convertImageTB (ohne EVO) umgestellt dann krieg ich leider einen fehler beim ausführen in line 271 der divoom.pl  mit $a = $image->alpha($index) (sorry sitze gerade nicht vorm laufenden system kann die genaue Fehlermeldung aber nachreichen). Die scripte aus dem Git laufen alle. Hab das mit den animations noch nicht versucht.

Hab ich das richtig verstanden dass man mit dem setGif.pl script einfach so gifs zu box senden kann ohne den Umweg mit der Konvertierung der heruntergeladenen gifs?

@bigboss97: Hatte das gleiche problem mit der App jedoch erst als ich mein TBmini mit der App verbunden hatt. Danach hat sich das Aussehen der App geändert. Hatte dann auch keien knopf mehr zum speichern und die Suchfunktion um die animationen zu durschsuchen war auch weg! Hab dann einfach den cache gelöscht und siehe da die App sah wieder wie zu anfang aus mit allen funktionen. Villeicht tuts auch ein zweiter account...

Wie sehen den die Erfahrungen/Aussehen mit/von der pixoo aus? Bin eigentlich sehr angetahn von der mini ist aber halt n ziemlich mini  und wenns gut läuft... :)

Danke schon mal

trabatz
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 Juli 2019, 16:15:52
Ändere mal von 16 auf 11. Die TimeboxMini hat 11x11 Pixel

#!/usr/bin/perl
require "./divoom.pl";

my $i;
my @png = readAnimatedGif('tbe/Waschmaschine.gif');


# load picture
for ($i = 0; $i < scalar(@png); $i++)
{
  $png[$i] = convertImageTBEVO($png[$i], 11);
}

if (connectDivoom('11:75:58:FD:4C:CC'))

  for (my $n = 0; $n < 3; $n++)
  {
    for ($i = 0; $i < scalar(@png); $i++)
    {
      # set picture
      sendPlain('44000A0A04AA2D00000000'.$png[$i], 0.1, 0);
    }
  }
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 28 Juli 2019, 20:19:58
Danke für die Antwort.

Das klappt leider auch nicht. Habe ein bisschen mit setPic.pl rumgespielt und leider nichts brauchares rausgekriegt. Habs auch mit nem nativen 11x11 bild versucht und das klappte auch nicht.

Habs jetzt auch mit dem scripten von github versucht. Die nativen 11x11 bilder werden hier richtig angezeigt. Wenn ich aber ein 16x16 versuche wie z.b das tb_evo.png klappts wiederum nicht.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 Juli 2019, 20:58:20
Dann wird es so wahrscheinlich auch nicht
funktionieren. Da die TimeboxMini ein anderes
Format erwartet. Bin unterwegs. Kann es nicht
vergleichen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 28 Juli 2019, 21:02:31
Ok trotzdem danke.
Hab noch ein paar Sachen versucht:

Hab jetzt mal das Waschmaschienen gif wie im ersten post erklärt konvertiert und krieg das leider auch nicht angezeigt. Mit dem divoom.pl von git nur schwarz und in der version aus dem Forum nur Pixelsalat. Habs auch mit nem selbstgemalten 11x11 bild aus gimp versucht. Leider das gleiche resultat.
Bisher funktionieren nur die schon angehängten Bilder (hab das skull.png von git mit der forumsversion versucht krieg hier jedoch Can't read image) vom git bzw. die Sachen auf der Box selbst.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 Juli 2019, 21:22:30
Die Farbpalette, sowie auch die Größe ist sehr wichtig. Passt da was nicht, hat man Pixelsalat.
Das mit dem gif-konvertieren ist ne 1zu1-Sache. Bedeutet, das die Bilder von der APP super
funktionieren, obwohl sie höher aufgelöst sind. Augenscheinlich sind es nur 16x16, daher
klappt das skalieren top. Desto höher die Auflösung, desto schlechter das skalieren.

Die Waschmaschine sowie andere Animatioenen für meine AuraBox in 10x10 habe ich von Hand mit Paint erstellt.
Gif nutze ich nur bei meinem Pixoo/TimeboxEvo.

Nimm die Waschmaschine und ändere es in Paint auf 11x11. Das sollte funktionieren. Sind ja nur 8 Bilder, dehnen du
ein paar Pixel hinzufügen musst.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 29 Juli 2019, 00:30:24
Ich habe eine Timebox Mini und bei mir funktionieren meine Beispiele:

https://github.com/mumpitzstuff/fhem-Divoom (https://github.com/mumpitzstuff/fhem-Divoom)

Lade dir mal diese Scripte runter und teste damit bitte. Insbesondere setPicture.pl müsste funktionieren.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 29 Juli 2019, 11:52:55
Ja danke bin schon fleissig am testen   :)

Mit den scripts von schwatter aus dem forum klappts auf jeden Fall nicht mit dem downscalen von 16 auf 11.

Mit deiner version aus dem git funktioniert zwar alles (insesondere die hardcoded Sachen etc) nehm ich jedoch ein bild von 16x16 und lass es mit dem script (also deinem divoom.pl)  auf 11x11 umwandel und anzeigen sieht das Resultat leider zimlich unansehnlich aus! 11x11 geht super auch als Animation

Mein prolem ist jetzt dass ich alles per Hand erzeugen müsste da ich über die App (genau wie bigboss) nicht mehr lokal speichern kann. Setzte ich die App neu auf kann ich zwar alles abspeichern jedoch sehe ich nur 16x16 bilder bzw. gifs. Verbinde ich die TBmini mit der App sehe ich zwar nur noch 11 x11 Bilder und Gifs kann dies aber nicht mehr speichern.

Die Farbpalette, sowie auch die Größe ist sehr wichtig. Passt da was nicht, hat man Pixelsalat.
Das mit dem gif-konvertieren ist ne 1zu1-Sache. Bedeutet, das die Bilder von der APP super
funktionieren, obwohl sie höher aufgelöst sind. Augenscheinlich sind es nur 16x16, daher
klappt das skalieren top. Desto höher die Auflösung, desto schlechter das skalieren.

Die Waschmaschine sowie andere Animatioenen für meine AuraBox in 10x10 habe ich von Hand mit Paint erstellt.
Gif nutze ich nur bei meinem Pixoo/TimeboxEvo.

Nimm die Waschmaschine und ändere es in Paint auf 11x11. Das sollte funktionieren. Sind ja nur 8 Bilder, dehnen du
ein paar Pixel hinzufügen musst.

Danke für den tipp mit der Farbpalette. Gimp geht offensichtlich nicht. Mit pinta klappts aber sehr gut. Wie gesagt per hand gehts ist halt sehr aufwändig zumal es nicht nur eine animation sein soll.
Muss überlegen obs mir den Aufwand wert ist. Villeicht schick ich die mini zurück und wechsle auf ne 16x16...

Danke euch beiden für eure Zeit. Weiss ich zu schätzen
 
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 Juli 2019, 12:03:59
Bei 10x10 und 11x11 funktioniert das Laden der Animation in den Speicher.
16x16 Boxen nicht/noch nicht. Will ich nur erwähnen, nicht das du dann
enttäuscht bist. Standbilder funktioniert aber. Muss mal Infos im ersten
Post ergänzen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 29 Juli 2019, 14:50:32
Mit in den Speicher meinst du den Speicher de Box? Bei der mini hab ich sowas nicht gefunden hab aber irgendwo was von 12 Stück gelesen die man über die App zur Box schicken kann. Bei der mini jedenfalls nicht.
Brauch ich eigentlich auch gar nicht. Wenn die animationen/pics bis stehen und auf dem fhemserver gespeichert sind soll das ganze über fhem laufen mit doifs quasi als status/notification für diverse Sachen aus fhem z.b waschmaschiene fertig, Türklingel, anruf verpasst usw...

Sind die auf 16x16 konvertieten gifs die von der App kommen denn rauchbar? Da wie gesagt die auf 11x11 gescalte nicht brauchar sind.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 Juli 2019, 15:07:42
Ja genau, in den Speicher der Box. Das funktioniert nur bei Aurabox, TimeboxMini u. Timebox.
Alle 16x16 sind mit dem Script noch nicht kompatibel. Dazu wird ein loop verwendet den z.B der
Raspberry ausführen muss.
Ich habe das im Moment mit einem RaspiZero umgesetzt. Dieser erhält vom Fhemserver per
ssh non blocking den Loop zu starten.

edit:
Das mit dem gif-konvertieren von 16 auf 11pixel solltest du
vergessen. Da können bei den paar Pixel keine brauchbaren
Resultate herauskommen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 29 Juli 2019, 20:13:01
Ja genau, in den Speicher der Box. Das funktioniert nur bei Aurabox, TimeboxMini u. Timebox.
Alle 16x16 sind mit dem Script noch nicht kompatibel.
Hab leider niergens gefunden wie oder wo mann Bilder oder Animations zur Box hochladen kann. Wenn ich versuche das:  -> Animation (hardcoded): 03   -> Type: 00 - 06 auszuführen  kommt Failed und bei -> Image/Animation (preloaded within the app): 05 kommt zwar answer 01 es passiert aer nix

Dazu wird ein loop verwendet den z.B der
Raspberry ausführen muss.
Ich habe das im Moment mit einem RaspiZero umgesetzt. Dieser erhält vom Fhemserver per
ssh non blocking den Loop zu starten.

Glaub nicht dass ich das ganz verstanden habe :) Benutze zwar auch ssh um diverse bluetooth geräte über pi zeros mit fhem zu verbinden aber ich wollte einfach doifs erstellen die halt die animations über script lostreten mit repeatsame solang ichs halt brauch oder der doif zweig wechselt.

Das mit dem 16 auf 11 lass ich dann mal bleiben :)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 Juli 2019, 21:12:56
So, hier mal ein Testpaket für dich. Musst eigentlich nur noch deine Mac anpassen in der coffee.pl und washer.pl.
Die beiden Scripte laden dir eine Animation auf die Box. Darauf kannst du aufbauen.

Zu der Sache mit dem Loop. Damit täuscht man eine Animation vor. Bedeutet, die Animation ist nicht in die Box geladen,
sondern der Server/Pc greift auf das Script zu, in dem du einen Loop gebaut hast. Das Script rattert dann einfach
vordefinierte Bilder runter. Siehe Post #263.

edit:
wo du auch drauf achten musst, den richtigen Converter im Script setzen:
# load animation pictures
my $pic1 = convertImageAB('timebox/1.png', 10); #Aurabox
my $pic1 = convertImageTB('timebox/1.png', 11); #Timebox/TimeboxMini
my $pic1 = convertImageTBEVO('timebox/1.png', 16); #TimeboxEvo/Pixoo und Co.

edit2:

Solltest du es per ssh auf einem anderen Gerät ausführen, bekommst du bestimmt Probleme beim ausführen.
Dazu benötigt das Script dann eine explizite Pfadangabe zur divoom.pl. So konnte ich es bei mir lösen.

#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 29 Juli 2019, 21:43:05
Es gibt ein Example Script setAnimation.pl. Und bei all den anderen Versuchen, kopiere bitte exakt die Zeile aus deinem Script oder besser das gesamte Script, so das man sieht, was genau du da machst. Bei der Aussage ich habe 05 gesetzt oder irgendwas, gibt es mindestens 1000 Dinge die man falsch machen kann.

Außerdem stell doch mal dein Script + Beispielbild für dein 16x16 zu 11x11 Problem zur Verfügung. Aus deinen Beschreibungen lässt sich nicht viel entnehmen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 Juli 2019, 23:57:26
Ich habe eben mal mit text to picture gespielt.

apt-get install perlmagick
#!/usr/bin/perl

use Image::Magick;

$image = Image::Magick->new;
$image->Set(size=>'205x30');
$image->ReadImage('xc:black');

$text = "Waschmaschine fertig!";
$image->Annotate(pointsize=>20, fill=>'red', text=>$text, y=>20, x=>0);

print "Content-type: image/gif\n\n";
print $image->Write('./test.gif');

Durch hinzufügen und ändern der X-Achse könnte ein Runningtext erstellt werden
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 30 Juli 2019, 11:35:11
Ok sorry glaub wir haben ein bisschen aneinander vorbei geredet!
Also ich mache folgendes:
Ich hab die scripts aus dem github mit den dazugehörigen Beispielen auf den fhem server gesetzt (test System) und in den scripten wie zb. setAnimation.pl meine Mac angepasst und dann einfach über die Konsole gestartet. Das läuft auch alles soweit.
Hab dann eigentlich nur mit Bildern weitergemacht da laut script ja sowieso das convertImageTB gemacht wird op jetzt einmal oder mehrfach ist ja egal.
Dabei hab ich nun festgestellt dass nur native 11x11 ordentlich aussehen und das problem woher pics kriegen die ich nicht selber malen muss :) aber das ist ein anderes Problem... Angehängt noch ein 16x16 Bild, ein 11x11 Bild und das script zu umwandeln/hochladen
Wollte dann noch die anderen Sachen aus der README vom git versuchen so z.b. die talking faces. Die funktionieren super
#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:58:C6:46:82'))
{
  sendPlain('4500', 2);
  # set Talking Faces
  sendPlain('A10102', 3);
  disconnectDivoom();
}

Habe dann das:
Hab leider niergens gefunden wie oder wo mann Bilder oder Animations zur Box hochladen kann. Wenn ich versuche das:  -> Animation (hardcoded): 03   -> Type: 00 - 06 auszuführen  kommt Failed und bei -> Image/Animation (preloaded within the app): 05 kommt zwar answer 01 es passiert aer nix
im selben script probiert bei sendPlain und das will nicht
#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:58:C6:46:82'))
{
  sendPlain('4500', 2);
  # set Talking Faces
  sendPlain('0301', 3);
  disconnectDivoom();
}
mit  der Fehlermeldung:
Create RFCOMM client (11:75:58:C6:46:82 with port 4)...
Device answer: HELLO
done

Send plain command: 4500
Generated raw command: 0104004500490002
Send raw command: 0104004500490002
Device answer: 01
done

Send plain command: 0301
Generated raw command: 01040003060304080002
Send raw command: 01040003060304080002
No answer from device!
No answer from device!
No answer from device!
No answer from device!
Failed!
done

Equaliser will auch nicht mit sendPlain('0401', 3)

Dann unterscheide ich noch zwichen den scripten auf Github und den scripten die ich hier im Post #268 von schwatter heruntergeladen habe. Hab mit denen jedoch schnell aufgehört da hier fast nichts mit der TBmini funktioniert.


Hab jedoch ein problem mit den scripts hier aus dem thread. Wenn ich das setGif.pl anstosse kommt auf der mini nur Pixelsalat an. Hab dann im setGif.pl auf convertImageTB (ohne EVO) umgestellt dann krieg ich leider einen fehler beim ausführen in line 271 der divoom.pl  mit $a = $image->alpha($index) (sorry sitze gerade nicht vorm laufenden system kann die genaue Fehlermeldung aber nachreichen). Die scripte aus dem Git laufen alle.


So jetzt zu den Testpaketen. Erst mal danke dafür aber im prinzip läuft das ja mit der setAnimation.pl. Ich habe jedoch festgestellt dass die Box zimlich wählerich ist welche Bilder sie nimmt und leider laufen weder die coffee.pl noch die washer.pl. Mit dem beigefügten script (also dem hier aus dem forum) krieg ich :

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_ADDRESS = "de_LU.UTF-8",
LC_NAME = "de_LU.UTF-8",
LC_MONETARY = "de_LU.UTF-8",
LC_PAPER = "de_LU.UTF-8",
LC_IDENTIFICATION = "de_LU.UTF-8",
LC_TELEPHONE = "de_LU.UTF-8",
LC_MEASUREMENT = "de_LU.UTF-8",
LC_TIME = "de_LU.UTF-8",
LC_NUMERIC = "de_LU.UTF-8",
LANG = "en_GB.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_GB.UTF-8").
Can't read image ./images/coffee1.bmp

das script vom Git läuft zwar durch jedoch bleibt der schirm der box schwarz:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_ADDRESS = "de_LU.UTF-8",
LC_NAME = "de_LU.UTF-8",
LC_MONETARY = "de_LU.UTF-8",
LC_PAPER = "de_LU.UTF-8",
LC_IDENTIFICATION = "de_LU.UTF-8",
LC_TELEPHONE = "de_LU.UTF-8",
LC_MEASUREMENT = "de_LU.UTF-8",
LC_TIME = "de_LU.UTF-8",
LC_NUMERIC = "de_LU.UTF-8",
LANG = "en_GB.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_GB.UTF-8").
Image: 11x11 (maxcolors: no palette found, usedcolors: 4)
Image: 11x11 (maxcolors: no palette found, usedcolors: 4)
Image: 11x11 (maxcolors: no palette found, usedcolors: 4)
Image: 11x11 (maxcolors: no palette found, usedcolors: 4)
Create RFCOMM client (11:75:58:C6:46:82 with port 4)...
Device answer: HELLO
done

Send plain command: 49000A0A0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01BF0049000A0A040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020030402
Send raw command: 01BF0049000A0A040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020030402
No answer from device!
done

Send plain command: 49000A0A0401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01BF0049000A0A04030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021030402
Send raw command: 01BF0049000A0A04030400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021030402
No answer from device!
done

Send plain command: 49000A0A0402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01BF0049000A0A04030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022030402
Send raw command: 01BF0049000A0A04030500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022030402
No answer from device!
done

Send plain command: 49000A0A0403000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Generated raw command: 01BF0049000A0A04030600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023030402
Send raw command: 01BF0049000A0A04030600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023030402
No answer from device!
done


Ha ich das jetzt richtig verstanden dass bei den 16x16 Boxen das setAnimation.pl nicht funktioniert aer das setGif.pl schon?

Nochmals vielen Danke für eure Geduld und Zeit
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 Juli 2019, 11:50:26
Zu der letzten Frage.
Genau, setAnimation.pl funktioniert nicht. Die setGif.pl ja.

edit:
Post #268 war nur für 16x16
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 31 Juli 2019, 20:44:33
So, hier mal ein Testpaket für dich. Musst eigentlich nur noch deine Mac anpassen in der coffee.pl und washer.pl.
Die beiden Scripte laden dir eine Animation auf die Box. Darauf kannst du aufbauen.

Habe die Bilder aus den Testpacketen mal mit einem paint program geöffnet und als png neu gespeichert und nun funktionieren sie. Jedoch nur mit dem script aus dem git nicht mit dem von dir angehängten aus Post #286 da Bleibt der Bildschirm schwarz.

Kurze Frage noch:
Gibts nen Weg die einzelnen die man über setAnimation.pl aufrufen kann langsamer laufen zu lassen? Wollte einfach mal 2 unterschiedliche Bilder abwechseld anzeigen lassen die wechseln jedoch sehr schnell. Als Workaround hab ich einfach jetzt mal jedes bild 3 mal hintereinander anzeigen lass:
#!/usr/bin/perl
require "./divoom.pl";

# load washer pictures
my $pic1 = convertImageTB('pictures/hallo.png', 11);
my $pic2 = convertImageTB('pictures/hallo.png', 11);
my $pic3 = convertImageTB('pictures/hallo.png', 11);

my $pic4 = convertImageTB('pictures/du.png', 11);
my $pic5 = convertImageTB('pictures/du.png', 11);
my $pic6 = convertImageTB('pictures/du.png', 11);
if (connectDivoom('11:75:58:C6:46:82'))
{
  # set clock
  sendPlain('4500', 2);
  # set animation
  sendPlain('49000A0A040000'.$pic1, 0, 0);
  sendPlain('49000A0A040100'.$pic2, 0, 0);
  sendPlain('49000A0A040200'.$pic3, 0, 0);
  sendPlain('49000A0A040300'.$pic4, 0, 0);
  sendPlain('49000A0A040400'.$pic5, 0, 0);
  sendPlain('49000A0A040500'.$pic6, 3, 0);
disconnectDivoom();
}

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 31 Juli 2019, 21:44:23
Jau Delay, geht. So z.B.:

Schnellste
sendPlain('49000A0A040000'.$pic1, 0, 0);Langsamste
sendPlain('49000A0A0400FF'.$pic1, 0, 0);
00 bis FF in hexdezimal.

https://www.binaryhexconverter.com/decimal-to-hex-converter
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: trabatz am 01 August 2019, 07:49:21
Danke
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 18 September 2019, 14:43:23
Hallo Zusammen,
ich möchte gern mein Pixoo in Fhem einbinden (Bildschirm an und aus reicht fürs erste). Welches Script benutze ich dafür am besten und wie wende ich es an ? (das von derHeinz oder ein anders) Ich hab das Pixoo bereits mit meine Raspberry über Bluetooth verbunden. Nur kommt bis jetzt nur Müll raus mit den Sachen die ich ausprobiert habe (derHeinz etc.). Eine kleine Anleitung wäre ganz cool, weil ich schon viel Ausprobiert habe aber einfach nicht weiter komme.
Danke für Eure Hilfe
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 18 September 2019, 19:34:31
Ich verwende dazu folgende Settings.

Dim000%
#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";;

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  # set Dimmer
  sendPlain('7400', 1);
  disconnectDivoom();
}

Dim050%
#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";

#if (connectDivoom('11:75:68:C9:7D:36'))
{
  # set Dimmer
  sendPlain('743F', 1);
  disconnectDivoom();
}

Dim100%
#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  # set Dimmer
  sendPlain('74FF', 1);
  disconnectDivoom();
}

edit:
siehe dazu die Infos von mumpitzstuff auf github
https://github.com/mumpitzstuff/fhem-Divoom

Set Brightness: 32 or 74 
  -> Level (0 = off, 01 - FF = brightness level): 00 - FF 
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 19 September 2019, 20:14:52
Habe meine Testscripte im ersten Thread erneuert sowie Info für das Remoteausführen hinzugefügt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 September 2019, 09:39:44
Infos zu Gif hinzugefügt. Text etwas überarbeitet.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 September 2019, 13:08:30
Script für Timesync. Wichtig, "localtime" muss richtig gesetzt werden.
z.B mit raspi-config --> Localisation Options.Im Moment wird nur
Stunde,Minute, und Sekunde gesetzt.

#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  sendPlain('1820000000'.sprintf("%02X%02X%02X", $hour,$min,$sec), 1);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 September 2019, 16:04:06
Update

Sekunde,Minute,Stunde,Tag und Monat werden jetzt richtig gesetzt.


#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  sendPlain('1814'.sprintf("%02X%02X%02X%02X%02X%02X", ($year - 100),($mon + 1),$mday,$hour,$min,$sec), 1);
  disconnectDivoom();
}

@mumpitzstuff

Habe mit einleiten der '18' für Timesetting die '14' festgelegt. Da '14' Hex in Dezimal '20' entspricht. Die '21' erlebe ich eh nich mehr  ;D
Dann kommt die '19' welche aus ($year - 100) generiert wird.
Frage stimmt das ?
Habe das Problem, das auf meiner Evo der Tag Montag angezeigt wird. Daher suche ich den Fehler.
Der Rest stimmt zu 100% [($mon + 1),$mday,$hour,$min,$sec)]
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 22 September 2019, 19:18:47
Update

Ein Script zum auslesen der Außentemperatur und anzeigen auf der Box.

#!/usr/bin/perl
require "/opt/fhem/divoom/divoom.pl";
$temp =  qx(/opt/fhem/fhem.pl 7072 <meinPasswort> "{sprintf('%.0f',ReadingsVal('MeinWetter','temperature',''))}");

if (connectDivoom('11:75:58:45:59:81'))
{
  sendPlain('450100', 5);
  sendPlain('5F'.sprintf("%02X", $temp).'00', 2, 0);
  disconnectDivoom();
}

@mumpitzstuff
Kannst du das Script bitte mal testen, wenn du Zeit hast.


edit:

So sollte es bei 16x16 Devices klappen.
Schaltet erst auf Temp(nur Temp ohne lästiges hin und her switchen wie mit der Divoomapp), dann übergibt das Script die Temp.

#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";
$temp =  qx(/opt/fhem/fhem.pl 7072 <meinPasswort> "{sprintf('%.0f',ReadingsVal('MeinWetter','temperature',''))}");

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  sendPlain('4500010000000100000000550002', 1);
  sendPlain('5F'.sprintf("%02X", $temp).'00', 2, 0);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 23 September 2019, 08:46:39
Das kann ich leider nicht mehr ohne weiteres. Ich habe vor ein paar Wochen die SD Karte aus dem Pi gebraucht auf dem alles eingerichtet war. Ich müsste jetzt erst wieder alles zum laufen kriegen...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 23 September 2019, 09:56:05
Ah schade, ok.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 23 September 2019, 10:08:45
Ich muss mal gucken, vielleicht gehts ja ausnahmsweise unkompliziert auf der Buster Installation. Die ist recht frisch und dort hatte ich bisher nichts groß mit bluetooth gemacht.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 23 September 2019, 10:20:18
Ok. Ich habe alle Pi's bei mir auf Buster. Alles ohne Probleme.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 September 2019, 23:00:05
Update:

Timesyncscript
Ich habe mir nochmal den Rawcode vom Timesync angeschaut. Erst kommt das Jahr und dann das Jahrhundert.
Deshalb wurde auch der Wochentag falsch angezeigt.

# 010b0018   13 14 09 19 13 37 3a 03 f3 00 02  # Hex
#einleiten   19 20 09 25 19 55 58 03 243 0 02  # Dec

Jetzt sollte es passen und alles richtig gesetzt werden.

#!/usr/bin/perl
require "/opt/fhem/divoom2/divoom.pl";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $fyear = 1900 + $year;

if (connectDivoom('11:75:58:FD:4C:CC'))
{
  sendPlain('18'.sprintf("%02X%02X%02X%02X%02X%02X%02X", ($year % 100),($fyear / 100),($mon + 1),$mday,$hour,$min,$sec), 1);
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 25 September 2019, 23:39:00
Steht doch auch auf meiner Github Seite :)

Set Time: 18 
  -> Year (XX = year % 100, YY = year / 100): XXYY 
  -> Month: XX 
  -> Day: XX 
  -> Hours: XX 
  -> Minutes: XX 
  -> Seconds: XX
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 25 September 2019, 23:46:52
Ja stimmt  ;D ich wollte das aber für mich nochmal vergleichen. Konnte nicht glauben
das das Format Jahr gefolgt von Jahrhundert ist. Wieder was gelernt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 30 September 2019, 12:45:58
Ich bekomm es immer noch nicht hin... Immer wenn ich ein Befehl in der Console Ausprobiere kommt nur das Bluetooth Symbole auf meinem Pixoo und weiter passiert nix. Hab in der Divoom.pl port 1 und escape 0. Hab die Mac adresse in der Datei geändert aber irgend wie will es einfach nicht Funktionieren.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 30 September 2019, 12:58:04
@schwatter: Hattest du nicht so einen Pixoo bei dir rumstehen?

@namrom2000: Wie sieht denn die Bildschirmausgabe genau aus bzw. dein Script?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 September 2019, 13:00:03
@namrom2000
Poste bitte mal die Ausgabe der Konsole
und die Dateien die du benutzt.
Außerdem die Konsolenausgaben
der Funktionsüberprüfung von Seite 1.

@mumpitzstuff
Hab ich, täglich im Einsatz. Funktioniert.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 30 September 2019, 14:32:53
Also meine Dateien sind im Anhang und das mit der Funktionsueberpruefung geht irgend wie nicht so, da mach ich glaube ich was falsch. Hab das alles auch erst mal nur auf meinem Desktop, weil ich es erst mal ueber die Console zum laufen bringen wollte.

pi@raspberrypi:~ $ cd Desktop/fhem-Divoom-master/
pi@raspberrypi:~/Desktop/fhem-Divoom-master $ perl setWeather.pl
Create RFCOMM client (11:75:58:5A:C3:8D with port 1)...

Wenn ich das ausfuehre erscheint das Bluetooth symbol auf meinem Pixoo, mehr aber nicht.


Das kommt bei dem Funktionsueberpruefung:
pi@raspberrypi:~ $ /opt/fhem/divoom/fhem-Divoom-master# rfcomm
bash: /opt/fhem/divoom/fhem-Divoom-master#: Datei oder Verzeichnis nicht gefunden


Und sry fuer das Format kenne mich mit dem Forum noch nicht so aus.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 30 September 2019, 15:04:49
Hast du auch die Abhängigkeiten installiert?

sudo apt install bluez bluez-tools libnet-bluetooth-perl
sudo apt-get install libimager-perl
sudo apt-get install libgd-graph-perl oder sudo apt-get install llibgd-perl
sudo apt-get install bluealsa
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 30 September 2019, 15:17:34
Ja hab ich, hab es jetzt auch noch mal gemacht um sicher zu gehen. Nur bei bluealsa steht das es das Packet nich gefundet hat.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 September 2019, 17:05:55
Welche Linux-Distribution benutzt du?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 September 2019, 17:35:47
Und, ich habe die setWeather.pl getestet. Grundsätzlich funktioniert die erstmal.
Das bedeutet, bei dir stimmt was bei den Abhängigkeiten nicht.

Was jetzt erstmal nicht relevant ist, aber dich später betrift wenn es funktioniert.
Manche Codes können zu einem schwarzen Display führen. Bedeutet, es ist dann
auf 0% gedimmt. Dieser Code in der setWeather.pl ist so einer, der auf 11x11 Boxen
funktioniert, nicht wirklich auf 16x16.

sendPlain('450100', 0);
Daher für dich angepasst.

#!/usr/bin/perl
require "./divoom.pl";

if (connectDivoom('11:75:58:5A:C3:8D'))
{
  sleep(3);
  sendPlain('4500', 5);
  # switch to weather view
  #sendPlain('450100', 0);                           #auskommentiert
  sendPlain('4500010000000100000000550002', 1);      #hinzugefügt
  # set weather
  sendPlain('5F0101', 10, 0);
  sendPlain('5F0202', 10, 0);
  sendPlain('5F0303', 10, 0);
  sendPlain('5F0404', 10, 0);
  sendPlain('5F0505', 10, 0);
  sendPlain('5F0606', 10, 0);
  sendPlain('5F0707', 10, 0);
  sendPlain('5F0808', 10, 0);
  sendPlain('5F0909', 10, 0);
  sendPlain('5F0A0A', 10, 0);
  sendPlain('5F0B0B', 10, 0);
  sendPlain('5F0C0C', 10, 0);
  sendPlain('5F0D0D', 10, 0);
  sendPlain('5F0E0E', 10, 0);
  sendPlain('5F0F0F', 10, 0);
  sendPlain('5F1010', 10, 0);
  sendPlain('5F1111', 10, 0);
  sendPlain('5F1212', 10, 0);
  sendPlain('5F1313', 30, 0); 
  disconnectDivoom();
}
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 30 September 2019, 18:59:55
Das Normale Rasbian muesste das sein.
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

Und Das mit dem dem neune sendPlain Klappt auch nicht. Leider aber danke für eure Hilfe.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 September 2019, 19:18:19
Liegt 100% an den Abhängigkeiten. Deine Versionsnummer klingt nach raspbian-stretch. Da ist bluealsa normal mit apt-get zu bekommen.
Sehr komisch.

Was tolles, was ich eben noch entdeckt habe. Meinen neuen Pi4 habe ich direkt mit raspbianbuster bestückt. Jetzt ist mir aufgefallen,
ich habe Rfcomm gar nicht eingerichtet als Service  ;D , sondern nur alle Abhängigkeiten installiert + folgende 2 Dateien angepasst.

/etc/asound.conf

pcm.!default {
        type plug
        slave.pcm {
                type bluealsa
                device "11:75:58:45:59:81" #TimeboxEvo"11:75:68:C9:7D:36"   #Aurabox"11:75:58:45:59:81" <- hier passende Mac des Speakers eintragen
                profile "a2dp"
delay 10000
        }
}


/etc/rc.local

#!/bin/bash
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo -e "connect 11:75:68:C9:7D:36" | bluetoothctl
rfcomm bind 0 11:75:58:45:59:81 1
exit 0

Damit läuft es. Die Info zu "Für RFCOMM einen Service erstellen" im ersten Thread muss ich nochmal überarbeiten. Ob das jetzt wirklich notwendig ist,
weiß ich auch gerade nicht. Habe es damals nach den Infos aus dem Netz so eingerichtet. Das anstoßen in der rc.local ist wohl ausreichend.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 30 September 2019, 20:24:23
Die Sound datei hab ich nicht eingerichtet hab ja nur den Pixoo. Und das ander Hilft auch nicht weiter :/
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 September 2019, 21:00:11
Zu asound.conf. Das stimmt, wird beim Pixoo nicht verwendet. Ich habe jetzt nochmal getestet ohne Rfcomm setzen beim Start.
Sogar das funktioniert jetzt. Anscheinend wurden mit Buster viele Fehler beseitigt. Hier mal die Ausgabe. Bei Rfcomm steht nichts.

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Sep 30 20:52:20 2019 from 192.168.178.34
root@piZero:~# rfcomm
root@piZero:~# cd /opt/fhem/divoom
root@piZero:/opt/fhem/divoom# perl setActTemp.pl
Create RFCOMM client (11:75:58:FD:4C:CC with port 1)...

done

Send plain command: 4500010000010100000000560002
Generated raw command: 0110004500010000010100000000560002B00002
Send raw command: 0110004500010000010100000000560002B00002
Device answer: 01
done

Send plain command: 5F0D06
Generated raw command: 0105005F0D06770002
Send raw command: 0105005F0D06770002
No answer from device!
done

root@piZero:/opt/fhem/divoom# rfcomm
root@piZero:/opt/fhem/divoom#

Wie gesagt, deine Pakete die installiert werden müssen, da hapert es.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 September 2019, 22:18:35
Folgende Infos im ersten Post bearbeitet

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 01 Oktober 2019, 14:20:29
Okay also ich bin schon mal einen kleinen Schritt weiter. Hab jetzt Bluealsa Installiert. Ich hatte noch die Rasbian Version Jessie und musst zu Stretch upgraden.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 01 Oktober 2019, 15:14:26
Hab Jetzt alles ohne Probleme Installieren koennen. Jedoch ist einmal Das hier vielleicht ein Problem:
pi@raspberrypi:~ $ sudo systemctl status blue*
● bluez-5.49.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

● bluez-5.49.tar.xz.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

● bluez-alsa-master.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Aber die Funtkionsueberpruefung geht:
pi@raspberrypi:~/Desktop/fhem-Divoom-master $ sdptool browse 11:75:58:5A:C3:8D
Browsing 11:75:58:5A:C3:8D ...
Service Name: Serial Port 1
Service RecHandle: 0x10004
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1

pi@raspberrypi:~/Desktop/fhem-Divoom-master $ rfcomm
rfcomm0: 11:75:58:5A:C3:8D channel 1 clean

Aber immer noch nur das Bluetooth Symbol und mehr nicht.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2019, 15:18:32
Neustart durchgeführt ?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 01 Oktober 2019, 15:31:20
Ja...
immer noch nichts.

Und wenn ich was anderes Ausprobiere kommt das
pi@raspberrypi:~/Desktop/fhem-Divoom-master $ perl setWeather.pl
Create RFCOMM client (11:75:58:5A:C3:8D with port 1)...
pi@raspberrypi:~/Desktop/fhem-Divoom-master $ perl setPictureTbEvo.pl
Image: 16x16 (maxcolors: no palette found, usedcolors: 18)
Create RFCOMM client (11:75:58:5A:C3:8D with port 1)...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 01 Oktober 2019, 15:38:41
Muss man bluetooth nicht irgendwie noch koppeln oder sowas, da ansonsten die Verbindung abgelehnt wird? Ich bin mir nicht mehr ganz sicher...

Und die Divoom Geräte können immer nur mit einem Gerät verbunden sein. Wenn du also die App von Divoom irgendwo installiert hast, dann schalte mal dort Bluetooth aus, starte das Divoom Gerät neu und versuch dich dann noch mal zu verbinden, möglichst in der Zeit nach dem Neustart, in der das Bluetooth Symbol bereits aufleuchtet.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 01 Oktober 2019, 17:23:13
Also ich hab jetzt noch mal alle Bluetooth Connections getrennt und hab es dann noch mal versucht jetzt Klappet es !!!! Nur bei machen sendPlains antwortet der Pixoo nicht und bei machen mit 01. Kann mir jemand von euch beiden mal seine datein zum Pixoo schicken das ich da mehr Vorlagen habe ?
Vielen Vielen Dank.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2019, 17:26:07
Nah endlich  ;D du warst ne harte Nuss.
Im ersten Post findest du ein paar Vorlagen von mir.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 01 Oktober 2019, 17:54:19
Ja, hat mich auch viele Nerven gekostet... Aber ich Merke grad das es nicht immer zu 100 % reagiert gibt es dafür auch einen Fix. (nicht immer kommt der Befehl an)
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2019, 18:12:02
Kann ich nicht behaupten. Läuft super.
Mein Pixoo wird von einem RaspiZeroW gesteuert, welcher
seine Aufträge von einem Pi4 mit Fhem per ssh erhält.
Ist es egal welches Script du benutzt oder fällt es dir bei
einem besonders stark auf?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2019, 21:44:08
@namron2000

Poste bitte die Ausgabe von dmesg aus Terminal. Das per Code einfügen oder als Anhang.

Bei mir mit der Suche nach Bluetooth:

root@raspi4fhem:~# dmesg | grep "Bluetooth:"
[   14.308562] Bluetooth: Core ver 2.22
[   14.308651] Bluetooth: HCI device and connection manager initialized
[   14.308672] Bluetooth: HCI socket layer initialized
[   14.308687] Bluetooth: L2CAP socket layer initialized
[   14.308731] Bluetooth: SCO socket layer initialized
[   14.322641] Bluetooth: HCI UART driver ver 2.3
[   14.322655] Bluetooth: HCI UART protocol H4 registered
[   14.322770] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   14.323037] Bluetooth: HCI UART protocol Broadcom registered
[   14.512661] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   14.512667] Bluetooth: BNEP filters: protocol multicast
[   14.512677] Bluetooth: BNEP socket layer initialized
[   14.622027] Bluetooth: RFCOMM TTY layer initialized
[   14.622047] Bluetooth: RFCOMM socket layer initialized
[   14.622062] Bluetooth: RFCOMM ver 1.11
root@raspi4fhem:~#

Und bitte nochmal sudo systemctl status blue*
Schaut bei mir so aus:

root@raspi4fhem:~# sudo systemctl status blue*
● bluealsa.service - BluezALSA proxy
   Loaded: loaded (/lib/systemd/system/bluealsa.service; static; vendor preset: enabled)
   Active: active (running) since Mon 2019-09-30 22:11:17 CEST; 23h ago
 Main PID: 427 (bluealsa)
    Tasks: 3 (limit: 4915)
   Memory: 3.0M
   CGroup: /system.slice/bluealsa.service
           └─427 /usr/bin/bluealsa

Sep 30 22:11:17 raspi4fhem systemd[1]: Started BluezALSA proxy.

● bluetooth.target - Bluetooth
   Loaded: loaded (/lib/systemd/system/bluetooth.target; static; vendor preset: enabled)
   Active: active since Mon 2019-09-30 22:11:17 CEST; 23h ago
     Docs: man:systemd.special(7)

Sep 30 22:11:17 raspi4fhem systemd[1]: Reached target Bluetooth.

● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-09-30 22:11:17 CEST; 23h ago
     Docs: man:bluetoothd(8)
 Main PID: 424 (bluetoothd)
   Status: "Running"
    Tasks: 1 (limit: 4915)
   Memory: 3.8M
   CGroup: /system.slice/bluetooth.service
           └─424 /usr/lib/bluetooth/bluetoothd --noplugin=sap

Sep 30 22:11:17 raspi4fhem systemd[1]: Starting Bluetooth service...
Sep 30 22:11:17 raspi4fhem bluetoothd[424]: Bluetooth daemon 5.50
Sep 30 22:11:17 raspi4fhem systemd[1]: Started Bluetooth service.
Sep 30 22:11:17 raspi4fhem bluetoothd[424]: Starting SDP server
Sep 30 22:11:17 raspi4fhem bluetoothd[424]: Excluding (cli) sap
Sep 30 22:11:17 raspi4fhem bluetoothd[424]: Bluetooth management interface 1.14 initialized
Sep 30 22:11:17 raspi4fhem bluetoothd[424]: Endpoint registered: sender=:1.6 path=/org/bluez/hci0/A2DP/SBC/Source/1
Sep 30 22:11:17 raspi4fhem bluetoothd[424]: Failed to set privacy: Rejected (0x0b)
Oct 01 06:51:42 raspi4fhem bluetoothd[424]: /org/bluez/hci0/dev_11_75_58_45_59_81/fd0: fd(24) ready
root@raspi4fhem:~#                           

edit:

Noch 2 Gegebenheiten können dazu führen, das es nicht richtig funktioniert.

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 01 Oktober 2019, 22:45:29
Bei mir funktioniert alles wie gewünscht, aber einen Fehler habe ich noch bei mir entdeckt.

Sep 30 22:11:17 raspi4fhem bluetoothd[424]: Failed to set privacy: Rejected (0x0b)
Abhilfe schafft /lib/systemd/system/bthelper@.service zu ergenzen

[Service]
Type=simple
ExecStartPre=/bin/sleep 2
ExecStart=/usr/bin/bthelper %I

Erklärung hier, ganz unten.

https://github.com/RPi-Distro/pi-bluetooth/issues/8


Werde die Info im ersten Post einfügen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 15 Oktober 2019, 11:13:52
@schwatter
Hier sind die Outputs:
pi@raspberrypi:~ $ dmesg | grep "Bluetooth:"
[   18.285725] Bluetooth: Core ver 2.22
[   18.285802] Bluetooth: HCI device and connection manager initialized
[   18.285824] Bluetooth: HCI socket layer initialized
[   18.285838] Bluetooth: L2CAP socket layer initialized
[   18.285869] Bluetooth: SCO socket layer initialized
[   18.316033] Bluetooth: RFCOMM TTY layer initialized
[   18.316060] Bluetooth: RFCOMM socket layer initialized
[   18.316078] Bluetooth: RFCOMM ver 1.11
[   27.327726] Bluetooth: HCI UART driver ver 2.3
[   27.327753] Bluetooth: HCI UART protocol H4 registered
[   27.327865] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   27.328119] Bluetooth: HCI UART protocol Broadcom registered
[   31.350896] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   31.350904] Bluetooth: BNEP filters: protocol multicast
[   31.350918] Bluetooth: BNEP socket layer initialized

pi@raspberrypi:~ $ sudo systemctl status blue*
● bluez-5.49.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

● bluez-5.49.tar.xz.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

● bluez-alsa-master.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)


Die Dimmfunktionen funktionieren. Aber wenn die Befehle der setTime.pl ausprobiere wird der Pixoo schwarz und reagiert gar nicht mehr auch nicht mit dem Button. Muss ich dann neu starten :/
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 15 Oktober 2019, 11:25:00
Es gibt ungünstige Konstellationen von Funktionen.
Probier mal nach dem Timesync zu dimmen auf
50% oder 100%. Meist ist das Display nur auf
Null gedimmt.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: namron2000 am 15 Oktober 2019, 14:09:08
Also, bei mir gehen nicht alle Befehle, wenn ich in setScreen.pl  set clock ausführe kommt die Temperatur und das Datum. Ich komme durch keinen Befehl auf Die Normale Uhr zurück. Die set animation App und der equalizer gehen ohne Probleme. Die andere Befehle führen Teilweise auch ander Sachen aus. Könntest du mir deine Datein für das Pixoo noch mal schicken oder Posten. Denke das die Befehle zum teil nicht für das Pixoo stimmen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 15 Oktober 2019, 14:25:06
Die Befehle unterscheiden sich leider mehr oder weniger bei allen Geräten von Divoom. Aurabox und Timebox sind noch sehr ähnlich, bei der TimeBoxEvo und Pixoo sieht es dagegen schon ganz anders aus.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 15 Oktober 2019, 14:59:50
Da hat der mumpitzstuff recht.

@namron2000

Im ersten Post sind doch Rawcodebeispiele. Musst
du durchscrollen.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 28 Oktober 2019, 21:56:59
So habe jetzt die Timebox wieder eingebunden und dein Clocksync Script geht. Allerdings habe ich immer noch das Problem, das nach einem disconnect im Script das bluetooth Symbol 10-15 Skunden auf der Timebox blinkt und danach erst wieder zum letzten eingestellten Screen wechselt. Das ist irgendwie nervig.
Ich wollte es daraufhin mal mit pairen versuchen, das hat aber nicht geplappt. Ich kann immer nur mit connect auf die Timebox zugreifen
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 Oktober 2019, 23:17:22
Ok super.

Merkwürdig, bei mir funktioniert der Reconnect im Moment tadellos. Getestet mit aktuellem Buster und der alten Aurabox sowie TimeboxEvo.
Für die Aurabox habe ich im Moment nur /etc/asound.conf angepasst

pcm.!default {
        type plug
        slave.pcm {
                type bluealsa
                device "11:75:58:45:59:81" #Aurabox <- hier passende Mac des Speakers eintragen
                profile "a2dp"
delay 10000
        }
}

Falls das nicht reicht, folgendes in der /etc/rc.local einfügen

echo -e "connect 11:75:58:45:59:81" | bluetoothctl
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 29 Oktober 2019, 01:31:49
Hmm komisch irgendwann ging es. Habe auch mit Trust gespielt usw. Connect musste ich auch 2x machen, denn beim ersten Mal wurde nur der Speaker connected und erst beim zweiten Mal die eigentliche timebox. Dummerweise ist ja die Mac gleich und nur der Port unterscheidet sich.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 Oktober 2019, 07:09:06
Wenn etwas seitens der Treiber vermurkst ist, dann so richtig  ;D

Bei meiner Aurabox war das vorgehen am Anfang von bluealsa immer

1. Es funktionierte nicht, dann in bluetoothctl untrust, delete und reboot.
2. Scan on, pair der Box, trust der Box.
3. Anlegen oder hinzufügen wie oben in der asound.conf
4. Die rc.local folgendermaßen angepasst.

#!/bin/bash
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sleep 2
echo -e "connect 11:75:58:45:59:81" | bluetoothctl
sleep 5
rfcomm bind 0 11:75:58:45:59:81 1
exit 0

Das sleep war wichtig, wegen Timing.

5. Ein Reboot, und der war auch immer wichtig. Weil es nur danach funktionierte, und auch nur dann. Disconnect und Connect im laufenden Betrieb ging nicht.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 27 Dezember 2019, 20:37:10
Hallo,

die Integration in FHEM funktioniert bei mir nicht wirklich.
Wenn ich in der FHEM Kommandozeile:

{system("sudo perl /opt/fhem/divoom/setWeather.pl &")}

eingebe, passiert leider nix. Wenn ich:

perl setWeather.pl
im Terminal eingebe, schaltet die Timebox korrekt auf die Wetteransicht um.
Die Rechte sollten ok sein:

pi@FHEM:/opt/fhem/divoom $ ls -la
insgesamt 100
drwxr-xr-x  4 fhem dialout  4096 Dez 27 20:13 .
drwxrwxrwx 14 fhem dialout  4096 Dez 25 21:37 ..
drwxr-xr-x  2 fhem dialout  4096 Dez 25 21:36 aurabox
-rw-r--r--  1 fhem dialout  3735 Dez 25 21:36 commands.txt
-rw-r--r--  1 fhem dialout 10852 Dez 25 21:39 divoom.pl
-rw-r--r--  1 fhem dialout 35149 Dez 25 21:36 LICENSE
-rw-r--r--  1 fhem dialout  3943 Dez 25 21:36 README.md
-rw-r--r--  1 fhem dialout   946 Dez 25 22:10 setAnimation.pl
-rw-r--r--  1 fhem dialout   545 Dez 25 21:36 setCalendar.pl
-rw-r--r--  1 fhem dialout   164 Dez 26 22:22 setClock.pl
-rw-r--r--  1 fhem dialout   280 Dez 26 20:28 setPicture.pl
-rw-r--r--  1 fhem dialout   294 Dez 25 21:36 setPictureTbEvo.pl
-rw-r--r--  1 fhem dialout   488 Dez 26 21:29 setScreen.pl
-rw-r--r--  1 fhem dialout   801 Dez 25 22:15 setWeather.pl
drwxr-xr-x  2 fhem dialout  4096 Dez 25 21:36 timebox

Hat jemand eine Idee?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 28 Dezember 2019, 10:09:25
Morgen,

ich nutze

fhem    ALL=NOPASSWD: ALL
in /etc/sudoers. Was grundsätzlich nicht zu empfehlen ist. Löst aber (ist schon lange her, ich weiß es nicht mehr genau) das Problem.

Schau mal hier. Da gibt es auch eine sichere Lösung.

https://forum.fhem.de/index.php/topic,12611.15.html
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 28 Dezember 2019, 22:38:26
Hi,

hilt leider nicht. Timebox reagiert weiterhin nicht auf FHEM Befehle.

Das Logfile sagt:

Can't locate ./divoom.pl in @INC (@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/arm-linux-gnueabihf/perl5/5.24 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base) at /opt/fhem/divoom/setWeather.pl line 2.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 Dezember 2019, 10:30:11
Morgen,

ändere mal den Pfad im Script (Arbeitsverzeichnis).

require "./divoom.pl";
zu

require "/opt/fhem/divoom2/divoom.pl";
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 29 Dezember 2019, 18:44:31
Vielen Dank für den Tip. Hat soweit funktioniert.

Leider funktioniert das Absenden eines zweiten Befehls nicht ganz so wie es soll.
Nachdem ich setWeather.pl aus der FHEM Konsole aus ausgeführt habe, kann ich einen weiteren Befehl erst ca. 2-3 Minuten später abschicken. Vorher reagiert die Box nicht....?!

Eine Idee?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 29 Dezember 2019, 19:13:33
Super,

kurze Frage von mir. Du nutzt das Script nicht remote per SSH, sonder auf dem gleichen Rechner/Pi, an dem die Box per Bluetooth
connected ist und auf dem Fhem läuft?
Wenn ja, dann muss ich die Info im ersten Post hinzufügen. Ich hatte die Pfadangabe wegen SSH drinne. Ohne klappte
es da nicht. Anscheinend ist es aber auch ein Problem, was beim ausführen in Fhem besteht.

Zu  setWeather.pl
Das mit Wetter ist etwas zickig, zumindest bei den 16x16 Pixelboxen. Da sich an Regeln gehalten werden muss. Erst auf Wetter umschalten,
dann Temps oder WetterAni setzen. Die Timebox habe ich nicht. Vielleicht weiß da @mumpitzstuff mehr.

Welche setWeather.pl benutzt du?
Welche Timebox hast du? Die 11x11Pixelbox oder eine Evo mit 16x16Pixeln?

Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 29 Dezember 2019, 20:46:57
Hi,

korrekt. FHEM, Script und Timebox hängen/laufen auf dem selben PI.
Ich habe eine 11x11 TimeboxMini und nutze zu Testzwecken die Skripte von mumpitzstuff.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 29 Dezember 2019, 21:14:43
Das ist einfach zu erklären. Das Script läuft so lange. Es soll die Möglichkeiten demonstrieren und schaltet daher viele Dinge nacheinander durch, wartet dann 10s und schaltet das nächste ein. Kommentiere einfach diverse setPlain Kommandos aus oder ändere den zweiten Parameter des setPlain Funktionsaufruf.

sendPlain('5F0101', 10, 0);wartet 10s

sendPlain('5F0101', 1, 0);wartet 1s
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 30 Dezember 2019, 23:36:32
@mumpitzstuff

schau dir das mal an. Wegen Animation auf Evo und co.

https://github.com/RomRider/node-divoom-timebox-evo/blob/9622c4fc6ace04861cafa5854bb967a8e47d16be/test/drawing/drawing.spec.ts
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 31 Dezember 2019, 00:47:21
Sieht so aus als ob er die Animationen hinbekommen hat. Muss gucken ob ich da was machen kann. Unsere Kleinste lässt mir aktuell kaum Zeit für irgendwas.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: schwatter am 31 Dezember 2019, 10:12:42
Ja Entschleunigung  ;D, bei mir auch Nr.2 im Februar. Kein Problem.

Hier is noch Banner/Text/Runningtext

https://github.com/RomRider/node-divoom-timebox-evo/blob/9622c4fc6ace04861cafa5854bb967a8e47d16be/test/drawing/text.spec.ts
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 01 Januar 2020, 14:21:19
Vielen Dank für eure Antworten.
Mit euren Hinweisen habe ich es hinbekommen. Top. Danke.
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 15 Januar 2020, 18:21:53
jedes Mal wenn ich ein Bild auf meiner Timebox anzeigen lassen möchte bekomme ich den folgenden Fehler

Can't locate object method "alpha" via package "GD::Image" at /opt/fhem/divoom/divoom.pl line 271.
Idee?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 16 Januar 2020, 09:06:40
Die Funktion wurde in einer relativ alten Version hinzugefügt:

2.56_03 * add alpha method

Inzwischen gibt es 2.71. Kannst du versuchen ein Update der Bibliothek zu machen?
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 16 Januar 2020, 19:00:01
welche Bibliothek genau?  :-\
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 16 Januar 2020, 21:13:01
Normalerweise über:

sudo apt-get install libgd-perl
oder

cpan App::cpanminus
cpanm GD
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 17 Januar 2020, 18:54:36
ist alles installiert und aktuell...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 18 Januar 2020, 00:26:46
Bitte mehr Details. Was bedeutet aktuell? eine Version wäre schön. Hast du Buster oder was älteres am laufen?

sudo dpkg -s libgd-perl
Bei mir kommt dann unter anderem: Version: 2.71-2

Oder aber:

sudo cpan -D GD
Da steht dan: Installed: 2.71
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 18 Januar 2020, 09:05:41
bei mir läuft Raspbian Stretch
bei der Installation/Update der Pakete kam immer die Meldung, dass die aktuellen Versionen installiert seien.
Scheint aber nicht der Fall zu sein?!

sudo dpkg -s libgd-perlVersion: 2.53-3+b1

sudo cpan -D GDGD
-------------------------------------------------------------------------
(no description)
R/RU/RURBAN/GD-2.71.tar.gz
/usr/lib/arm-linux-gnueabihf/perl5/5.24/GD.pm
Installed: 2.53
CPAN:      2.71  Not up to date
Reini Urban (RURBAN)
reini.urban@gmail.com
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 18 Januar 2020, 23:03:30
sudo cpan upgrade GD
Wie sieht’s damit aus? Du bist genau eine Version unter der benötigten...
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: LaMa163 am 18 Januar 2020, 23:16:45
Scheint kein Update installieren zu können.


@FHEM:~ $ sudo cpan upgrade GD
Loading internal null logger. Install Log::Log4perl for logging messages
Reading '/root/.cpan/Metadata'
  Database was generated on Sat, 18 Jan 2020 05:55:12 GMT
Warning: Cannot install upgrade, don't know what it is.
Try the command

    i /upgrade/

to find objects with matching identifiers.
Running install for module 'GD'
Checksum for /root/.cpan/sources/authors/id/R/RU/RURBAN/GD-2.71.tar.gz ok
'YAML' not installed, will not store persistent state
Configuring R/RU/RURBAN/GD-2.71.tar.gz with Makefile.PL
Package gdlib was not found in the pkg-config search path.
Perhaps you should add the directory containing `gdlib.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gdlib' found
 at Makefile.PL line 449.
*** can not find package gdlib
*** check that it is properly installed and available in PKG_CONFIG_PATH
 at Makefile.PL line 449.
Warning: No success on command[/usr/bin/perl Makefile.PL INSTALLDIRS=site]
  RURBAN/GD-2.71.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- NOT OK



Gesendet von iPhone mit Tapatalk
Titel: Antw:Divoom Aurabox + Timebox + TimeboxEvo [Update, kommunizieren funktioniert]
Beitrag von: mumpitzstuff am 19 Januar 2020, 00:05:27
https://comery.github.io/2018/08/15/An-error-when-install-perl-module-GD/ (https://comery.github.io/2018/08/15/An-error-when-install-perl-module-GD/)