Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [Gelöst] "Raum" von einem Datenpunkt mit Blockly zuordnen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst] "Raum" von einem Datenpunkt mit Blockly zuordnen

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      Kusi @haus-automatisierung last edited by

      @haus-automatisierung sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

      Wenn Du dort den Raum setzt, dann fügst Du den State nur zu den Aufzählungen hinzu. Ich glaube nicht, dass der Roborock Adapter die Raumliste nutzt?!

      Doch, ich habe es getestet.
      Fügt man bei "Raum" die zu reinigenden Räume hinzu und setzt dann denn State auf "true", dann beginnt die Reinigung der ausgewählten Räumen.

      1 Reply Last reply Reply Quote 0
      • K
        Kusi @MCU last edited by

        @mcu sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

        getObject(id,true) -> setObject mit neuem Room

        Kannst du das eventuell etwas erläutern?

        1 Reply Last reply Reply Quote 0
        • M
          MCU last edited by MCU

          @kusi Schau auf den Link von @haus-automatisierung , dort wird es gezeigt. Es sollte dort noch abgefragt, ob die ID schon zugeordnet wurde. Nutzt man die Funktion öfter, wird sonst immer wieder der DP angehängt.

          haus-automatisierung K 2 Replies Last reply Reply Quote 1
          • haus-automatisierung
            haus-automatisierung Developer Most Active @MCU last edited by

            @mcu Guter Hinweis - habe ich im Script hinzugefügt

            K 1 Reply Last reply Reply Quote 0
            • K
              Kusi @MCU last edited by

              @mcu @haus-automatisierung
              Vielen Dank für eure Antworten.
              Ich verstehe das Skript zuwenig, aber ich glaube auch, dass ich es vielleicht nicht ganz deutlich erklärt habe.

              Ich muss einem fixen Datenpunkt (nennen wir ihn "clean room") die zu reinigenden Räume per "Raum" zuordnen.
              Will ich z.B. Wohnzimmer und Esszimmer reinigen, dann ordne ich dem Datenpunkt "clean room" die 2 Räume "Wohnzimmer" und "Esszimmer" zu, danach setze ich den State vom Datenpunkt "clean room" auf true.
              Die Räume ändern sich immer wieder, beziehungsweise sollte nach einer erfolgten Reinigung diese Zuordnung auch wieder aufgeboben werden.

              Ich muss dabei KEINE Object ID's oder dergleichen schreiben, nur den/die Raumname/-n.
              Dies kann gerne manuell per Blockly über die Textbausteine geschehen.

              haus-automatisierung 1 Reply Last reply Reply Quote 0
              • haus-automatisierung
                haus-automatisierung Developer Most Active @Kusi last edited by

                @kusi sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

                Ich muss dabei KEINE Object ID's oder dergleichen schreiben, nur den/die Raumname/-n.

                Du weißt schon, dass ALLES im ioBroker ein Objekt ist? 🙂

                K 1 Reply Last reply Reply Quote 0
                • K
                  Kusi @haus-automatisierung last edited by

                  @haus-automatisierung sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

                  Du weißt schon, dass ALLES im ioBroker ein Objekt ist?

                  Nein, das wusste ich nicht. Danke

                  1 Reply Last reply Reply Quote 0
                  • K
                    Kusi @haus-automatisierung last edited by Kusi

                    @haus-automatisierung sagte in "Raum" von einem Datenpunkt mit Blockly zuordnen:

                    @mcu Guter Hinweis - habe ich im Script hinzugefügt

                    Beim zweiten Anlauf hat es geklappt. Hatte die Funktion nicht "gestartet".

                    Die Variablen konnte ich auch einwandfrei einbauen.
                    Nun frage ich mich, wie lässt sich der Raum wieder entfernen, oder noch besser alle Räume auf einmal?

                    1 Reply Last reply Reply Quote 0
                    • M
                      MCU last edited by

                      @kusi z.B.

                      function delAllEnum(objId){
                          if (existsObject(objId)) {  
                              const idObj = getObject(objId,true);
                              let enumArr = idObj.enumIds;
                              if(enumArr.length>0){
                                  for(let i=0;i<enumArr.length;i++){
                                      let enumObj = getObject(enumArr[i]);
                                      const index = enumObj.common.members.indexOf(objId);
                                      if (index > -1) { 
                                          enumObj.common.members.splice(index, 1);
                                          extendObject(enumArr[i], {
                                                  common: {
                                                      members: enumObj.common.members
                                                  }
                                          });
                                          
                                      }
                                  }
                              }else{
                                  log(`Object with ID ${objId} have no Enum`,'warn');
                              }
                          } else {
                              throw new Error(`Object with ID ${objId} does not exist`);
                          }
                      }
                      
                      
                      K 2 Replies Last reply Reply Quote 0
                      • K
                        Kusi @MCU last edited by

                        @mcu Herzlichen Dank, es klappt. So sieht nun der Teil aus für das Eintragen des Raumes und Löschen vom Raum.

                        6c1c9027-014b-4d23-8f56-007f550a7e77-image.png

                        <xml xmlns="https://developers.google.com/blockly/xml">
                          <variables>
                            <variable id="m5[!xu|Wi0|iUPD0]$(n">enumId</variable>
                            <variable id="bew6)lW6-(k7ff;qA4o=">objId</variable>
                            <variable id="~ij?Yx^iTdvm/69t5MMk">Raum</variable>
                          </variables>
                          <block type="comment" id="^vx4q,|Hp?5}y[]{%oI*" x="538" y="-213">
                            <field name="COMMENT">Datenpunkt setzen</field>
                            <next>
                              <block type="variables_set" id="aGTG1Sk.woJi$Bn)JC?G">
                                <field name="VAR" id="bew6)lW6-(k7ff;qA4o=">objId</field>
                                <value name="VALUE">
                                  <block type="field_oid" id="SEniN^*TqD%`9wriO1-G">
                                    <field name="oid">0_userdata.0.test</field>
                                  </block>
                                </value>
                              </block>
                            </next>
                          </block>
                          <block type="on" id="IB$_f2$p}D,k`h8bD)+d" x="188" y="-87">
                            <field name="OID">0_userdata.0.Roborock_S7.Reinigung_starten.Räume.Ankleidezimmer</field>
                            <field name="CONDITION">true</field>
                            <field name="ACK_CONDITION"></field>
                            <statement name="STATEMENT">
                              <block type="procedures_callnoreturn" id="Sp!m7mrW#r*H71cM*:ok">
                                <mutation name="Raumname">
                                  <arg name="Raum"></arg>
                                </mutation>
                                <value name="ARG0">
                                  <block type="text" id="eKxdbi_aTq[w!k0C3I~w">
                                    <field name="TEXT">Ankleidezimmer</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                          </block>
                          <block type="procedures_defnoreturn" id="8nsaO;9MQ.;T8wDeK=}z" x="188" y="113">
                            <mutation>
                              <arg name="Raum" varid="~ij?Yx^iTdvm/69t5MMk"></arg>
                            </mutation>
                            <field name="NAME">Raumname</field>
                            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                            <statement name="STACK">
                              <block type="procedures_callcustomnoreturn" id="j3=]hsERc$+:wG-[n}*X">
                                <mutation name="Raum eintragen">
                                  <arg name="enumId"></arg>
                                  <arg name="objId"></arg>
                                </mutation>
                                <value name="ARG0">
                                  <block type="text_join" id="40dMHfUzYC2hFANB}0Bq">
                                    <mutation items="2"></mutation>
                                    <value name="ADD0">
                                      <block type="text" id="PX#i`.J.^04x5lZ~.aje">
                                        <field name="TEXT">enum.rooms.</field>
                                      </block>
                                    </value>
                                    <value name="ADD1">
                                      <block type="variables_get" id="3tp[McyNX%VXBk=AaDB=">
                                        <field name="VAR" id="~ij?Yx^iTdvm/69t5MMk">Raum</field>
                                      </block>
                                    </value>
                                  </block>
                                </value>
                                <value name="ARG1">
                                  <block type="variables_get" id="4hC{Mhp;GdUXMb=2eMcU">
                                    <field name="VAR" id="bew6)lW6-(k7ff;qA4o=">objId</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                          </block>
                          <block type="on" id="L%ST#I.PnkvpTL#~v;cf" x="812" y="113">
                            <field name="OID">0_userdata.0.Roborock_S7.Reinigung_starten.Raum_löschen</field>
                            <field name="CONDITION">true</field>
                            <field name="ACK_CONDITION"></field>
                            <statement name="STATEMENT">
                              <block type="procedures_callcustomnoreturn" id="O]i(NdwAZ]EOTm^fG*6J">
                                <mutation name="Raum löschen">
                                  <arg name="objId"></arg>
                                </mutation>
                                <value name="ARG0">
                                  <block type="variables_get" id="D(W1E=C~n]=1pC-]]1.,">
                                    <field name="VAR" id="bew6)lW6-(k7ff;qA4o=">objId</field>
                                  </block>
                                </value>
                              </block>
                            </statement>
                          </block>
                          <block type="procedures_defcustomnoreturn" id="}HM6fh4VbzlJ6Y-~?QB*" x="188" y="313">
                            <mutation statements="false">
                              <arg name="enumId" varid="m5[!xu|Wi0|iUPD0]$(n"></arg>
                              <arg name="objId" varid="bew6)lW6-(k7ff;qA4o="></arg>
                            </mutation>
                            <field name="NAME">Raum eintragen</field>
                            <field name="SCRIPT">aWYgKGV4aXN0c09iamVjdChvYmpJZCkpIHsNCiAgICBpZiAoZXhpc3RzT2JqZWN0KGVudW1JZCkpIHsNCiAgICAgICAgY29uc3QgZW51bU9iaiA9IGdldE9iamVjdChlbnVtSWQpOw0KDQogICAgICAgIGlmIChlbnVtT2JqLnR5cGUgPT09ICdlbnVtJykgew0KICAgICAgICAgICAgaWYgKCFlbnVtT2JqLmNvbW1vbi5tZW1iZXJzLmluY2x1ZGVzKG9iaklkKSkgew0KICAgICAgICAgICAgICAgIGVudW1PYmouY29tbW9uLm1lbWJlcnMucHVzaChvYmpJZCk7DQogICAgICAgICAgICAgICAgc2V0T2JqZWN0KGVudW1JZCwgZW51bU9iaik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYXJnZXQgb2JqZWN0IHdpdGggSUQgJHtlbnVtSWR9IGlzIG5vdCBhbiBlbnVtYCk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVudW0gd2l0aCBJRCAke2VudW1JZH0gZG9lcyBub3QgZXhpc3RgKTsNCiAgICB9DQp9IGVsc2Ugew0KICAgIHRocm93IG5ldyBFcnJvcihgT2JqZWN0IHdpdGggSUQgJHtvYmpJZH0gZG9lcyBub3QgZXhpc3RgKTsNCn0NCg==</field>
                            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                          </block>
                          <block type="procedures_defcustomnoreturn" id="9f.]bC!e2ZsV2r}U3iJn" x="812" y="313">
                            <mutation statements="false">
                              <arg name="objId" varid="bew6)lW6-(k7ff;qA4o="></arg>
                            </mutation>
                            <field name="NAME">Raum löschen</field>
                            <field name="SCRIPT">aWYgKGV4aXN0c09iamVjdChvYmpJZCkpIHsgIA0KICAgIGNvbnN0IGlkT2JqID0gZ2V0T2JqZWN0KG9iaklkLHRydWUpOw0KICAgIGxldCBlbnVtQXJyID0gaWRPYmouZW51bUlkczsNCiAgICBpZihlbnVtQXJyLmxlbmd0aD4wKXsNCiAgICAgICAgZm9yKGxldCBpPTA7aTxlbnVtQXJyLmxlbmd0aDtpKyspew0KICAgICAgICAgICAgbGV0IGVudW1PYmogPSBnZXRPYmplY3QoZW51bUFycltpXSk7DQogICAgICAgICAgICBjb25zdCBpbmRleCA9IGVudW1PYmouY29tbW9uLm1lbWJlcnMuaW5kZXhPZihvYmpJZCk7DQogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgeyANCiAgICAgICAgICAgICAgICBlbnVtT2JqLmNvbW1vbi5tZW1iZXJzLnNwbGljZShpbmRleCwgMSk7DQogICAgICAgICAgICAgICAgZXh0ZW5kT2JqZWN0KGVudW1BcnJbaV0sIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbjogew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcnM6IGVudW1PYmouY29tbW9uLm1lbWJlcnMNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9ZWxzZXsNCiAgICAgICAgbG9nKGBPYmplY3Qgd2l0aCBJRCAke29iaklkfSBoYXZlIG5vIEVudW1gLCd3YXJuJyk7DQogICAgfQ0KfSBlbHNlIHsNCiAgICB0aHJvdyBuZXcgRXJyb3IoYE9iamVjdCB3aXRoIElEICR7b2JqSWR9IGRvZXMgbm90IGV4aXN0YCk7DQp9</field>
                            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                          </block>
                        </xml>
                        
                        1 Reply Last reply Reply Quote 0
                        • K
                          Kusi @MCU last edited by Kusi

                          @mcu Herzlichen Dank nochmals für eure Hilfe.

                          David G. 1 Reply Last reply Reply Quote 1
                          • David G.
                            David G. @Kusi last edited by David G.

                            @kusi

                            Ich hab den Thread jetzt 2 mal gelesen und verstehe noch nicht ganz wo für das ganze.....

                            Warum werden nicht einfach die gewünschten Räume auf true gesetzt und fertig? Los geht die Reinigung.

                            So mache ich es.
                            (Zumindest im Roborock Adapter)

                            K 1 Reply Last reply Reply Quote 0
                            • K
                              Kusi @David G. last edited by

                              @david-g sagte in [Gelöst] "Raum" von einem Datenpunkt mit Blockly zuordnen:

                              Warum werden nicht einfach die gewünschten Räume auf true gesetzt und fertig?

                              Habe ich zuerst versucht.
                              Zumindest bei mir ist aber der Staubsauger dann nach jedem Raum zurück auf die Ladestation gefahren und hat den Mopp gereinigt.

                              Starte ich mit obigem Blockly die Reinigung, dann reinigt der Staubsauger so lange, bis er bis zur vorgegebenen Zeit auf die Ladestation zur Moppreinigung fährt.

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              602
                              Online

                              32.0k
                              Users

                              80.5k
                              Topics

                              1.3m
                              Posts

                              4
                              16
                              813
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo