Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

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

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Test ViessmannAPI v2.0.0

Scheduled Pinned Locked Moved Tester
818 Posts 128 Posters 299.0k Views 124 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • madingM mading

    @quotschmacher sagte in Test ViessmannAPI v2.0.0:

    @quotschmacher sagte in Test ViessmannAPI v2.0.0:

    ich greife das mal auf: das sollte ja dann eigentlich zum einschalten über bewegungsmelder so laufen, das ich in viessmannapi.0.2050879.0.features.heating.dhw.pumps.circulation.schedule.commands.setSchedule.setValue bei auslösung des bewegungsmelders einen zeitplan mit der aktuellen zeit + ne stunde oder so eintrage und wenn keine bewegung mehr, dann einen leeren zeitplan. oder bin ich da jetzt ganz auf dem holzweg?

    nochmal der vollständigkeithalber: zirkulationspumpe steuern geht soweit ganz gut (vitodens 200).

    // 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
    

    der vorteil das ganze über ein "begrenztes" schedule zu lösen: man muss bei der auswertung eines bewegungsmelders keine zeiten mehr auswerten. wenn der melder nach 21 triggert und das schedule neu gesetzt wird, startet die pumpe eh nicht.

    ich hab gestern ganz wild die schedules hin und her geschaltet und es hat super funktioniert.

    danke für den adapter @tombox

    Hey, da will ich mich mal dran hängen. Ich hatte überlegt, mir einen kippschalter im Bad irgendwo zu platzieren, mit dem ich die Zirkulationspumpe ad hoc starten kann (Use Case: man steht im Bad und will duschen/ das Waschbecken mit WW benutzen). Eigentlich sollte es doch mit dem Skript kein Problem sein:

    • Eine Schaltervariable (bool) in den eigenen Datenpunkten zu setzen, welche von einem Blockly überwacht wird
    • ist die Variable auf true, wird der schedule (pump_on) gesetzt -> die Zirkulation läuft an
    • nach z.B. 5min wird automatisch pump_off gesetzt

    Verstehe ich es richtig, dass mit deinem Skript die Zirkulationspumpe von 6-21 Uhr durch laufen würde, wenn sie nicht wieder deaktiviert wird?

    edit: hab mal ein blockly gebaut

    <xml xmlns="https://developers.google.com/blockly/xml">
      <block type="procedures_defcustomnoreturn" id="C|6p3lu0hRewiE]Z{qnx" x="188" y="88">
        <mutation statements="false"></mutation>
        <field name="NAME">start-zirk</field>
        <field name="SCRIPT">Ly8gc2NoZWR1bGUgenVtIGVpbnNjaGFsdGVuLCBhbGxlcmRpbmdzIG51ciB6d2lzY2hlbiA2IHVuZCAyMSB1aHINCg0KdmFyIHB1bXBfb24gPSAneyJtb24iOlt7InN0YXJ0IjoiMDA6MDAiLCJlbmQiOiIyMzo1OSIsIm1vZGUiOiJvbiIsInBvc2l0aW9uIjowfV0sInR1ZSI6W3sic3RhcnQiOiIwNjowMCIsImVuZCI6IjIxOjAwIiwibW9kZSI6Im9uIiwicG9zaXRpb24iOjB9XSwid2VkIjpbeyJzdGFydCI6IjA2OjAwIiwiZW5kIjoiMjE6MDAiLCJtb2RlIjoib24iLCJwb3NpdGlvbiI6MH1dLCJ0aHUiOlt7InN0YXJ0IjoiMDY6MDAiLCJlbmQiOiIyMTowMCIsIm1vZGUiOiJvbiIsInBvc2l0aW9uIjowfV0sImZyaSI6W3sic3RhcnQiOiIwNjowMCIsImVuZCI6IjIxOjAwIiwibW9kZSI6Im9uIiwicG9zaXRpb24iOjB9XSwic2F0IjpbeyJzdGFydCI6IjA2OjAwIiwiZW5kIjoiMjE6MDAiLCJtb2RlIjoib24iLCJwb3NpdGlvbiI6MH1dLCJzdW4iOlt7InN0YXJ0IjoiMDY6MDAiLCJlbmQiOiIyMTowMCIsIm1vZGUiOiJvbiIsInBvc2l0aW9uIjowfV19Jw0KDQpzZXRTdGF0ZSgidmllc3NtYW5uYXBpLjAuNjQ4NTEuMC5mZWF0dXJlcy5oZWF0aW5nLmRody5wdW1wcy5jaXJjdWxhdGlvbi5zY2hlZHVsZS5jb21tYW5kcy5zZXRTY2hlZHVsZS5zZXRWYWx1ZSIsIEpTT04ucGFyc2UocHVtcF9vbikpOyAvLyBvZGVyIHB1bXBfb2Zm</field>
        <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
      </block>
      <block type="on_ext" id="OrrP|oAEW44xm)#CHi/x" x="563" y="88">
        <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
        <field name="CONDITION">ne</field>
        <field name="ACK_CONDITION"></field>
        <value name="OID0">
          <shadow type="field_oid" id="Vf:2${EvnUSG~})eift%">
            <field name="oid">0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn</field>
          </shadow>
        </value>
        <statement name="STATEMENT">
          <block type="controls_if" id=")wR[o:^O40MXsYo|IaVD">
            <value name="IF0">
              <block type="logic_compare" id="vKpLM;XY_RcIGh6,W8}T">
                <field name="OP">EQ</field>
                <value name="A">
                  <block type="on_source" id=")fMs4Fcf$,iYXBW!bX,$">
                    <field name="ATTR">state.val</field>
                  </block>
                </value>
                <value name="B">
                  <block type="logic_boolean" id="J5ijXAEjpY!7;c[{N/*G">
                    <field name="BOOL">TRUE</field>
                  </block>
                </value>
              </block>
            </value>
            <statement name="DO0">
              <block type="procedures_callcustomnoreturn" id="cPECRG/O*H71[C0pKS3W">
                <mutation name="start-zirk"></mutation>
                <next>
                  <block type="telegram" id="T9Dc^Salh?]_(:9YeLNs">
                    <field name="INSTANCE"></field>
                    <field name="LOG"></field>
                    <field name="SILENT">FALSE</field>
                    <field name="PARSEMODE">default</field>
                    <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field>
                    <value name="MESSAGE">
                      <shadow type="text" id="1_-=OC9}y+2rbxEF,Ps7">
                        <field name="TEXT">Zirkulationspumpe gestartet. 5 Minuten Timeout</field>
                      </shadow>
                    </value>
                    <next>
                      <block type="timeouts_wait" id="^+@b5Hgy=9Kt_8[LpCQ#">
                        <field name="DELAY">5</field>
                        <field name="UNIT">min</field>
                        <next>
                          <block type="update" id="3`LHXWh~d.hYJhTrvq]*">
                            <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                            <field name="OID">0_userdata.0.EigeneDatenpunkte.Heizung.ZirkulationAn</field>
                            <field name="WITH_DELAY">FALSE</field>
                            <value name="VALUE">
                              <block type="logic_boolean" id="ex|rf*=(uRZ~2{=|JWFM">
                                <field name="BOOL">FALSE</field>
                              </block>
                            </value>
                            <next>
                              <block type="procedures_callcustomnoreturn" id="/vYJRv|tZ55;~!uax+W3">
                                <mutation name="stop-zirk"></mutation>
                                <next>
                                  <block type="telegram" id=":QA|!PHN6C*+Eo6eIfHX">
                                    <field name="INSTANCE"></field>
                                    <field name="LOG"></field>
                                    <field name="SILENT">FALSE</field>
                                    <field name="PARSEMODE">default</field>
                                    <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field>
                                    <value name="MESSAGE">
                                      <shadow type="text" id="G!f5)/iMynkY@xR7o@ZR">
                                        <field name="TEXT">Zirkulationspumpe gestoppt.</field>
                                      </shadow>
                                    </value>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </statement>
          </block>
        </statement>
      </block>
      <block type="procedures_defcustomnoreturn" id="]0SXN4W+S6mvOy.:^$No" x="188" y="113">
        <mutation statements="false"></mutation>
        <field name="NAME">stop-zirk</field>
        <field name="SCRIPT">Ly8gc2NoZWR1bGUgbGVlcmVuIC0gcHVtcGUgYXVzc2NoYWx0ZW4NCg0KdmFyIHB1bXBfb2ZmID0gJ3sibW9uIjpbXSwgInR1ZSI6W10sIndlZCI6W10sInRodSI6W10sImZyaSI6W10sInNhdCI6W10sInN1biI6W119JyANCg0KIA0KDQpzZXRTdGF0ZSgidmllc3NtYW5uYXBpLjAuNjQ4NTEuMC5mZWF0dXJlcy5oZWF0aW5nLmRody5wdW1wcy5jaXJjdWxhdGlvbi5zY2hlZHVsZS5jb21tYW5kcy5zZXRTY2hlZHVsZS5zZXRWYWx1ZSIsIEpTT04ucGFyc2UocHVtcF9vZmYpKTsgLy8gb2RlciBwdW1wX29mZg==</field>
        <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
      </block>
    </xml>
    

    Danke!
    mading

    I Offline
    I Offline
    io2345
    wrote on last edited by io2345
    #689

    @mading Funktioniert astrein.
    Falls ein Anfänger wie ich das ebenfalls importieren möchte: Hier ein paar Hinweise, wie man Frust vermeiden kann:

    Das Blockly enthält einen Block, in dem Meldungen über einen Adapter des IM-Dienstes Telegram verschickt werden. Falls man beim Importieren des Scripts eine Fehlermeldung erhält bezüglich fehlerhafter Telegram-Konfiguration, dann fehlt bei euch wahrscheinlich dieser Adapter.

    Der konfigurierte Datenpunkt, der geschaltet wird, muss bei euch im Blockly abgeändert werden: hinter "viessmannapi.0.... ist eine eindeutige ID, an dieser Stelle müsst ihr die eure eintragen.

    Das Blockly verwendet einen eigenen Datenpunkt, den ihr erst anlegen müsst: Unter 0_userdata.0.EigeneDatenpunkte.Heizung einen Unterpunkt "ZirkulationAn" als Binärwert.

    Wer das Script ohne Hardwareschalter einfach von einem Mobilgerät oder Computer aufrufen will, kann sich z.B. eine Visualisierung (wie HABpanel) als Adapter installieren und dort eine Schaltfläche einfügen, die beim Antippen in den - im letzten Abschnitt erstellten Datenpunkt - schreibt.

    1 Reply Last reply
    0
    • M m4rgott

      Ich habe die Lösung schon gefunden.
      Ein Konvertierungsblock "JSON nach Objekt" vor den zu schreibenden Wert hat geholfen.

      B Offline
      B Offline
      Bastler52
      wrote on last edited by Bastler52
      #690

      @m4rgott Kannst Du uns dann die Lösung zeigen bitte. (vor {"mon" .. ist gemeint oder?)

      M 1 Reply Last reply
      0
      • B Bastler52

        @m4rgott Kannst Du uns dann die Lösung zeigen bitte. (vor {"mon" .. ist gemeint oder?)

        M Offline
        M Offline
        m4rgott
        wrote on last edited by
        #691

        Hi @bastler52

        die obenstehenden Blocklys sind genau so bei mir im Einsatz. Deshalb weiß ich nicht welche Lösung Du suchst.

        Ich habe nur die Anlagennummer durch "xxx" ersetzt.

        Wie oben beschrieben habe ich für den neuen Zeitplan den bestehenden Wert aus dem Datenpunkt viessmannapi.0.xxx.0.features.heating.dhw.pumps.circulation.schedule.properties.entries.value geholt und den nach meinen Vorstellungen angepasst.

        Ich hoffe das hilft Dir weiter.

        B 1 Reply Last reply
        0
        • M m4rgott

          Hi @bastler52

          die obenstehenden Blocklys sind genau so bei mir im Einsatz. Deshalb weiß ich nicht welche Lösung Du suchst.

          Ich habe nur die Anlagennummer durch "xxx" ersetzt.

          Wie oben beschrieben habe ich für den neuen Zeitplan den bestehenden Wert aus dem Datenpunkt viessmannapi.0.xxx.0.features.heating.dhw.pumps.circulation.schedule.properties.entries.value geholt und den nach meinen Vorstellungen angepasst.

          Ich hoffe das hilft Dir weiter.

          B Offline
          B Offline
          Bastler52
          wrote on last edited by
          #692

          @m4rgott Danke scheinbar habe ich etwas übersehen oder wurde nicht angezeigt. Wollte nur sicher gehen dass ich deinen Beitrag richtig verstanden habe f8471e71-0515-46c9-99b4-1a2c8887705f-image.png

          genau das habe ich nicht gesehen und danach hatte ich gefragt ob och das richtig verstanden habe.

          Ich habe an sich die Lösung auch um Einsatz aber als Java Skript.

          DANKE für deine Reaktion

          1 Reply Last reply
          0
          • ? A Former User

            @juggi1962

            Hi,
            noe, bei mir laeuft alles wie gehabt... polle alle 5minuten..
            hast du das mal gemacht, was in der Fehlermeldung steht?

            M Offline
            M Offline
            MAXI885
            wrote on last edited by
            #693

            @ilovegym
            Hallo,
            aktuell nutze ich den Adapter noch nicht, hätte aber eine Frage zur Anschaffung der Hardware.
            Es gibt für den VITOCONNECT 100 OPT01 auch einen Nachfolger, den OPTO2, ist das für die Verwendung mit iobroker egal,
            welches Gerät man benutzt ?

            Vielen Dank & Grüße !

            ? T 2 Replies Last reply
            0
            • M MAXI885

              @ilovegym
              Hallo,
              aktuell nutze ich den Adapter noch nicht, hätte aber eine Frage zur Anschaffung der Hardware.
              Es gibt für den VITOCONNECT 100 OPT01 auch einen Nachfolger, den OPTO2, ist das für die Verwendung mit iobroker egal,
              welches Gerät man benutzt ?

              Vielen Dank & Grüße !

              ? Offline
              ? Offline
              A Former User
              wrote on last edited by
              #694

              @maxi885

              Hallo,
              kann dir nicht 100% bestaetigen, da ich auch nur den Vitoconnect 100 habe.
              Aber, rein von der Logik des Adapters aus, sollte es funktionieren, da dieser die Daten ja von dem Viessmann-Server von der API holt.
              Wie die Daten dahin kommen, ob mit Modul-1 oder 2 oder X ist eigentlich egal....

              1 Reply Last reply
              0
              • M MAXI885

                @ilovegym
                Hallo,
                aktuell nutze ich den Adapter noch nicht, hätte aber eine Frage zur Anschaffung der Hardware.
                Es gibt für den VITOCONNECT 100 OPT01 auch einen Nachfolger, den OPTO2, ist das für die Verwendung mit iobroker egal,
                welches Gerät man benutzt ?

                Vielen Dank & Grüße !

                T Offline
                T Offline
                tombox
                wrote on last edited by
                #695

                @maxi885 Kompatibilitätsliste: https://documentation.viessmann.com/static/compatibility

                M 1 Reply Last reply
                0
                • T tombox

                  @maxi885 Kompatibilitätsliste: https://documentation.viessmann.com/static/compatibility

                  M Offline
                  M Offline
                  MAXI885
                  wrote on last edited by
                  #696

                  @tombox said in Test ViessmannAPI v2.0.0:

                  @maxi885 Kompatibilitätsliste: https://documentation.viessmann.com/static/compatibility

                  super, vielen Dank !
                  Die Liste bezieht sich schon auf den neuen OPTO2, da steht meine etwas ältere Vitotronic 200 KW1 sogar dabei :-)

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    Backes
                    wrote on last edited by
                    #697

                    Guten Morgen,

                    ist es normal, dass wenn das RateLimit einmal erreicht wurde, das der Adapter manuell neugestartet werden muss damit er wieder funktioniert am nächsten Tag? Hab das RateLimit letzte Woche einmal überschritten und er hat seitdem gehangen und keine Daten mehr gezogen.

                    Beste Grüße!

                    Dominik F.D 1 Reply Last reply
                    0
                    • B Backes

                      Guten Morgen,

                      ist es normal, dass wenn das RateLimit einmal erreicht wurde, das der Adapter manuell neugestartet werden muss damit er wieder funktioniert am nächsten Tag? Hab das RateLimit letzte Woche einmal überschritten und er hat seitdem gehangen und keine Daten mehr gezogen.

                      Beste Grüße!

                      Dominik F.D Offline
                      Dominik F.D Offline
                      Dominik F.
                      wrote on last edited by
                      #698

                      Hallo zusammen,

                      ich habe heute den Adapter installiert und soweit ich das überblicken kann funktioniert alles.

                      Ich nutze bei meiner Heizung die geofencing Funktion. Gibt es dazu Datenpunkte wo ich sehen kann wer im Umkreis ist und wer nicht?

                      1 Reply Last reply
                      0
                      • I Offline
                        I Offline
                        io2345
                        wrote on last edited by io2345
                        #699

                        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 1 Reply Last reply
                        0
                        • 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
                          wrote on last edited by
                          #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 Reply Last reply
                          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
                            wrote on last edited by
                            #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 Reply Last reply
                            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
                              wrote on last edited by 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 Reply Last reply
                              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
                                wrote on last edited by
                                #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 Reply Last reply
                                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
                                  wrote on last edited by
                                  #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 Reply Last reply
                                  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
                                    wrote on last edited by 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 Reply Last reply
                                    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
                                      A Former User
                                      wrote on last edited by
                                      #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 Reply Last reply
                                      0
                                      • G Offline
                                        G Offline
                                        guitardoc
                                        wrote on last edited by
                                        #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 Reply Last reply
                                        0
                                        • D Offline
                                          D Offline
                                          dan11hh
                                          wrote on last edited by
                                          #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 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          701

                                          Online

                                          32.7k

                                          Users

                                          82.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe