Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter Fronius 2.0.x

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    883

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Test Adapter Fronius 2.0.x

Geplant Angeheftet Gesperrt Verschoben Tester
164 Beiträge 25 Kommentatoren 34.1k Aufrufe 25 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • nkleberN nkleber

    @alex4 Mit dem Fronius Adapter ist das nicht möglich da die API nur ein lesen der Daten zulässt. Du kannst das aber natürlich mit dem Modbus Adapter machen. Ob dort direkt die Zeitabhänige Batteriesteuerung angepasst werden kann oder ob das Script direkt auf die Batterie Ladung/Entladung eingreifen muss, kann ich dir so nicht sagen. Die direkte Batteriesteuerung für Laden/Entladen geht aber auf jeden fall mit den Modbus adapter und Scripts...

    Siehe https://forum.iobroker.net/topic/65047/fronius-symo-gen24-minsoc-einstellen wo ein ähnliches Thema diskutiert wurde

    A Offline
    A Offline
    Alex4
    schrieb am zuletzt editiert von Alex4
    #161

    @nkleber Das Problem ist, dass ich zb. mit einer gewissen Leistung entladen will und wenn man von der Batterie eine Zwangsladung veranlasst, macht das der Gen24 mit 500Watt. Ich muss hier die Leistung mitgeben können. Das hätte ich beim Modbus nicht gefunden bis dato.

    Was ich rausgefunden habe ist, dass man die Requests den Webinterfaces vielleicht benutzen kann:

    http post http://xxx.xxx.xxx.xxx/config/timeofuse

    Content: {"timeofuse":[{"Active":true,"Power":3000,"ScheduleType":"DISCHARGE_MIN","TimeTable":{"Start":"20:00","End":"21:00"},"Weekdays":{"Mon":true,"Tue":true,"Wed":true,"Thu":true,"Fri":true,"Sat":true,"Sun":true}}]}
    

    result:

    {
    	"errors" : [],
    	"permissionFailure" : [],
    	"unknownNodes" : [],
    	"validationErrors" : [],
    	"writeFailure" : [],
    	"writeSuccess" : 
    	[
    		"timeofuse"
    	]
    }
    

    Löschen geht dann:

    http post http://xxx.xxx.xxx.xxx/config/timeofuse

    Content:

    {"timeofuse":[]}
    

    result:

    {
    	"errors" : [],
    	"permissionFailure" : [],
    	"unknownNodes" : [],
    	"validationErrors" : [],
    	"writeFailure" : [],
    	"writeSuccess" : 
    	[
    		"timeofuse"
    	]
    }
    

    Um die Werte abzufragen gibts folgendes http get http://10.10.13.211/config/timeofuse, dort kommt dann das array zurück, sofern die authentifzierung passt.

    Die Authentifzierung wird im Header unter

    authorization: Digest username="technician", realm="Webinterface area", nonce="xxxxxxxxxxx", uri="/config/timeofuse", response="xxxxxxxxxxx", qop=auth, nc=00000042, cnonce="xxxxxxxxxxx"
    

    Die Werte response und cnonce ändern sich bei jedem request dabei, der Wert nonce bleibt für einige Zeit gleich. Der Wert nc wird hochgezählt bei jeder Abfrage, sobald dieser bei mir gerade 61 erreicht hat, wird der counter resettet und gebinnt wieder bei 01 und nonce hat einen neuen tokken oder hash.

    im main.js am gen24 findet man auch die authentication berechnung.

                   key: "digestAuthHeader",
                    value: function(p, g, w, b) {
                        for (var B = !(arguments.length > 4 && void 0 !== arguments[4]) || arguments[4], y = w.split(","), T = {}, L = 0; L < y.length; L++) {
                            var S = y[L].match(this.AUTH_KEY_VALUE_RE);
                            S && (T[S[1]] = S[2].replace(/["']/g, ""))
                        }
                        if (!T.realm || !T.nonce)
                            return "";
                        var k = T.qop || ""
                          , R = _.splitCredentials(b)
                          , Y = String(++this.NC);
                        Y = this.NC_PAD.substring(Y.length) + Y;
                        var U = this.randomBytes(8).join("")
                          , X = B ? o.V8.hashStr(R.username + ":" + T.realm + ":" + R.password) : R.password
                          , z = o.V8.hashStr(p.toUpperCase() + ":" + g)
                          , H = X + ":" + T.nonce;
                        k && (H += ":" + Y + ":" + U + ":" + (k = k.split(",")[0]));
                        var se = o.V8.hashStr(H += ":" + z)
                          , te = 'Digest username="' + R.username + '", realm="' + T.realm + '", nonce="' + T.nonce + '", uri="' + g + '", response="' + se + '"';
                        return T.opaque && (te += ', opaque="' + T.opaque + '"'),
                        k && (te += ", qop=" + k + ", nc=" + Y + ', cnonce="' + U + '"'),
                        te
                    }
    

    Die funktion calcHash(User, realm, password)

             key: "calcHash",
                    value: function(p, g, w) {
                        return o.V8.hashStr(p + ":" + g + ":" + w)
                    }
                  key: "hashStr",
                    value: function(s) {
                        var p = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];
                        return this.onePassHasher.start().appendStr(s).end(p)
                    }
    

    Wenn ich den Code richtig verstehe, wird in der respone der Username, realm und das Passwort per hash übertragen. Mittels einen ,,onePassHasher", dieser dürfte aus diesem Github Projekt stammen: https://github.com/cotag/ts-md5/tree/master/src

    ste_gleiS nkleberN 2 Antworten Letzte Antwort
    0
    • A Alex4

      @nkleber Das Problem ist, dass ich zb. mit einer gewissen Leistung entladen will und wenn man von der Batterie eine Zwangsladung veranlasst, macht das der Gen24 mit 500Watt. Ich muss hier die Leistung mitgeben können. Das hätte ich beim Modbus nicht gefunden bis dato.

      Was ich rausgefunden habe ist, dass man die Requests den Webinterfaces vielleicht benutzen kann:

      http post http://xxx.xxx.xxx.xxx/config/timeofuse

      Content: {"timeofuse":[{"Active":true,"Power":3000,"ScheduleType":"DISCHARGE_MIN","TimeTable":{"Start":"20:00","End":"21:00"},"Weekdays":{"Mon":true,"Tue":true,"Wed":true,"Thu":true,"Fri":true,"Sat":true,"Sun":true}}]}
      

      result:

      {
      	"errors" : [],
      	"permissionFailure" : [],
      	"unknownNodes" : [],
      	"validationErrors" : [],
      	"writeFailure" : [],
      	"writeSuccess" : 
      	[
      		"timeofuse"
      	]
      }
      

      Löschen geht dann:

      http post http://xxx.xxx.xxx.xxx/config/timeofuse

      Content:

      {"timeofuse":[]}
      

      result:

      {
      	"errors" : [],
      	"permissionFailure" : [],
      	"unknownNodes" : [],
      	"validationErrors" : [],
      	"writeFailure" : [],
      	"writeSuccess" : 
      	[
      		"timeofuse"
      	]
      }
      

      Um die Werte abzufragen gibts folgendes http get http://10.10.13.211/config/timeofuse, dort kommt dann das array zurück, sofern die authentifzierung passt.

      Die Authentifzierung wird im Header unter

      authorization: Digest username="technician", realm="Webinterface area", nonce="xxxxxxxxxxx", uri="/config/timeofuse", response="xxxxxxxxxxx", qop=auth, nc=00000042, cnonce="xxxxxxxxxxx"
      

      Die Werte response und cnonce ändern sich bei jedem request dabei, der Wert nonce bleibt für einige Zeit gleich. Der Wert nc wird hochgezählt bei jeder Abfrage, sobald dieser bei mir gerade 61 erreicht hat, wird der counter resettet und gebinnt wieder bei 01 und nonce hat einen neuen tokken oder hash.

      im main.js am gen24 findet man auch die authentication berechnung.

                     key: "digestAuthHeader",
                      value: function(p, g, w, b) {
                          for (var B = !(arguments.length > 4 && void 0 !== arguments[4]) || arguments[4], y = w.split(","), T = {}, L = 0; L < y.length; L++) {
                              var S = y[L].match(this.AUTH_KEY_VALUE_RE);
                              S && (T[S[1]] = S[2].replace(/["']/g, ""))
                          }
                          if (!T.realm || !T.nonce)
                              return "";
                          var k = T.qop || ""
                            , R = _.splitCredentials(b)
                            , Y = String(++this.NC);
                          Y = this.NC_PAD.substring(Y.length) + Y;
                          var U = this.randomBytes(8).join("")
                            , X = B ? o.V8.hashStr(R.username + ":" + T.realm + ":" + R.password) : R.password
                            , z = o.V8.hashStr(p.toUpperCase() + ":" + g)
                            , H = X + ":" + T.nonce;
                          k && (H += ":" + Y + ":" + U + ":" + (k = k.split(",")[0]));
                          var se = o.V8.hashStr(H += ":" + z)
                            , te = 'Digest username="' + R.username + '", realm="' + T.realm + '", nonce="' + T.nonce + '", uri="' + g + '", response="' + se + '"';
                          return T.opaque && (te += ', opaque="' + T.opaque + '"'),
                          k && (te += ", qop=" + k + ", nc=" + Y + ', cnonce="' + U + '"'),
                          te
                      }
      

      Die funktion calcHash(User, realm, password)

               key: "calcHash",
                      value: function(p, g, w) {
                          return o.V8.hashStr(p + ":" + g + ":" + w)
                      }
                    key: "hashStr",
                      value: function(s) {
                          var p = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];
                          return this.onePassHasher.start().appendStr(s).end(p)
                      }
      

      Wenn ich den Code richtig verstehe, wird in der respone der Username, realm und das Passwort per hash übertragen. Mittels einen ,,onePassHasher", dieser dürfte aus diesem Github Projekt stammen: https://github.com/cotag/ts-md5/tree/master/src

      ste_gleiS Offline
      ste_gleiS Offline
      ste_glei
      schrieb am zuletzt editiert von
      #162

      @alex4 sagte in Test Adapter Fronius 2.0.x:

      @nkleber Das Problem ist, dass ich zb. mit einer gewissen Leistung entladen will und wenn man von der Batterie eine Zwangsladung veranlasst, macht das der Gen24 mit 500Watt. Ich muss hier die Leistung mitgeben können. Das hätte ich beim Modbus nicht gefunden bis dato.

      Hier wurde das Thema behandelt

      https://forum.iobroker.net/topic/77932/geklärt-mit-modbus-fronius-akku-aus-dem-netz-beladen

      1 Antwort Letzte Antwort
      0
      • A Alex4

        @nkleber Das Problem ist, dass ich zb. mit einer gewissen Leistung entladen will und wenn man von der Batterie eine Zwangsladung veranlasst, macht das der Gen24 mit 500Watt. Ich muss hier die Leistung mitgeben können. Das hätte ich beim Modbus nicht gefunden bis dato.

        Was ich rausgefunden habe ist, dass man die Requests den Webinterfaces vielleicht benutzen kann:

        http post http://xxx.xxx.xxx.xxx/config/timeofuse

        Content: {"timeofuse":[{"Active":true,"Power":3000,"ScheduleType":"DISCHARGE_MIN","TimeTable":{"Start":"20:00","End":"21:00"},"Weekdays":{"Mon":true,"Tue":true,"Wed":true,"Thu":true,"Fri":true,"Sat":true,"Sun":true}}]}
        

        result:

        {
        	"errors" : [],
        	"permissionFailure" : [],
        	"unknownNodes" : [],
        	"validationErrors" : [],
        	"writeFailure" : [],
        	"writeSuccess" : 
        	[
        		"timeofuse"
        	]
        }
        

        Löschen geht dann:

        http post http://xxx.xxx.xxx.xxx/config/timeofuse

        Content:

        {"timeofuse":[]}
        

        result:

        {
        	"errors" : [],
        	"permissionFailure" : [],
        	"unknownNodes" : [],
        	"validationErrors" : [],
        	"writeFailure" : [],
        	"writeSuccess" : 
        	[
        		"timeofuse"
        	]
        }
        

        Um die Werte abzufragen gibts folgendes http get http://10.10.13.211/config/timeofuse, dort kommt dann das array zurück, sofern die authentifzierung passt.

        Die Authentifzierung wird im Header unter

        authorization: Digest username="technician", realm="Webinterface area", nonce="xxxxxxxxxxx", uri="/config/timeofuse", response="xxxxxxxxxxx", qop=auth, nc=00000042, cnonce="xxxxxxxxxxx"
        

        Die Werte response und cnonce ändern sich bei jedem request dabei, der Wert nonce bleibt für einige Zeit gleich. Der Wert nc wird hochgezählt bei jeder Abfrage, sobald dieser bei mir gerade 61 erreicht hat, wird der counter resettet und gebinnt wieder bei 01 und nonce hat einen neuen tokken oder hash.

        im main.js am gen24 findet man auch die authentication berechnung.

                       key: "digestAuthHeader",
                        value: function(p, g, w, b) {
                            for (var B = !(arguments.length > 4 && void 0 !== arguments[4]) || arguments[4], y = w.split(","), T = {}, L = 0; L < y.length; L++) {
                                var S = y[L].match(this.AUTH_KEY_VALUE_RE);
                                S && (T[S[1]] = S[2].replace(/["']/g, ""))
                            }
                            if (!T.realm || !T.nonce)
                                return "";
                            var k = T.qop || ""
                              , R = _.splitCredentials(b)
                              , Y = String(++this.NC);
                            Y = this.NC_PAD.substring(Y.length) + Y;
                            var U = this.randomBytes(8).join("")
                              , X = B ? o.V8.hashStr(R.username + ":" + T.realm + ":" + R.password) : R.password
                              , z = o.V8.hashStr(p.toUpperCase() + ":" + g)
                              , H = X + ":" + T.nonce;
                            k && (H += ":" + Y + ":" + U + ":" + (k = k.split(",")[0]));
                            var se = o.V8.hashStr(H += ":" + z)
                              , te = 'Digest username="' + R.username + '", realm="' + T.realm + '", nonce="' + T.nonce + '", uri="' + g + '", response="' + se + '"';
                            return T.opaque && (te += ', opaque="' + T.opaque + '"'),
                            k && (te += ", qop=" + k + ", nc=" + Y + ', cnonce="' + U + '"'),
                            te
                        }
        

        Die funktion calcHash(User, realm, password)

                 key: "calcHash",
                        value: function(p, g, w) {
                            return o.V8.hashStr(p + ":" + g + ":" + w)
                        }
                      key: "hashStr",
                        value: function(s) {
                            var p = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];
                            return this.onePassHasher.start().appendStr(s).end(p)
                        }
        

        Wenn ich den Code richtig verstehe, wird in der respone der Username, realm und das Passwort per hash übertragen. Mittels einen ,,onePassHasher", dieser dürfte aus diesem Github Projekt stammen: https://github.com/cotag/ts-md5/tree/master/src

        nkleberN Offline
        nkleberN Offline
        nkleber
        schrieb am zuletzt editiert von
        #163

        @alex4 Wo hast du die Info bzgl. dem config/timeofuse her. Das klingt grundsätzlich interessant, funktioniert bei mir aber so noch nicht... Eventuell gibt es da ja noch mehr "config" parameter die nutzbar wären

        A 1 Antwort Letzte Antwort
        0
        • nkleberN nkleber

          @alex4 Wo hast du die Info bzgl. dem config/timeofuse her. Das klingt grundsätzlich interessant, funktioniert bei mir aber so noch nicht... Eventuell gibt es da ja noch mehr "config" parameter die nutzbar wären

          A Offline
          A Offline
          Alex4
          schrieb am zuletzt editiert von Alex4
          #164

          @nkleber Du kannst im Browser den developer Mode starten und dann den Netzwerk verkehr mit lauschen. Da siehst Du die Requests die abgesetzt werden von der GUI gegen die API für die Weboberfläche. Das ist natürlich keine API die vermutlich irgendwo dokumentiert ist, aber zumindest kann man diese so verwenden.

          Man muss nur das Login via Script machen und sich die variablen / hashes irgendwo speichern und falls diese abgelaufen sind, das Login erneut anstoßen. Bei jedem Request muss der digestAuthHeader neu erstellt werden. Siehe oben.

          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          738

          Online

          32.6k

          Benutzer

          82.1k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe