Basierend auf: http://forum.loxone.com/dede/softwar...asung-35a.html
Da im Original-Thread verschiedene Lösungen diskutiert wurden habe ich mich entschlossen hier diejenige für den "Magic-UFO Wifi controller" LD382 / LD382A in PicoC zu sichern.
mit Interesse habe ich hier schon eine ganze Weile mitgelesen.
Daher habe ich mich entschlossen ebenfalls ein Magic Ufo zu bestellen und zusammen mit einem RGB- und einem warmweissen LED-Streifen zu testen.
Doch leider funktioniert das Script V0.3 bei mir nicht (mehr), denn offensichtlich habe ich eine "neue" Version des Magic Ufo ("LD382 NEW" oder "LD382A, FW 1.0.6") erhalten.
Ich musste das Script daher entsprechend anpassen, so dass es für mich aktuell funktioniert.
Leider habe ich kaum brauchbare Dokumentation zum "LD382 NEW" gefunden. Daher entstand die V0.4 hauptsächlich unter dem Motto: "try and error".
Wesentlich zur Lösung beigetragen hat dabei die Info von "herrmannj" zum wifilight https://github.com/herrmannj/wifilight.
Habe das Script nur wenige Stunden in meiner Testumgebung am Laufen, daher also ohne jede Funktionsgarantie!!!
//RGBW Lichtsteuerung mit Magic-UFO Wifi controller //Version 0.1 by N1ghth4wk //Version 0.2 by RL //Version 0.3 by Iksi //Version 0.4 by Freeride24, Mod for new version of Magic-UFO Wifi controller -> LD382A ab FW1.0.6 char szBuffer[128]; unsigned char intro, R, G, B, W, K, cs; float iA, iR, iG, iB, iW, iK; //Eingangswerte in Gleitpunkt float sA, sW, sK; //gespeicherte Variablen von letzen Senden char isON, ON; char cnt; //??? isON = 0; intro = 0x31; while(TRUE) { //von Eingängen gelesen //iA = getinput(0); //V0.4, Freeride24: Eingang iA in iW getauscht //iW = getinput(1); //V0.4, Freeride24: Eingang iW in iA getauscht iW = getinput(0); iA = getinput(1); iK = getinput(2); if ((iA!=sA) || (iW!=sW) || (iK!=sK)) { sA = iA; sW = iW; sK = iK; iB = iA / 1000000; B = (int)iB; iA = iA - (float)B * 1000000; iG = iA / 1000; G = (int)iG; iR = iA - (float)G * 1000; R = (int)iR; iR = iR * 2.55; iG = iG * 2.55; iB = iB * 2.55; iW = iW * 2.55; B = (int)iB; G = (int)iG; R = (int)iR; W = (int)iW; if ((B==0) && (G==0 ) && (R==0 )) { iB = W * iK / 100; B = (int)iB; G = B; R = B; } if ((B!=0) || (G!=0 ) || (R!=0 ) || (W!=0 )) { ON = 1; //cs = intro + R + G + B + W + 0 + 0; //V0.4, Freeride24: LD382 cs = intro + R + G + B + W + 0 + 0x0F; //V0.4, Freeride24: LD382A ab FW1.0.6 STREAM* stream = stream_create("/dev/tcp/192.168.xxx.xxx/5577",0,0); //sprintf(szBuffer,"%c%c%c%c%c%c%c%c", intro, R, G, B, W, 0, 0, cs); //V0.4, Freeride24: LD382 sprintf(szBuffer,"%c%c%c%c%c%c%c%c", intro, R, G, B, W, 0, 0x0F, cs); //V0.4, Freeride24: LD382A ab FW1.0.6 stream_write(stream,szBuffer,8); stream_flush(stream); stream_close(stream); sleep(10); } else { ON = 0; } if (ON != isON) { isON = ON; if (ON) { //sprintf(szBuffer,"%c%c%c", 0x71, 0x23, 0x94); //V0.4, Freeride24: LD382 sprintf(szBuffer,"%c%c%c%c", 0x71, 0x23, 0x0F, 0xA3); //V0.4, Freeride24: LD382A ab FW1.0.6 } else { //sprintf(szBuffer,"%c%c%c", 0x71, 0x24, 0x95); //V0.4, Freeride24: LD382 sprintf(szBuffer,"%c%c%c%c", 0x71, 0x24, 0x0F, 0xA4); //V0.4, Freeride24: LD382A ab FW1.0.6 } STREAM* stream2 = stream_create("/dev/tcp/192.168.xxx.xxx/5577",0,0); //stream_write(stream2,szBuffer,3); //V0.4, Freeride24: LD382 stream_write(stream2,szBuffer,4); //V0.4, Freeride24: LD382A ab FW1.0.6 stream_flush(stream2); stream_close(stream2); sleep(10); } } sleep(10); }
Evtl. hilft es ja dem ein oder Andern.
Viel Erfolg beim Testen,
Freeride24
P.S.:
Mittlerweile konnte ich das Script schon eine ganze Weile testen. Bei mir läuft es stabil ohne Probleme.
Allerdings hatte ich mit der neuen Loxone App Probleme, so dass sich der Controller zwischenduch nicht bedienen lies.
Mit der alten (schwarzen) App hatte ich das Problem nicht ein einziges Mal.
Kommentar