NEWS
(gelöst) Adapter Wolf Heizung - CWL ansteuern mit IoBroker
-
Nach einigen K(r)ämpfen ist es mir endlich gelungen die Lüftungsanlage mit dem Wolf-Adapter über IoBroker anzusteuern.
Leider wurde der Adapter nicht bis zum Ende entwickelt, daher ging die Lüftung nicht zu Regeln.
Das Regeln betrifft eine 4-Stufen Ansteuerung, entsprechend der Externen Ansteuerung mit dem 4 Stufenschalter von Wolf.Meine erste Post betrifft die Einstellungen über die BM-2 an der Wolfheizung.
Alles was den Adapter und IoBroker selber angeht schreibe ich hoffenltich bis heute Abend (je nach Zeit).
Aber fangen wir mal an....
Die Leistung der 4 Stufen kann man in der Fachmannebene unter dem Menüpunkt Lüftung/Parameter anpassen.
Was zusätzlich noch gemacht werden muss...-
Anwahl der CWL und Taster neben dem Umkreisten Symbol anklicken
![Bild Text]( Bild Link) -
Hier zuerst reduzierte Lüftung und danach Intensivlüften auswählen und jeweils die im dritten Schritt gezeigten Daten (Zeiten) anpassen
![Bild Text]( Bild Link) -
Irgendein Zukunftswert angeben und dann aktivieren
![Bild Text]( Bild Link)
das sollte bei der Wolf_Heizung dann auch alles sein.
-
-
Jetzt geht es um die Änderungen die beim Wolf Adapter gemacht werden müssen
als erste die datapoints.json
Der Pfad für den Adapter: ioBroker\node_modules\iobroker.wolf
Hier findet man im Unterverzeichnis js die Datei datapoints.json
Hier die Typen DTP_Date und DPT_TimeOfDay durch DTP_Switch ersetzen.
Die Umwandlung der Daten konnte wohl damlas nicht getestet werden. Zusätzlich gibt für diese beiden Typen keine Encoder Funktion. -
Die Wolf.js Datei im Hauptverzeichnis des Adapters muss geändert werden.
Da ich hier diverse Änderungen veranstaltet habe (und nicht mehr sicher bin was alles geändert wurde) .....
(Fehler - Can't parse DP : 149 - data: , Falsche Werte der Lüftung , Ansteuerung Paramter 149)
....Kopiere ich am besten den kompletten Code meiner Wolf.js//'use strict'; var net = require('net'); var utils = require(__dirname + '/lib/utils'); var adapter = utils.adapter('wolf'); var dec = new (require('./js/decoder.js'))(); var enc = new (require('./js/encoder.js'))(); var datapoints = require('./js/datapoints.json'); var names = "" var ack_data = { old_devices: {}, new_devices: [] }; var ignore = {}; f function getDevice(dp) { if (dp >= 1 && dp <= 13) { return 'hg1' } else if (dp >= 14 && dp <= 26) { return 'hg2' } else if (dp >= 27 && dp <= 39) { return 'hg3' } else if (dp >= 40 && dp <= 52) { return 'hg4' } else if (dp >= 53 && dp <= 66) { return 'bm1' } else if (dp >= 67 && dp <= 79) { return 'bm2' } else if (dp >= 80 && dp <= 92) { return 'bm3' } else if (dp >= 93 && dp <= 105) { return 'bm4' } else if (dp >= 106 && dp <= 113) { return 'km1' } else if (dp >= 114 && dp <= 120) { return 'mm1' } else if (dp >= 121 && dp <= 127) { return 'mm2' } else if (dp >= 128 && dp <= 134) { return 'mm3' } else if (dp >= 135 && dp <= 147) { return 'sm1' } else if (dp >= 148 && dp <= 175) { return 'cwl' } else if (dp >= 176 && dp <= 191) { return 'hg0' } else { return null; } } function getDeviceRage(id) { if (id == 'hg1') { return {'lsb': 1, 'msb': 13} } else if (id == 'hg2') { return {'lsb': 14, 'msb': 26} } else if (id == 'hg3') { return {'lsb': 27, 'msb': 39} } else if (id == 'hg4') { return {'lsb': 40, 'msb': 52} } else if (id == 'bm1') { return {'lsb': 53, 'msb': 66} } else if (id == 'bm2') { return {'lsb': 67, 'msb': 79} } else if (id == 'bm3') { return {'lsb': 80, 'msb': 92} } else if (id == 'bm4') { return {'lsb': 93, 'msb': 105} } else if (id == 'km1') { return {'lsb': 106, 'msb': 113} } else if (id == 'mm1') { return {'lsb': 114, 'msb': 120} } else if (id == 'mm2') { return {'lsb': 121, 'msb': 127} } else if (id == 'mm3') { return {'lsb': 128, 'msb': 134} } else if (id == 'sm1') { return {'lsb': 135, 'msb': 147} } else if (id == 'cwl') { return {'lsb': 148, 'msb': 175} } else if (id == 'hg0') { return {'lsb': 176, 'msb': 191} } else { return false } } function decode(type, data, dp) { var val; var _data; if (type == 'DPT_Switch') { val = data.readInt8(0); if (val == 0) { if(adapter.config.bool_status){ return false }else{ return 'Off' } } else { if(adapter.config.bool_status){ return true }else{ return 'On' } } } else if (type == 'DPT_Bool') { val = data.readInt8(0); if (val == 0) { return 'false' } else { return 'true' } } else if (type == 'DPT_Enable') { val = data.readInt8(0); if (val == 0) { if(adapter.config.bool_status){ return false }else { return 'Disable' } } else { if(adapter.config.bool_status){ return true }else { return 'Enable' } } } else if (type == 'DPT_OpenClose') { val = data.readInt8(0); if (val == 0) { if(adapter.config.bool_status){ return false }else { return 'Close' } } else { if(adapter.config.bool_status){ return true }else { return 'Open' } } } else if (type == 'DPT_Scaling') { if (datapoints[dp].name == "Lüftungsstufe") { return Math.round(parseInt(dec.decodeDPT5(data)) /2.55 ) // 225 m3/h = 100% --> 2,87 bei 200 m3/h = 100% --> 2,55 } else { return Math.round(parseInt(dec.decodeDPT5(data)) * 100/255) } } else if (type == 'DPT_Value_Temp' || type == 'DPT_Tempd' || type == 'DPT_Value_Pres' || type == 'DPT_Power' || type == 'DPT_Value_Volume_Flow') { if(adapter.config.bool_bar && type == 'DPT_Value_Pres' ){ return Math.round((dec.decodeDPT9(data) / 100000) * 100) / 100 }else { return Math.round(dec.decodeDPT9(data) * 100) / 100 } } else if (type == 'DPT_TimeOfDay') { return dec.decodeDPT10(data) } else if (type == 'DPT_Date') { return dec.decodeDPT11(data) } else if (type == 'DPT_FlowRate_m3/h') { return Math.round(dec.decodeDPT13(data) / 10000) // Berechnung m3/h } else if (type == 'DPT_DHWMode') { _data = data.readInt8(0); if (datapoints[dp].name == "Programmwahl Warmwasser") { if (_data == 0) { return "Automatikbetrieb" } else if (_data == 2) { return "Dauerbetrieb" } else if (_data == 4) { return "Standby" } else { throw ""; } } else if (datapoints[dp].name == "Programm CWL") { if (_data == 0) { return "Automatikbetrieb" } else if (_data == 1) { return "Nennlüftung" } else if (_data == 3) { return "Reduzierte Lüftung" } else if (_data == 2) { return "Lüftung Aus" } else { throw " "+data+ " "; // throw ""; } } else { throw ""; } } else if (type == 'DPT_HVACMode') { _data = data.readInt8(0); if (datapoints[dp].name == "Programmwahl Heizkreis" || datapoints[dp].name == "Programmwahl Mischer") { if (_data == 2) { return "Standby" } else if (_data == 0) { return "Automatikbetrieb" } else if (_data == 1) { return "Heizbetrieb" } else if (_data == 3) { return "Sparbetrieb" } else { throw ""; } } else { throw ""; } } else if (type == 'DPT_HVACContrMode') { _data = data.readInt8(0); if (dp < 177) { if (_data == 0) { return "Auto" } else if (_data == 1) { return "Heat" } else if (_data == 6) { return "Off" } else if (_data == 7) { return "Test" } else if (_data == 11) { return "Ice" } else if (_data == 15) { return "calibrations Mode" } else { throw ""; } } else { if (_data == 0) { return "Auto" } else if (_data == 1) { return "Heat" } else if (_data == 3) { return "Cool" } else if (_data == 6) { return "Off" } else if (_data == 7) { return "Test" } else if (_data == 11) { return "Ice" } else { throw ""; } } } else { throw ""; } } function encode(data, dp) { var val; var _data; var type = datapoints[dp].type var name = datapoints[dp].name //"DPT_Value_Temp", //"DPT_HVACMode", //"DPT_DHWMode", //"DPT_Switch", //"DPT_Tempd", //"DPT_TimeOfDay" //"DPT_Date" if (type == 'DPT_Switch') { if (['On', 'on', 'Enable', '1', 'true', 1, true].indexOf(data) > -1) { return [new Buffer("01", "hex"), "On"]; } else { return [new Buffer("00", "hex"), "0ff"]; } } else if (type == 'DPT_Tempd' && name == "Sollwertkorrektur") { val = Math.round(data * 2) / 2 if (val > 4) { val = 4 } if (val < -4) { val = 4 } return [enc.encodeDPT9(data), val] } else if (type == 'DPT_Tempd' && name == "Sparfaktor") { val = Math.round(data * 2) / 2 if (val > 10) { val = 10 } if (val < 0) { val = 0 } return [enc.encodeDPT9(data), val] } else if (name == "Programmwahl Warmwasser") { if (data == 0 || data == "Standby") { return [new Buffer("04", "hex"), "Standby"]; } else if (data == 2 || data == "Dauerbetrieb") { return [new Buffer("02", "hex"), "Dauerbetrieb"]; } else { return [new Buffer("00", "hex"), "Automatikbetrieb"]; } } else if (name == "Programm CWL") { if (data == 3 || data == "Reduzierte Lüftung") { return [new Buffer("03", "hex"), "Reduzierte Lüftung"]; } else if (data == 2 || data == "Lüftung Aus") { return [new Buffer("02", "hex"), "Lüftung Aus"]; } else if (data == 1 || data == "Nennlüftung") { return [new Buffer("01", "hex"), "Nennlüftung"]; } else { return [new Buffer("00", "hex"), "Automatikbetrieb"]; } } else if (name == "Programmwahl Mischer" || name == "Programmwahl Heizkreis") { if (data == 0 || data == "Standby") { return [new Buffer("02", "hex"), "Standby"]; } else if (data == 1 || data == "Automatikbetrieb") { return [new Buffer("00", "hex"), "Automatikbetrieb"]; } else if (data == 2 || data == "Heizbetrieb") { return [new Buffer("01", "hex"), "Heizbetrieb"]; } else { return [new Buffer("03", "hex"), "Sparbetrieb"]; } } if (name == "Warmwassersolltemperatur") { val = parseInt(data) if (val > 65) { val = 65 } if (val < 20) { val = 20 } return [enc.encodeDPT9(data), val] } else { return "error" } } function bufferIndexOf(buf, search, offset) { offset = offset || 0; var m = 0; var s = -1; for (var i = offset; i < buf.length; ++i) { if (buf[i] != search[m]) { s = -1; m = 0; } if (buf[i] == search[m]) { if (s == -1) s = i; ++m; if (m == search.length) break; } } if (s > -1 && buf.length - s < search.length) return -1; return s; } function addGroup(dev) { var group_name = ''; if (adapter.config.names[dev + "_n"] == "") { if (dev.match(/hg/)) { group_name = 'Heizgeräte ' + dev.slice(-1) } else if (dev.match(/bm/)) { group_name = 'Bediengeräte ' + dev.slice(-1) } else if (dev.match(/mm/)) { group_name = 'Mischermodule ' + dev.slice(-1) } else if (dev.match(/km/)) { group_name = 'Kaskadenmodul' } else if (dev.match(/sm/)) { group_name = 'Solarmodul' } else if (dev.match(/cwl/)) { group_name = 'Comfort-Wohnungs-Lüftung' } } else { group_name = adapter.config.names[dev + "_n"]; } adapter.setObject(dev, { type: 'channel', common: { name: group_name, type: 'channel' }, native: {} }); } function addDevice(dp, callback) { var dev = getDevice(dp) if (dev) { //ack_data.new_devices.push(dev); var range = getDeviceRage(dev); addGroup(dev) for (range.lsb; range.lsb <= range.msb; range.lsb++) { if (!ack_data[range.lsb]) { var data = datapoints[range.lsb]; if(data.einheit == "Pa" && adapter.config.bool_bar == true){ data.einheit == "bar" } ack_data[range.lsb] = {id: adapter.namespace + "." + dev + '.' + range.lsb}; //console.log('add:' + dev + '.' + range.lsb ); adapter.setObject(dev + '.' + range.lsb, { type: 'state', common: { name: data.name, role: data.type.replace('DPT_', ''), type: 'state', unit: data.einheit, enabled: false }, native: { rw: data.rw } }); } } callback() } } function main() { adapter.getForeignObjects(adapter.namespace + '.*', function (err, list) { for (var idd in list) { ack_data[idd.split('.').pop()] = {id: idd}; ack_data.old_devices[idd.split('.')[2]] = idd.split('.')[2]; } var devices = adapter.config.devices; names = adapter.config.names; for (var dev in devices) { if (ack_data.old_devices[dev]) { if (devices[dev] == "off") { adapter.deleteChannel(dev, function () { }); } else { addGroup(dev) } } } adapter.subscribeStates('*'); server(); }); } function server() { var buff_req = new Buffer("0620F080001104000000F086006E000000", "hex"); var buff_getall = new Buffer("0620F080001604000000F0D0", "hex"); var splitter = new Buffer("0620f080", "hex"); net.createServer(function (sock) { //var buff_set = new Buffer("0620F080001404000000F0C10039000100390001", "hex"); //0620F080001504000000F006006E0001006E030101 adapter.on('stateChange', function (id, state) { if (state && !state.ack && id) { var dp = parseInt(id.split('.').pop()); if (datapoints[dp].rw == "r" ) { adapter.setState(id, ack_data[dp].value, true); adapter.log.error("oid: " + id + " is only readable") } else { var enc = encode(state.val, dp) var bufVal = enc[0] if (bufVal != 'error') { var _buff_set = Buffer.concat([new Buffer("0620F08000" + (20 + bufVal.length).toString(16) + "04000000F0C100" + dp.toString(16) + "000100" + dp.toString(16) + "000" + bufVal.length.toString(16) + "", "hex"), bufVal], bufVal.length + 20) adapter.setState(id, enc[1], true); // todo hier an ism8 senden sock.write(_buff_set) } else { adapter.log.error("Can't encode DP : " + dp + " - data: " + enc[1] + " - type: " + datapoints[dp].type); } } } }); var val; var dp; var device; var search; var lines; var data; sock.on('data', function (_data) { //console.log(_data) search = -1; lines = []; while ((search = bufferIndexOf(_data, splitter)) > -1) { lines.push(_data.slice(0, search + splitter.length)); _data = _data.slice(search + splitter.length, _data.length); } if (_data.length) lines.push(_data); for (var i = 1; i < lines.length; i++) { data = Buffer.concat([splitter, lines[i]]); buff_req[12] = data[12]; buff_req[13] = data[13]; sock.write(buff_req); dp = data.readUInt16BE(12); device = getDevice(dp); if (adapter.config.devices[device] == "Auto") if (ack_data[dp]) { setState() } else { if (datapoints[dp].name == "Störung") { if (data.slice(20).readInt8(0) == 1) { ignore[device] = true; } else { ignore[device] = undefined; } } if (!ignore[device]) { addDevice(dp, function () { setState() }) } } function setState() { try { val = decode(datapoints[dp].type, data.slice(20), dp); adapter.setState(device + '.' + dp, val, true); ack_data[dp]["value"] = val; //Adpater querstriche hin Anzeige aller Werte als Error // adapter.log.error("Can parse DP X : " + device +" Y "+ dp + " -" + val ); } catch (err) { // bei val die Querstriche weg // val = ""; // bei Adpter Log die oberequerstriche hin unten querstriche weg adapter.log.error("Can't parse DP X : " + dp + " - data: " + data.toString("hex") + " - " + val + " length: " + data.length); // adapter.log.error("Can't parse DP: " + dp + " " + datapoints[dp].name + "- data: " + data.toString("hex") + " -" + val + " length: " + data.length); adapter.log.debug('incomming' + '\n Device: ' + device + '\n Datapoint: ' + dp + '\n Datapoint_name: ' + datapoints[dp].name + '\n Datapoint_type: ' + datapoints[dp].type + '\n Data: ' + data.toString("hex") + '\n Lengh: ' + data.length + '\n Value: ' + val + '' ); } } } }) sock.write(buff_getall); }).listen(adapter.config.ism8_port, adapter.config.host_ip); } adapter.on('ready', function () { main(); }); //function test(_data) { // var _data = new Buffer("0620f080001504000000f00600020001000203010b", "hex"); // var val; // var dp = _data.readUInt16BE(12); // var device = getDevice(dp); // // // try { // val = decode(datapoints[dp].type, _data.slice(20), dp); // } // catch (err) { // val = ""; // console.log("Can't parse DP : " + dp + " - data: " + _data.toString("hex") + " - length: " + _data.length) // console.log(err) // } // // console.log('-----------------------------------------'); // console.log('Device: ' + device); // console.log('Datapoint: ' + dp); // console.log('Datapoint_name: ' + datapoints[dp].name); // console.log('Datapoint_type: ' + datapoints[dp].type); // console.log('value: ' + val); // console.log('oid: ' + device + '.' + dp); //} //test() //todo DPT_HVACContrMode 0620f080001504000000f00600020001000203010b //todo DPT_HVACContrMode 0620f080001504000000f006000200010002030101
-
Müsste beim Adapter alles sein, jetzt zu IoBroker
Objekte:Bei den Objekten muss bei 149,153 und 158 die Art noch auf Zahl geändert werden.
Ansteuerung:
Stufe 0 (25%) = Parameter 153 = 0 und 158 = 1 - Feuchteschutz
Stufe 1 (50%) = Parameter 153 und 158 = 0, 149 = 3 - reduzierte Lüftung
Stufe 2 (75%) = Parameter 153 und 158 = 0, 149 = 1 - Nennlüftung
Stufe 3 (100%) = Parameter 153 = 1 und 158 = 0 - IntensivlüftungHier ein Bild meiner Objekte (CWL)
Hier kann man sehen das der Parameter 158 True(=1) ist und die Leistung auf 25%.
Sobald 153 oder 158 aktiv sind ist der Parameter 149 egal.
Wenn beide auf 1 sind hat 153 Vorrang.Hier ein Beispiel meines Blockly Scripts
So, dass sollte es auch gewesen sein.
Gerne Rückmeldung, falls ich etwas vergessen habe oder wenn jemand einen besseren Weg gefunden hat.
Gruß
Ein-Klaus -
Einen hab ich noch .........
leider bin ich unwissend, was das richtige Programmieren angeht.
Habe auf einer KNX Seite einen Code gefunden in PhP, leider war ich nicht in der Lage diesen so zu ändern das ich den Adapter wirklich vervollständigen konnte.
Vielleicht hat ja einer von euch entsprechende Möglichkeiten.
Konnte nur feststellen, dass es etwas mit Decoder/Encoder zu tun hat
(dec.decodeDPT10(data) und dec.decodeDPT11(data) - einen Encoder für die beiden gibt es erst gar nicht).
Somit ist es nicht möglich per Iobroker die Zeiten vorzugeben.
Muss also 2032 dran denken wieder die Zeit hochzusetzen -
Deine Lösung funktionert bei mir nicht. Ich habe eine CWL300 Lüftungsanlage mit dem BM-2 Bedienteil. Dort kann ich aber keine Start und Enddaten eingeben. Eine Fachmannebene gibt es bei mir nicht. Ich bin also angewiesen die Zeiten ans ISM8 zu schicken. Dafür habe ich das Script repariert und erweitert.
Bisher wurden Werte vom Typ DPT_TimeOfDay und DPT_Date nicht richtig ausgewertet. Das Byte Feld ist 3 Byte encodiert, Iobroker erwartet einen Dezimalwert.
65881 als Enddatum ist 0x010159 - interpretiert als 1.1.2089.
Startdatum ist 65882 0x01015a - 1.1.1990.
Als Zeit nehme ich 1.Das sind die Werte die über Ethernet geschickt werden, z.B.:
//kommando hvac normal
0620f080 0015 04000000f0 c1 0095 0001 0095 00 01 02
//feuchteschutz end date 65881 - 1.1.2089
0620f080 0017 04000000f0 c1 00a0 0001 00a0 00 03 010159
//intensiv end zeit 1
0620f080 0017 04000000f0 c1 009d 0001 009d 00 03 000001Problem ist momentan, dass es keine Reaktion beim Lüftungsgerät gibt, egal was ich an Parametern alles verstelle.
-
Hier noch meine Version vom Script
-
Hast du nur die CWL ?
Habe selber Heizung + Lüftung daher kann es natürlich anders sein.
Werde deine Wolf.js mal testen, sind ja doch einige Änderungen drinne...Irgendetwas stimmt nicht
Kommen aktuell viele "m bufVal: 0620f080001604000000f0c100a0000100a000022019"
Muss schauen wann ich die Zeit finde in Ruhe zu schauen, nachteil sind meine nicht vorhanden js Kenntnisse. -
Ich habe nur die CWL.
Da passt was nicht bei dir,
0a0 ^= 160 Zeitweiser Feuchteschutz Enddatum
das hat 3 Byte Stellwerte, bei dir kommen nur 2 drüber: 02 2019Irgendwie auch schwer zu debuggen, über Ethernet kommt nicht zurück, lt. Manual ist auf DatapointValue.Ind keine Antwort definiert.
-
Ich schätze das zu viele Daten übertragen/ausgelesen werden "Wed Sep 18 2019 00:00:00 GMT+0200 (GMT+02:00) ". Bei DPT_Date nur das Datum dd:mm:yyyy und bei DPT_TimeofDay hh:mm:ss.
Bei meiner Heizungsanlage haben die Datensätze dafür gesorgt, dass bei den Zeiten und Datum nur noch --:--:-- stand. -
@killroy2 said in (gelöst) Adapter Wolf Heizung - CWL ansteuern mit IoBroker:
llwerte, bei dir kommen nur 2 drüber: 02 2019
Hi,
bist du eigentlich weiter gekommen?
Ich habe auch die Kombi aus CWL (derzeit an einem BM-2 Bedienteil) und dem ism8i - gerade eingetroffen;-).Erste Herausforderung ist mal die HW-Installation, wo bringe ich das Teil denn an? Die Anleitung ist für den Einbau in Heizungen.
Danke Ole
-
Hi,
eventuell könnt Ihr mir helfen, seit kurzem habe ich eine Wolfanlage (CGB2, BM2, MM2 und SM2) mit ism8i verbaut.
Über den Wolf-Adapter kann ich alle Werte auslesen, jedoch keine setzen.
Von Interesse wären folgende:
- 56 Warmwassersolltemperatur
- 57 Programmwahl Heizkreis
- 58 Programmwahl Warmwasser
- 65 Sollwertkorrektur
Leider fehlt mir die Fertigkeit so tief in die Programmierung des Adapters einzusteigen.
Eventuell kann mit jemand schildern, wo ich Änderungen im Adapter ausführen kann oder
ob es einen anderen Weg gibt diese Parameter zu setzen.VG
Axel -
Hallo, gibt es mittlerweile schon Erfahrungen mit dem Einbau des ism8i in eine
CWL (ohne Heizung)?Läuft der Adapter für die CWL nun einwandfrei und lassen sich alle Funktionen nutzen?
-
@uschi08 said in (gelöst) Adapter Wolf Heizung - CWL ansteuern mit IoBroker:
@killroy2 said in (gelöst) Adapter Wolf Heizung - CWL ansteuern mit IoBroker:
llwerte, bei dir kommen nur 2 drüber: 02 2019
Hi,
bist du eigentlich weiter gekommen?
Ich habe auch die Kombi aus CWL (derzeit an einem BM-2 Bedienteil) und dem ism8i - gerade eingetroffen;-).Erste Herausforderung ist mal die HW-Installation, wo bringe ich das Teil denn an? Die Anleitung ist für den Einbau in Heizungen.
Danke Ole
hast du eine lösung gefunden?
-
Hi, nein leider nicht habs wieder zurückgeschickt und werde mal versuchen es mit einer RJ12 Leitung und einem via Channel-Aktor über den Drehschalter eingang zu steuern...
-
Moin,
falls noch jemand mit ner CWL 300 auf der Suche ist, diese via ioBroker zusteuern.
Mein Weg KIS:- sonoff 4ch und RJ6 Kabel reichen vollkommen aus, um die Stufen zu schalten, so kann ich
- (0) Aus - geschaltet mit Leitung 4+5
- (2) Nennlüftung - geschaltet mit Leitung 3+5
- (3) Intensiv - geschaltet mit Leitung 2+5
...schalten.
Das ganze "übersteuert" dann den eingestellten Basisbetrieb, der im Feuchteschutz-/ bzw. auf reduzierter Lüftung läuft.
So kann ich Logik / Intelligenz via ioBorker und den Sonoff reinbringen:
- Nachts wird der Basisbetrieb dann übersteuert und für 2-3 Stunden die Nennleistung geschaltet, um kühle Luft ins Haus zu kriegen,
- oder eben in Abhängigkeit zur Innen- und Außenluftfeuchtigkeit die Luftzufuhr anstoßen, wenn‘s sein muss..
Wie gesagt, einfach nen RJ6 Kabel an die CWL anschließen, via Schalter in den IoBroker bringen und die Magie kann starten....das ganze läuft potentialfrei über die Leitungen 2 - 4 Masse ist 5. D.h. man kann auch direkt mit dem Kabel testen, indem man die Leitungen zusammenhält...
Weitere Infos zur Steuerung über externe Software / Gateways...
http://otgw.tclcode.com
oder OpenTherm Gateway
https://arduino-projekte.info/lueftersteuerung-fuer-wolf-cwl-300400-mit-arduino/
Näheres zum Schaltungplan hier https://www.haustechnikdialog.de/forum/t/121882/Wolf-CWL-300-B?page=2Oder eben wie oben: digital, einfach und effizient…
Grüße
Olli! - sonoff 4ch und RJ6 Kabel reichen vollkommen aus, um die Stufen zu schalten, so kann ich
-
@uschi08 said in (gelöst) Adapter Wolf Heizung - CWL ansteuern mit IoBroker:
Moin,
falls noch jemand mit ner CWL 300 auf der Suche ist, diese via ioBroker zusteuern.
Mein Weg KIS:- sonoff 4ch und RJ6 Kabel reichen vollkommen aus, um die Stufen zu schalten, so kann ich
- (0) Aus - geschaltet mit Leitung 4+5
- (2) Nennlüftung - geschaltet mit Leitung 3+5
- (3) Intensiv - geschaltet mit Leitung 2+5
...schalten.
Das ganze "übersteuert" dann den eingestellten Basisbetrieb, der im Feuchteschutz-/ bzw. auf reduzierter Lüftung läuft.
So kann ich Logik / Intelligenz via ioBorker und den Sonoff reinbringen:
- Nachts wird der Basisbetrieb dann übersteuert und für 2-3 Stunden die Nennleistung geschaltet, um kühle Luft ins Haus zu kriegen,
- oder eben in Abhängigkeit zur Innen- und Außenluftfeuchtigkeit die Luftzufuhr anstoßen, wenn‘s sein muss..
Wie gesagt, einfach nen RJ6 Kabel an die CWL anschließen, via Schalter in den IoBroker bringen und die Magie kann starten....das ganze läuft potentialfrei über die Leitungen 2 - 4 Masse ist 5. D.h. man kann auch direkt mit dem Kabel testen, indem man die Leitungen zusammenhält...
Weitere Infos zur Steuerung über externe Software / Gateways...
http://otgw.tclcode.com
oder OpenTherm Gateway
https://arduino-projekte.info/lueftersteuerung-fuer-wolf-cwl-300400-mit-arduino/
Näheres zum Schaltungplan hier https://www.haustechnikdialog.de/forum/t/121882/Wolf-CWL-300-B?page=2Oder eben wie oben: digital, einfach und effizient…
Grüße
OlliMoin und danke für deine Erklärung. Kannst du mir eigentlich sagen, wie ich die Lüftungsanlage am besten betreiben soll - soll heißen, wann sollte die Anlage auf welcher Stufe laufen? (Sommer, Winter, Tag, Nacht, anwesend, abwesend,...)
- sonoff 4ch und RJ6 Kabel reichen vollkommen aus, um die Stufen zu schalten, so kann ich
-
Hi,
da frag mal lieber den Lüftungsbauer deines Vertrauens. Ich steuere so, wie ich es als sinnvoll erachte: möglichst wenig und immer dann wenn die Luftfeuchtigkeit hoch wird auch mal intensiver - falls die draußen niedriger ist. Oder ich kühle Luft rein bringen möchte.
Ansonsten hat der Heizungsbauer das ja mal berechnet, als Nennleistung. Die nutze ich aber nicht, sondern immer nur reduziert, als Grundlage für die oben beschriebenen Anwendungsfälle.
Viele Grüße
Olli -
@uschi08 Hi, ich möchte dieses Thema nochmals aufgreifen.
Have bisher eine CWL 400 Lüftubgsanlage und möchte diese gerne an mein iobroker anbinden. Habe weiterhin ein Zigbee Netz (Conbee 2) sowie ein Rademacher Himepilot.
Vist du mit deiner Lösung immer noch zufrieden und würdest es wieder so machen? Ist es die einfachste Möglichkeit, die CWL anzubinden?
-