Counter voor Scene Lumento DX4 Color Selection

Rene de Waard
Rene de Waard Gebruiker, Specialist

Hallo,

Ik ben nog een beginnende KNX/XXter programmeur en ben op zoek naar een oplossing.

Ik heb een KNX verlichting schakelaar welke alleen 1 bit kan sturen. Mijn LED strip driver (Lumento Zennio DX4) heeft een adres als ik optie color selection aanzet. Dit is een scene van getal 1-22 met pre defined kleuren.

KNX adressen zijn als volgt:

XXter ColourSelection 1 = Byte waarde (Lumento DX4)

XXterColourSelection = Bit waarde (Schakelaar)


Ik heb nu een script gemaakt welke er zo uit ziet:

$COUNT = BYTE(337/XXterColourSelection1)

WHILE $COUNT< 22

 $COUNT = $COUNT+1

ELSE

 $COUNT = 1

En dan een Actie dat er zo uit ziet:

Voorwaarde: "Component" "XXterColourSelection" = 1

Acties: Script "Color Selection", "Start"


Kan iemand mij helpen hoe ik dit in XXter werkend krijg aangezien ik geen KNX logic module heb. Ik krijg het niet werkend :-)

Reacties

  • Harm Elzinga
    Harm Elzinga Administrator

    Beste Rene,

    Je bent een heel eind, de $count wordt echter nog niet naar een component gestuurd.

    Zet achter aan in het script:

    SET BYTE(337/XXterColourSelection1) TO $COUNT

  • Rene de Waard
    Rene de Waard Gebruiker, Specialist

    Goede avond Harm,


    Dat was de oplossing! Bedankt voor je hulp!

  • Rene de Waard
    Rene de Waard Gebruiker, Specialist
    20 July aangepast

    Goede avond Harm,


    Ik loop nu toch weer tegen een ander probleem aan. De script werkt nu zoals deze moet zijn echter bij het inschakelen van de verlichting zet de script ook direct al +1 en verschuif ik naar de volgende kleur. Is het mogelijk om de eerste puls te negeren betreft de script op te roepen?

  • Harm Elzinga
    Harm Elzinga Administrator

    Beste Rene,

    Dat hangt erg af van waar je het script mee start. Wat je zou kunnen doen, is wanneer de verlichting UIT geschakeld wordt (dus bij ontvangst van status BIT 0), dat je de BYTE(337/XXterColourSelection1) op 0 schrijft?


    Ik ben niet exact bekend met hoe je de Lumento werkt, dus het is even een gok of dat werkt.

  • Rene de Waard
    Rene de Waard Gebruiker, Specialist
    23 July aangepast

    Beste Harm,


    Ik heb het script tijdelijk gepauzeerd, omdat het me naar verwachting met dit script niet gaat lukken om de eerste puls van de verlichtingsschakelaar te negeren voor de kleurselectie.

    Wat ik wil bereiken, is dat de eerste puls van de schakelaar niet direct een stap (+1) in de kleurselectie veroorzaakt. Pas wanneer er binnen 5 seconden bewust een tweede puls volgt, wil ik dat de Lumento door de verschillende scènes heen gaat schakelen.

    Ik heb geprobeerd dit te realiseren met logic blocks in XXTER. In de bijlage heb ik de gebruikte blokfuncties toegevoegd.

    Het blok 'bitvertrager' wordt bij elke puls van de schakelaar opnieuw geactiveerd en stelt de timer telkens opnieuw in op 5 seconden.

    De 'Math'-block staat ingesteld op a - b. De bedoeling is dat, zolang de teller op 1 staat, de uitgang op 0 blijft. Pas bij een tweede puls binnen die 5 seconden zou de uitgang +1 moeten worden. Na 5 seconden zou de teller automatisch gereset moeten worden.

    Wat doe ik hier fout?


  • Harm Elzinga
    Harm Elzinga Administrator

    Beste Rene,

    Ik zou het via het script doen. Via het logica schema is dit denk ik erg lastig te realiseren.

    Als je zorgt dat het script begint bij 0 (of -1) en er 1 bij optelt, en deze alleen uitstuurt (via een IF) als deze boven de 0 komt, dan slaat hij de eerste over.


    Bijvoorbeeld als volgt, je hebt 2 scripts nodig.

    ======= SCRIPT 1 =========

    $teller = $teller +1

    if ($teller >22)

    $teller = 1

    if ($teller > 0)

     set BYTE(123/Lumento DX4) TO $teller


    WAIT 5 SEC

    $teller = -1

    ======= SCRIPT 2 =========

    $teller = -1

    ========================


    Script 2 dien je te starten bij het opstarten van de xxter (optie bij het script) en na de eerste keer inladen, kan je deze ook handmatig starten. Dit zorgt dat de variabele de juiste start waarde heeft.


    Dan HERstart je het SCRIPT1 met een actie bij het aansturen van de verlichting.

    De eerste keer wordt $teller 0, dan wordt deze nog niet uitgestuurd, omdat deze niet groter is dan 0.

    Als je niks meer bediend, wordt het script niet opnieuw gestart, en wordt na 5 seconde de $teller weer op -1 gezet.

    Bedien je binnen deze 4 seconde wel weer, dan wordt $teller groter dan 0, dus ook verstuurd.