NEWS
Setzen von HM Systemvariablen mit JS
-
@dtp:Nun könnte man natürlich nach obigem Beispiel eine kleine if-Abfrage zum Übersetzen der Zustände einfügen. Bei einigen Datenpunkten sind aber fünf und mehr verschiedene Werte möglich. `
Wenn SV vom Typ "Werteliste" gesetzt werden sollen, ist das auch nicht so schwierig:// Zustandstexte Betriebsart var ba = ['Abschaltbetrieb','Nur Warmwasser','Heizen und Warmwasser','Dauernd red. Betrieb','Dauernd Normalbetrieb']; on('javascript.0.Vitotronic.Betriebsart', function (obj) { log(obj.newState.val); setState('hm-rega.0.1234', ba.indexOf(obj.newState.val)); }); -
So, habe mir jetzt auf der CCU die Systemvariable als Werteliste mit den Werten
Abschaltbetrieb;Nur Warmwasser;Heizen und Warmwasser;Dauernd red. Betrieb;Dauernd Normalbetriebangelegt und setze deren Werte nun folgendermaßen:
// Vitotronic Betriebsart on('javascript.0.Vitotronic.Betriebsart', function (obj) { switch (obj.newState.val) { case "Abschaltbetrieb": setState('hm-rega.0.1234', 0); break; case "Nur Warmwasser": setState('hm-rega.0.1234', 1); break; case "Heizen und Warmwasser": setState('hm-rega.0.1234', 2); break; case "Dauernd red. Betrieb": setState('hm-rega.0.1234', 3); break; case "Dauernd Normalbetrieb": setState('hm-rega.0.1234', 4); break; } });Damit habe ich eine Möglichkeit, die verschiedenen Zustände von "javascript.0.Vitotronic.Betriebsart" unabhängig von ihrer Reihenfolge in die Systemvariable der CCU zu schreiben.
Gruß,
Thorsten
-
@dtp:Damit habe ich eine Möglichkeit, die verschiedenen Zustände von "javascript.0.Vitotronic.Betriebsart" unabhängig von ihrer Reihenfolge in die Systemvariable der CCU zu schreiben. `
Das geht auch mit dem Array. Die Reihenfolge im Array muss der in der Werteliste (CCU) entsprechen und hat nichts mit der Wertzuordnung in vcontrold zu tun. Die Einzeltexte innerhalb des Array müssen identisch zu den Texten in der vito.xml sein, können aber von den Texten in der Werteliste abweichen. -
Meinst Du mit Array die obige Variable "ba"? Da gab es nur leider ein kleines Problem. Der Datenpunkt "javascript.0.Vitotronic.Betriebsart" enthält die Strings "Abschaltbetrieb", "Nur Warmwasser" etc. Dein obiger Skriptvorschlag geht aber davon aus, dass "javascript.0.Vitotronic.Betriebsart" die Integer-Werte 0 bis 4 annimmt, die dann als Index in "setState" übergeben werden.
Oder habe ich da was falsch verstanden?
-
@dtp:Dein obiger Skriptvorschlag geht aber davon aus, dass "javascript.0.Vitotronic.Betriebsart" die Integer-Werte 0 bis 4 annimmt, die dann als Index in "setState" übergeben werden. `
Nein, der Vorschlag geht davon aus, dass "javascript.0.Vitotronic.Betriebsart" den jeweiligen Zustandstext ("Abschaltbetrieb", …) enthält. Würde der Datenpunkt den Wert 0 bis 4 enthalten, könnte man ihn direkt ohne Umweg überba.indexOf(obj.newState.val)in die SV schreiben. ba.indexOf(Text) ermittelt die Position des Textes im Array ba. Das Ergebnis ist ein Integer-Wert 0 bis 4.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden