NEWS
Gibt es eine Case-Abfrage in blockly ?
-
Hallo Gemeinde,
ich möchte mir eine Fernsehsteuerung machen.
Dazu habe ich im Broadlink alle Zahlentasten angelernt. (Kanal0, Kanal1, …. Kanal9)
Nun möchte ich per Alexa den Wert von einem State "Kanal" setzen.
Das geht.
Die Auswertung ist etwas komplizierter, da ich ja die genannte Zahl auseinanderplücken muss,
und dann Ziffer für Ziffer entsprechend den Broadlink antriggern muss.
Da ich in Javascript noch nicht so fit bin, würde ich gerne erstmal das über blockly lösen,
wenn das überhaupt geht, ohne zuviel schreiben zu müssen.
Ich hatte so an eine Case-Abfrage gedacht:
1. wenn der Trigger (Wert X) <=9 ist dann brauche ich nur eine Taste entsprechend triggern.
(steuere (KanalX) mit wahr)
2. wenn nicht frage ich, ob der Trigger (Wert XY) <=99 ist, dann muss ich entsprechend die 10er Position und dann die Einer-Position des Wertes zum triggern verwenden.
(steuere KanalX mit wahr, steuere KanalY mit wahr)
3. analog zu 2. dann bei einem 3-stelligen Kanal.
Hat da jemand eine Idee, wie man das am besten machen könnte?
-
Blockly kennt "case" nicht in javascript koennte man das machen.
Alternatief in blockly mit falls und sonst fall bloecken arbeiten
-
Soweit so gut, habe gerade eine funktionierende Lösung gemacht, die noch überschaubar ist.
Allerdings akzeptiert das Madel Alexa nur Werte bis 100.
Also was müsste ich denn meine State-Variable definieren, dass sie auch höhere Zahlen zulässt?
4342_kanalsteuerung.png -
Vor dieser Aufgabe stand ich auch gerade und habe es so gelöst:
- Neuer Datenpunkt "TV_gewählteProgramm" (Typ: Zeichenkette)
- in VIS einen Button State (in meinem Fall Material Design) mit dem Kanal des jeweiligen Senders und mit Kommas getrennt als Wert, z.B. ZDF = 0,2 ; ProSieben = 0,7
- Blockly (siehe Bild):
-
- Der Wert aus dem Datenpunkt wird in eine Liste gewandelt (Trennzeichen = Komma), also "0,2" -> [0,2]
(EDIT: Hier kann auch "im Text x nimm y. Element" genommen werden, ich hatte es aber noch als Liste, weil ich vorher anders programmiert habe)
- Der Wert aus dem Datenpunkt wird in eine Liste gewandelt (Trennzeichen = Komma), also "0,2" -> [0,2]
-
- Je nach Wert des ersten Elements, wird die entsprechende Zahl an den Fernseher (Samsung) gesendet
-
- Danach wird das zweite Element geprüft, hier aber mit einer Verzögerung, damit der Fernseher hinterherkommt.
-
- Am Schluss bestätige ich noch mit der Taste "Enter", damit das Umschalten schneller über die Bühne geht.
Vorher hatte ich es wesentlich kompakter und schöner, doch leider lässt JS/Blockly kein "time.sleep()" zu, sodass jeder Durchgang verzögert werden könnte. Leider kann man auch nicht die Verzögerung der "steuere ..."-Blöcke mit einer Variable einspeisen. Dann könnte man nämlich den ersten Durchlauf mit der Verzögerung
i = 0
laufen lassen und jeden weiteren dann miti = i + 1 Sek.
, um alle Befehle nacheinander auszuführen.