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.
    • 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

                          870
                          Online

                          32.0k
                          Users

                          80.5k
                          Topics

                          1.3m
                          Posts

                          4
                          16
                          812
                          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