Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. (gelöst) Adapter Wolf Heizung - CWL ansteuern mit IoBroker

    NEWS

    • [erledigt] 15. 05. Wartungsarbeiten am ioBroker Forum

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    (gelöst) Adapter Wolf Heizung - CWL ansteuern mit IoBroker

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      Einklaus last edited by

      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...

      1. Anwahl der CWL und Taster neben dem Umkreisten Symbol anklicken
        ![Bild Text](1.JPG Bild Link)

      2. Hier zuerst reduzierte Lüftung und danach Intensivlüften auswählen und jeweils die im dritten Schritt gezeigten Daten (Zeiten) anpassen
        ![Bild Text](2.JPG Bild Link)

      3. Irgendein Zukunftswert angeben und dann aktivieren
        ![Bild Text](3.JPG Bild Link)

      das sollte bei der Wolf_Heizung dann auch alles sein.

      E 1 Reply Last reply Reply Quote 0
      • E
        Einklaus @Einklaus last edited by

        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.

        1 Reply Last reply Reply Quote 0
        • E
          Einklaus last edited by Einklaus

          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
          
          1 Reply Last reply Reply Quote 0
          • E
            Einklaus last edited by Einklaus

            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.
            5.jpg

            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üftung

            Hier ein Bild meiner Objekte (CWL)
            4.jpg

            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
            6.jpg

            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

            1 Reply Last reply Reply Quote 0
            • E
              Einklaus last edited by Einklaus

              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 😉

              KNX-Forum über einen Wolf Adapter auf PHP basis

              1 Reply Last reply Reply Quote 0
              • K
                killroy2 last edited by

                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 000001

                Problem ist momentan, dass es keine Reaktion beim Lüftungsgerät gibt, egal was ich an Parametern alles verstelle.

                1 Reply Last reply Reply Quote 0
                • K
                  killroy2 last edited by

                  Hier noch meine Version vom Script

                  wolf.js

                  1 Reply Last reply Reply Quote 0
                  • E
                    Einklaus last edited by Einklaus

                    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.

                    E 1 Reply Last reply Reply Quote 0
                    • K
                      killroy2 last edited by

                      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 2019

                      Irgendwie auch schwer zu debuggen, über Ethernet kommt nicht zurück, lt. Manual ist auf DatapointValue.Ind keine Antwort definiert.

                      U 1 Reply Last reply Reply Quote 0
                      • E
                        Einklaus @Einklaus last edited by

                        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.

                        1 Reply Last reply Reply Quote 0
                        • U
                          uschi08 @killroy2 last edited by uschi08

                          @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

                          Thomas W 1 Reply Last reply Reply Quote 0
                          • AFi
                            AFi last edited by

                            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

                            1 Reply Last reply Reply Quote 0
                            • Thomas W
                              Thomas W last edited by Thomas W

                              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?

                              1 Reply Last reply Reply Quote 0
                              • Thomas W
                                Thomas W @uschi08 last edited by

                                @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?

                                U 1 Reply Last reply Reply Quote 0
                                • U
                                  uschi08 @Thomas W last edited by

                                  @Thomas-W

                                  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...

                                  U 1 Reply Last reply Reply Quote 0
                                  • U
                                    uschi08 @uschi08 last edited by uschi08

                                    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=2

                                    Oder eben wie oben: digital, einfach und effizient…

                                    Grüße
                                    Olli!

                                    20200218_194518.jpg

                                    Thomas W 1 Reply Last reply Reply Quote 0
                                    • Thomas W
                                      Thomas W @uschi08 last edited by

                                      @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=2

                                      Oder eben wie oben: digital, einfach und effizient…

                                      Grüße
                                      Olli

                                      Moin 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,...)

                                      U 1 Reply Last reply Reply Quote 0
                                      • U
                                        uschi08 @Thomas W last edited by

                                        @Thomas-W

                                        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

                                        Thomas W 1 Reply Last reply Reply Quote 0
                                        • Thomas W
                                          Thomas W @uschi08 last edited by

                                          @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?

                                          U 1 Reply Last reply Reply Quote 0
                                          • U
                                            Unbeliveable89 @Thomas W last edited by

                                            @thomas-w Ich habe seit kurzem einen Brink Flair 400 (Baugleich Wolf CWL 400; bzw. das Original) und wäre hier auch sehr interessiert. @uschi08 kannst du uns hier bitte nochmal berichten? Wäre so auch der Bypass zu/abschaltbar?

                                            VG Alex

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            617
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            wolf cwl
                                            7
                                            21
                                            3342
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo