Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter MyVBus v0.5.x Latest

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test Adapter MyVBus v0.5.x Latest

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      joojanta @pdbjjens last edited by joojanta

      @pdbjjens said in Test Adapter MyVBus v0.0.x GitHub:

      VBus/LAN

      Danke. Ich werde mir dann erst mal einen VBus/LAN Adapter besorgen. Ich bin ja froh dass es eine Möglichkeit gibt. Die Software von Resol ist ja nicht der bringer, die Hardware ist super, aber mit jedem Update fällt was sinnvolles weg. Wenn das jetzt mit iobroker gehen sollte, wäre ich mehr als glücklich:-)

      1 Reply Last reply Reply Quote 0
      • R
        RolfG last edited by

        Hallo,
        ich versuche mich auch gerade am VBus-LAN-Adapter von Resol der an einer Viessman Vitosolic 200 SD4 hängt.
        In der Instanz in IoBroker habe ich die Werte eingetragen, Anzeige wird "grün" - verbunden.
        Allerdings in den Objekten wird mir nur das Objekt "Information" angezeigt, keine Werte/Daten.
        7139f92c-2428-4152-a958-b9306f4ec62e-grafik.png
        Woran könnte es liegen bzw. wie könnte ich mich auf die Fehlersuche machen?
        Danke
        Gruß Rolf

        Gargano Grizzelbee 2 Replies Last reply Reply Quote 0
        • Gargano
          Gargano @RolfG last edited by

          @RolfG Zeig mal Deine Einstellungen

          R 1 Reply Last reply Reply Quote 0
          • R
            RolfG @Gargano last edited by

            @Gargano
            Hier die Einstellungen, im Resol-Adapter habe ich nichts eingestellt, bekommt immer gleiche IP vom Router
            37497d2e-4c2a-4226-9bee-da5ab88ea1d9-grafik.png

            Gargano 1 Reply Last reply Reply Quote 0
            • Grizzelbee
              Grizzelbee Developer @RolfG last edited by

              @RolfG sagte in Test Adapter MyVBus v0.0.x GitHub:

              VBus-LAN-Adapter von Resol der an einer Viessman Vitosolic 200 SD4 hängt.

              Hallo Rolf,
              ich könnte mir vorstellen, dass es genau daran liegt. Bislang haben wir nur Erfahrungen mit Resol eigenen Geräten. Der Adapter setzt nämlich auf eine Library von Daniel Wippermann auf (dem Lead-Developer von Resol, wenn man Xing glauben schenken darf).

              Versuche bitte trotzdem folgendes: Bring den Adapter in den Debug-Modus (Tab: Instanzen, Expertenmodus, Log-Stufe von Info auf Debug stellen) und poste dann mal das komplette Debug-Log (gefiltert auf den Adapter) hier. Vielleicht steht da ja was hilfreiches drin.

              viele Grüße
              grizzelbee

              1 Reply Last reply Reply Quote 0
              • Gargano
                Gargano @RolfG last edited by Gargano

                @RolfG Kommst Du mit dem Browser auf den Resol Adapter ?

                6e76b9bc-517a-4cf7-ab97-1cf91d20e39f-grafik.png

                Hast Du evtl. noch das Servicecenter Programm von Resol offen ?

                Hast Du beim Vitosolic den VBUS aktiviert ? Der ist standardmässig inaktiv. Sollte unter Menü Experte zu finden sein
                78bdd844-a649-4d19-944b-8729927544c7-grafik.png

                'Haustechnik Dialog '
                Der VBus musste bei der Vitosolic 200 SD4 aktiviert werden. Normalerweise sollte das der Auslieferungszustand sein. Bei mir leider nicht.

                Mein Problem war dann noch, dass ich das Menü "Experte", in dem unter "Ausgänge" der Punkte Vbus steht nicht zu finden war.
                Lösung: Bediencode 0200 eingeben.

                Haustechnik Dialog

                Das keine Objekte angelgt werden wird wohl daran liegen, daß diese erst beim erfolgreichen Lesen des LAN Adapters angelegt werden

                e93b80b2-4d4a-44a1-81b9-43fa961176ea-grafik.png

                R 1 Reply Last reply Reply Quote 0
                • R
                  RolfG @Gargano last edited by

                  Fehler gefunden. Danke zusammen!

                  @Grizzelbee
                  Debug-Modus konnte ich leider nicht aktivieren, es gibt dort keinen solchen Tab.
                  e79b44f8-2f5d-44d2-b507-ff130df3409a-grafik.png

                  @Gargano
                  Vielen Dank für den Tipp mit der VBus-Aktivierung. Das war die Ursache.

                  Jetzt sehe ich die Objekte auch und kann steuern 🙂
                  fe5ff53b-fa98-4192-a73a-0882b804f994-grafik.png

                  1 Reply Last reply Reply Quote 0
                  • B
                    BlackHawk3000 last edited by

                    Eine Frage an die Resol Profis hier.

                    Habe eine DeltaSol BX Steuerung.
                    Ich möchte über die Nacht Speicher 2 abkühlen lassen.
                    Dazu muss er Relai 2 öffnen und die Pumpe aktivieren.

                    Kann ich über den Adapter und das KM2 Modul, Relai und Pumpe über Blockly aktivieren?

                    Denn leider nutzt die integrierte Speicherkühlung immer erst Speicher 1 zum abkühlen, was mein WarmWasserspeicher ist.

                    Grizzelbee Gargano 3 Replies Last reply Reply Quote 0
                    • Grizzelbee
                      Grizzelbee Developer @BlackHawk3000 last edited by

                      Hi @BlackHawk3000,

                      Leider kann der Adapter aktuell die VBus Devices nur auslesen aber nicht steuern - tut mir leid.
                      Ob oder wann das gehen wird kann ich leider aktuell nicht sagen - die Dokumentation der Lib auf der wir aufsetzen gibt da nicht so richtig viel her. Ich bin da auf Support angewiesen.

                      viele Grüße
                      grizzelbee

                      Gargano 1 Reply Last reply Reply Quote 1
                      • Gargano
                        Gargano @BlackHawk3000 last edited by

                        @BlackHawk3000 Ich weiß nicht welche Pumpe Du hast, wenn die nur 230V braucht , kannst Du mit einem Umschaltrelais die Pumpe ansteuern. D.h. das Relais ohne Strom = Pumpe ist mit der Steuerung verbunden, Relais hat Strom = Pumpe ist direkt mit 230V verbunden.
                        Meine braucht noch zusätzlich ein PWM Signal.

                        1 Reply Last reply Reply Quote 0
                        • Gargano
                          Gargano @Grizzelbee last edited by

                          @Grizzelbee 'die Dokumentation der Lib auf der wir aufsetzen gibt da nicht so richtig viel her. Ich bin da auf Support angewiesen'

                          Woran liegts ? Kein Support, keine Beispiele ?
                          Ich habe nur unter Tutorials ein mageres Beispiel für 'Save the configuration' gesehen. In der Documentation steht wenig bis gar nichts drin.

                          Grizzelbee 1 Reply Last reply Reply Quote 0
                          • Grizzelbee
                            Grizzelbee Developer @Gargano last edited by

                            @Gargano sagte in Test Adapter MyVBus v0.0.x GitHub:

                            Woran liegts ? Kein Support, keine Beispiele ?

                            Im Grunde: Beides. 😉
                            Wie du selber gesehen hast, ist die Doku mager bis gar nicht vorhanden.
                            Ich habe den Autor deshalb persönlich angeschrieben aber keine Beispiele erhalten. Die Aussage war zwar, das das prinzipiell möglich sei, aber allem Anschein nach nicht in der Generalität, wie es für den Adapter notwendig wäre.
                            Aktuell ist das also eine Sackgasse.

                            viele Grüße
                            grizzelbee

                            Gargano 1 Reply Last reply Reply Quote 0
                            • Gargano
                              Gargano @Grizzelbee last edited by Gargano

                              @Grizzelbee mmh, ich kann ja mal reinschauen, evtl. finde ich was raus, wie man ein Kommando an den LAN -Adadpter abschickt.
                              Laut dem 'Save the configuration' Beispiel soll das ja möglich sein.

                              Oder habt Ihr schon ein 'standalone' Beispiel in JS ?

                              Grizzelbee 1 Reply Last reply Reply Quote 0
                              • Grizzelbee
                                Grizzelbee Developer @Gargano last edited by

                                @Gargano
                                Wäre cool wenn du ein bisschen forschen könntest und magst. Ich habe aktuell mit meinen anderen beiden Projekten/Adaptern (MieleCloudService und dysonAirPurifier) mehr als genug um die Ohren. da komme ich leider gerade nicht dazu.
                                Aktuell habe ich noch gar nichts in der Richtung.

                                Gargano 3 Replies Last reply Reply Quote 0
                                • Gargano
                                  Gargano @Grizzelbee last edited by

                                  @Grizzelbee Ich hab mal angefangen mich durchzuwühlen.
                                  Ich hab jetzt ein gestrippten JS Code aus dem index.js im Directory examples/customizer.

                                  Allerdings ist mein Resol CS2 nicht in der Liste der Geräte drin. Da muß ich noch schauen wie ich den rein bekomme.
                                  Das sind ziemlich viele JSON Tabellen. Ich hab was gelesen von einem Configuration Importer.

                                  Ich meld mich wieder, wenn ich weiter bin

                                  1 Reply Last reply Reply Quote 1
                                  • Gargano
                                    Gargano @Grizzelbee last edited by Gargano

                                    @Grizzelbee So, ich hab die erste JS Version die Daten in den RESOL Controller schreibt.

                                    Ich brauch aber noch ein paar Angaben von Dir :
                                    Wo werden denn die IP und das VBus Passwort gespeichert ?
                                    Ich wollte die auslesen und in die Konfigurations-Struc eintragen. Ansonsten muß jeder dies in das Script eintragen.

                                    Zur Implementation in myVBus dachte ich mir folgendes :
                                    Einmal ein JSON -DP . Da kann man mehrere Konfigurationswerte eintragen.
                                    Z.B.

                                    [{"valueId": "ORueckkuehlung", "value": 1},{"valueId":"OHolyCool","value": 0}]
                                    

                                    Die Namen und Typ der Parameter stehen in dem data.js file der jeweiligen Resol-Geräte im Verzeichnis
                                    ../src/configuration-optimizers.

                                    Dann ein Editor , in dem man einzelne Parameternamen auswählen oder eintragen kann. Dazu wird ein DP angelegt der den Wert beinhaltet. Ändert man den Wert wird dieser zum Resol übertragen.

                                    Was meinst Du ?

                                    Vorerst kann man mit dem Script auskommen, glaube ich.

                                    Grizzelbee 1 Reply Last reply Reply Quote 0
                                    • Gargano
                                      Gargano @Grizzelbee last edited by Gargano

                                      @grizzelbee Hier jetzt das Script zum Schreiben af Resol
                                      Unter host noch die IP vom Resol Adapter und das Passwort eintragen

                                      /*! resol-vbus | Copyright (c) 2013-2018, Daniel Wippermann | MIT license */
                                      /* Erweitert von Gargano 12.1.2021
                                          Es werden 2 DP unter '0_userdata.0.' angelegt 
                                          
                                          Resol.JSON : enthält den JSON für die Parameter
                                          Z.B. [{"valueId": "ORueckkuehlung", "value": 0},{"valueId":"OHolyCool","value": 0}]
                                          Die Parameter sind im File ..-data.js im Directory GIT\resol-vbus\src\configuration-optimizers
                                          
                                          Resol.Send : wenn true, wird der JSON an Resol gesendet, danach automatisch wieder auf false gesetzt
                                          Während des Sendens wird myvbus Adapter deaktiviert.
                                      */
                                      
                                      'use strict';
                                      
                                      
                                      const minimist = require('minimist');
                                      const vbus = require('resol-vbus');
                                      
                                      const config = {
                                      
                                          /**
                                           * The name of the `Connection` subclass to use for connecting to the VBus.
                                           * @type {String}
                                           */
                                          connectionClassName: 'TcpConnection',
                                      
                                          connectionOptions: {
                                              /**
                                               * The host name / IP address of the VBus/LAN or Datalogger device.
                                               * @type {String}
                                               */
                                              host: '192.168.xxx.yyy',
                                      
                                              /**
                                               * The password for the VBus/LAN or Datalogger device.
                                               * @type {String}
                                               */
                                              password: 'vbus',
                                          },
                                      
                                      };
                                      
                                      
                                      const i18n = new vbus.I18N('en');
                                      
                                      
                                      let reportProgress = (message) => {
                                          let line;
                                          if (typeof message === 'string') {
                                              line = message;
                                          } else if (message.message === 'OPTIMIZING_VALUES') {
                                              line = i18n.sprintf('Optimizing set of values for round %d', message.round);
                                          } else if (message.message === 'GETTING_VALUE') {
                                              line = i18n.sprintf('Getting value %d/%d, try %d: %s', message.valueNr, message.valueCount, message.tries, message.valueId);
                                          } else if (message.message === 'SETTING_VALUE') {
                                              line = i18n.sprintf('Setting value %d/%d, try %d: %s', message.valueNr, message.valueCount, message.tries, message.valueId);
                                          } else if (message.message === 'CONNECTION_STATE') {
                                              line = i18n.sprintf('Connection state changed to %s', message.connectionState);
                                          } else if (message.message === 'WAITING_FOR_FREE_BUS') {
                                              line = i18n.sprintf('Waiting for free bus');
                                          } else if (message.message === 'RELEASING_BUS') {
                                              line = i18n.sprintf('Releasing bus');
                                          } else {
                                              line = i18n.sprintf('%s: %s', message.message, JSON.stringify(message));
                                          }
                                      
                                          if (typeof message.round === 'number') {
                                              line = i18n.sprintf('[%d] %s', message.round, line);
                                          }
                                      
                                          console.log(line);
                                      };
                                      
                                      
                                      
                                      const createConnection = function() {
                                      
                                          const Connection = vbus [config.connectionClassName];
                                          const conn = new Connection(config.connectionOptions);
                                      
                                          conn.on('connectionState', (state) => {
                                              reportProgress({
                                                  message: 'CONNECTION_STATE',
                                                  connectionState: state,
                                              });
                                      		if (state == 'DISCONNECTED') {
                                      			// restart myVBUS
                                      			instanceSetRun(true);
                                                  setState(idResolSend,false);
                                      		}
                                          });
                                      
                                          return conn;
                                      };
                                      
                                      
                                      const runSingleShot = async (saveJSON) => {
                                          const context = {};
                                      
                                          try {
                                       
                                              const conn = await createConnection();
                                              context.connection = conn;
                                              let saveConfig = saveJSON;
                                              context.saveConfig = saveConfig;
                                      
                                              reportProgress('Connecting...');
                                              await context.connection.connect();
                                              reportProgress('Waiting for free bus...');
                                              const datagram = await context.connection.waitForFreeBus();
                                              context.masterAddress = datagram.sourceAddress;
                                              reportProgress('Found master with address 0x' + context.masterAddress.toString(16));
                                              context.deviceAddress = context.masterAddress;
                                      	
                                              const optimizer = await vbus.ConfigurationOptimizerFactory.createOptimizerByDeviceAddress(context.deviceAddress);
                                              context.optimizer = optimizer;
                                              if (!optimizer) {
                                                  reportProgress(i18n.sprintf('WARNING: Unable to create optimizer for master with address 0x%04X', context.masterAddress));
                                              }
                                              context.customizer = new vbus.ConnectionCustomizer({
                                                  deviceAddress: context.deviceAddress,
                                                  connection: context.connection,
                                                  optimizer: context.optimizer,
                                              });
                                      
                                              let savedConfig;
                                              if (context.saveConfig !== undefined) {
                                                  const saveConfig = context.saveConfig;
                                                  const oldConfig = context.oldConfig;
                                      			
                                                  const options = {
                                                      optimize: false,
                                                      reportProgress,
                                                  };
                                                  savedConfig = await context.customizer.saveConfiguration(saveConfig, oldConfig, options);
                                              } else {
                                      			console.log('Optimizer savedConfig = loadedConfig ',loadedConfig);
                                              }
                                      		console.log('Save ',saveConfig);
                                              let jsonConfig = savedConfig.reduce((memo, value) => {
                                                  if (!value.ignored) {
                                                      memo [value.valueId] = value.value;
                                                  }
                                                  return memo;
                                              }, {});
                                      
                                              jsonConfig = JSON.stringify(jsonConfig);
                                      
                                          } finally {
                                              reportProgress('Disconnecting...');
                                      
                                              if (context.connection != null) {
                                                  context.connection.disconnect();
                                              }
                                          }
                                      };
                                      
                                      // dp generieren
                                      const prefix = '0_userdata.0.'; 
                                      const idResolJSON = prefix+"Resol.JSON";
                                      const idResolSend = prefix+"Resol.Send";
                                      
                                      const creatStateList = [
                                          {name :idResolJSON, type:"string", role : "value"},
                                          {name :idResolSend, type:"boolean", role : "value"}
                                      ]
                                      
                                      async function createState (item){
                                          await createStateAsync(item.name, { 
                                                  type: item.type,
                                                  min: 0,
                                                  def: 0,
                                                  role: item.role
                                              });
                                      }
                                      
                                      async function makeStatList() {
                                          creatStateList.forEach (function(item) {
                                              createState(item);
                                          });
                                      }
                                      
                                      makeStatList();
                                      
                                      
                                      
                                      const idAdapter = 'system.adapter.myvbus.0';
                                      
                                      function instanceSetRun (myState) {
                                      	var obj = getObject(idAdapter);
                                      	obj.common.enabled=myState;
                                          setObject(idAdapter, obj);
                                      }
                                      
                                      
                                      async function runShot (saveJSON) {
                                          return await runSingleShot(saveJSON);    
                                      }
                                      
                                      async function doSend () {  
                                          let myJSON = JSON.parse((await getStateAsync(idResolJSON)).val);
                                          // stop myVBUS
                                          // Start send configuration
                                          instanceSetRun(false);
                                          setTimeout (function() {
                                              runShot(myJSON)}
                                          ,5000);
                                      }
                                      
                                      
                                      on({id: idResolSend , change: 'ne', val: true}, function (obj) {
                                          doSend();
                                      });
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • Gargano
                                        Gargano @BlackHawk3000 last edited by Gargano

                                        @blackhawk3000 Ich habe jetzt ein Script erstellt zum Schreiben auf den Resol Adapter

                                        1 Reply Last reply Reply Quote 1
                                        • Grizzelbee
                                          Grizzelbee Developer @Gargano last edited by

                                          @gargano said in Test Adapter MyVBus v0.0.x GitHub:

                                          Wo werden denn die IP und das VBus Passwort gespeichert ?

                                          Die werden im Config-Objekt des Adapters gespeichert. Da müsstest du also über getForeignObject dran kommen.
                                          Wenn Du mich persönlich nach meiner Meinung fragst, finde ich die Lösung nicht gerade glücklich. Verstehe mich bitte dabei nicht falsch - ich finde es super das du dich um das Schreiben in den Controller kümmerst und das wir eine erste (schnelle) Lösung haben, aber ich würde dem Adapter nur sehr ungern ein solches Script zum schreiben zur Seite stellen. Das ist arg quick-and-dirty.
                                          Die erste Frage, die ich mir stelle ist: @Alle: Reicht es aus, wenn wir die Pumpen ansteuern können (in % Schritten)? Oder müssen noch andere Werte geschrieben werden können? Wenn die Pumpen reichen - würde ich das auch gerne über die entsprechenden Datenpunkte des Adapter regeln. Sprich: Wenn dort der Wert der Pumpe-1 von Hand von 0 auf 50 gesetzt wird, soll sie mit halber Drehzahl laufen (wenn unterstützt) - wenn nicht unterstützt geht eben nur 0 und 100 - das muss jeder für sich selbst und seine verwendete Pumpe herausfinden und verwenden. Ein bisschen Doku dazu und das sollte laufen.

                                          Ein Script müsste dann jeder nur noch in soweit (und im üblichen Maße) daneben stellen als das es zum Beispiel die Uhrzeit und die Temperatur eines Kreises überwacht und dann dem Adatper sagt: Schmeiß mal Pumpe-1 auf 100% an.
                                          Will sagen: Alles Resol-controller spezifische sollten wir versuchen an einer einzigen Stelle zu kapseln (im Adapter) - sonst haben wir Verbindungshandling und einiges andere doppelt. Ich bin mir auch gerade nicht sicher, ob die Controller mit zwei paralleleln, konkurierenden Verbindungen klar kommen, oder ob die zweite dann immer auf die Schnauze fällt. Ich habe da dunkel etwas im Hinterkopf.

                                          Als Proof-of-Concept und schnelle Not-Lösung finde ich deine Arbeit aber super und sage: Vielen herzlichen Dank dafür!
                                          Würdest du dir zutrauen, das auch direkt im Adapter zu implementieren? Ich würde dann da etwas vorbereiten, wo du ansetzen könntest.

                                          Wenn ich den Code richtig lese, liegt die Magie im Optimizer und ab Zeile 126 - richtig?

                                          viele Grüße
                                          grizzelbee

                                          Gargano 2 Replies Last reply Reply Quote 0
                                          • Gargano
                                            Gargano @Grizzelbee last edited by Gargano

                                            @grizzelbee Der Ansatz war ja zu schauen, ob es überhaupt mit dem Schreiben klappt. Da ist ein Script gerade richtig auch oder gerade deshalb wenn es quick and dirty ist.
                                            Im zweiten Schritt sollte das in den myvbus Adapter integriert werden. Einen Vorschlag wie sowas aussehen könnte habe ich ja gemacht.

                                            Bei mir war die Schwierigkeit, daß mein Resol-CS2 nicht in der Schreib-Prozedur integriert war, so daß ich ihn erst integrieren mußte.

                                            Ich habe noch keinen Adapter gebaut, aber versuchen kann ich es ja. (Mit Deiner Hilfe)
                                            Der erste Ansatz vom myvbus-Adapter wäre also das integrieren von den entsprechenden Funktionen in meinem Script. Auslöser zum Senden kann ein (boolean)-DP sein, der dann den JSON-DP ausliest und sendet.

                                            Bei mir sind es zwei Werte die ich im Resol setzen muß, deshalb ist der JSON Ansatz universell.

                                            Dabei geht es bei mir und wohl auch bei anderen (Blackhawk3000) um spezielle Einstellungen wie Rückkühlung.
                                            Ich will die Rückkühlung nur aktivieren, wenn der Puffer schon eine hohe Temperatur hat und die Vorhersage für den nächsten Tag viel Sonne ist, um Stagnation zu vermeiden.

                                            Danach kann man auch die UI anpassen.

                                            Das Resol Device verträgt nur eine Connection, erst recht die VBus-Lib. Deshalb das Deaktivieren vom myvbus-Adapter in meinem Script.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            879
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            resol vbus
                                            27
                                            380
                                            71249
                                            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