NEWS
Verständnisfrage zur "Änderung" bei Schaltern
-
Hallo, anbei aktuelles Script, es funktioniert, ich vermute allerdings nicht sauber.
Script als Bild anbei, die unteren drei Teile fehlen ( wg der Größe ) es wiederholt sich aber wie im ersten Teil.Jetzt zur Frage, ich habe 4 Schalter, ich brauche auch die Schalterfunktion, keine Taster.
Mit den Schaltern wird die Musikquelle umgeschaltet, ..... wenn Quelle a spielt, und auf Quelle b umgeschaltet wird
muss Quelle a wieder auf 0, also false.Dafür aktualisiere ich Quelle a also mit 0.
ABER, löst das jetzt nicht wieder oben den Trigger aus ?, eigentlich sollte nur auf b getriggert werden.
Verstanden ?
Und wie könnte ich es anders machen ?
Danke Euch !!
-
@skokarl sagte: eigentlich sollte nur auf b getriggert werden.
Ändere den Trigger oben auf "ist größer als letztes".
-
@paul53 sagte in Verständnisfrage zur "Änderung" bei Schaltern:
@skokarl sagte: eigentlich sollte nur auf b getriggert werden.
Ändere den Trigger oben auf "ist größer als letztes".
Schön von Dir zu lesen @paul53 .... ja, gute Idee.
Funktioniert dann, wenn ich von Quelle a auf Quelle b umschalte, Danke für Deine Antwort.Leider wird es noch ein wenig komplizierter, nämlich dann, wenn ich nicht von Quelle a auf b umschalte, sondern a nochmal drücke.... also einfach Quelle a wieder ausschalten.
Ich weiß dass Du das hinkriegst
-
@skokarl sagte: a nochmal drücke.... also einfach Quelle a wieder ausschalten.
Wenn der obere Trigger auch darauf reagieren soll, triggere auf "wurde geändert" und prüfe im Trigger
falls Ursprung != "system.adapter.javascript.0"
wenn das Skript in der Instanz 0 läuft. Ursprung aus dem Tab "Trigger".
-
@paul53 sagte in Verständnisfrage zur "Änderung" bei Schaltern:
@skokarl sagte: a nochmal drücke.... also einfach Quelle a wieder ausschalten.
Wenn der obere Trigger auch darauf reagieren soll, triggere auf "wurde geändert" und prüfe im Trigger
falls Ursprung != "system.adapter.javascript.0"
wenn das Skript in der Instanz 0 läuft.
prüfe im Trigger ..... das ist die Lösung.
Kann man das in Blockly darstellen ? , eine Kombi mit Javascript kann ich nicht ( keine Ahnung )
Aber das ist genau das was ich brauche, trigger nur wenn ...ups, jetzt hast Du nachgelegt .....das teste ich !! Super
-
@skokarl sagte: Kann man das in Blockly darstellen ?
Habe ich gerade ergänzt,
-
@paul53 sagte in Verständnisfrage zur "Änderung" bei Schaltern:
@skokarl sagte: Kann man das in Blockly darstellen ?
Habe ich gerade ergänzt,
kannst du das bitte mal hier ergänzen, hab nicht ganz verstanden an welche Stelle das muss
-
-
Paul, Du bist der geilste !!!! Super lieben Dank
-
Magst Du nochmal drüber gucken ?
Manchmal denke ich er startet die Single oder Playlist mehrmals.Ganz ehrlich verstehe ich auch die Prüfung im Trigger nicht richtig, dachte erst ich hätte es verstanden,
scheint aber nicht so. Was genau macht das ?falls Ursprung != "system.adapter.javascript.0"
Falls Du Lust hast, nochmal ein Bild und das Blockly komplett als Export.
Dankeschön
-
Ich bin zwar nicht @paul53 aber ich schau auch gerne mal rüber.
Das Du so Probleme hast ist nicht verwunderlich. Du definierst Trigger in Triggern - das kann und muss in dieser Konstellation schief gehen. Wenn Du dir den Trigger Baustein wie folgt vorstellst sollte auch klar sein warum:
Dieser Baustein kann übersetzt werden in "Trage in die Überwachungsliste ein, das jedes mal wenn sich die Spotify-Playlist ändert der die folgenden Bausteine ausgeführt werden"
Du erzeugst also eine grosse Anzahl von Triggern die alle das gleiche machen. Wenig sinnvoll.
Zusätzlich holst du die gleichen Datenpunkte mehrfach.
Ich würde das so umstellen:
Erklärung:
Der Baustein
Objekt ID
und der Bausteinwert
sind der gleiche Baustein aus dem Trigger Bereich. In diesem Baustein versteckt sich einmal die Objekt ID des Objektes welchen den Trigger ausgelöst hat (Objekt ID) und zum anderen der Wert. Nebenbei - der Baustein den du aufUrsprung
eingestellt hast ist auch der gleiche Baustein, und beinhaltet den Adapter / Code der den Datenpunkt beschrieben hat.Wenn der Ursprung also nicht der Javascript Adapter ist, dann kannst du davon ausgehen das die Anpassung "von aussen" und nicht durch dieses Skript passiert ist.
Nun zum Rest:
Die Erste Abfrage ist ob der eingetragene Wert != 0 ist. Nur dann finden Aktionen statt. (Fun Fact: in JS gilt für Variablen A die Zahlen beinhalten:Falls A
gibt das gleiche Ergebnis wieFalls A != 0
) Das ist effektiver als erst zu schauen was sich geändert hat, da bei einer Änderung auf 0 (anscheinend) nichts passieren soll.
Wenn eine Änderung ungleich 0 erkannt wurde werden zunächst alle States auf 0 aktualisiert - das hattest du in jedem einzelnen der folgenden 4 Fälle getan - deswegen also vor der Einzelabfrage.
Danach kommt die Abfrage darauf wer ausgelöst hat. InObjekt ID
steht als Text der Name des States drin, deswegen kann man mit demIm Falle von
die verschiedenen Möglichkeiten durchgehen - die 4 die Du oben als Trigger eingetragen hast. Wichtig dabei ist das dieser Baustein zwingend eine Variable am ersten Anschluss erwartet, deswegen die Zuweisung derObjekt ID
in die VariableAuslöser
Code zum Importieren findest Du hinter dem Spoiler.
-
Erstmal vielen lieben Dank, ich freu mich immer Unterstützung zu bekommen.
Leider hast Du, @Asgothian, beim praktischen Hintergrund eines übersehen, es werden NICHT alle vier States auf
0 gesetzt, sondern nur die drei, die vom Schalter keinen Wert bekommen haben.
Deswegen hatte ich das auf 4 Blöcke unterteilt.
Zur Erklärung :4 Schalter, keine Taster, da in der Stellung true z.B. zusätzlich der Hintergrund blinkt.
Schalter 1 spielt eine Playlist, Schalter 2 spielt eine Single, Schalter 3 spielt ein Album und Schalter 4 Radio.Beim Start sind alle 4 auf 0, es wird ein beliebiger Schalter betätigt und eine Aktion gestartet.
Weil der Schalter einen Wert bekommt, beginnt er zusätzlich zu blinken.Jetzt gibt es zwei Möglichkeiten, entweder ich drücke den Schalter nochmals, dann ist alles wieder auf 0 und alles
zurück auf Anfang,
oder aber ich drücke einen anderen Schalter...... nun wird wieder eine Aktion ausgelöst, und da ich nicht weiß, welcher Schalter zuletzt gedrückt war, setzte die verbliebenen 3 Schalter zurück auf 0. ( sonst würde der ja ewig weiterblinken )
Und die drei sind eben nicht immer die selben, scheint als hättest Du diesen Teil übersehen.Um Gotteswillen nicht falsch verstehen, ich finde es super, dass Du Dir die Zeit genommen hast, aber ich
glaube noch nicht, dass das die Lösung ist.Liegt allerdings an mir, ich kann nicht so gut erklären .....
Gruß Bernd
-
@skokarl sagte in Verständnisfrage zur "Änderung" bei Schaltern:
Leider hast Du, @Asgothian, beim praktischen Hintergrund eines übersehen, es werden NICHT alle vier States auf
0 gesetzt, sondern nur die drei, die vom Schalter keinen Wert bekommen haben.
Deswegen hatte ich das auf 4 Blöcke unterteilt.Stimmt - da war mir was durchgerutscht. Die states sahen alle gleich aus - aber es gibt offensichtlich immer einen der nicht aktualisiert wird - das ist der der getriggert wurde.
Letztendlich kannst du also das aktualisieren der States in die "im Falle Von" Abfrage mit einbauen und die jeweils richtigen States aktualisieren.
Die anderen Anpassungen sollten trotzdem greifen - und verhindern das da etwas mehrfach ausgelöst wird.
A.
Nachtrag: Das kann ich als Blockly nicht mal eben generieren da ich die States nicht habe - sollte aber hoffentlich trotzdem verständlich sein. -
@asgothian
Danke -
So, nochmals vielen Dank Euch beiden, läuft !
Jetzt muss der 59 Jahre alte Mann nur noch verstehen wo sein größter Fehler lag .... aber das ist mein Problem.Falls das Script mal jemand braucht,.....unten anbei.
Funktioniert übrigens wirklich super wenn jemand Sonos Boxen, Spotify und ne Frau hat, die ganz einfach umschalten will
-
@skokarl sagte in Verständnisfrage zur "Änderung" bei Schaltern:
Jetzt muss der 59 Jahre alte Mann nur noch verstehen wo sein größter Fehler lag .... aber das ist mein Problem.
Wenn du willst können wir uns auf Discord treffen, dann versuch ich das anschaulich zu erklären.
A.