Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Viessmann-Adapter

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Viessmann-Adapter

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

      Danke. Werde ich mal testen.

      Du hast nicht zufällig noch ne Idee bzgl. der mehrzeiligen Timer-Ausgaben? Es sind immer vier Zeilen.

      Gruß,

      Thorsten

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        @dtp:

        Du hast nicht zufällig noch ne Idee bzgl. der mehrzeiligen Timer-Ausgaben? Es sind immer vier Zeilen. `
        Was ist der Inhalt der 4 Zeilen ? Welche Kommandos gehören dazu ?

        Da wird man nach Kommandos in der Auswertung selektieren müssen. Oder man macht eine 3. Liste (nur Timer-Kommandos) und wertet dann in einer abgewandelten Funktion anders aus als für den Rest.

        1 Reply Last reply Reply Quote 0
        • D
          dtp last edited by

          Hallo paul53,

          die Ausgabe sieht z.B. so aus:

          vctrld>getVitoTimerSoWW

          1:An:06:30 Aus:09:00

          2:An:12:00 Aus:14:00

          3:An:17:00 Aus:20:00

          4:An:– Aus:--

          Ist bei allen Timer-Einstellungen derselbe Aufbau.

          Gruß,

          Thorsten

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            Möchtest Du die 4 Zeitspannen in einem Datenpunkt darstellen oder in 4 DP ?

            1 Reply Last reply Reply Quote 0
            • D
              dtp last edited by

              Nee, in einem.

              1 Reply Last reply Reply Quote 0
              • D
                dtp last edited by

                @paul53:

                Das lässt sich auch in einem Skript (mit 2 Listen) machen… `

                Läuft super. Danke.

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 last edited by

                  @dtp:

                  Nee, in einem. `
                  Unter der Voraussetzung, dass alle Timer-Kommandos in der Liste mit "Timer" beginnen, sollte eine Erweiterung der setState-Schleife genügen:

                   `for(var i = 0; i < len; i++) {
                           if(list[i].substr(0,5) == "Timer") {
                           setState("Vitotronic." + list[i], stdout[2*i+1]+" "+stdout[2*i+2]+" "+stdout[2*i+3]+" "+stdout[2*i+4]);
                           }
                           else setState("Vitotronic." + list[i], stdout[2 * i + 1]);
                        }`
                  
                  EDIT: Das funktioniert so einfach leider nicht, da bei den Timern der Abstand von 2 Elementen im Array nicht zutrifft. Also besser mit 3\. Liste: Habe das Skript oben entsprechend abgewandelt.[/i][/i][/i]
                  
                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 last edited by

                    Siehe http://forum.iobroker.net/viewtopic.php?f=23&t=3048&start=40#p29920 (3. Liste).

                    1 Reply Last reply Reply Quote 0
                    • D
                      dtp last edited by

                      Danke, werde es ausprobieren. Wirklich tollen Support, den Du hier leistest. Nochmals großen Dank dafür.

                      Gruß,

                      Thorsten

                      1 Reply Last reply Reply Quote 0
                      • D
                        dtp last edited by

                        Hallo paul53,

                        bin gerade am Ausprobieren Deiner Timer-Zeilen. Allerdings verstehe ich da was nicht so ganz. Warum

                        `if(timer) setState("Vitotronic." + list[i], stdout[5*i+1]+" "+stdout[5*i+2]+" "+stdout[5*i+3]+" "+stdout[5*i+4]);` 
                        
                        und nicht
                        
                        `~~[code]~~if(timer) setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[5*i+1]+" "+stdout[5*i+2]+" "+stdout[5*i+3]+" "+stdout[5*i+4]);` 
                        
                        EDIT: Nun scheint's zu passen.
                        
                        >! ~~[spoiler]~~`~~[code]~~// Werte aus Vitotronic auslesen
                        >! var list1 = ['Betriebsart','BetriebsartHK','BetriebParty','BetriebSpar','TempAussen','TempWWIst','TempSpeicher','TempWWAuslauf','TempKesselIst','TempRLIst','TempRaumHK','TempSolarkol','TempSolarspeicher','StatusPumpeSpeicher','StatusFlamme','StatusPumpeIntern','DrehzahlPumpeIntern','StatusPumpeHK','StatusPumpeZirku','StatusUmschaltventil','Systemzeit'];
                        var list2 = ['BetriebFerien','BeginnFerien','EndeFerien','TempRaumNorSoll','TempRaumRedSoll','TempPartySoll','TempWWSoll','TempKesselSoll','TempVLSoll','KennlinieNeigung','KennlinieNiveau','LaufzeitBrenner','StartsBrenner','LaufzeitSolar','LeistungSolar','ErtragTagSolar','Systemzeit'];
                        var list3 = ['StatusStoerung','Stoerung1','Stoerung2','Stoerung3','Stoerung4','Stoerung5','Stoerung6','Stoerung7','Stoerung8','Stoerung9','Stoerung10','Anlagenschema','Systemzeit'];
                        var list4 = ['TimerMoHeizen','TimerDiHeizen','TimerMiHeizen','TimerDoHeizen','TimerFrHeizen','TimerSaHeizen','TimerSoHeizen','TimerMoWW','TimerDiWW','TimerMiWW','TimerDoWW','TimerFrWW','TimerSaWW','TimerSoWW','TimerMoPumpeZirku','TimerDiPumpeZirku','TimerMiPumpeZirku','TimerDoPumpeZirku','TimerFrPumpeZirku','TimerSaPumpeZirku','TimerSoPumpeZirku'];
                        >! // Objekte setzen
                        function init(list) {
                           var len = list.length;
                           var cmds = '';
                           for(var i = 0; i < len; i++) {
                              cmds = cmds + ',getVito' + list[i];
                              createState('Vitotronic.' + list[i], '', {
                                 type: 'string',
                                 read: true,
                                 write: true,
                                 desc: 'Vitotronic ' + list[i],
                                 def: ''
                              });
                           }
                           return cmds.substr(1); // erstes Komma löschen
                        }
                        >! // Skript starten
                        var cmds1 = init(list1);
                        var cmds2 = init(list2);
                        var cmds3 = init(list3);
                        var cmds4 = init(list4);
                        >! function vito(cmds, list, timer) {
                           exec('vclient -h 127.0.0.1:3002 -c ' + cmds, function(err, stdout, stderr) {
                              if (err) {
                                 log(stderr,'error');
                                 return;
                              }
                              stdout = stdout.split("\n");
                              var len = list.length;
                              for(var i = 0; i < len; i++) {
                                 if(timer) setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[5 * i + 1]+" "+stdout[ 5 * i + 2]+" "+stdout[ 5 * i + 3]+" "+stdout[5 * i + 4]);
                                 else setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[2 * i + 1]);
                              }
                           });
                        }
                        >! // Zeitintervalle definieren
                        setInterval(function() {
                           vito(cmds1, list1, false);
                        }, 120 * 1000); // alle 2 Minuten
                        
                        setInterval(function() {
                           vito(cmds2, list2, false);
                        }, 1800 * 1000); // alle 30 Minuten
                        >! setInterval(function() {
                           vito(cmds3, list3, false);
                        }, 3600 * 1000); // alle 60 Minuten
                        >! setInterval(function() {
                           vito(cmds4, list4, true);
                        }, 7200 * 1000); // alle 120 Minuten` 
                        
                        Gruß,
                        
                        Thorsten[/i][/i][/i][/i][/i][/code][/spoiler][/i][/code][/i]
                        
                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 last edited by

                          @dtp:

                          Allerdings verstehe ich da was nicht so ganz. `
                          Wenn man mit setState() oder getState() einen Datenpunkt innerhalb der JS-Instanz des Skriptes adressiert, muss nicht die gesamte ID angegeben werden, sondern es genügt der Teil, mit dem der Datenpunkt per createState() erzeugt wurde.

                          1 Reply Last reply Reply Quote 0
                          • D
                            dtp last edited by

                            Ah. Danke für die Aufklärung.

                            Gruß,

                            Thorsten

                            1 Reply Last reply Reply Quote 0
                            • D
                              dtp last edited by

                              Jetzt hätte ich doch noch ein paar weitere Frage.

                              Ist es möglich, direkt im Skript einzelne Datenpunkte (insb. Betriebsart, BetriebsartHK, BetriebParty, BetriebSpar) in entsprechend angelegte Systemvariable der CCU2 zu schreiben, oder sollte ich das doch lieber separat machen?

                              Zum Steuern per Skript:

                              Die weiter oben definierten Zustände

                              states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
                              

                              dürften zu einem Problem führen, da die Vitotronic gemäß der vcontrold.xml direkt die Werte

                              'Abschaltbetrieb', 'Nur Warmwasser', 'Heizen und Warmwasser', 'Dauernd red. Betrieb' und 'Dauernd Normalbetrieb' als Steuerparameter benötigt. Sind Leerschritte ein Problem?

                              Gruß,

                              Thorsten

                              1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 last edited by

                                @dtp:

                                Ist es möglich, direkt im Skript einzelne Datenpunkte (insb. Betriebsart, BetriebsartHK, BetriebParty, BetriebSpar) in entsprechend angelegte Systemvariable der CCU2 zu schreiben, oder sollte ich das doch lieber separat machen? `
                                Ich würde das separat machen.
                                @dtp:

                                da die Vitotronic gemäß der vcontrold.xml direkt die Werte

                                'Abschaltbetrieb', 'Nur Warmwasser', 'Heizen und Warmwasser', 'Dauernd red. Betrieb' und 'Dauernd Normalbetrieb' als Steuerparameter benötigt. `
                                Wozu gibt es das Kommando "setVitoBetriebsart" in der vito.xml, wenn man es nicht nutzen kann ?

                                Da der Datenpunkt "Betriebsart" bereits in list1 vorhanden ist und somit der Datenpunkt "Vitotronic.Betriebsart" bereits als Typ "string" existiert, muss der Datenpunkt zum Setzen der Betriebsart einen anderen Namen erhalten, z.B.

                                createState('Vitotronic.setBetriebsart', 0, {
                                    type: 'number',
                                    read: true,
                                    write: true,
                                    desc: 'Vitotronic Betriebsart setzen',
                                    min: 0,
                                    max: 4,
                                    def: 0,
                                    states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
                                });
                                
                                on("javascript." + instance + ".Vitotronic.setBetriebsart", function(dp) {
                                   exec('vclient -h 127.0.0.1:3002 -c setVitoBetriebsart 0' + dp.state.val, function(err, stdout, stderr) {
                                      if (err) log(stderr,'error');
                                   });
                                });
                                
                                1 Reply Last reply Reply Quote 0
                                • D
                                  dtp last edited by

                                  @paul53:

                                  Wozu gibt es das Kommando "setVitoBetriebsart" in der vito.xml, wenn man es nicht nutzen kann ? `

                                  Kann man doch. Nur eben nicht mit den von Dir im Skript angegebenen Parametern "0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal", da diese so nicht in der vcontrold.xml definiert sind:

                                   <unit name="Betriebsart"><abbrev>BA</abbrev>
                                  	<type>enum</type></unit> 
                                  

                                  Man muss also mit "Abschaltbetrieb;Nur Warmwasser;Heizen und Warmwasser;Dauernd red. Betrieb;Dauernd Normalbetrieb" arbeiten, die dann von der XML-Datei in die jeweiligen Hex-Werte 00 bis 04 übersetzt werden.

                                  Die Frage war daher, ob ich in Deinem Skript die Zeile

                                  states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
                                  

                                  durch die Zeile

                                  states: 'Abschaltbetrieb;Nur Warmwasser;Heizen und Warmwasser;Dauernd red. Betrieb;Dauernd Normalbetrieb'
                                  

                                  ersetzen kann?

                                  1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 last edited by

                                    Muss man wirklich den Text (text='betriebsartxx') an das Kommando übergeben ? Das würde mich sehr wundern 😮 Meiner Meinung nach sollte der Hexwert (als 2-Zeichen-String) der mit bytes='0n' definiert ist, übergeben werden.@dtp:

                                    Die Frage war daher, ob ich in Deinem Skript die Zeile

                                    Code: Alles auswählen

                                    states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'

                                    durch die Zeile

                                    Code: Alles auswählen

                                    states: 'Abschaltbetrieb;Nur Warmwasser;Heizen und Warmwasser;Dauernd red. Betrieb;Dauernd Normalbetrieb'

                                    ersetzen kann? `
                                    Nein, das funktioniert so nicht.

                                    1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 last edited by

                                      Wenn das Kommando "setVitoBetriebsart" tatsächlich den Text übergeben haben will, muss man mit switch / case arbeiten:

                                      createState('Vitotronic.setBetriebsart', 0, {
                                          type: 'number',
                                          read: true,
                                          write: true,
                                          desc: 'Vitotronic Betriebsart setzen',
                                          min: 0,
                                          max: 4,
                                          def: 0,
                                          states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
                                      });
                                      
                                      on("javascript." + instance + ".Vitotronic.setBetriebsart", function(dp) {
                                         var text;
                                         switch(dp.state.val) {
                                         	case 0: text = 'Abschaltbetrieb';
                                         		break;
                                         	case 1: text = 'Nur Warmwasser';
                                         		break;
                                         	case 2: text = 'Heizen und Warmwasser';
                                         		break;
                                         	case 3: text = 'Dauernd red. Betrieb';
                                         		break;
                                         	case 4: text = 'Dauernd Normalbetrieb';
                                         		break;
                                         	default: text = '?';
                                         }
                                         exec('vclient -h 127.0.0.1:3002 -c setVitoBetriebsart ' + text, function(err, stdout, stderr) {
                                            if (err) log(stderr,'error');
                                         });
                                      });
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 last edited by

                                        @paul53:

                                        Wenn das Kommando "setVitoBetriebsart" tatsächlich den Text übergeben haben will, muss man mit switch / case arbeiten `
                                        oder mit einem Text-Array:

                                        var texte = ['Abschaltbetrieb','Nur Warmwasser','Heizen und Warmwasser','Dauernd red. Betrieb','Dauernd Normalbetrieb'];
                                        
                                        on("javascript." + instance + ".Vitotronic.setBetriebsart", function(dp) {
                                           exec('vclient -h 127.0.0.1:3002 -c setVitoBetriebsart ' + texte[dp.state.val], function(err, stdout, stderr) {
                                              if (err) log(stderr,'error');
                                           });
                                        });
                                        
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          dtp last edited by

                                          Danke. Werde es ausprobieren.

                                          Gruß,

                                          Thorsten

                                          1 Reply Last reply Reply Quote 0
                                          • D
                                            dtp last edited by

                                            Hm.

                                            Eigentlich hat das Skript soweit gut funktioniert. Doch seit den letzten ioBroker-Updates erhalte ich folgende Fehlermeldungen:

                                            filename="2016-07-17_10h47_52.png" index="0">~~

                                            EDIT: Ein Neustart des Raspi scheint das Problem gelöst zu haben.

                                            Gruß,

                                            Thorsten

                                            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

                                            722
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            viesmann
                                            50
                                            523
                                            121961
                                            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