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

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

Vorheriges Thema - Nächstes Thema

schwatter

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.


  • Aurabox (10 x 10 Pixel)
  • TimeBox/ TimeboxMini (11 x 11 Pixel)
  • TimeboxEvo/ Pixoo (16 x 16 Pixel) <-- Einschränkung, Animationen. Siehe unten (Animationen - 16 x 16 Pixeldevices)

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://tiny.cc/go2tb


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


  • Auf dem PC

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


  • Auf dem Pi oder LinuxPc

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


  • Animationen - 16 x 16 Pixeldevices

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




  • Gif extrahieren und senden

#!/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


  • Timesync (Jahr/Mon/Tag/Std/Min/Sek) für alle Devices

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



  • Wetter - Übergabe der Temp aus Fhem

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

jonah

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


achtball

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

schwatter

Für 36€ bei Amazon gebraucht mit sehr gut geschossen.
Ich probier mich auch mal   :D

schwatter

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.

Hembo

Ich bin nun auch im Club und fände die Timebox klasse ... Hat schon jemand Fortschritte gemacht ?

schwatter

#6
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


schwatter

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





mumpitzstuff

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?

schwatter

#9
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




schwatter

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



schwatter

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#

mumpitzstuff

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.

schwatter

#13
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





mumpitzstuff

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.