Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Wolf-Adapter Sollwertkorrektur in 0.5er Schritten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Wolf-Adapter Sollwertkorrektur in 0.5er Schritten

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

      Moin zusammen,

      ich bin noch sehr frisch hier im Forum, also hauptsächlich lesender Teilhaber.. 😉 Nehmt es mir also bitte nicht krumm, wenn meine Beiträge nicht das richtige "wording" oder die richtige Formatierung haben..

      Ich habe mir gestern den Wolf-Adapter für meine Heizung installiert und das ISM8i erfolgreich angebunden. Leider ist mir aufgefallen, dass die Sollwertkorrektur (also quasi die Heizleistung) nicht in 0.5er Schritten einstellbar ist. Wenn ich die entsprechende Variable (wolf0.bm1.65) auf 0.5 oder 1.5 eingestellt habe, wird bei der Heizung auf -4 angepasst, oder gar nichts ändert sich..

      Bevor ich hier grundlegende Fragen stelle, wollte ich kurz selber suchen und bin auf die Funktion "encodeDPT9" im Modul Encode (/opt/iobroker/node-modules/iobroker.wolf/js/encoder.js) aufmerksam geworden. Dort wird der übergebene Wert in das für die Schnittstelle notwendige Format (Anleitung Seite 33) übersetzt.

      Encoder.prototype.encodeDPT9 = function(value, exp) {
        const data = [0,0];
        
        if(exp === undefined) {
          exp = 2;
        }
        
        let mant = value * 100 / (1 << exp);
        
        //Fill in sign bit
        if (value < 0) {
          data[0] |= 0x80;
          mant = (~(mant * -1) + 1) & 0x07ff;
        }
        
        //Fill in exp (4bit)
        data[0] |= (exp & 0x0F) << 3;
        
        //Fill in mant
        data[0] |= (mant >> 8) & 0x7;
        data[1] |= mant & 0xFF;
        
        const buffer = new Buffer(2);
        buffer.writeUInt8(data[0], 0);
        buffer.writeUInt8(data[1], 1);
        return buffer;
      };
      

      Das Problem (laut meiner knappen, stümperhaften Analyse) an der Stelle ist, dass der Funktion in keinem Aufruf ein Exponent mitgegeben wird. Wenn der Exponent-Parameter aber 'undefined' ist, wird immer 2 angenommen. Was meiner Meinung nach zu Fehlern führt.

      Ich habe daher ein paar Zeilen Code hinzugefügt und konnte den Wert 0.5 erfolgreich als Sollwertkorrektur übergeben.

      Encoder.prototype.encodeDPT9 = function(value, exp) {
        const data = [0,0];
        
        // Mantisse hat 11 Bit, also -2048 bis 2047
        // exp berechnen wenn darüber oder darunter
        // NEU ===========================================
        if(exp === undefined) {
          exp = 0;
          let mant = (value*100)/2;
          while (mant.toString(2).length > 11) {
            mant = mant/2;
            exp = exp+1;
          }
        }
        // ALT ===========================================
        /*
        if(exp === undefined) {
          exp = 2;
        }
        */
        // ===============================================
        
        let mant = value * 100 / (1 << exp);
        
        //Fill in sign bit
        if (value < 0) {
          data[0] |= 0x80;
          mant = (~(mant * -1) + 1) & 0x07ff;
        }
        
        //Fill in exp (4bit)
        data[0] |= (exp & 0x0F) << 3;
        
        //Fill in mant
        data[0] |= (mant >> 8) & 0x7;
        data[1] |= mant & 0xFF;
        
        const buffer = new Buffer(2);
        buffer.writeUInt8(data[0], 0);
        buffer.writeUInt8(data[1], 1);
        return buffer;
      };
      

      Vielleicht steckt ja einer von euch so tief im Code, dass er mir kurz erklären kann warum der Exponent an der Stelle nicht berechnet werden muss, oder was ich anderes übersehen habe.

      Viele Grüße
      Max

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

      Support us

      ioBroker
      Community Adapters
      Donate

      921
      Online

      31.9k
      Users

      80.2k
      Topics

      1.3m
      Posts

      fehler typescript wolf
      1
      1
      766
      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