NEWS
Blockly Script -> ein Script für mehrere Trigger
-
@cheffe sagte in Blockly Script -> ein Script für mehrere Trigger:
-wenn der neue Wert des geänderten DAtenpunktes < 10, dann ändere die Temperatur, sonst ändere Hue und Saturation der entsprechenden Lampe.
und dann müsste die lange "wenn-Dann" Liste mit den Farbcodes aus meinem script da vermutlich einmal reinkopiert werden
könnt ihr mir da noch tipps geben, mit welchen BLocks ich arbeiten könnte?ich empfehle folgendes:
Eine Liste mit den "basis" Datenpunkten für temp, hue, sat - sprich wenn die Lampe unter 0_userdata.0.raum.lampe.hue, 0_userdata.0.raum.lampe.sat, 0_userdata.0.raum.lampe.temp ihre DP's hat, dann steht in der Liste "0_userdata.0.raum" drin
An stelle der einfachen Liste "temps" eine Liste von Listen, in denen jeweils in der Reihenfolge Temp, hue, sat drin stehen. Dabei ist zu beachten: Wenn einer der Werte angesteuert werden soll, so steht da ein positiver wert. Soll er nicht angesteuert werden steht da -1. Zum befüllen der Liste kannst du den Baustein "Liste aus Text" nehmen, um da z.Bsp. "-1,0,100" oder "5600,-1,-1" rein zu schreiben.Dann gibts Du diese Liste an die Funktion, und baust dir die ID entsprechend zusammen:
BasisID + ".temp" oder ".sat" oder ".hue", und setzt den State nur dann wenn der Wert der gesetzt werden soll > -1 ist.A.
-
@asgothian
danke
leider verstehe ich es nicht ganz..
könntest du dir vorstellen deine idee in auszügen (!) als blockly script für mich darstellen?Danke
-
hab mit den beiden liste mal angefangen... ich hoffe du meintest das so...
nur für den letzten Teil ieß ich nicht, wie ich das anstellen soll.. und was genau du damit meinst...
Dann gibts Du diese Liste an die Funktion, und baust dir die ID entsprechend zusammen:
BasisID + ".temp" oder ".sat" oder ".hue", und setzt den State nur dann wenn der Wert der gesetzt werden soll > -1 istsoll ich das im oben angefangenen Script einbauen? oder schlägst du da was ganz neues vor?
-
@cheffe als blockly bauen kann ich es nicht - kein blockly wenn ich unterwegs bin
Aber das was du gemacht hast ist erst einmal korrekt.
Wenn du die obere Liste in eine Variable "AlleBasisIDs" speicherst, und die die untere Liste in eine Variable "AlleFarben" speicherst, dann:
Jetzt definierst du dir noch eine Variable "Zielwerte", und an stelle des
kommt erst einmal eine Zuweisung auf diese Variable mit "in der Liste 'AlleFarben' nimm das 'idx'. element."
und eine Zuweisung auf eine neue Variable "BasisID" mit "in der Liste 'AlleBasisIDs' nimm das 'idx'. element."Dann kommen 3 Schreibe Blöcke (der aus dem Screenshot), wobei sich die Einträge für ObjektID und Wert ändern, jeweils hinter einem "falls"
falls (in der Liste Zielwerte nimm das 1. Element > -1) - darin den Schreibe Block it ObjektID als "Erzeuge Text aus 'BasisID'" und '".Temp", und als Wert "in der Liste 'Zielwerte' nimm das 1. Element"
falls (in der Liste Zielwerte nimm das 2. Element > -1) - darin den Schreibe Block it ObjektID als "Erzeuge Text aus 'BasisID'" und '".hue, und als Wert "in der Liste 'Zielwerte' nimm das 2. Element"
falls (in der Liste Zielwerte nimm das 3. Element > -1) - darin den Schreibe Block it ObjektID als "Erzeuge Text aus 'BasisID'" und '".sat", und als Wert "in der Liste 'Zielwerte' nimm das 3. Element"
Ich hoffe das hilft erst einmal
-
hui... das fand ich jetzt nicht ganz einfach...
zunächst hatte ich noch die frage: "idx" ist auch eine selbst angelegte Variable, oder? Die habe ich bei mir anders genannt.Mein Script sieht jetzt so aus... meintest du das so?
-
@cheffe
Exakt.Wichtig ist jetzt noch: der Datenpunkt für die Farbtemperatur muss jetzt z.Bsp. auch
fritzdect.0.DECT_130770174577-1.temp
sein. Ansonsten müsstest du das .temp so anpassen das es zum Datenpunkt passt. Dito mit saturation und HueA.
-
@asgothian
ja, das hab ich schon gemerkt und in ".temperature" und ".saturation" angepasst.
Ich bekomme auch minimal Änderungen an der Farbe hin, es scheint also im Grunde zu funktionieren.
Aktuell bekomme ich aber über mein Script nur eine Änderung hin, danach ändert sich nix mehr...
muss ich das Script irgendwie nach Änderung "anhalten" , "beenden" oder neustarten? -
@cheffe Nein, aber ich denke du hast ein Problem mit dem "aktiven Schalter".
Da du da die ID des Schalters rein schreibst ändert die sich nicht wenn du mit dem gleichen Schalter spielst.
Lösung dazu: im Trigger den aktiven Schalter Datenpunkt auf "" setzen, und vor dem Ermitteln des Index schauen ob der "" ist - dann tust du nix.
A.
-
@asgothian
ich denke so meintest du?
was genau meinst du mit "Ermitteln des Index ...."?
-
@cheffe sagte in Blockly Script -> ein Script für mehrere Trigger:
@asgothian
ich denke so meintest du?
was genau meinst du mit "Ermitteln des Index ...."?
Nein - sorry, das was ich vorhin geschrieben hab war Unsinn.
Du hast ja eine Liste an Schaltern von denen sich ein beliebiger ändert. Dementsprechend sollte das auch ohne
mehrfach funktionieren. Da hab ich auf dem Weg raus nicht richtig gelesen.Genau bin ich noch nicht sicher warum es nicht geht. Bau doch mal einen Debug-Baustein in den Trigger und lass mitloggen wann der Anspricht und welche ObjektID den Trigger auslöst.
A.
-
wie muss ich den einbauen? was muss ich da einrichten?
-
@cheffe es gibt unter System einen Baustein "debug output" oder so. Den einsetzen, die Nachricht über text-zusammensetzen zusammen basteln und an den Block hängen. Wichtig. diesen Baustein da mit einbauen:
-
@asgothian
sorry... mit dem debug ding bin ich völlig überfordert... das müsste ich vielleicht nochmal später ausführlicher erklärt bekommen oder mich belesen...ich habe gerade das gefühl, dass immer der erste Farbeintrag (also Wert "1" warmweiß) eingestellt wird.
Es scheint also noch einen Fehler zu geben, dass der Code (Zahl zwischen 1-45 aus dem Dropdown-Menü) nicht richtig verarbeitet wird...
also ich glaube in der Verarbeitung von "nummer-aenderung"könntest du das nochmal gerade prüfen?
muss nicht bei der Festlegung von "Zielwertfarbe" irgendwie auf den Value (also Wert 1-45) des zuletzt veränderten Objektes zurückgegriffen werden? da kann doch der Bezug zur "nummer-aenderung (1-3, je nachdem welcher schalter bedient wurde) nicht passen..
oder ??? -
@cheffe sagte: so sieht es bisher bei mir aus
Ich würde für "hue" und "sat" eine Liste mit 2 Elementen nehmen, etwa so:
-
@paul53
sieht ähnlich aus, aber doch mit gewissen abweichungen...
könntest du mir das gerade mal exportieren, damit ich nicht alles nachbauen muss? dann versuche ich hier anzupassen... -
@cheffe sagte: exportieren