NEWS
Philips HUE mit Zigbee Adapter Werte Adaptieren
-
Hallo IOBroker Gemeinde,
ich bin wieder etwas am Basteln uns stehe irgendiwie auf dem Schlauch.
Ich habe meine Philips Hue E27 Birne erfolgreich mit dem Zigbee Adapter verbinden können. Es funktioniert auch alles soweit.
Jetzt möchte ich gerne mittels dem Xiaomi Cube gerne die Helligkeit steuern können.
Leider bekomme ich die Werte 0-254
Der Cube hat aber nur die Werte 0-100
Kann mir einer einen Tipp geben wie ich u.U.ein Skript baue, dass mir die Werte quasi adaptiert ? also 0=0%, 254=100%
Ich wüsste nicht wonach ich da suchen muss.
Vielen Dank für Eure Hilfe
-
Im Prinzip mit einem Dreisatz.
// Input: 0 - 254 // Output: 0 - 100 var iInput = 70; var iOutput = Math.round(iInput * 100 / 254); log('Ein Input von <' + iInput + '> ergibt einen Output von <' + iOutput + '>.');
In die Variable iInput holst Du Dir mit "getState" den Datenpunkt. Und die Variable iOutput schreibst Du mit "setState" in den anderen Datenpunkt.
-
in der Schule nicht aufgepasst …wa... :oops: :lol: :lol:
-
@Mic:Im Prinzip mit einem Dreisatz.
// Input: 0 - 254 // Output: 0 - 100 var iInput = 70; var iOutput = Math.round(iInput * 100 / 254); log('Ein Input von <' + iInput + '> ergibt einen Output von <' + iOutput + '>.');
In die Variable iInput holst Du Dir mit "getState" den Datenpunkt. Und die Variable iOutput schreibst Du mit "setState" in den anderen Datenpunkt. `
Vielen Dank für Die Rückmeldung !
Okay klingt logisch. Sorry wenn ich so blöde frage. Ich hab in dieser Richtung halt noch relativ wenig Erfahrung.
Wie und wo muss ich das Skript genau eintragen ?
Erstelle ich einen neuen State und haue das im Bereich Raw alles rein ? Und welche Werte muss ich durch meine Werte austauschen ?
-
Damit überwachst Du die Änderung eines Datenpunktes und kannst dessen neuen Wert dann verarbeiten.
Könnte dann z.B. so aussehen.
on({id: 'HIER_PFAD_ZU_XIAOMI_DATENPUNKT', change: 'any'}, function (obj) { var iInput = obj.state.val; var iOutput = Math.round(iInput * 100 / 254); setState('HIER_PFAD_ZUR_LAMPE', iOutput); } });
-
@Mic:Damit überwachst Du die Änderung eines Datenpunktes und kannst dessen neuen Wert dann verarbeiten.
Könnte dann z.B. so aussehen.
on({id: 'HIER_PFAD_ZU_XIAOMI_DATENPUNKT', change: 'any'}, function (obj) { var iInput = obj.state.val; var iOutput = Math.round(iInput * 100 / 254); setState('HIER_PFAD_ZUR_LAMPE', iOutput); } }); ```` `
Hallo Mic,
zunächst vielen Dank für Deine Hilfe.
Wo muss ich den Code hinterlegen ? Erstelle ich ein neues Skript, oder erstelle ich einen neuen State und hinterlege ich dort den Code ?
-
Gerne.
Du erstellst unter Skripte ein neues JavaScript und vergibst einen Namen, z.B. "Helligkeit Xiaomi-Hue". ACHTUNG: Nicht unter dem Ordner "global".
Die "States" in den "Objekten" sind nur Datenpunkte, diese steuert man von den Skripten entsprechend, oder diese überwacht man – wie hier im Skript gezeigt. Das heißt, dort legt man auch keine Skripte ab.
-
@Mic:Gerne.
Du erstellst unter Skripte ein neues JavaScript und vergibst einen Namen, z.B. "Helligkeit Xiaomi-Hue". ACHTUNG: Nicht unter dem Ordner "global".
Die "States" in den "Objekten" sind nur Datenpunkte, diese steuert man von den Skripten entsprechend, oder diese überwacht man – wie hier im Skript gezeigt. Das heißt, dort legt man auch keine Skripte ab. `
Hallo Mic,
danke das Du Dir die Zeit nenommen hast, auf die Thematik für mich nochmals genauer einzugehen.
Ich habe nun innerhalb der Hue einen manuellen Datenpunkt mit dem Namen "Dimm0_100" erstellt.
Im nächsten Schritt habe ich Dein Skript entsprechend eingefügt und angepasst.
Zunächst wurden die Werte nicht korrekt umgerechnet. Aber ich habe den Fehler dann auch gefunden. * und / waren vertauscht.
on({id: 'zigbee.0.0017880103fXXXXX.Dimm0_100', change: 'any'}, function (obj) { var iInput = obj.state.val; var iOutput = Math.round(iInput / 100 * 254); setState('zigbee.0.0017880103fXXXXX.brightness', iOutput); }) ;
Jetzt funktioniert es so wie ich es haben möchte ! Nochmals vielen Dank für Deine Hilfe.
Frage BTW: Wäre sowas auch mit Blockly möglich gewesen ? Oder gibt es ganz klare Grenzen bei Blockly ?
-
es gibt keine Grenzen.. das eine ist klickibunti das andere für grosse Jungs