NEWS
VIS-2 binding operation json
-
Hallo zusammen!
Ich habe jetzt gesucht und bin leider mit meinen Eigenversuchen nicht ganz schlau daraus geworden, wie es im Detail funktioniert.
Laut Doku: https://github.com/iobroker/iobroker.vis-2/
Gibt es die Operation:
json- operation for getting json or object property. E.g., {id;json(common.name.en)}Ich habe folgende Objekt-ID:
alias.0.0-Haus.OG.ZiR.Licht-02.Zusatz.Farbe-HEXDahinter verbergen sich folgende Objektdaten:
In meiner VIS-2 habe ich ein Widget
Gestylt - Zustände steuernangelegt, womit man einen aufklappbaren Dialog
mit dem man die verschiedenenstatesder Objektdaten angezeigt bekommt bzw. dadurch wählen / setzen kann.Ich möchte gerne die # _ _ _ _ _ _
HEX-Farbemittels Binding als Hintergrundfarbe setzen.Meine Frage lautet nun:
Kann man z.B. perjsonbinding operation anstatt des Zahlenwertes z.B.0
irgendwie den Teil "#ffeacc" des dem zugeordneten Strings"Mandelweiß (#ffeacc)herausfiltern?Danke für eure Hilfe / Expertise!
-
Hallo zusammen!
Ich habe jetzt gesucht und bin leider mit meinen Eigenversuchen nicht ganz schlau daraus geworden, wie es im Detail funktioniert.
Laut Doku: https://github.com/iobroker/iobroker.vis-2/
Gibt es die Operation:
json- operation for getting json or object property. E.g., {id;json(common.name.en)}Ich habe folgende Objekt-ID:
alias.0.0-Haus.OG.ZiR.Licht-02.Zusatz.Farbe-HEXDahinter verbergen sich folgende Objektdaten:
In meiner VIS-2 habe ich ein Widget
Gestylt - Zustände steuernangelegt, womit man einen aufklappbaren Dialog
mit dem man die verschiedenenstatesder Objektdaten angezeigt bekommt bzw. dadurch wählen / setzen kann.Ich möchte gerne die # _ _ _ _ _ _
HEX-Farbemittels Binding als Hintergrundfarbe setzen.Meine Frage lautet nun:
Kann man z.B. perjsonbinding operation anstatt des Zahlenwertes z.B.0
irgendwie den Teil "#ffeacc" des dem zugeordneten Strings"Mandelweiß (#ffeacc)herausfiltern?Danke für eure Hilfe / Expertise!
@Cyberraph ChatGPT, direkt in background-color eintragen
{v:alias.0.0-Haus.OG.ZiR.Licht-02.Zusatz.Farbe-HEX; (async () => { const oid = 'alias.0.0-Haus.OG.ZiR.Licht-02.Zusatz.Farbe-HEX'; // Cache, damit getObject nur 1x läuft window.__statesCache = window.__statesCache || {}; if (!window.__statesCache[oid]) { const obj = await new Promise(resolve => { // vis-2 nutzt Socket; das funktioniert i.d.R. im Runtime vis.conn._socket.emit('getObject', oid, (_err, o) => resolve(o)); }); window.__statesCache[oid] = (obj?.common?.states) || {}; } const label = window.__statesCache[oid][String(v)] || ''; // "Mandelweiß (#ffeacc)" const hex = (String(label).match(/#[0-9a-fA-F]{6}/) || [])[0]; // "#ffeacc" return hex || 'transparent'; })() } -
Danke für die Ideengebung, aber unreflektiert (ohne mehr Wissen im Detail meinerseits) wird das nix.
Da bekomme ich keinen brauchbaren Wert als Ergebnis.
Kann gut sein, dass einfach die Notation nicht passt, wenn ich es in der Binding-Zeile 1:1 reinkopiere.
-
Danke für die Ideengebung, aber unreflektiert (ohne mehr Wissen im Detail meinerseits) wird das nix.
Da bekomme ich keinen brauchbaren Wert als Ergebnis.
Kann gut sein, dass einfach die Notation nicht passt, wenn ich es in der Binding-Zeile 1:1 reinkopiere.
@Cyberraph Andere Idee, direkt einen eigenen DP setzen und den zuordnen.
const SRC = 'alias.0.0-Haus.OG.ZiR.Licht-02.Zusatz.Farbe-HEX'; const DST = '0_userdata.0.farben.zir_hex'; createState(DST, '', { type: 'string', role: 'color.hex', read: true, write: false }); async function updateHex() { const val = getState(SRC).val; // 0..144 const obj = await getObjectAsync(SRC); const label = obj?.common?.states?.[String(val)] || ''; const hex = (String(label).match(/#[0-9a-fA-F]{6}/) || [])[0] || ''; setState(DST, hex, true); } on({ id: SRC, change: 'ne' }, updateHex); updateHex(); -
@Cyberraph Andere Idee, direkt einen eigenen DP setzen und den zuordnen.
const SRC = 'alias.0.0-Haus.OG.ZiR.Licht-02.Zusatz.Farbe-HEX'; const DST = '0_userdata.0.farben.zir_hex'; createState(DST, '', { type: 'string', role: 'color.hex', read: true, write: false }); async function updateHex() { const val = getState(SRC).val; // 0..144 const obj = await getObjectAsync(SRC); const label = obj?.common?.states?.[String(val)] || ''; const hex = (String(label).match(/#[0-9a-fA-F]{6}/) || [])[0] || ''; setState(DST, hex, true); } on({ id: SRC, change: 'ne' }, updateHex); updateHex();@MCU
Super das geht, danke für den Umweg.
Dann muss halt ein eigens erstellter DP zur Auswertung herhalten.Ergänzende Frage zu dieser Lösung:
-> Eine Art dies mit einem Blockly zu extrahieren gibt es nicht, oder?Warum frag ich auch so doof, einfach TUN :-D
Lässige Sache.
Blockly-Screenshot

Blockly-Code
JS-Skript über Blockly Übersetzt
Aber dennoch verstehe ich die Funktion
jsonder VIS-2 noch kein bisschen.
Warum ich nachfolgend beispielsweise nicht den Wertstatehinter dem Attributtypeherausbekomme als Ergebnis.
Sondern nur den Zahlenwert11aus dem Attributcommon.states.
-
@MCU
Super das geht, danke für den Umweg.
Dann muss halt ein eigens erstellter DP zur Auswertung herhalten.Ergänzende Frage zu dieser Lösung:
-> Eine Art dies mit einem Blockly zu extrahieren gibt es nicht, oder?Warum frag ich auch so doof, einfach TUN :-D
Lässige Sache.
Blockly-Screenshot

Blockly-Code
JS-Skript über Blockly Übersetzt
Aber dennoch verstehe ich die Funktion
jsonder VIS-2 noch kein bisschen.
Warum ich nachfolgend beispielsweise nicht den Wertstatehinter dem Attributtypeherausbekomme als Ergebnis.
Sondern nur den Zahlenwert11aus dem Attributcommon.states.
-
@MCU
Ne, eben nicht. Immer nur der genannte Zahlenwert vom Objekt / der Wert 11.

Gesucht hätte ich im Forum auch schon.
Leider nix rausfiltern können, wo ich die Funktion / korrekte Ausführung gefunden hätte.@bluefox wenn ich so frech sein darf und den Chef fragen (wenn Zeit ist, sonst gerne ignorieren)
-
@MCU
Ne, eben nicht. Immer nur der genannte Zahlenwert vom Objekt / der Wert 11.

Gesucht hätte ich im Forum auch schon.
Leider nix rausfiltern können, wo ich die Funktion / korrekte Ausführung gefunden hätte.@bluefox wenn ich so frech sein darf und den Chef fragen (wenn Zeit ist, sonst gerne ignorieren)
@Cyberraph So geht es.
{v:0_userdata.0.jarvis.test.string1;x=Array("#ffeacc", "#fffab7", "#ff1491", "#ffffd6", "#9dff9d", "#0000ff", "#01fbff", "#ff68b6", "#a1ff6e", "#ffc227", "#ff0000", "#4100ff", "#ff00ff", "#57fff9", "#cae2ff", "#ffddad", "#826fff", "#fff0db", "#fff7db", "#ffb5c1", "#ffffff", "#c6e1ff", "#856fff", "#ffe7ba", "#ff00ff", "#ffb9ff", "#ffd8ba", "#52ff9d", "#9b30ff", "#00ffff", "#ffd29c", "#00ffff", "#aa55ff", "#00ff00", "#ff00ff", "#bfff3f", "#bcffff", "#ff0000", "#eff7ff", "#7fffd5", "#ff84fd", "#fff7e8", "#fff4ed", "#ff3d3e", "#ffffff", "#ff8a25", "#ffaa64", "#ffffff", "#ab24ff", "#48ffed", "#ffddab", "#ffbfcc", "#ffbb0e", "#ffe2e0", "#34feff", "#ffffff", "#ffff00", "#ff82ac", "#1aff9d", "#2ffff5", "#3cff3c", "#ffe1b5", "#38bdff", "#ffffff", "#ffffff", "#ffd400", "#c7ff1e", "#fffc4b", "#00ff3d", "#ff8888", "#4876ff", "#fff9ef", "#0000ff", "#ffe2c4", "#ff7e4f", "#bfff46", "#ffa07a", "#ffefd6", "#ffffe0", "#57ffa0", "#60b7ff", "#99ff99", "#ff2f2f", "#3939ff", "#fff5eb", "#ff8bff", "#96fbff", "#ffa07a", "#00ff7f", "#f4fff9", "#fff891", "#ff468d", "#ff0000", "#c1ffc1", "#ff2545", "#ff6347", "#79ff41", "#ffffff", "#9f7fff", "#afff2d", "#ff8025", "#ffeff4", "#bf40ff", "#93e0ff", "#ff00ff", "#ff1aab", "#ffffff", "#ff4400", "#ffffff", "#00ff00", "#e0ffff", "#7fff00", "#ffa486", "#ff8248", "#ff7c1f", "#ffe2ff", "#fff9cc", "#c1f0ff", "#9000ff", "#ff7272", "#1e8fff", "#e066ff", "#b300ff", "#f7f7ff", "#40ff40", "#ac82ff", "#34feff", "#ffffe5", "#0000ff", "#ffa44f", "#ffffef", "#8ad2ff", "#efffef", "#91ffff", "#6b9eff", "#ffa600", "#c9e4ff", "#8370ff", "#efffff", "#c3f9ff", "#fff9f9", "#7fffd2", "#fff495", "#ffffff", "#ffc1c1");x[v]} -
@Cyberraph So geht es.
{v:0_userdata.0.jarvis.test.string1;x=Array("#ffeacc", "#fffab7", "#ff1491", "#ffffd6", "#9dff9d", "#0000ff", "#01fbff", "#ff68b6", "#a1ff6e", "#ffc227", "#ff0000", "#4100ff", "#ff00ff", "#57fff9", "#cae2ff", "#ffddad", "#826fff", "#fff0db", "#fff7db", "#ffb5c1", "#ffffff", "#c6e1ff", "#856fff", "#ffe7ba", "#ff00ff", "#ffb9ff", "#ffd8ba", "#52ff9d", "#9b30ff", "#00ffff", "#ffd29c", "#00ffff", "#aa55ff", "#00ff00", "#ff00ff", "#bfff3f", "#bcffff", "#ff0000", "#eff7ff", "#7fffd5", "#ff84fd", "#fff7e8", "#fff4ed", "#ff3d3e", "#ffffff", "#ff8a25", "#ffaa64", "#ffffff", "#ab24ff", "#48ffed", "#ffddab", "#ffbfcc", "#ffbb0e", "#ffe2e0", "#34feff", "#ffffff", "#ffff00", "#ff82ac", "#1aff9d", "#2ffff5", "#3cff3c", "#ffe1b5", "#38bdff", "#ffffff", "#ffffff", "#ffd400", "#c7ff1e", "#fffc4b", "#00ff3d", "#ff8888", "#4876ff", "#fff9ef", "#0000ff", "#ffe2c4", "#ff7e4f", "#bfff46", "#ffa07a", "#ffefd6", "#ffffe0", "#57ffa0", "#60b7ff", "#99ff99", "#ff2f2f", "#3939ff", "#fff5eb", "#ff8bff", "#96fbff", "#ffa07a", "#00ff7f", "#f4fff9", "#fff891", "#ff468d", "#ff0000", "#c1ffc1", "#ff2545", "#ff6347", "#79ff41", "#ffffff", "#9f7fff", "#afff2d", "#ff8025", "#ffeff4", "#bf40ff", "#93e0ff", "#ff00ff", "#ff1aab", "#ffffff", "#ff4400", "#ffffff", "#00ff00", "#e0ffff", "#7fff00", "#ffa486", "#ff8248", "#ff7c1f", "#ffe2ff", "#fff9cc", "#c1f0ff", "#9000ff", "#ff7272", "#1e8fff", "#e066ff", "#b300ff", "#f7f7ff", "#40ff40", "#ac82ff", "#34feff", "#ffffe5", "#0000ff", "#ffa44f", "#ffffef", "#8ad2ff", "#efffef", "#91ffff", "#6b9eff", "#ffa600", "#c9e4ff", "#8370ff", "#efffff", "#c3f9ff", "#fff9f9", "#7fffd2", "#fff495", "#ffffff", "#ffc1c1");x[v]}@MCU
Wow, danke dafür.
Um diese Ecke hatte ich nicht gedacht.Array eingeben mit den Werten, die ich brauche.
Das Array dann mit dem Zahlenwert des states filtern.Das ist wirklich sehr elegant.
Erklärt zwar noch immer nicht, wo der Knackpunkt der
jsonoperation liegt,
aber mit der json Funktion hätte ich es im Binding direkt eh nicht geschafft den String auch nochmal aufzusplitten zum nötigen # _ _ _ _ _ _ Hex-Wert.Tausend Dank :-)
-
@MCU
Wow, danke dafür.
Um diese Ecke hatte ich nicht gedacht.Array eingeben mit den Werten, die ich brauche.
Das Array dann mit dem Zahlenwert des states filtern.Das ist wirklich sehr elegant.
Erklärt zwar noch immer nicht, wo der Knackpunkt der
jsonoperation liegt,
aber mit der json Funktion hätte ich es im Binding direkt eh nicht geschafft den String auch nochmal aufzusplitten zum nötigen # _ _ _ _ _ _ Hex-Wert.Tausend Dank :-)
@Cyberraph Offenes Problem zusätzlich
https://github.com/ioBroker/ioBroker.vis-2/issues/521