Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe Stringcast

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Hilfe Stringcast

    Hallo zusammen,

    ich habe vor mein Heim mit KNX auszustatten und #mich für den EibPC² als Server entschieden. Das Projekt würde ich gerne zum Großteil selber umsetzen und wenn die Zeit es zulässt, dann bringe ich mir das programmieren bei. Ich hatte auch schon einige kleinere Erfolge aber jetzt beiße ich mir die Zähne aus und würde euch um eure Hilfe bitten. Ich bin kein gelernter Programmierer hatte aber ein bisschen in der Schule/Uni damit zu tun.

    Zu meinem Problem. Die Lichtsteuerung erfolgt über Dali und die LED Strips sind RGBW. Ich habe ein wenig hin und her experimentiert und habe mich letztlich entschieden die R/G/B/W Kanäle jeweils über eine Gruppenadresse mit einem Byte anzusteuern. So umgehe ich Kompatibilitätsprobleme.

    Gerne würde ich den Farbwahlslider aus der VISU verwenden, um einen RGBW Strip zu steuern. Mein Grundgedanke ist es eine Gruppenadresse für die RGB Kanäle im Formatl u24 für den Slider zu definieren und hier jeweils die einzelnen Werte für R, G und B per Stringcas zu extrahieren und auf die entsprechenden Gruppenadressen zu schreiben. StringRGB ist die Variable für den in der Visu ausgewählten Farbwert und RGBR, RGBG und RGBB sind die Farbwerte, welche auf die entsprechenden Gruppenadressen geschrieben werden sollen. Leider funktioniert das gar nicht! Der EibPC schreib auf die Farbkanäle immer die Werte 0, 0 und 0. Kann mir bitte jemand sagen, wo mein (Denk/Verständnisfehler) Fehler liegt? Hier der Code:

    StringRGB=0u24;
    RGBR=0u08;
    RGBG=0u08;
    RGBB=0u08;


    If event("RGB-3/1/10") then {
    StringRGB="RGB-3/1/10";
    RGBR=stringcast(StringRGB,0,1u24);
    RGBG=stringcast(StringRGB,0,2u24);
    RGBB=stringcast(StringRGB,0,3u24);
    write("R-3/1/1",RGBR);
    write("G-3/1/2",RGBG);
    write("B-3/1/3",RGBB);
    }endif​

    #2
    Das klappt so nicht, weil stringcast Daten aus einem String extrahiert, deine u24-GA ist aber keiner. Sollte eigentlich der Parser abfangen, tut er aber scheinbar nicht.
    Du brauchst die Shift-Funktion um neg. Werte (also mach rechts) und ein convert zu u08 (ungetestet)

    Code:
    RGBR=convert("RGB-3/1/10", 0);
    RGBG=convert(shift("RGB-3/1/10", -8s16), 0);
    RGBB=convert(shift("RGB-3/1/10", -16s16), 0);
    write...
    ​​​​

    Kommentar


      #3
      Danke für die Hilfe! Ich musste noch den Wert s16 in s08 der shift Funktion ändern und dann lief es. Hier der Code:

      StringRGB=0u24;
      RGBR=0u08;
      RGBG=0u08;
      RGBB=0u08;

      if event("RGB-3/1/10") then {
      RGBSli="RGB-3/1/10";
      RGBB=convert(StringRGB,0);
      RGBG=convert(shift(StringRGB,-8s08),0);
      RGBR=convert(shift(StringRGB,-16s08),0);
      write("R-3/1/1",RGBR);
      write("G-3/1/2",RGBG);
      write("B-3/1/3",RGBB);

      }endif​

      Kommentar

      Lädt...
      X