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

  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test ViessmannAPI v2.0.0

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Test ViessmannAPI v2.0.0

Geplant Angeheftet Gesperrt Verschoben Tester
802 Beiträge 127 Kommentatoren 280.1k Aufrufe 124 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.
  • I io2345

    Jetzt bräuchte ich doch nochmal Hilfe von Spezialisten:
    Wollte das Script verbessern, dass es den eingestellten Zirkulationspumpen-Schedule aus der WP zunächst ausliest und ganz am Schluss wieder zurückschreibt.
    Das klappt aber nicht so recht. Es kommt beim Schreiben von Werten immer der Hinweis:

    State value to set for ... has to be one of type "string", "number", "boolean" but received type "object"

    Nun habe ich schon einige Forumseinträge hierzu gelesen, wo es um "stringify" oder "toString" geht, oder auch, dass der Adapter selbst das regeln muss. Vermutlich bin ich einfach nicht helle genug, bisher habe ich jedenfalls nicht verstanden, was ich nun konkret tun muss, um das Problem zu umgehen. Könnt ihr mir helfen?

    Hier der Code:

    async function start_zirk() {
        // Schedule wird zum Einschalten der Pumpe temporär verändert, so dass die Pumpe
        // zwischen 00:00 und 23:59 Uhr zuverlässig eingeschaltet ist. Das in der Wärmepumpe 
        // vorhandene Zeitprogramm der Zirkulationspumpe wird in einen eigenen Datenpunkt gesichert
        
        var pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}';
        var schedule_sichern = getState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue').val;
        
        setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule', schedule_sichern.val);
        setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(pump_on)); // oder pump_off
    }
    
    async function stop_zirk() {
        // Der urspüngliche Schedule wird zurückgeschrieben. 
        
        var schedule_wiederherstellen = getState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule').val;
        setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", schedule_wiederherstellen.val);
    }
    
    
    on({ id: [].concat(['0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_']), change: 'ne' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      if ((obj.state ? obj.state.val : "") == true) {
        await start_zirk();
        log ("Zirkulationspumpe läuft für zwei Minuten");
        await wait(120000);
        setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_' /* EigeneDatenpunkte.Heizung.ZirkulationAn  */, false, true);
        await stop_zirk();
      }
    });
    
    M Offline
    M Offline
    Michi_Pi
    schrieb am zuletzt editiert von
    #700

    @io2345 ich bin jetzt kein Spezialist, aber was mir auffällt ist, dass du beim zurückspeichern das nicht als JSON machst.
    Probier mal

    JSON.parse(schedule_wiederherstellen.val))
    
    I 1 Antwort Letzte Antwort
    0
    • M Michi_Pi

      @io2345 ich bin jetzt kein Spezialist, aber was mir auffällt ist, dass du beim zurückspeichern das nicht als JSON machst.
      Probier mal

      JSON.parse(schedule_wiederherstellen.val))
      
      I Offline
      I Offline
      io2345
      schrieb am zuletzt editiert von
      #701

      @michi_pi
      Danke für die Rückmeldung. Hätte erwähnen sollen, dass ich das schon probiert hatte. Dann kommt allerdings ein tiefroter Fehler:

      script.js.common.Zirkulation_kurz_einschalten_verbessert_JS: SyntaxError: Unexpected token u in JSON at position 0
      error at JSON.parse (<anonymous>)
      at start_zirk (script.js.common.Zirkulation_kurz_einschalten_verbessert_JS:9:103)
      at Object.<anonymous> (script.js.common.Zirkulation_kurz_einschalten_verbessert_JS:25:11)
      at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1266:38)
      at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:645:29)
      at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11229:62)
      at processImmediate (node:internal/timers:476:21)

      Denke, das ist der Grund, warum der fixe Wert in Codezeile 6 in Hochkommata steht. Weiss aber nicht, wie ich das mit den anderen, zu übergebenden Werten, hinbekomme.

      M 1 Antwort Letzte Antwort
      0
      • I io2345

        @michi_pi
        Danke für die Rückmeldung. Hätte erwähnen sollen, dass ich das schon probiert hatte. Dann kommt allerdings ein tiefroter Fehler:

        script.js.common.Zirkulation_kurz_einschalten_verbessert_JS: SyntaxError: Unexpected token u in JSON at position 0
        error at JSON.parse (<anonymous>)
        at start_zirk (script.js.common.Zirkulation_kurz_einschalten_verbessert_JS:9:103)
        at Object.<anonymous> (script.js.common.Zirkulation_kurz_einschalten_verbessert_JS:25:11)
        at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1266:38)
        at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:645:29)
        at Immediate.<anonymous> (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11229:62)
        at processImmediate (node:internal/timers:476:21)

        Denke, das ist der Grund, warum der fixe Wert in Codezeile 6 in Hochkommata steht. Weiss aber nicht, wie ich das mit den anderen, zu übergebenden Werten, hinbekomme.

        M Offline
        M Offline
        Michi_Pi
        schrieb am zuletzt editiert von Michi_Pi
        #702

        @io2345 probiers mal hiermit. Die lokale Zwischenspeichern hab ich jetzt mal wegelassen.

        var pump_on, schedule_sichern, schedule_wiederherstellen;
        
        async function start_zirk() {
            // Schedule wird zum Einschalten der Pumpe temporär verändert, so dass die Pumpe
            // zwischen 00:00 und 23:59 Uhr zuverlässig eingeschaltet ist. Das in der Wärmepumpe 
            // vorhandene Zeitprogramm der Zirkulationspumpe wird in einen eigenen Datenpunkt gesichert
            
            pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                            "tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                            "wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                            "thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                            "fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                            "sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                            "sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}'
            schedule_sichern = getState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue').val;
            
            //setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule', JSON.parse(schedule_sichern));
            setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(pump_on)); // oder pump_off
        }
         
        async function stop_zirk() {
            // Der urspüngliche Schedule wird zurückgeschrieben. 
            
            //schedule_wiederherstellen = getState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule').val;
            schedule_wiederherstellen = schedule_sichern;
            setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(schedule_wiederherstellen));
        }
         
         
        on({ id: [].concat(['0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_']), change: 'ne' }, async (obj) => {
          let value = obj.state.val;
          let oldValue = obj.oldState.val;
          if ((obj.state ? obj.state.val : "") == true) {
            await start_zirk();
            log ("Zirkulationspumpe läuft für zwei Minuten");
            await wait(120000);
            setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_' /* EigeneDatenpunkte.Heizung.ZirkulationAn  */, false, true);
            await stop_zirk();
          }
        });
        
        I 1 Antwort Letzte Antwort
        0
        • M Michi_Pi

          @io2345 probiers mal hiermit. Die lokale Zwischenspeichern hab ich jetzt mal wegelassen.

          var pump_on, schedule_sichern, schedule_wiederherstellen;
          
          async function start_zirk() {
              // Schedule wird zum Einschalten der Pumpe temporär verändert, so dass die Pumpe
              // zwischen 00:00 und 23:59 Uhr zuverlässig eingeschaltet ist. Das in der Wärmepumpe 
              // vorhandene Zeitprogramm der Zirkulationspumpe wird in einen eigenen Datenpunkt gesichert
              
              pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                              "tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                              "wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                              "thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                              "fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                              "sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],\
                              "sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}'
              schedule_sichern = getState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue').val;
              
              //setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule', JSON.parse(schedule_sichern));
              setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(pump_on)); // oder pump_off
          }
           
          async function stop_zirk() {
              // Der urspüngliche Schedule wird zurückgeschrieben. 
              
              //schedule_wiederherstellen = getState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule').val;
              schedule_wiederherstellen = schedule_sichern;
              setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(schedule_wiederherstellen));
          }
           
           
          on({ id: [].concat(['0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_']), change: 'ne' }, async (obj) => {
            let value = obj.state.val;
            let oldValue = obj.oldState.val;
            if ((obj.state ? obj.state.val : "") == true) {
              await start_zirk();
              log ("Zirkulationspumpe läuft für zwei Minuten");
              await wait(120000);
              setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_' /* EigeneDatenpunkte.Heizung.ZirkulationAn  */, false, true);
              await stop_zirk();
            }
          });
          
          I Offline
          I Offline
          io2345
          schrieb am zuletzt editiert von
          #703

          @michi_pi said in Test ViessmannAPI v2.0.0:
          ...probiers mal hiermit.

          Danke und aha! Wir nähern uns dem Erfolg. Jetzt kommt der Fehler nicht gleich am Anfang, sondern erst, wenn das Stop-Script läuft. Da ist wohl noch der Wurm drin:
          SyntaxError: Unexpected token o in JSON at position 1

          Frage ist vermutlich, wie bringe ich den Wert "schedule_wiederherstellen" in Hochkommata? Hab es mal so probiert:
          "'"JSON.parse(schedule_wiederherstellen)"'");
          aber da kommt gleich beim Speichern ein "compile failed" an ebendieser Stelle.

          I 1 Antwort Letzte Antwort
          0
          • I io2345

            @michi_pi said in Test ViessmannAPI v2.0.0:
            ...probiers mal hiermit.

            Danke und aha! Wir nähern uns dem Erfolg. Jetzt kommt der Fehler nicht gleich am Anfang, sondern erst, wenn das Stop-Script läuft. Da ist wohl noch der Wurm drin:
            SyntaxError: Unexpected token o in JSON at position 1

            Frage ist vermutlich, wie bringe ich den Wert "schedule_wiederherstellen" in Hochkommata? Hab es mal so probiert:
            "'"JSON.parse(schedule_wiederherstellen)"'");
            aber da kommt gleich beim Speichern ein "compile failed" an ebendieser Stelle.

            I Offline
            I Offline
            io2345
            schrieb am zuletzt editiert von
            #704

            @PAUL53
            Paul53, kannst du hier eventuell helfen? Ich hab von dir ein paar gute Sachen in anderen Beiträgen gelesen, du scheinst dich in JScript wirklich gut auszukennen.
            Ist wahrscheinlich nur eine Kleinigkeit, die hier fehlt. Das Stop-Script besteht ja eigentlich nur aus der Zeile

            setState("<Objekt>", JSON.parse(schedule_wiederherstellen));

            Jetzt müsste man nur noch wissen, warum der Wert nicht richtig übergeben wird. Die Fehlermeldung lautet
            "SyntaxError: Unexpected token o in JSON at position 1"
            Ich denke, der Wert ist nur nicht richtig formatiert vom Typ her. Wenn man ihn - wie im Start-Script - als festen Wert übergibt, geht's ja.

            I 1 Antwort Letzte Antwort
            0
            • I io2345

              @PAUL53
              Paul53, kannst du hier eventuell helfen? Ich hab von dir ein paar gute Sachen in anderen Beiträgen gelesen, du scheinst dich in JScript wirklich gut auszukennen.
              Ist wahrscheinlich nur eine Kleinigkeit, die hier fehlt. Das Stop-Script besteht ja eigentlich nur aus der Zeile

              setState("<Objekt>", JSON.parse(schedule_wiederherstellen));

              Jetzt müsste man nur noch wissen, warum der Wert nicht richtig übergeben wird. Die Fehlermeldung lautet
              "SyntaxError: Unexpected token o in JSON at position 1"
              Ich denke, der Wert ist nur nicht richtig formatiert vom Typ her. Wenn man ihn - wie im Start-Script - als festen Wert übergibt, geht's ja.

              I Offline
              I Offline
              io2345
              schrieb am zuletzt editiert von io2345
              #705

              Da hier Funkstille herrschte, hab ich überlegt ob das nun bedeutet "Die Sache ist so einfach, da kommt er selbst drauf" oder "Das ist so schwer, da fällt mir keine Lösung ein".
              Ich bin jetzt mal davon ausgegangen, dass ersteres gemeint war, und hab weiter rumprobiert.
              Eine funktionierende Script-Variante habe ich nun gefunden, die sieht so aus:

              async function start_zirk() {
                  // Schedule wird zum Einschalten der Pumpe temporär verändert, so dass die Pumpe
                  // zwischen 00:00 und 23:59 Uhr zuverlässig eingeschaltet ist. Das in der Wärmepumpe 
                  // vorhandene Zeitprogramm der Zirkulationspumpe wird in einen eigenen Datenpunkt gesichert
                  
                  pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}';
                  schedule_sichern = getState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue').val;
                  
                  setState("0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule",JSON.parse(JSON.stringify(schedule_sichern)));
                  
                  setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(pump_on)); // oder pump_off
              }
              
              async function stop_zirk() {
                  // Der urspüngliche Schedule wird zurückgeschrieben. 
                  
                  schedule_wiederherstellen = schedule_sichern;
                  setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(JSON.stringify(schedule_wiederherstellen)));
              }
              
              
              on({ id: [].concat(['0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_']), change: 'ne' }, async (obj) => {
                let value = obj.state.val;
                let oldValue = obj.oldState.val;
                if ((obj.state ? obj.state.val : "") == true) {
                  await start_zirk();
                  log ("Zirkulationspumpe läuft für zwei Minuten");
                  await wait(120000);
                  setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_' /* EigeneDatenpunkte.Heizung.ZirkulationAn  */, false, true);
                  await stop_zirk();
                }
              });
              

              Er meckert zwar im Log "State value to set for <Datenpunkt> has to be one of type "string", "number", "boolean" but received type "object"", aber es läuft zumindest durch.
              Wenn jetzt jemand noch Hinweise hätte, wie ich die o.g. Logeinträge vermeiden kann, gerne her damit.

              ? 1 Antwort Letzte Antwort
              0
              • I io2345

                Da hier Funkstille herrschte, hab ich überlegt ob das nun bedeutet "Die Sache ist so einfach, da kommt er selbst drauf" oder "Das ist so schwer, da fällt mir keine Lösung ein".
                Ich bin jetzt mal davon ausgegangen, dass ersteres gemeint war, und hab weiter rumprobiert.
                Eine funktionierende Script-Variante habe ich nun gefunden, die sieht so aus:

                async function start_zirk() {
                    // Schedule wird zum Einschalten der Pumpe temporär verändert, so dass die Pumpe
                    // zwischen 00:00 und 23:59 Uhr zuverlässig eingeschaltet ist. Das in der Wärmepumpe 
                    // vorhandene Zeitprogramm der Zirkulationspumpe wird in einen eigenen Datenpunkt gesichert
                    
                    pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}';
                    schedule_sichern = getState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue').val;
                    
                    setState("0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule",JSON.parse(JSON.stringify(schedule_sichern)));
                    
                    setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(pump_on)); // oder pump_off
                }
                
                async function stop_zirk() {
                    // Der urspüngliche Schedule wird zurückgeschrieben. 
                    
                    schedule_wiederherstellen = schedule_sichern;
                    setState("viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(JSON.stringify(schedule_wiederherstellen)));
                }
                
                
                on({ id: [].concat(['0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_']), change: 'ne' }, async (obj) => {
                  let value = obj.state.val;
                  let oldValue = obj.oldState.val;
                  if ((obj.state ? obj.state.val : "") == true) {
                    await start_zirk();
                    log ("Zirkulationspumpe läuft für zwei Minuten");
                    await wait(120000);
                    setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_' /* EigeneDatenpunkte.Heizung.ZirkulationAn  */, false, true);
                    await stop_zirk();
                  }
                });
                

                Er meckert zwar im Log "State value to set for <Datenpunkt> has to be one of type "string", "number", "boolean" but received type "object"", aber es läuft zumindest durch.
                Wenn jetzt jemand noch Hinweise hätte, wie ich die o.g. Logeinträge vermeiden kann, gerne her damit.

                ? Offline
                ? Offline
                Ein ehemaliger Benutzer
                schrieb am zuletzt editiert von
                #706

                @io2345

                Hi,
                wenn du am Anfang deines Scripts die Variablen definierst, und den Datenpunkt als String anlegst, dann sollte das gehen, ganz ohne Fehler..

                Also oben noch drueber:

                var pump_off, pump_on, schedule_sichern, schedule_wiederherstellen
                
                
                I 1 Antwort Letzte Antwort
                0
                • G Online
                  G Online
                  guitardoc
                  schrieb am zuletzt editiert von
                  #707

                  Hallo zusammen,

                  Ich habe ein Hybridsystem bestehend aus einer Viessmann Gasheizung und einer (neuen) Viessmann Wärmepumpe. Im Moment heize ich mit Gas, welches hier sehr viel preiswerter als Strom ist. Dazu habe ich den Parameter 7B02 der Wärmepumpe auf einen hohen Wert gestellt, damit diese nicht anspringt.
                  Da ich aber noch eine PV-Anlage auf dem Dach habe, welche an sonnigen Tagen mehr Strom produziert als ich verbrauche bzw. im Akku speichern kann, könnte ich mit dem überschüssigen Strom die Wärmepumpe betreiben und auch das Gas sparen.
                  Nach meinen bisherigen Recherchen wäre das mit dem Parameter 7B02 in der Wärmepumpe realisierbar, welcher dann eben auf einen sehr hohen (Gasheizung soll laufen) oder einen niedrigeren (Wärmepumpe soll laufen) Wert der Bivalenztemperatur eingestellt wird, je nachdem, ob und wie viel überschüssiger Strom vorhanden ist.
                  Steuern wollte ich das über ioBroker. Allerdings finde ich im Viessmannapi-Adapter den Parameter 7B02 nicht. Daher meine Fragen:

                  • Gibt es eine Möglichkeit, diesen Adapter per ioBroker und die Viessmann API in die Wärmepumpe zu schreiben?
                  • Oder ist die Vorgehensweise über den Parameter 7B02 gar nicht sinnvoll und es gibt eine viel bessere Variante für mein Vorhaben?

                  Danke schon einmal vorab für die Hilfe!

                  PS. Hab die Frage schon im allgemeinen Forum gepostet - nicht wundern dass das doppelt erscheint.

                  1 Antwort Letzte Antwort
                  0
                  • D Offline
                    D Offline
                    dan11hh
                    schrieb am zuletzt editiert von
                    #708

                    Kurze Frage, weil ich mir gerade eine WP ggf. von Viessmann anschaffen möchte:
                    Was muss eine Viessmann WP haben um vernünftig in den ioBroker integriert werden zu können? Geht auch die kleinste, die 150-A?

                    1 Antwort Letzte Antwort
                    0
                    • W Offline
                      W Offline
                      wmendelin
                      schrieb am zuletzt editiert von
                      #709
                      Dieser Beitrag wurde gelöscht!
                      1 Antwort Letzte Antwort
                      0
                      • W Offline
                        W Offline
                        wmendelin
                        schrieb am zuletzt editiert von
                        #710

                        Ich habe seit einiger Zeit das Problem, das ich keine Daten mehr angezeigt bekomme.
                        Nun habe ich mal die Viessmann Api 2.3.0 neu installiert und auch bei Viessmann den User gelöscht und neu angelegt.
                        Das eigenartige ist das ich im Vicare alle Daten habe so wie sonst auch.
                        Aber nun im Log von IO Broker diese Fehlermeldungen, siehe Screenshot.

                        Screenshot 2024-03-18 150111.png

                        Weiß jemand wie ich das gefixt bekomme?

                        T 1 Antwort Letzte Antwort
                        0
                        • W wmendelin

                          Ich habe seit einiger Zeit das Problem, das ich keine Daten mehr angezeigt bekomme.
                          Nun habe ich mal die Viessmann Api 2.3.0 neu installiert und auch bei Viessmann den User gelöscht und neu angelegt.
                          Das eigenartige ist das ich im Vicare alle Daten habe so wie sonst auch.
                          Aber nun im Log von IO Broker diese Fehlermeldungen, siehe Screenshot.

                          Screenshot 2024-03-18 150111.png

                          Weiß jemand wie ich das gefixt bekomme?

                          T Offline
                          T Offline
                          tombox
                          schrieb am zuletzt editiert von
                          #711

                          @wmendelin was sagt v2.4.0 oder die github version

                          1 Antwort Letzte Antwort
                          0
                          • ? Ein ehemaliger Benutzer

                            @io2345

                            Hi,
                            wenn du am Anfang deines Scripts die Variablen definierst, und den Datenpunkt als String anlegst, dann sollte das gehen, ganz ohne Fehler..

                            Also oben noch drueber:

                            var pump_off, pump_on, schedule_sichern, schedule_wiederherstellen
                            
                            
                            I Offline
                            I Offline
                            io2345
                            schrieb am zuletzt editiert von io2345
                            #712

                            @ilovegym
                            Die Idee ist naheliegend, bringt allerdings keine Änderung.
                            Problem an der Sache ist, dass das Feld
                            viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue
                            offenbar ein object sein muss. Setzte ich da [string String] beschwert er sich lautstark im Log:

                            "{"viErrorId":"|00-df1620f45a6c415286355551f42a7806-5c26a61706d64cad-01.baf6ebd4_","statusCode":400,"errorType":"DEVICE_COMMUNICATION_ERROR","message":"","extendedPayload":{"httpStatusCode":"BadRequest","code":"400","reason":"VALIDATION_ERROR","details":"The parameter newSchedule="[string String]" does not meet the constraints {"type":"Schedule","modes":["5/25-cycles","5/10-cycles","on"],"maxEntries":8,"resolution":10,"defaultMode":"off","overlapAllowed":true}: The parameter should be an object."}}"

                            ? 1 Antwort Letzte Antwort
                            0
                            • T tombox

                              Hi ich habe ein neuen Adapter für Viessman erstellt

                              Man benötigt eine ClientID von der Viessmann API

                              https://app.developer.viessmann.com besuchen und eine Client ID mit diesen Optionen erstellen:

                              Name: iobroker
                              Google reCAPTCHA deaktivieren
                              Redirect URI: http://localhost:4200/

                              Die Client ID in die Einstellungen kopieren

                              Außentemperatur findet sich z.B. hier:
                              viessmannapi.0.XXXXX.0.features.heating.sensors.temperature.outside.properties.value.value

                              Weitere Beispiele siehe Unten

                              Remote Befehle sind möglich unter
                              viessmannapi.0.XXXXX.0.features.heating.dhw.temperature.main.commands.setTargetTemperature.setValue

                              Zum Installieren:
                              Via Adaptersuche

                              In den Instanzoptionen die jeweiligen Optionen einstellen.

                              Github
                              https://github.com/TA2k/ioBroker.viessmannapi

                              Kompatibilitätsliste:
                              https://documentation.viessmann.com/static/compatibility
                              Regelungen für Wand- oder Kompaktgeräte
                              Vitotronic 200, Typ HO1, HO1A, HO1B, HO1D, HO2B, HO2C
                              Vitotronic 200 RF, Typ HO1C, HO1E
                              Regelungen für bodenstehende Heizkessel
                              Vitotronic 200, Typ KO1B, KO2B, KW6, KW6A, KW6B, KW1, KW2, KW4, KW5
                              Vitotronic 300, Typ KW3
                              Regelungen für Wärmepumpen und Hybridgeräte
                              Vitotronic 200, Typ WO1A, WO1B, WO1C
                              Regelungen für Festbrennstoffkessel
                              Vitoligno 200-S mit Ecotronic (ab Softwarestand 2.03)
                              Vitoligno 250-S mit Ecotronic (ab Softwarestand 2.00)
                              Vitoligno 300-C mit Ecotronic (ab Softwarestand 2.12)
                              Vitoligno 300-P mit Vitotronic 200 FO1
                              Vitoligno 300-S mit Ecotronic (ab Softwarestand 2.04)

                              Liste aller Datenpunkte:
                              https://documentation.viessmann.com/static/iot/data-points

                              Frage zu fehlende Datenpunkte bitte direkt an Viessmann
                              https://www.viessmann-community.com/t5/The-Viessmann-API/bd-p/dev-viessmann-api

                              Beispiele:

                              Vorlauftemperatur: 
                              viessmannapi.0.XXXX.features.heating.circuits.0.sensors.temperature.supply.properties.value.value, 
                              
                              Brennerstatus:
                              viessmannapi.0.XXXX.0.features.heating.burners.0.properties.active.value
                              
                              Anzahl Zündungen:
                              viessmannapi.0.XXXXX.features.heating.burners.0.statistics.properties.starts.value
                              
                              Betriebsstunden
                              viessmannapi.0.XXXXX.features.heating.burners.0.statistics.properties.hours.value
                              
                              Kesseltemperatur
                              viessmannapi.0.XXXXX.features.heating.boiler.sensors.temperature.main.properties.unit.value
                              
                              Kompressor aktiv:		viessmannapi.0.xxx.0.features.heating.compressors.0.properties.active.value
                              Heizkreispumpe aktiv:		viessmannapi.0.xxx.0.features.heating.circuits.1.circulation.pump.properties.status.value
                              Warmwasserbereitung:		viessmannapi.0.xxx.0.features.heating.dhw.charging.properties.active.value
                              Heizungsmodus:			viessmannapi.0.xxx.0.features.heating.circuits.1.operating.modes.active.properties.value.value
                              Heizprogramm:			viessmannapi.0.xxx.0.features.heating.circuits.1.operating.programs.active.properties.value.value
                              Temperatur Heizprogramm normal:	viessmannapi.0.xxx.0.features.heating.circuits.1.operating.programs.normal.properties.temperature.value
                              Temperatur Heizprogramm reduz.:	viessmannapi.0.xxx.0.features.heating.circuits.1.operating.programs.reduced.properties.temperature.value
                              Warmwasser Soll Temperatur:	viessmannapi.0.xxx.0.features.heating.dhw.temperature.properties.value.value
                              Warmwasser Ist Temperatur:	viessmannapi.0.xxx.0.features.heating.dhw.sensors.temperature.hotWaterStorage.properties.value.value
                              Temperatur Außensensor:		viessmannapi.0.xxx.0.features.heating.sensors.temperature.outside.properties.value.value
                              Statistik Kompressor Starts:	viessmannapi.0.xxx.0.features.heating.compressors.0.statistics.properties.starts.value
                              Statistik Kompressor Stunden:	viessmannapi.0.xxx.0.features.heating.compressors.0.statistics.properties.hours.value
                              Temperatursensoren der Heizkreise:   viessmannapi.0.xxxxxxx.0.features.heating.circuits.0.sensors.temperature.supply.properties.value.value
                               
                              Primärkreis Vorlauftemperatur:		viessmann.0.xxx.0.features.heating.primaryCircuit.sensors.temperature.supply.properties.value.value
                              Sekundärkreis Vorlauftemperatur:	viessmann.0.xxx.0.features.heating.secondaryCircuit.sensors.temperature.supply.properties.value.value
                              Sekundärkreis Rücklauftemperatur:	viessmann.0.xxx.0.features.heating.secondaryCircuit.sensors.temperature.return.properties.value.value
                              ?					viessmann.0.xxx.0.features.heating.sensors.temperature.return.properties.value.value
                              
                              
                              Heizung an (Kompressor): viessmannapi.0.x.0.features.heating.compressors.0.properties.active.value
                              
                              WW Temp viessmannapi.0.x.0.features.heating.dhw.sensors.temperature.hotWaterStorage.properties.value.value
                              
                              HW Temp  viessmannapi.0.x.0.features.heating.buffer.sensors.temperature.main.properties.value.value
                              
                              ZP features.heating.circuits.1.circulation.pump.properties.status.value
                              
                              WP_Aussentemperatur 0.features.heating.sensors.temperature.outside.properties.value.value
                              WP_gemeinsame Vorlauftemperatur 0.features.heating.boiler.sensors.temperature.commonSupply.properties.value.value
                              WP_Temperatur Pufferspeicher 0.features.heating.buffer.sensors.temperature.main.properties.value.value
                              WP_Heizkörper_Umwälzpumpe ON/OFF 0.features.heating.circuits.0.circulation.pump.properties.status.value
                              WP_Heizkörper_Umwälzpumpe_Frostschutz 0.features.heating.circuits.0.frostprotection.properties.status.value
                              WP_Heizkörper_Niveau 0.features.heating.circuits.0.heating.curve.properties.shift.value
                              WP_Heizkörper_Neigung 0.features.heating.circuits.0.heating.curve.properties.slope.value
                              WP_Heizkörper_Zeitplan 0.features.heating.circuits.0.heating.schedule.properties.entries.value
                              WP_Heizkörper_Komfort_Solltemperatur 0.features.heating.circuits.0.operating.programs.comfortHeating.properties.temperature.value
                              WP_Heizkörper_Normal_Solltemperatur 0.features.heating.circuits.0.operating.programs.normalHeating.properties.temperature.value
                              WP_Heizkörper_Reduziert_Solltemperatur 0.features.heating.circuits.0.operating.programs.reducedHeating.properties.temperature.value
                              WP_Vorlauftemperatur Heizkörper 0.features.heating.circuits.0.sensors.temperature.supply.properties.value.value
                              ???? 0.features.heating.circuits.0.operating.programs.comfortEnergySaving.properties.reason.value
                              ???? 0.features.heating.circuits.0.operating.programs.normalEnergySaving.properties.reason.value
                              WP_Heizkörper_FBH ON/OFF 0.features.heating.circuits.1.circulation.pump.properties.status.value
                              WP_FBH_Umwälzpumpe_Frostschutz 0.features.heating.circuits.1.frostprotection.properties.status.value
                              WP_FBH_Niveau 0.features.heating.circuits.1.heating.curve.properties.shift.value
                              WP_FBH_Neigung 0.features.heating.circuits.1.heating.curve.properties.slope.value
                              WP_FBH_Zeitplan 0.features.heating.circuits.1.heating.schedule.properties.entries.value
                              
                              WP_FBH_Komfort_Solltemperatur 0.features.heating.circuits.1.operating.programs.comfortHeating.properties.temperature.value
                              WP_FBH_Normal_Solltemperatur 0.features.heating.circuits.1.operating.programs.normalHeating.properties.temperature.value
                              WP_FBH_Reduziert_Solltemperatur 0.features.heating.circuits.1.operating.programs.reducedHeating.properties.temperature.value
                              
                              WP_FBH_Vorlauftemperatur 0.features.heating.circuits.1.sensors.temperature.supply.properties.value.value
                              
                              WP_Stromverbrauch_HEUTE 0.features.heating.power.consumption.summary.heating.properties.currentDay.value
                              WP_Stromverbrauch_MONAT 0.features.heating.power.consumption.summary.heating.properties.currentMonth.value
                              WP_Stromverbrauch_JAHR 0.features.heating.power.consumption.summary.heating.properties.currentYear.value
                              WP_Stromverbrauch_LETZTER_MONAT 0.features.heating.power.consumption.summary.heating.properties.lastMonth.value
                              WP_Stromverbrauch_LETZTEN_7_TAGE 0.features.heating.power.consumption.summary.heating.properties.lastSevenDays.value
                              WP_Stromverbrauch_LETZTES_JAHR 0.features.heating.power.consumption.summary.heating.properties.lastYear.value
                              WP_Primärkreis_Temperatur 0.features.heating.primaryCircuit.sensors.temperature.supply.properties.value.value
                              WP_Sekundärkreis_Temperatur 0.features.heating.secondaryCircuit.sensors.temperature.supply.properties.value.value
                              WP_Rücklauftemperatur 0.features.heating.sensors.temperature.return.properties.value.value
                              WP_Volumenstrom 0.features.heating.sensors.volumetricFlow.allengra.properties.value.value
                              Betriebsstunden Verdichter 0.features.heating.compressors.0.statistics.properties.hours.value
                              

                              Beispiel zum setzen eines Schedule:

                              var standard = '{"mon":[{"start":"00:00","end":"24:00","mode":"standard","position":0}],"tue":[{"start":"00:00","end":"24:00","mode":"standard","position":0}],\
                                            "wed":[{"start":"00:00","end":"24:00","mode":"standard","position":0}],"thu":[{"start":"00:00","end":"24:00","mode":"standard","position":0}],\
                                            "fri":[{"start":"00:00","end":"24:00","mode":"standard","position":0}],"sat":[{"start":"00:00","end":"24:00","mode":"standard","position":0}],\
                                            "sun":[{"start":"00:00","end":"24:00","mode":"standard","position":0}]}'
                               
                              setState("viessmannapi.0.xxxxxxx.0.features.ventilation.schedule.commands.setSchedule.setValue", JSON.parse(standard)); 
                              

                              Beispiel zirkulationspumpe

                              // schedule zum einschalten, allerdings nur zwischen 6 und 21 uhr
                              var pump_on = '{"mon":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"tue":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"wed":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"thu":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"fri":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"sat":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"sun":[{"start":"06:00","end":"21:00","mode":"on","position":0}]}'
                              // schedule leeren - pumpe ausschalten
                              var pump_off = '{"mon":[], "tue":[],"wed":[],"thu":[],"fri":[],"sat":[],"sun":[]}' 
                               
                              setState("viessmannapi.0.xxx.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue", JSON.parse(pump_on)); // oder pump_off
                              

                              Die Max. Heizleistung gibt es nicht als API Datenpunkt, kann nur am Gerät geändert werden.

                              Kostenlose Paket enthält:
                              23a824bd-cb36-4930-b8c0-cde030634129-image.png

                              I Offline
                              I Offline
                              io2345
                              schrieb am zuletzt editiert von
                              #713

                              Nach einem kurzen Blick über die verfügbaren Datenpunkte, die man setzen kann, gibt es wohl keinen, mit dem man die Primärpumpe einer Wasser/Wasser-Wärmepumpe (oder wahlweise die ganze Anlage) abschalten kann. Sehe ich das richtig?

                              Ich möchte vermeiden, dass die Primärpumpe (Grundwasserpumpe) bei einer Leckage im Keller mir denselben flutet. Habe deshalb einen Tuya-Wassersensor angeschafft, mit dessen Hilfe ich über die Viessmann-API in jedem Fall eine zuverlässige Abschaltung erreichen will. Erst mal egal, ob nur die Primärpumpe deaktiviert wird, oder gleich die ganze Wärmepumpe abgeschalten wird. Hauptsache, die Primärpumpe fördert dann nicht mehr.
                              Alarm würde ja über die Tuya "Smart Home" App kommen. Aber was ist, wenn das Smartphone nachts aus ist oder ich nicht zuhause?

                              Hat einer von euch eine Idee, wie man das realisieren könnte?
                              Wenn sonst keine Möglichkeit besteht, das über die API zu machen, habe ich mir schon überlegt, einen Smart Switch zusätzlich anzuschaffen, der im Fehlerfall die Sicherheitskeitskette (Klemmen X3.8 / 3.9) unterbricht. Aber möglicherweise geht's ja doch über die API ???

                              ? 1 Antwort Letzte Antwort
                              0
                              • I io2345

                                @ilovegym
                                Die Idee ist naheliegend, bringt allerdings keine Änderung.
                                Problem an der Sache ist, dass das Feld
                                viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue
                                offenbar ein object sein muss. Setzte ich da [string String] beschwert er sich lautstark im Log:

                                "{"viErrorId":"|00-df1620f45a6c415286355551f42a7806-5c26a61706d64cad-01.baf6ebd4_","statusCode":400,"errorType":"DEVICE_COMMUNICATION_ERROR","message":"","extendedPayload":{"httpStatusCode":"BadRequest","code":"400","reason":"VALIDATION_ERROR","details":"The parameter newSchedule="[string String]" does not meet the constraints {"type":"Schedule","modes":["5/25-cycles","5/10-cycles","on"],"maxEntries":8,"resolution":10,"defaultMode":"off","overlapAllowed":true}: The parameter should be an object."}}"

                                ? Offline
                                ? Offline
                                Ein ehemaliger Benutzer
                                schrieb am zuletzt editiert von
                                #714

                                @io2345

                                ich schalte die Zirkulationspumpe so (das Skript hat hier auch schon einer mal gepostet):

                                // schedule zum einschalten, allerdings nur zwischen 6 und 21 uhr
                                var pump_on = '{"mon":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"tue":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"wed":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"thu":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"fri":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"sat":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"sun":[{"start":"06:00","end":"21:00","mode":"on","position":0}]}'
                                // schedule leeren - pumpe ausschalten
                                var pump_off = '{"mon":[], "tue":[],"wed":[],"thu":[],"fri":[],"sat":[],"sun":[]}' 
                                 
                                on({id: '0_userdata.0.Schalter.Zirkulationspumpe'/*Zirkulationspumpe*/, change: "ne"}, async function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  if ((obj.state ? obj.state.val : "")) {
                                    setState('viessmannapi.0.84605.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(pump_on)); // oder pump_off
                                  } else {
                                    setState('viessmannapi.0.84605.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(pump_off)); // oder pump_off
                                  }
                                });
                                 
                                
                                

                                Da gibts keine Fehlermeldungen bei mir..

                                I 1 Antwort Letzte Antwort
                                0
                                • I io2345

                                  Nach einem kurzen Blick über die verfügbaren Datenpunkte, die man setzen kann, gibt es wohl keinen, mit dem man die Primärpumpe einer Wasser/Wasser-Wärmepumpe (oder wahlweise die ganze Anlage) abschalten kann. Sehe ich das richtig?

                                  Ich möchte vermeiden, dass die Primärpumpe (Grundwasserpumpe) bei einer Leckage im Keller mir denselben flutet. Habe deshalb einen Tuya-Wassersensor angeschafft, mit dessen Hilfe ich über die Viessmann-API in jedem Fall eine zuverlässige Abschaltung erreichen will. Erst mal egal, ob nur die Primärpumpe deaktiviert wird, oder gleich die ganze Wärmepumpe abgeschalten wird. Hauptsache, die Primärpumpe fördert dann nicht mehr.
                                  Alarm würde ja über die Tuya "Smart Home" App kommen. Aber was ist, wenn das Smartphone nachts aus ist oder ich nicht zuhause?

                                  Hat einer von euch eine Idee, wie man das realisieren könnte?
                                  Wenn sonst keine Möglichkeit besteht, das über die API zu machen, habe ich mir schon überlegt, einen Smart Switch zusätzlich anzuschaffen, der im Fehlerfall die Sicherheitskeitskette (Klemmen X3.8 / 3.9) unterbricht. Aber möglicherweise geht's ja doch über die API ???

                                  ? Offline
                                  ? Offline
                                  Ein ehemaliger Benutzer
                                  schrieb am zuletzt editiert von
                                  #715

                                  @io2345

                                  Also sowas wuerde ich nicht ueber die Api im Netzwerk machen, wenn Viessman Wartungsarbeiten haben oder so, dann funktioniert das nicht.

                                  Mit dem tuya-Adapter holst du dir den Wassermelder auch lokal in den iobroker, sofern er nicht mit Batterien betrieben ist..
                                  und dann ne Schaltsteckdose oder n Sonoff Basic oder Shelly PM zwischen die Pumpe, damit du abschalten kannst..

                                  I 1 Antwort Letzte Antwort
                                  0
                                  • ? Ein ehemaliger Benutzer

                                    @io2345

                                    ich schalte die Zirkulationspumpe so (das Skript hat hier auch schon einer mal gepostet):

                                    // schedule zum einschalten, allerdings nur zwischen 6 und 21 uhr
                                    var pump_on = '{"mon":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"tue":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"wed":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"thu":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"fri":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"sat":[{"start":"06:00","end":"21:00","mode":"on","position":0}],"sun":[{"start":"06:00","end":"21:00","mode":"on","position":0}]}'
                                    // schedule leeren - pumpe ausschalten
                                    var pump_off = '{"mon":[], "tue":[],"wed":[],"thu":[],"fri":[],"sat":[],"sun":[]}' 
                                     
                                    on({id: '0_userdata.0.Schalter.Zirkulationspumpe'/*Zirkulationspumpe*/, change: "ne"}, async function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      if ((obj.state ? obj.state.val : "")) {
                                        setState('viessmannapi.0.84605.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(pump_on)); // oder pump_off
                                      } else {
                                        setState('viessmannapi.0.84605.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(pump_off)); // oder pump_off
                                      }
                                    });
                                     
                                    
                                    

                                    Da gibts keine Fehlermeldungen bei mir..

                                    I Offline
                                    I Offline
                                    io2345
                                    schrieb am zuletzt editiert von
                                    #716

                                    @ilovegym
                                    Das von dir gepostete Script hatte ich als Basis für die Weiterentwicklung genommen und dahingehend verbessert, dass die an der Wärmepumpensteuerung eingestellten Werte vorher ausgelesen und zwischengespeichert werden, dann die Zirkulationspumpe eingeschaltet wird
                                    (bei mir ganztägig - 0 bis 24 Uhr) für ein paar Minuten. Am Ende wird der vorher zwischengespeicherte Wert wieder zurück geschrieben.
                                    Heißt: Ändert man an der Wärmepumpensteuerung den Zeitplan für die Zirkulation, bleibt dieser nach dem Scriptlauf auch so erhalten.

                                    Das Script selbst funktioniert einwandfrei:

                                    async function start_zirk() {
                                        // Schedule wird zum Einschalten der Pumpe temporär verändert, so dass die Pumpe
                                        // zwischen 00:00 und 23:59 Uhr zuverlässig eingeschaltet ist. Das in der Wärmepumpe 
                                        // vorhandene Zeitprogramm der Zirkulationspumpe wird in einen eigenen Datenpunkt gesichert
                                        
                                       pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}'
                                       schedule_sichern = getState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.properties.entries.value'/*value*/).val;
                                        
                                        setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule',JSON.parse(JSON.stringify(schedule_sichern)));
                                        
                                        setState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(pump_on)); // oder pump_off
                                    }
                                    
                                    async function stop_zirk() {
                                        // Der urspüngliche Schedule wird zurückgeschrieben. 
                                        
                                        //schedule_wiederherstellen = getState("0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule").val;
                                        schedule_wiederherstellen = schedule_sichern;
                                        setState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(schedule_wiederherstellen));
                                    }
                                    
                                    
                                    on({ id: [].concat(['0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_']), change: 'ne' }, async (obj) => {
                                      let value = obj.state.val;
                                      let oldValue = obj.oldState.val;
                                      if ((obj.state ? obj.state.val : "") == true) {
                                        await start_zirk();
                                        log ("Zirkulationspumpe läuft für zwei Minuten");
                                        await wait(120000);
                                        setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_' /* EigeneDatenpunkte.Heizung.ZirkulationAn  */, false, true);
                                        await stop_zirk();
                                      }
                                    });
                                    

                                    es kommt lediglich beim Starten und Stoppen die Meldung im Log
                                    State value to set for "viessmannapi.0.133007.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue" has to be one of type "string", "number", "boolean" but received type "object"
                                    Diese Meldung müsste im übrigen bei dir genauso auftauchen, in deinem Script ist das Zeile 10. Kommt bei dir kein Logeintrag im iobroker-Log?

                                    I 1 Antwort Letzte Antwort
                                    0
                                    • ? Ein ehemaliger Benutzer

                                      @io2345

                                      Also sowas wuerde ich nicht ueber die Api im Netzwerk machen, wenn Viessman Wartungsarbeiten haben oder so, dann funktioniert das nicht.

                                      Mit dem tuya-Adapter holst du dir den Wassermelder auch lokal in den iobroker, sofern er nicht mit Batterien betrieben ist..
                                      und dann ne Schaltsteckdose oder n Sonoff Basic oder Shelly PM zwischen die Pumpe, damit du abschalten kannst..

                                      I Offline
                                      I Offline
                                      io2345
                                      schrieb am zuletzt editiert von io2345
                                      #717

                                      @ilovegym
                                      Na ja, ein Restrisiko besteht natürlich weiterhin. Solange man sein Gerät nicht aus der Tuya-Cloud befreit, ist man mit einer Steckdose aber weiterhin von einem Provider abhängig.
                                      Über die Viessmann API hätte halt den Charme, dass man nicht noch ein weiteres Gerät haben muss und wäre somit meine favorisierte Lösung.

                                      Der Wassermelder läuft im Übrigen mit einer Batterie (vermutlich alle haben eine)

                                      ==========================
                                      Update: Dank eines Hinweises auf "rustimation.eu" habe ich es jetzt für mich zufriedenstellend hinbekommen. Die Abschaltung ist zwar nicht 100%ig, da zumindest bei Frostgefahr in der Anlage diese sich wieder aktivieren würde. Aber eine Zeitlang wäre zumindest "aus" und somit ausreichend Gelegenheit, zu reagieren.
                                      Script hierzu:

                                      //Bei Wasser am Sensor neben dem Primärwärmetauscher wird die
                                      //Wärmepumpe abgeschalten. Zum Einschalten in der Steuerung der WP
                                      //die Betriebsart "Warmwasser, Heizen und Kühlen" einstellen oder Datenpunkt 
                                      //"viessmannapi.0.133000.0.features.heating.circuits.1.operating.modes.active.commands.setMode.setValue"
                                      //auf "dhwAndHeatingCooling" setzen
                                      
                                      on({ id: [].concat(['tuya.0.bf709929d1fb102bc7am0v.1'/*watersensor state*/]), change: 'ne' }, async (obj) => {
                                        let value = obj.state.val;
                                        let oldValue = obj.oldState.val;
                                        if ((obj.state ? obj.state.val : "") == false) {
                                          setState('viessmannapi.0.133000.0.features.heating.circuits.1.operating.modes.active.commands.setMode.setValue', "standby");
                                          sendTo("email", "send", {
                                             text: 'Heizung Alarm. Leckage an Primärpumpe oder Heizung?',
                                             to: '<deineMailAdresse>@<provider.com>',
                                             subject: 'Alarm Heizung Leckage',
                                             from: '<deineMailAdresse>@<provider.com>'
                                          });
                                        }
                                      });
                                      
                                      
                                      ? 1 Antwort Letzte Antwort
                                      0
                                      • I io2345

                                        @ilovegym
                                        Na ja, ein Restrisiko besteht natürlich weiterhin. Solange man sein Gerät nicht aus der Tuya-Cloud befreit, ist man mit einer Steckdose aber weiterhin von einem Provider abhängig.
                                        Über die Viessmann API hätte halt den Charme, dass man nicht noch ein weiteres Gerät haben muss und wäre somit meine favorisierte Lösung.

                                        Der Wassermelder läuft im Übrigen mit einer Batterie (vermutlich alle haben eine)

                                        ==========================
                                        Update: Dank eines Hinweises auf "rustimation.eu" habe ich es jetzt für mich zufriedenstellend hinbekommen. Die Abschaltung ist zwar nicht 100%ig, da zumindest bei Frostgefahr in der Anlage diese sich wieder aktivieren würde. Aber eine Zeitlang wäre zumindest "aus" und somit ausreichend Gelegenheit, zu reagieren.
                                        Script hierzu:

                                        //Bei Wasser am Sensor neben dem Primärwärmetauscher wird die
                                        //Wärmepumpe abgeschalten. Zum Einschalten in der Steuerung der WP
                                        //die Betriebsart "Warmwasser, Heizen und Kühlen" einstellen oder Datenpunkt 
                                        //"viessmannapi.0.133000.0.features.heating.circuits.1.operating.modes.active.commands.setMode.setValue"
                                        //auf "dhwAndHeatingCooling" setzen
                                        
                                        on({ id: [].concat(['tuya.0.bf709929d1fb102bc7am0v.1'/*watersensor state*/]), change: 'ne' }, async (obj) => {
                                          let value = obj.state.val;
                                          let oldValue = obj.oldState.val;
                                          if ((obj.state ? obj.state.val : "") == false) {
                                            setState('viessmannapi.0.133000.0.features.heating.circuits.1.operating.modes.active.commands.setMode.setValue', "standby");
                                            sendTo("email", "send", {
                                               text: 'Heizung Alarm. Leckage an Primärpumpe oder Heizung?',
                                               to: '<deineMailAdresse>@<provider.com>',
                                               subject: 'Alarm Heizung Leckage',
                                               from: '<deineMailAdresse>@<provider.com>'
                                            });
                                          }
                                        });
                                        
                                        
                                        ? Offline
                                        ? Offline
                                        Ein ehemaliger Benutzer
                                        schrieb am zuletzt editiert von
                                        #718

                                        @io2345

                                        Danke fuer die Infos und das Update, ich finds immer gut, wenn andere auch Ihre Scripte teilen, und wissen lassen, woran es gelegen hat...
                                        :-)

                                        1 Antwort Letzte Antwort
                                        0
                                        • I io2345

                                          @ilovegym
                                          Das von dir gepostete Script hatte ich als Basis für die Weiterentwicklung genommen und dahingehend verbessert, dass die an der Wärmepumpensteuerung eingestellten Werte vorher ausgelesen und zwischengespeichert werden, dann die Zirkulationspumpe eingeschaltet wird
                                          (bei mir ganztägig - 0 bis 24 Uhr) für ein paar Minuten. Am Ende wird der vorher zwischengespeicherte Wert wieder zurück geschrieben.
                                          Heißt: Ändert man an der Wärmepumpensteuerung den Zeitplan für die Zirkulation, bleibt dieser nach dem Scriptlauf auch so erhalten.

                                          Das Script selbst funktioniert einwandfrei:

                                          async function start_zirk() {
                                              // Schedule wird zum Einschalten der Pumpe temporär verändert, so dass die Pumpe
                                              // zwischen 00:00 und 23:59 Uhr zuverlässig eingeschaltet ist. Das in der Wärmepumpe 
                                              // vorhandene Zeitprogramm der Zirkulationspumpe wird in einen eigenen Datenpunkt gesichert
                                              
                                             pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}'
                                             schedule_sichern = getState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.properties.entries.value'/*value*/).val;
                                              
                                              setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule',JSON.parse(JSON.stringify(schedule_sichern)));
                                              
                                              setState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(pump_on)); // oder pump_off
                                          }
                                          
                                          async function stop_zirk() {
                                              // Der urspüngliche Schedule wird zurückgeschrieben. 
                                              
                                              //schedule_wiederherstellen = getState("0_userdata.0.EigeneDatenpunkte.Heizung.ZwischenspeicherZirkulationspumpeSchedule").val;
                                              schedule_wiederherstellen = schedule_sichern;
                                              setState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(schedule_wiederherstellen));
                                          }
                                          
                                          
                                          on({ id: [].concat(['0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_']), change: 'ne' }, async (obj) => {
                                            let value = obj.state.val;
                                            let oldValue = obj.oldState.val;
                                            if ((obj.state ? obj.state.val : "") == true) {
                                              await start_zirk();
                                              log ("Zirkulationspumpe läuft für zwei Minuten");
                                              await wait(120000);
                                              setState('0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn_' /* EigeneDatenpunkte.Heizung.ZirkulationAn  */, false, true);
                                              await stop_zirk();
                                            }
                                          });
                                          

                                          es kommt lediglich beim Starten und Stoppen die Meldung im Log
                                          State value to set for "viessmannapi.0.133007.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue" has to be one of type "string", "number", "boolean" but received type "object"
                                          Diese Meldung müsste im übrigen bei dir genauso auftauchen, in deinem Script ist das Zeile 10. Kommt bei dir kein Logeintrag im iobroker-Log?

                                          I Offline
                                          I Offline
                                          io2345
                                          schrieb am zuletzt editiert von
                                          #719

                                          @io2345 said in Test ViessmannAPI v2.0.0:

                                          Zur Info, nicht dass andere sich wundern: Das Zirkulationspumpenscript (fünf Posts weiter oben) bringt mittlerweile nicht mehr den gewünschten Effekt, warum auch immer.

                                          Mit

                                          pump_on = '{"mon":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"tue":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"wed":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"thu":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"fri":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sat":[{"start":"00:00","end":"23:59","mode":"on","position":0}],"sun":[{"start":"00:00","end":"23:59","mode":"on","position":0}]}'
                                              setState('viessmannapi.0.133000.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue', JSON.parse(pump_on));
                                          

                                          kann ich den setValue-Datenpunkt zwar beschreiben, die Zirkulationspumpe startet jedoch nicht (zumindest bei mir). Den Grund hierfür kenne ich noch nicht, wollte aber die Info weitergeben.

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          785

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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