NEWS
Viessmann-Adapter
-
Hallo paul53,
die Ausgabe sieht z.B. so aus:
vctrld>getVitoTimerSoWW
1:An:06:30 Aus:09:00
2:An:12:00 Aus:14:00
3:An:17:00 Aus:20:00
4:An:– Aus:--
Ist bei allen Timer-Einstellungen derselbe Aufbau.
Gruß,
Thorsten
-
Möchtest Du die 4 Zeitspannen in einem Datenpunkt darstellen oder in 4 DP ?
-
Nee, in einem.
-
-
@dtp:Nee, in einem. `
Unter der Voraussetzung, dass alle Timer-Kommandos in der Liste mit "Timer" beginnen, sollte eine Erweiterung der setState-Schleife genügen:`for(var i = 0; i < len; i++) { if(list[i].substr(0,5) == "Timer") { setState("Vitotronic." + list[i], stdout[2*i+1]+" "+stdout[2*i+2]+" "+stdout[2*i+3]+" "+stdout[2*i+4]); } else setState("Vitotronic." + list[i], stdout[2 * i + 1]); }` EDIT: Das funktioniert so einfach leider nicht, da bei den Timern der Abstand von 2 Elementen im Array nicht zutrifft. Also besser mit 3\. Liste: Habe das Skript oben entsprechend abgewandelt.[/i][/i][/i]
-
Siehe http://forum.iobroker.net/viewtopic.php?f=23&t=3048&start=40#p29920 (3. Liste).
-
Danke, werde es ausprobieren. Wirklich tollen Support, den Du hier leistest. Nochmals großen Dank dafür.
Gruß,
Thorsten
-
Hallo paul53,
bin gerade am Ausprobieren Deiner Timer-Zeilen. Allerdings verstehe ich da was nicht so ganz. Warum
`if(timer) setState("Vitotronic." + list[i], stdout[5*i+1]+" "+stdout[5*i+2]+" "+stdout[5*i+3]+" "+stdout[5*i+4]);` und nicht `~~[code]~~if(timer) setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[5*i+1]+" "+stdout[5*i+2]+" "+stdout[5*i+3]+" "+stdout[5*i+4]);` EDIT: Nun scheint's zu passen. >! ~~[spoiler]~~`~~[code]~~// Werte aus Vitotronic auslesen >! var list1 = ['Betriebsart','BetriebsartHK','BetriebParty','BetriebSpar','TempAussen','TempWWIst','TempSpeicher','TempWWAuslauf','TempKesselIst','TempRLIst','TempRaumHK','TempSolarkol','TempSolarspeicher','StatusPumpeSpeicher','StatusFlamme','StatusPumpeIntern','DrehzahlPumpeIntern','StatusPumpeHK','StatusPumpeZirku','StatusUmschaltventil','Systemzeit']; var list2 = ['BetriebFerien','BeginnFerien','EndeFerien','TempRaumNorSoll','TempRaumRedSoll','TempPartySoll','TempWWSoll','TempKesselSoll','TempVLSoll','KennlinieNeigung','KennlinieNiveau','LaufzeitBrenner','StartsBrenner','LaufzeitSolar','LeistungSolar','ErtragTagSolar','Systemzeit']; var list3 = ['StatusStoerung','Stoerung1','Stoerung2','Stoerung3','Stoerung4','Stoerung5','Stoerung6','Stoerung7','Stoerung8','Stoerung9','Stoerung10','Anlagenschema','Systemzeit']; var list4 = ['TimerMoHeizen','TimerDiHeizen','TimerMiHeizen','TimerDoHeizen','TimerFrHeizen','TimerSaHeizen','TimerSoHeizen','TimerMoWW','TimerDiWW','TimerMiWW','TimerDoWW','TimerFrWW','TimerSaWW','TimerSoWW','TimerMoPumpeZirku','TimerDiPumpeZirku','TimerMiPumpeZirku','TimerDoPumpeZirku','TimerFrPumpeZirku','TimerSaPumpeZirku','TimerSoPumpeZirku']; >! // Objekte setzen function init(list) { var len = list.length; var cmds = ''; for(var i = 0; i < len; i++) { cmds = cmds + ',getVito' + list[i]; createState('Vitotronic.' + list[i], '', { type: 'string', read: true, write: true, desc: 'Vitotronic ' + list[i], def: '' }); } return cmds.substr(1); // erstes Komma löschen } >! // Skript starten var cmds1 = init(list1); var cmds2 = init(list2); var cmds3 = init(list3); var cmds4 = init(list4); >! function vito(cmds, list, timer) { exec('vclient -h 127.0.0.1:3002 -c ' + cmds, function(err, stdout, stderr) { if (err) { log(stderr,'error'); return; } stdout = stdout.split("\n"); var len = list.length; for(var i = 0; i < len; i++) { if(timer) setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[5 * i + 1]+" "+stdout[ 5 * i + 2]+" "+stdout[ 5 * i + 3]+" "+stdout[5 * i + 4]); else setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[2 * i + 1]); } }); } >! // Zeitintervalle definieren setInterval(function() { vito(cmds1, list1, false); }, 120 * 1000); // alle 2 Minuten setInterval(function() { vito(cmds2, list2, false); }, 1800 * 1000); // alle 30 Minuten >! setInterval(function() { vito(cmds3, list3, false); }, 3600 * 1000); // alle 60 Minuten >! setInterval(function() { vito(cmds4, list4, true); }, 7200 * 1000); // alle 120 Minuten` Gruß, Thorsten[/i][/i][/i][/i][/i][/code][/spoiler][/i][/code][/i]
-
@dtp:Allerdings verstehe ich da was nicht so ganz. `
Wenn man mit setState() oder getState() einen Datenpunkt innerhalb der JS-Instanz des Skriptes adressiert, muss nicht die gesamte ID angegeben werden, sondern es genügt der Teil, mit dem der Datenpunkt per createState() erzeugt wurde. -
Ah. Danke für die Aufklärung.
Gruß,
Thorsten
-
Jetzt hätte ich doch noch ein paar weitere Frage.
Ist es möglich, direkt im Skript einzelne Datenpunkte (insb. Betriebsart, BetriebsartHK, BetriebParty, BetriebSpar) in entsprechend angelegte Systemvariable der CCU2 zu schreiben, oder sollte ich das doch lieber separat machen?
Zum Steuern per Skript:
Die weiter oben definierten Zustände
states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
dürften zu einem Problem führen, da die Vitotronic gemäß der vcontrold.xml direkt die Werte
'Abschaltbetrieb', 'Nur Warmwasser', 'Heizen und Warmwasser', 'Dauernd red. Betrieb' und 'Dauernd Normalbetrieb' als Steuerparameter benötigt. Sind Leerschritte ein Problem?
Gruß,
Thorsten
-
@dtp:Ist es möglich, direkt im Skript einzelne Datenpunkte (insb. Betriebsart, BetriebsartHK, BetriebParty, BetriebSpar) in entsprechend angelegte Systemvariable der CCU2 zu schreiben, oder sollte ich das doch lieber separat machen? `
Ich würde das separat machen.
@dtp:da die Vitotronic gemäß der vcontrold.xml direkt die Werte
'Abschaltbetrieb', 'Nur Warmwasser', 'Heizen und Warmwasser', 'Dauernd red. Betrieb' und 'Dauernd Normalbetrieb' als Steuerparameter benötigt. `
Wozu gibt es das Kommando "setVitoBetriebsart" in der vito.xml, wenn man es nicht nutzen kann ?Da der Datenpunkt "Betriebsart" bereits in list1 vorhanden ist und somit der Datenpunkt "Vitotronic.Betriebsart" bereits als Typ "string" existiert, muss der Datenpunkt zum Setzen der Betriebsart einen anderen Namen erhalten, z.B.
createState('Vitotronic.setBetriebsart', 0, { type: 'number', read: true, write: true, desc: 'Vitotronic Betriebsart setzen', min: 0, max: 4, def: 0, states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal' }); on("javascript." + instance + ".Vitotronic.setBetriebsart", function(dp) { exec('vclient -h 127.0.0.1:3002 -c setVitoBetriebsart 0' + dp.state.val, function(err, stdout, stderr) { if (err) log(stderr,'error'); }); });
-
Wozu gibt es das Kommando "setVitoBetriebsart" in der vito.xml, wenn man es nicht nutzen kann ? `
Kann man doch. Nur eben nicht mit den von Dir im Skript angegebenen Parametern "0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal", da diese so nicht in der vcontrold.xml definiert sind:
<unit name="Betriebsart"><abbrev>BA</abbrev> <type>enum</type></unit>
Man muss also mit "Abschaltbetrieb;Nur Warmwasser;Heizen und Warmwasser;Dauernd red. Betrieb;Dauernd Normalbetrieb" arbeiten, die dann von der XML-Datei in die jeweiligen Hex-Werte 00 bis 04 übersetzt werden.
Die Frage war daher, ob ich in Deinem Skript die Zeile
states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
durch die Zeile
states: 'Abschaltbetrieb;Nur Warmwasser;Heizen und Warmwasser;Dauernd red. Betrieb;Dauernd Normalbetrieb'
ersetzen kann?
-
Muss man wirklich den Text (text='betriebsartxx') an das Kommando übergeben ? Das würde mich sehr wundern
Meiner Meinung nach sollte der Hexwert (als 2-Zeichen-String) der mit bytes='0n' definiert ist, übergeben werden.
@dtp:Die Frage war daher, ob ich in Deinem Skript die Zeile
Code: Alles auswählen
states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
durch die Zeile
Code: Alles auswählen
states: 'Abschaltbetrieb;Nur Warmwasser;Heizen und Warmwasser;Dauernd red. Betrieb;Dauernd Normalbetrieb'
ersetzen kann? `
Nein, das funktioniert so nicht. -
Wenn das Kommando "setVitoBetriebsart" tatsächlich den Text übergeben haben will, muss man mit switch / case arbeiten:
createState('Vitotronic.setBetriebsart', 0, { type: 'number', read: true, write: true, desc: 'Vitotronic Betriebsart setzen', min: 0, max: 4, def: 0, states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal' }); on("javascript." + instance + ".Vitotronic.setBetriebsart", function(dp) { var text; switch(dp.state.val) { case 0: text = 'Abschaltbetrieb'; break; case 1: text = 'Nur Warmwasser'; break; case 2: text = 'Heizen und Warmwasser'; break; case 3: text = 'Dauernd red. Betrieb'; break; case 4: text = 'Dauernd Normalbetrieb'; break; default: text = '?'; } exec('vclient -h 127.0.0.1:3002 -c setVitoBetriebsart ' + text, function(err, stdout, stderr) { if (err) log(stderr,'error'); }); });
-
Wenn das Kommando "setVitoBetriebsart" tatsächlich den Text übergeben haben will, muss man mit switch / case arbeiten `
oder mit einem Text-Array:var texte = ['Abschaltbetrieb','Nur Warmwasser','Heizen und Warmwasser','Dauernd red. Betrieb','Dauernd Normalbetrieb']; on("javascript." + instance + ".Vitotronic.setBetriebsart", function(dp) { exec('vclient -h 127.0.0.1:3002 -c setVitoBetriebsart ' + texte[dp.state.val], function(err, stdout, stderr) { if (err) log(stderr,'error'); }); });
-
Danke. Werde es ausprobieren.
Gruß,
Thorsten
-
Hm.
Eigentlich hat das Skript soweit gut funktioniert. Doch seit den letzten ioBroker-Updates erhalte ich folgende Fehlermeldungen:
filename="2016-07-17_10h47_52.png" index="0">~~
EDIT: Ein Neustart des Raspi scheint das Problem gelöst zu haben.
Gruß,
Thorsten
-
Ich habe folgende script geschrieben:
GET:
`// NETWORK PARAMS var srv_ip = 'vcontrol'; var srv_port = 3002; // VCONTROLD VARIABLES TO GET var vcontrolget = [ { id:'vcontrold.0.get.TempA', type: 'number', name: 'Vitotronic Temperatura Esterna', role: 'value.temperature', read: true, write: false, def: 0, min: -50, max: 100, re: /^(\d+\.\d+) Grad Celsius\s*$/, cmd: "getTempA", }, { id:'vcontrold.0.get.TempWWist1', type: 'number', name: 'Vitotronic Temperatura acqua calda bassa', role: 'value.temperature', read: true, write: false, def: 0, min: -50, max: 100, re: /^(\d+\.\d+) Grad Celsius\s*$/, cmd: "getTempWWist1", }, { id:'vcontrold.0.get.TempWWist2', type: 'number', name: 'Vitotronic Temperatura acqua calda alta', role: 'value.temperature', read: true, write: false, def: 0, min: -50, max: 100, re: /^(\d+\.\d+) Grad Celsius\s*$/, cmd: "getTempWWist2", }, { id:'vcontrold.0.get.TempKist', type: 'number', name: 'Vitotronic Temperatura Puffer basso (riscaldamento)', role: 'value.temperature', read: true, write: false, def: 0, min: -50, max: 100, re: /^(\d+\.\d+) Grad Celsius\s*$/, cmd: "getTempKist", }, { id: 'vcontrold.0.get.TempVListM1', type: 'number', name: 'Vitotronic Temperatura di mandata', role: 'value.temperature', read: true, write: false, def: 0, min: -50, max: 100, re: /^(\d+\.\d+) Grad Celsius\s*$/, cmd: "getTempVListM1", }, { id:'vcontrold.0.get.BetriebArtM1', type: 'string', name: 'Vitotronic Modalità funzionamento', role: 'indicator', read: true, write: false, re: /^\W*(\w+\+*\w*)\W*$/, cmd: "getBetriebArtM1", } ]; var getcmd =""; for (var i in vcontrolget) { console.log('vcontrolget[i].cmd' + vcontrolget[i].cmd); getcmd += vcontrolget[i].cmd + "\r\n"; createState(vcontrolget[i].id, { type: vcontrolget[i].type, name: vcontrolget[i].name, role: vcontrolget[i].role, read: vcontrolget[i].read, write: vcontrolget[i].write, def: vcontrolget[i].def, min: vcontrolget[i].min, max: vcontrolget[i].max }); } getcmd += "quit\r\n"; console.log('cmd: '+getcmd); function vitoget () { var net = require('net'); var client = new net.Socket(); client.connect(srv_port, srv_ip, function() { console.log('Connected'); client.write(getcmd); }); var i=0; var readingOK=true; var data_tmp=[]; client.on('data', function(data) { var data_str; console.log('Received: ' + data); var dummyre=/^vctrld/; data_str=String(data); if (dummyre.test(data_str)) { console.log('ignored: ' + data); } else if (vcontrolget[i].re.test(data_str)) { data_tmp[i] = data_str.replace(vcontrolget[i].re, "$1"); console.log('data ok: ' +data_tmp[i]); i++; } else { readingOK=false; console.log('faulty data: ' + data); } }); client.on('close', function() { client.destroy(); console.log('Connection closed'); if (readingOK) { for (var i in vcontrolget) { console.log('store data: ' + vcontrolget[i].id +" = " +data_tmp[i]); setState(vcontrolget[i].id, data_tmp[i],true); } } else { console.log('data faulty'); } }); } schedule("* * * * *", function () {vitoget();}); // ogni minuto` SET: `~~[code]~~// NETWORK PARAMS var srv_ip = 'vcontrol'; var srv_port = 3002; // VCONTROLD VARIABLES TO SET var vcontrolset = [ { id:'vcontrold.0.set.BetriebArtM1', getid: 'vcontrold.0.get.BetriebArtM1', type: 'string', name: 'Vitotronic Modalità funzionamento', role: 'indicator', read: true, write: true, cmd: "setBetriebArtM1", } ]; for (var i in vcontrolset) { createState(vcontrolset[i].id, { type: vcontrolset[i].type, name: vcontrolset[i].name, role: vcontrolset[i].role, read: vcontrolset[i].read, write: vcontrolset[i].write, def: vcontrolset[i].def, min: vcontrolset[i].min, max: vcontrolset[i].max }); } function vitoset() { var setcmd =""; var param = ""; var getparam = ""; var cmdflag=false; for (var i in vcontrolset) { console.log('vcontrolset[i].cmd' + vcontrolset[i].cmd); param=getState(vcontrolset[i].id).val; getparam=getState(vcontrolset[i].getid).val; console.log('param: ' + param); console.log('getparam: ' + getparam); if (param === null) { setState(vcontrolset[i].id,getparam,true); } else if (param != getparam) { setcmd += vcontrolset[i].cmd + " " + param +"\r\n"; cmdflag=true; } } setcmd += "quit\r\n"; console.log('cmd: '+setcmd); var net = require('net'); var client = new net.Socket(); if (cmdflag) { client.connect(srv_port, srv_ip, function() { console.log('Connected'); client.write(setcmd); }); client.on('data', function(data) { var data_str; console.log('Received: ' + data); }); client.on('close', function() { client.destroy(); console.log('Connection closed'); }); } } schedule("* * * * *", function () {vitoset();}); // ogni minuto` Bei mit läuft vcontrold auf eine andere box und soll ich über tcp/ip zugreifen. Wass mich noch stört ist dass die object unter javascript erzeugt werden: javascript.0.vcontrold...bla bla Wie kann ich die auf dem root Baum erzeugen lassen (von javascript)? Danke für ein Tip, fileicht am schluss kann ich den Script in ein richtige Adapter umwandeln?! Grüsse Stek[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/code][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
-
Also meine Skripte sehen derzeit folgendermaßen aus.
Für get ("Vitotronic_get"):
! ```
`// Werte aus Vitotronic auslesen
! var list1 = ['Betriebsart','BetriebsartHK','BetriebParty','BetriebSpar','TempAussen','TempWWIst','TempSpeicher','TempWWAuslauf','TempKesselIst','TempRLIst','TempRaumHK','TempSolarkol','TempSolarspeicher','StatusPumpeSpeicher','StatusFlamme','StatusPumpeIntern','DrehzahlPumpeIntern','StatusPumpeHK','StatusPumpeZirku','StatusUmschaltventil','Systemzeit'];
var list2 = ['BetriebFerien','BeginnFerien','EndeFerien','TempRaumNorSoll','TempRaumRedSoll','TempPartySoll','TempWWSoll','TempKesselSoll','TempVLSoll','KennlinieNeigung','KennlinieNiveau','LaufzeitBrenner','StartsBrenner','LaufzeitSolar','LeistungSolar','ErtragTagSolar'];
var list3 = ['StatusStoerung','Stoerung1','Stoerung2','Stoerung3','Stoerung4','Stoerung5','Stoerung6','Stoerung7','Stoerung8','Stoerung9','Stoerung10','Anlagenschema'];
var list4 = ['TimerMoHeizen','TimerDiHeizen','TimerMiHeizen','TimerDoHeizen','TimerFrHeizen','TimerSaHeizen','TimerSoHeizen','TimerMoWW','TimerDiWW','TimerMiWW','TimerDoWW','TimerFrWW','TimerSaWW','TimerSoWW','TimerMoPumpeZirku','TimerDiPumpeZirku','TimerMiPumpeZirku','TimerDoPumpeZirku','TimerFrPumpeZirku','TimerSaPumpeZirku','TimerSoPumpeZirku'];
! // Objekte setzen
function init(list) {
var len = list.length;
var cmds = '';
for(var i = 0; i < len; i++) {
cmds = cmds + ',getVito' + list[i];
createState('Vitotronic.' + list[i], '', {
type: 'string',
read: true,
write: true,
desc: 'Vitotronic ' + list[i],
def: ''
});
}
return cmds.substr(1); // erstes Komma löschen
}
! // Skript starten
var cmds1 = init(list1);
var cmds2 = init(list2);
var cmds3 = init(list3);
var cmds4 = init(list4);
! function vito(cmds, list, timer) {
exec('vclient -h 127.0.0.1:3002 -c ' + cmds, function(err, stdout, stderr) {
if (err) {
log(stderr,'error');
return;
}
stdout = stdout.split("\n");
var len = list.length;
for(var i = 0; i < len; i++) {
if(timer) setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[5 * i + 1]+" "+stdout[5 * i + 2]+" "+stdout[5 * i + 3]+" "+stdout[5 * i + 4]);
else setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[2 * i + 1]);
}
});
}
! // Zeitintervalle definieren
setInterval(function() {
vito(cmds1, list1, false);
}, 180 * 1000); // alle 3 MinutensetInterval(function() {
vito(cmds2, list2, false);
}, 1800 * 1000); // alle 30 Minuten! setInterval(function() {
vito(cmds3, list3, false);
}, 3600 * 1000); // alle 60 Minuten
! setInterval(function() {
vito(cmds4, list4, true);
}, 7200 * 1000); // alle 120 Minuten! Für set ("Vitotronic_set"): ! >! ~~[spoiler]~~
[code]// Werte in Vitotronic schreiben
! on("hm-rega.0.3903", function(obj) { // Betriebsart
var text;
switch(obj.state.val) {
case 0: text = 'Abschaltbetrieb';
break;
case 1: text = 'Nur Warmwasser';
break;
case 2: text = 'Heizen und Warmwasser';
break;
case 3: text = 'Dauernd red. Betrieb';
break;
case 4: text = 'Dauernd Normalbetrieb';
break;
}
log("setVitoBetriebsart: " + text);
exec('vclient -h 127.0.0.1:3002 -c "setVitoBetriebsart ' + text + '"', function(err, stdout, stderr) {
if (err) log(stderr,'error');
});
});
! on("hm-rega.0.2883", function(obj) { // Partybetrieb
var text;
switch(obj.state.val) {
case 0: text = 'aus';
break;
case 1: text = 'an';
break;
}
log("setVitoBetriebParty: " + text);
exec('vclient -h 127.0.0.1:3002 -c "setVitoBetriebParty ' + text + '"', function(err, stdout, stderr) {
if (err) log(stderr,'error');
});
});
! on("hm-rega.0.4221", function(obj) { // Sparbetrieb
var text;
switch(obj.state.val) {
case 0: text = 'aus';
break;
case 1: text = 'an';
break;
}
log("setVitoBetriebSpar: " + text);
exec('vclient -h 127.0.0.1:3002 -c "setVitoBetriebSpar ' + text + '"', function(err, stdout, stderr) {
if (err) log(stderr,'error');
});
});
[/code][/spoiler] ! Zusätzlich habe ich noch ein Skript, mit dem ich die auf der CCU2 angelegten Systemvariablen schreibe ("Vitotronic_CCU_set"): ! >! ~~[spoiler]~~
[code]// Werte in CCU Systemvariablen schreiben
! on('javascript.0.Vitotronic.Betriebsart', function (obj) { // Vitotronic Betriebsart
log("UG HWR SV Heizungsanlage Betriebsart: " + obj.newState.val);
switch (obj.newState.val) {
case "Abschaltbetrieb":
setState('hm-rega.0.3903', 0);
break;
case "Nur Warmwasser":
setState('hm-rega.0.3903', 1);
break;
case "Heizen und Warmwasser":
setState('hm-rega.0.3903', 2);
break;
case "Dauernd red. Betrieb":
setState('hm-rega.0.3903', 3);
break;
case "Dauernd Normalbetrieb":
setState('hm-rega.0.3903', 4);
break;
}
});
! on('javascript.0.Vitotronic.BetriebParty', function(obj) { // Vitotronic Partybetrieb
log("UG HWR SV Heizungsanlage Partybetrieb: " + obj.newState.val);
switch (obj.newState.val) {
case "aus":
setState('hm-rega.0.2883', 0);
break;
case "an":
setState('hm-rega.0.2883', 1);
break;
}
});
! on('javascript.0.Vitotronic.BetriebSpar', function(obj) { // Vitotronic Sparbetrieb
log("UG HWR SV Heizungsanlage Sparbetrieb: " + obj.newState.val);
switch (obj.newState.val) {
case "aus":
setState('hm-rega.0.4221', 0);
break;
case "an":
setState('hm-rega.0.4221', 1);
break;
}
});
! on('javascript.0.Vitotronic.BetriebFerien', function(obj) { // Vitotronic Ferienbetrieb
log("UG HWR SV Heizungsanlage Ferienbetrieb: " + obj.newState.val);
switch (obj.newState.val) {
case "inaktiv":
setState('hm-rega.0.4905', 0);
break;
case "aktiv":
setState('hm-rega.0.4905', 1);
break;
}
});[/code]`[/spoiler]
! Wenn Du die Datenpunkte nicht in javascript.0 schreiben willst, dann müsstest Du doch eigentlich nur den createState und den nachfolgenden setState-Befehl entsprechend anpassen. Bin mir da aber mangels ausreichender Javascript-Kenntnisse nicht so ganz sicher.
! Gruß,
! Thorsten
! PS.: Das Ändern des Party- und des Sparbetriebs will aber im Moment noch nicht so richtig. Das Ändern der Betriebsart funktioniert dagegen einwandfrei. Da bin ich mir noch nicht so sicher, woran es liegt. Evtl. sind die entsprechenden Adressen zum Schreiben in die Vitotronic nicht korrekt. Müssten sie aber eigentlich. Im Log erhalte ich zumindest keine Fehlermeldungen.[/i][/i][/i][/i][/i]