Sunricher SR 2820 Wifi

Begonnen von mike1992, 23 Februar 2015, 17:06:33

Vorheriges Thema - Nächstes Thema

turi

#75
So, ich habe nun auch ein wenig getestet. Es sieht schon nicht so schlecht aus. Ich habe allerdings ein paar Kleinigkeiten angepasst im Quellcode, ohne zu wissen, ob das richtig ist. Aber es gibt damit zumindest Erfolge. Auf jeden Fall ist es so, dass man für einen Befehl immer eine komplette Sequenz schicken muss. Die Farben für RGB sind dann 3 Befehle. Das habe ich in der WifiLight_RGBWSunricher_setHSV mal testweise gemacht.


  # convert to device 4 channels (remaining r,g,b after substract white, white, rgb)
  my ($rr, $rg, $rb, $white) = WifiLight_HSV2fourChannel($h, $sat, $gammaVal);
  my $msg = pack('C*', 0x55, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x08, 0x18, $rr, 0x00, 0xAA, 0xAA);
  $msg = WifiLight_Sunricher_Checksum($ledDevice, $msg);
  $ledDevice->{helper}->{llLock} += 1; 
  WifiLight_LowLevelCmdQueue_Add($ledDevice, $msg, $receiver, $delay);

  my $msg = pack('C*', 0x55, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x08, 0x19, $rg, 0x00, 0xAA, 0xAA);
  $msg = WifiLight_Sunricher_Checksum($ledDevice, $msg);
  $ledDevice->{helper}->{llLock} += 1; 
  WifiLight_LowLevelCmdQueue_Add($ledDevice, $msg, $receiver, $delay);

  my $msg = pack('C*', 0x55, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x08, 0x20, $rb, 0x00, 0xAA, 0xAA);
  $msg = WifiLight_Sunricher_Checksum($ledDevice, $msg);
  $ledDevice->{helper}->{llLock} += 1; 
  WifiLight_LowLevelCmdQueue_Add($ledDevice, $msg, $receiver, $delay);


Damit kann man dann die Farben setzen. Ganz sauber funktioniert es noch nicht mit RGB. Ich nehme an, da beeinflussen sich noch ein paar Parameter, wird ja alles auf HSV umgewandelt, wenn ich das richtig sehe, bzw. zurück.

Auch beim Einschalten bzw. Ausschalten funktioniert das noch nicht ganz richtig mit der letzten Einstellung. Hier braucht man aber eigentlich wirklich nur die beiden Befehle verwenden und nichts an den Farben/Sättigung etc. ändern. Das macht der Controller selbst. Habe auch hier ein wenig geändert.


sub
WifiLight_RGBWSunricher_On(@)
{
  my ($ledDevice, $ramp) = @_;
 
  my $delay = 50;
  my $on = pack('C*', 0x55, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x02, 0x12, 0xAB, 0x00, 0xAA, 0xAA );
  my $receiver;
 
  $on = WifiLight_Sunricher_Checksum($ledDevice, $on);
  WifiLight_LowLevelCmdQueue_Add($ledDevice, $on, $receiver, $delay);
 
  my ($h, $s, $v) = split(',', AttrVal($ledDevice->{NAME}, "defaultColor", "0,0,100"));
  Log3 ($ledDevice, 3, "$ledDevice->{NAME} RGBW Sunricher set on ($h, $s, $v) $ramp");
  return WifiLight_HSV_Transition($ledDevice, $h, $s, $v, $ramp, '', 100, undef);
}

sub
WifiLight_RGBWSunricher_Off(@)
{
  my ($ledDevice, $ramp) = @_;
 
  my $delay = 50;
  my $on = pack('C*', 0x55, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x02, 0x12, 0xA9, 0x00, 0xAA, 0xAA );
  my $receiver;
 
  $on = WifiLight_Sunricher_Checksum($ledDevice, $on);
  WifiLight_LowLevelCmdQueue_Add($ledDevice, $on, $receiver, $delay);
 
  my ($h, $s, $v) = split(',', AttrVal($ledDevice->{NAME}, "defaultColor", "0,0,100"));
  Log3 ($ledDevice, 3, "$ledDevice->{NAME} RGBW Sunricher set on ($h, $s, $v) $ramp");
  return WifiLight_HSV_Transition($ledDevice, $h, $s, $v, $ramp, '', 100, undef);
}


Beim Dimmen wird ja auch eine eigene Berechnung angesetzt. Das hat gewisse Vorteile, weil man nicht auf die Stufen vom Controller festgelegt ist. Aber irgendwie scheint da auch manchmal etwas mit der Berechnung nicht zu stimmen. Dimdown hat funktioniert, dimup aber nicht. Kann aber noch nicht genau sagen, warum. Es dürfte aber generell nur in bestimmten Grenzen funktionieren, denn wenn ein Wert am Ende ist beim Herunterfahren, kann man den auch nicht mehr hochfahren. Dann wären die Stufen doch besser, weil die unabhängig von der eingestellten Farbe funktionieren.

Soweit erst mal von mir.

Edit: noch mehr Begeisterung macht sich breit  ;D habe es mal in meine Oberfläche eingebunden ... siehe Bild


herrmannj

Hi,

danke. Ich lade gleich noch mal ein update hoch

vg
joerg

herrmannj

So,

hier sollten folgende device möglich sein:

DualWhite Sunricher
RGB Sunricher
RGBW Sunricher
RGB SunricherA
RGBW SunricherA

Bei den farbigen ist Sunricher der mit 0x00->0x80 und der SunricherA ist 0x00->0xFF

Bei den DualWhite sollte on/off/dim etc funktionieren. CT noch nicht.

ZitatGanz sauber funktioniert es noch nicht mit RGB. Ich nehme an, da beeinflussen sich noch ein paar Parameter,
Das müsstest Du bitte nochmal präzisieren.
ZitatAuch beim Einschalten bzw. Ausschalten funktioniert das noch nicht ganz richtig mit der letzten Einstellung.
Das ist vmtl korrekt. Bei "on" wird die Farbe aus dem attrib "defaultColor" gewählt. Das soll auch so. Die Farbe bleibt erhalten wenn Du mit "dim 100" einschaltest.
Zitatdenn wenn ein Wert am Ende ist beim Herunterfahren, kann man den auch nicht mehr hochfahren
Das verstehe ich nicht. Nach einem RGB #000000 kann man kein #FFFFFF senden ? Sicher ?

Generell müssen Gamma, Color Korrektur etc noch getuned werden. Außerdem müssen wir nochmal sehen ob bei dem nicht A jetzt 0x7F oder 0x80 das max ist.

vg
joerg


turi

ZitatBei "on" wird die Farbe aus dem attrib "defaultColor" gewählt. Das soll auch so. Die Farbe bleibt erhalten wenn Du mit "dim 100" einschaltest.

defaultColor habe ich nicht, bei den Readings habe ich nur RGB usw. und das wird dann wahrscheinlich gewählt.
RGB 27ED11
brightness 93
hue 114
saturation 93
state on


Aber wie schon geschrieben, eigentlich macht das der Controller (und alle die ich sonst so kenne) selbst, man muss sich eigentlich nicht darum kümmern. Schlecht ist leider nur, dass man aus dem Controller keine aktuellen Werte auslesen kann, zumindest ist mir nichts bekannt.

ZitatDas verstehe ich nicht. Nach einem RGB #000000 kann man kein #FFFFFF senden ? Sicher ?
Das meine ich anders. Nehmen wir an, RGB ist 20 00 FF. Wenn ich dimdown aufrufe, werden diese Werte dann verringert. Aber 20 ist eher bei Null als FF und damit wird die Farbe verändert werden. Beim Hochdimmen wird es dann nicht mehr das gleiche sein, aber dagegen kann man eigentlich nichts machen. Hier denke ich, dass die Dimm-Stufen vom Controller aber die Farbe "behalten", egal wie oft man in eine Richtung dimmt.

Ansonsten teste ich nochmal in Ruhe die nächsten Tage. Wie ich schon schrieb: Begeisterung macht sich breit.


herrmannj

Moin, Moin
Zitat
defaultColor habe ich nicht,
Doch. Ist ein Attribut, kein reading.
ZitatDas meine ich anders. Nehmen wir an, RGB ist 20 00 FF. Wenn ich dimdown aufrufe, werden diese Werte dann verringert. Aber 20 ist eher bei Null als FF und damit wird die Farbe verändert werden. Beim Hochdimmen wird es dann nicht mehr das gleiche sein, aber dagegen kann man eigentlich nichts machen. Hier denke ich, dass die Dimm-Stufen vom Controller aber die Farbe "behalten", egal wie oft man in eine Richtung dimmt.
Achso.

Dimmen funktioniert schon viel ausgefeilter. Schau Dir mal die Hilfe an, der deutsche Teil ist komplett. Dort auch HSV anschauen.
Beim dimmen. Wenn ich runter dimme und danach wieder rauf landet man natürlich dort wo man herkommt. Bei ganz geringen Helligkeiten kommt die Quantisierung des PWM ins Spiel - gibt halt keine halben Bit. Ist aber immer so.

vg
Joerg

szerb

@herrmannj

so, ich habe getestet.
"set on" funktioniert, aber sonst kein anderer Befehl.
Brauchst du noch irgendwelche Infos (Logs..).

Markus

turi

ohne die Änderungen, die ich gemacht hatte, ging bei mir auch nur setOn (hat ausgeschaltet), ich weiß nicht, ob jetzt schon eine neuere Version existiert. Ansonsten mal die Funktionen von mir kopieren. In der setHSV habe ich aber weiß noch nicht mit drin.

szerb

@turi

ich habe, zu deiner Info, die DualWhite von Lead Dynamic.

Markus

herrmannj

#83
Zitat von: turi am 07 Januar 2016, 11:45:03
ohne die Änderungen, die ich gemacht hatte, ging bei mir auch nur setOn (hat ausgeschaltet), ich weiß nicht, ob jetzt schon eine neuere Version existiert. Ansonsten mal die Funktionen von mir kopieren. In der setHSV habe ich aber weiß noch nicht mit drin.

Hi,

bitte mit der neuen Version von gestern Abend testen und auf das define achten. Also RGB oder RGBW je nach LED und Sunricher oder SunricherA. Ohne "A" hat einen Wertebereich 0x00 - 0x80 und mit hat 0x00 - 0xFF.

Wir sind ja im Test und in der Findung. Nicht volle Funktion erwarten, wir müssen uns da annähern.

Für die Dual White habe ich die Befehle so umgesetzt wie ich sie aktuell verstehe. Da kann es aber genauso sein das unterschiedliche Versionen existieren. Du kannst ja mal das attrib verbose der LED auf 5 stellen, danach

"on"
"dim 10"
"dim 50"
"dim 100"

ausführen und den Logauschnitt dazu hier posten.

Danke und vg
Joerg

edith: die White wird definiert als "DualWhite Sunricher" ! Bitte unbedingt das alte device löschen und ein neues so anlegen !

szerb

@herrmannj

anbei das Log-file.
eingeschaltet,ausgeschaltet und gedimmt.
wie schon geschrieben nur das set on funktioniert.

markus

herrmannj

Hi & Danke

ich denke ich habe eine Idee. Neue Version heute Abend.

vg
joerg

herrmannj

Kommando zurück:

... ich dachte eben die chksum wäre falsch. Da habe ich mich aber von Hand verrechnet, im Modul ist es richtig. Ist also was anderes.

Mal schauen ob das bei Peterk_de läuft, von dem sind ja die sniffs für die white. Evtl läuft es bei ihm und Du hast einen Version. Anderfalls hilft Peter bestimmt das einzugrenzen, er hat sich ja mit der white intensiv beschäftigt.

Plan c wäre sonst das Du Markus noch mal das Protokoll sniffst. Müssen wir dann sehen.

Möglich wäre auch das die Zonen (sind jetzt auf #0xff) auf 0x00 oder 0x01 stehen müssen. Mal schaun wie das bei Peter aussieht.

vg
joerg

vg
joerg

turi

Ich habe übrigens ein kleines Java-Tool zum Sniffen. Man startet es als Proxy mit der Adresse des Controllers und verbindet sich dann mit der App mit dem Rechner. Ist nicht von mir, sondern dem Entwickler der API. Hier mal die "Doku":

Der proxy bekommt als erstes argument die ip adresse des richtigen servers.
darauf hin den port. beispiel unter linux:

java -jar ./proxy.jar 10.10.100.254 8899

es wird tcp verwendet.

darauf hin kannst du dich mit deiner ios app auf deinen rechner verbinden.
dazu die ip des rechners angeben (windows ->firewall beachten). Der Port auf
dem Rechner ist der gleiche wie im proxy für den server angegeben. also im
Beispiel 8899.

jetzt die eingaben tätigen. und bevor der proxy beendet wird die screenshots
anfertigen bitte. nachdem du dich disconnectect hast solltest du den proxy
mit ctrl+c beenden (der ist ab jetzt in einem undefinierten zustand :-))

es sollte etwa so aussehen:

florian@fx:~/Desktop$ java -jar ./proxy.jar 10.10.100.254 8899
waiting for clients
client acepted
55 33 61 39 02 01 01 01 53 58 fd fd 00 00 00
55 33 61 39 02 01 01 01 54 59 fd fd 00 00 00
55 33 61 39 02 01 01 01 55 5a fd fd 00 00 00

herrmannj

du sach mal. Das hört mit fd fd auf. ..

Ist das ein richtiger sniff ? Bisher hatten wir immer aa aa ... ?

vg
joerg

turi

ignoriere mal die Daten da, keine Ahnung, wie das zu Stande kam, war nur ein Beispiel, was er mir per Mail geschickt hatte. Habe meinen letzten Sniff auch damit gemacht und da kamen die Daten wie oben gepostet.

Ich kann Dir wie gesagt gern mal so ein Teil zusenden mit etwas Flexband dran.