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

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

Vorheriges Thema - Nächstes Thema

schwatter

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#

mumpitzstuff

#181
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)?!?

schwatter

Jetzt weiß ich warum wir aneinander vorbeireden. Du erwartest das sich Pixel einfärben. Bei mir passiert aber leider nichts...

mumpitzstuff

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

mumpitzstuff

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.

schwatter

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#

mumpitzstuff

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.

schwatter

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

schwatter

-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.

schwatter

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

mumpitzstuff

Zitat 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.

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.

mumpitzstuff

#191
Zitat 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


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.

mumpitzstuff

#192
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.

schwatter

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 ^^

schwatter

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();
}