NEWS
[gelöst] Radio Lautstärke per Widget und Javascript steuern
-
Hallo @ all
ich schon wieder
ich habe es geschafft dank eurer Hilfe einige alte Programme zu portieren und auf ioBroker zum laufen zu bringen. Mit dem großen Vorteil das die CCU2 sich nicht ab und an wegen exec aufhängt.
Leider werde ich mit den neuen Blockly Editor nicht warm obwohl mir dies "einleuchtender" erscheint als bloßes Java Script. Ich bekomme mein altes Programm nicht "rund" gedacht. Das Programm macht auf der CCU nichts anderes als einen Wert in meinem URL String am Ende um 5 hoch zu zählen. Somit kann ich meine Musikbox https://www.chumby.com/ etwas lauter machen.
PS: Natürlich wäre ein Slider viel cooler aber ich bekomme nicht mal das gebacken
Steh noch am Anfang.
Tips und Starthilfe gern gesehen. Wenn ich im VIS Widget Slider den Wert auslesen und dann hier im Script einfügen könnte wäre das möglich? So ähnlich wie :
hole Widget Wert setze Widget Wert zu string url sende url
Somit würde ich mir das speichern der Variable sparen können das das Widget doch eh anzeigt was gerade der Wert ist.
! Lautstärke um 5 % erhöhen object sv = dom.GetObject("Level"); real x = sv.Value(); x = x + 5; if (x > 100) {x = 100;} sv.State(x); string url = "http://192.168.200.24/cgi-bin/custom/setvol.sh?"#x.ToString(0); dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O /dev/null '"#url#"'");
LG
-
Hallo,
ich probier mal das Skript im Javaskript Editor (im Ordner Common unter beliebigen aber sinnvollem Namen abspeichern und mit dem roten Dreieck aktivieren):
// Variable mit Lautstärke-Soll erstellen: createState('VolSoll', { type: 'number', min: 0, max: 100, unit: '%', def: 0, desc: 'Lautstärke' }); // Vorbereitungen fürs Senden eines Befehls über URL var request = require('request'); var link = "http://192.168.200.24/cgi-bin/custom/setvol.sh?" // Auf Lautstärke Änderungen reagieren var idVol = 'javascript.0.VolSoll'; on(idVol, function (data) { log('Lautstärke auf ' + data.state.val + '% geändert'); link = link + parseInt(data.state.val,10); // link-stamm + ganze Zahl aus Schieber // Befehl absenden try request(link); catch (e) log('Fehler (try) Lautstärke via URL ändern: ' + e, 'error'); });
Ich habe das hier im Forumeditor geschrieben. Ich hoffe, es funktioniert.
Dazu ein Schieberegler Widget mit dem Objekt (OID) 'Javascript.0.VolSoll'
Gruß
Pix
PS: Und gib dem Thread mal einen besseren Namen. Welches Radio ist das? "Radio Lautstärke per Widget und Javascript steuern"
-
Guten Morgen Pix,
danke für die Starthilfe. Das Radio ist ein Chumby One. Relativ exotisch und alt ;-). Daher hat es auch keine Bidirektionale Kommunikation. Dein Script zeigt mir einen Fehler im Try Block (Zeile21,22). Es setzt auch den State nicht. Lasse ich den Try Block weg geht das Script im Debugger durch. Dem Widget habe ich die Objekt ID !javascript.0.VolSoll" gegeben kann diese aber im Baum nicht picken. Ist das korrekt? lasse ich "try" im Script weg zeigt auch der Debugger "ok" an. Geht aber scheinbar trotzdem nicht. Hatte dann noch versucht bevor request(link); kommt eine Ausgabe zu erzeugen im sinne von "echo(link)" oder "print(link)" die wird mir aber nicht angezeigt.
05:56:54.679 [info] javascript.0 script.js.Chumby.Control.volume: subscribe: {"pattern":{"id":"javascript.0.VolSoll","change":"ne"},"name":"script.js.Chumby.Control.volume"} 05:56:54.679 [info] javascript.0 script.js.Chumby.Control.volume: registered 1 subscription and 0 schedules 05:57:48.727 [info] javascript.0 Stop script script.js.Chumby.Control.volume 05:57:48.759 [info] javascript.0 Start javascript script.js.Chumby.Control.volume
Edit:
Ich hatte erst das Script im Verzeichnis wo ich die anderen Radio Scripte hatte. Jetzt ist es im "common" Zweig hat aber die selben Fehler. Der Try Catch Block scheint nicht zu gehen.
-
Ich glaube ich habe den Fehler im Script gefunden. Die Variable "volume" summiert sich bei der URL.
Dies konnte ich erst sehen als ich mir die URL ausgeben lassen habe. Das der try catch Block nicht funktionierte habe ich diesen aus kommentiert.
Wenn ich das Script so umbaue geht es. Danke für die Vorarbeit!
var idVol = 'javascript.0.VolSoll'; on(idVol, function (data) { log('Lautstärke auf ' + data.state.val + '% geändert'); log (link); request(link + data.state.val); });
-
Schön, dass ich helfen konnte.
Die Fehler im Skript kommen leider eben daher, dass ich es nicht ausprobiert habe. Ist praktisch der erste Blitz, der mir durch den Kopf schoss. Natürlich summiert sich die Variable auf, das hast du genau richtig gelöst.
Try & Catch sollten nur verhindern, dass gleich die ganze Instanz abschmiert, wenn mit der Adresse oder der Erreichbarkeit des Radios was nicht stimmt.
Gruß
Pix